@@ -7,7 +7,7 @@ struct Metadata: ProviderMetadata {
7
7
}
8
8
9
9
public class OfrepProvider : FeatureProvider {
10
- private let eventHandler = EventHandler ( ProviderEvent . notReady )
10
+ private let eventHandler = EventHandler ( )
11
11
private var evaluationContext : OpenFeature . EvaluationContext ?
12
12
13
13
private var options : OfrepProviderOptions
@@ -26,54 +26,53 @@ public class OfrepProvider: FeatureProvider {
26
26
self . ofrepAPI = OfrepAPI ( networkingService: networkService, options: self . options)
27
27
}
28
28
29
- public func observe( ) -> AnyPublisher < OpenFeature . ProviderEvent , Never > {
30
- return eventHandler. observe ( )
31
- }
32
-
33
29
public var hooks : [ any Hook ] = [ ]
34
30
public var metadata : ProviderMetadata = Metadata ( )
35
31
36
- public func initialize( initialContext: ( any OpenFeature . EvaluationContext ) ? ) {
32
+ public func observe( ) -> AnyPublisher < OpenFeature . ProviderEvent ? , Never > {
33
+ return eventHandler. observe ( )
34
+ }
35
+
36
+ public func initialize( initialContext: ( any OpenFeature . EvaluationContext ) ? ) async throws {
37
37
self . evaluationContext = initialContext
38
- Task {
39
- do {
40
- let status = try await self . evaluateFlags ( context: self . evaluationContext)
41
- if self . options. pollInterval > 0 {
42
- self . startPolling ( pollInterval: self . options. pollInterval)
43
- }
38
+ do {
39
+ let status = try await self . evaluateFlags ( context: self . evaluationContext)
40
+ if self . options. pollInterval > 0 {
41
+ self . startPolling ( pollInterval: self . options. pollInterval)
42
+ }
44
43
45
- if status == . successWithChanges {
46
- self . eventHandler. send ( . ready)
47
- return
48
- }
49
- self . eventHandler. send ( . error)
50
- } catch {
51
- // TODO: Should be FATAL here
52
- self . eventHandler. send ( . error)
44
+ if status == . successWithChanges {
45
+ return
46
+ }
47
+
48
+ throw OpenFeatureError . generalError ( message: " impossible to initialize the provider, receive unknown status " )
49
+ } catch {
50
+ switch error {
51
+ case OfrepError . apiUnauthorizedError, OfrepError . forbiddenError:
52
+ throw OpenFeatureError . providerFatalError ( message: error. localizedDescription)
53
+ default :
54
+ throw error
53
55
}
54
56
}
55
57
}
56
58
57
59
public func onContextSet( oldContext: ( any OpenFeature . EvaluationContext ) ? ,
58
- newContext: any OpenFeature . EvaluationContext ) {
59
- self . eventHandler. send ( . stale)
60
+ newContext: any OpenFeature . EvaluationContext ) async throws {
60
61
self . evaluationContext = newContext
61
- Task {
62
- do {
63
- let status = try await self . evaluateFlags ( context: newContext)
64
- if ( status == . successWithChanges || status == . successNoChanges ) {
65
- self . eventHandler. send ( . ready)
66
- }
67
- } catch let error as OfrepError {
68
- switch error {
69
- case . apiTooManyRequestsError:
70
- return // we want to stay stale in that case so we ignore the error.
71
- default :
72
- throw error
73
- }
74
- } catch {
75
- self . eventHandler. send ( . error)
62
+ do {
63
+ let status = try await self . evaluateFlags ( context: newContext)
64
+ if ( status == . successWithChanges || status == . successNoChanges ) {
65
+ return
76
66
}
67
+ } catch let error as OfrepError {
68
+ switch error {
69
+ case . apiTooManyRequestsError:
70
+ return // we want to stay stale in that case so we ignore the error.
71
+ default :
72
+ throw error
73
+ }
74
+ } catch {
75
+ throw error
77
76
}
78
77
}
79
78
@@ -282,10 +281,10 @@ public class OfrepProvider: FeatureProvider {
282
281
weakSelf. eventHandler. send ( . stale)
283
282
throw error
284
283
default :
285
- weakSelf . eventHandler . send ( . error)
284
+ throw error
286
285
}
287
286
} catch {
288
- weakSelf . eventHandler . send ( . error)
287
+ throw error
289
288
}
290
289
}
291
290
}
0 commit comments