@@ -7,7 +7,7 @@ struct Metadata: ProviderMetadata {
77}
88
99public class OfrepProvider : FeatureProvider {
10- private let eventHandler = EventHandler ( ProviderEvent . notReady )
10+ private let eventHandler = EventHandler ( )
1111 private var evaluationContext : OpenFeature . EvaluationContext ?
1212
1313 private var options : OfrepProviderOptions
@@ -26,54 +26,53 @@ public class OfrepProvider: FeatureProvider {
2626 self . ofrepAPI = OfrepAPI ( networkingService: networkService, options: self . options)
2727 }
2828
29- public func observe( ) -> AnyPublisher < OpenFeature . ProviderEvent , Never > {
30- return eventHandler. observe ( )
31- }
32-
3329 public var hooks : [ any Hook ] = [ ]
3430 public var metadata : ProviderMetadata = Metadata ( )
3531
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 {
3737 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+ }
4443
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
5355 }
5456 }
5557 }
5658
5759 public func onContextSet( oldContext: ( any OpenFeature . EvaluationContext ) ? ,
58- newContext: any OpenFeature . EvaluationContext ) {
59- self . eventHandler. send ( . stale)
60+ newContext: any OpenFeature . EvaluationContext ) async throws {
6061 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
7666 }
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
7776 }
7877 }
7978
@@ -282,10 +281,10 @@ public class OfrepProvider: FeatureProvider {
282281 weakSelf. eventHandler. send ( . stale)
283282 throw error
284283 default :
285- weakSelf . eventHandler . send ( . error)
284+ throw error
286285 }
287286 } catch {
288- weakSelf . eventHandler . send ( . error)
287+ throw error
289288 }
290289 }
291290 }
0 commit comments