@@ -22,7 +22,8 @@ Flag evaluations take place remotely at the connected flagd instance.
2222To use in this mode, set the provider to the ` openfeature ` global singleton as shown below (using default values which align with those of ` flagd ` )
2323
2424``` go
25- openfeature.SetProvider (flagd.NewProvider ())
25+ provider , err := flagd.NewProvider ()
26+ openfeature.SetProvider (provider)
2627```
2728
2829### In-process resolver
@@ -33,30 +34,12 @@ Flag configurations for evaluation are obtained via gRPC protocol using [sync pr
3334Consider following example to create a ` FlagdProvider ` with in-process evaluations,
3435
3536``` go
36- provider := flagd.NewProvider (
37- flagd.WithInProcessResolver (),
38- flagd.WithHost (" localhost" ),
39- flagd.WithPort (8013 ))
37+ provider , err := flagd.NewProvider (flagd.WithInProcessResolver ())
4038openfeature.SetProvider (provider)
4139```
4240
4341In the above example, in-process handlers attempt to connect to a sync service on address ` localhost:8013 ` to obtain [ flag definitions] ( https://github.com/open-feature/schemas/blob/main/json/flagd-definitions.json ) .
4442
45- #### Offline mode
46-
47- In-process resolvers can also work in an offline mode.
48- To enable this mode, you should provide a [ valid flag configuration] ( https://flagd.dev/reference/flag-definitions/ ) file with the option ` WithOfflineFilePath ` .
49-
50- ``` go
51- provider := flagd.NewProvider (
52- flagd.WithInProcessResolver (),
53- flagd.WithOfflineFilePath (OFFLINE_FLAG_PATH))
54- openfeature.SetProvider (provider)
55- ```
56-
57- The provider will attempt to detect file changes, but this is a best-effort attempt as file system events differ between operating systems.
58- This mode is useful for local development, tests and offline applications.
59-
6043#### Custom sync provider
6144
6245In-process resolver can also be configured with a custom sync provider to change how the in-process resolver fetches flags.
@@ -65,28 +48,44 @@ The custom sync provider must implement the [sync.ISync interface](https://githu
6548``` go
6649var syncProvider sync.ISync = MyAwesomeSyncProvider {}
6750
68- provider := flagd.NewProvider (
51+ provider , err := flagd.NewProvider (
6952 flagd.WithInProcessResolver (),
70- flagd.WithCustomSyncProvider (syncProvider))
53+ flagd.WithCustomSyncProvider (syncProvider),
54+ )
7155openfeature.SetProvider (provider)
7256```
7357
7458``` go
7559var syncProvider sync.ISync = MyAwesomeSyncProvider {}
7660var syncProviderUri string = " myawesome://sync.uri"
7761
78- provider := flagd.NewProvider (
62+ provider , err := flagd.NewProvider (
7963 flagd.WithInProcessResolver (),
80- flagd.WithCustomSyncProviderAndUri (syncProvider, syncProviderUri))
64+ flagd.WithCustomSyncProviderAndUri (syncProvider, syncProviderUri),
65+ )
8166openfeature.SetProvider (provider)
8267```
8368
8469> [ !IMPORTANT]
8570> Note that the in-process resolver can only use a single flag source.
8671> If multiple sources are configured then only one would be selected based on the following order of preference:
8772> 1 . Custom sync provider
88- > 2 . Offline file
89- > 3 . gRPC
73+ > 2 . gRPC
74+
75+ ### File mode
76+
77+ This mode obtains the flag configurations from a local file and performs flag evaluations locally.
78+
79+ ``` go
80+ provider , err := flagd.NewProvider (
81+ flagd.WithFileResolver (),
82+ flagd.WithOfflineFilePath (OFFLINE_FLAG_PATH),
83+ )
84+ openfeature.SetProvider (provider)
85+ ```
86+
87+ The provider will attempt to detect file changes, but this is a best-effort attempt as file system events differ between operating systems.
88+ This mode is useful for local development, tests and offline applications.
9089
9190## Configuration options
9291
@@ -102,7 +101,7 @@ Configuration can be provided as constructor options or as environment variables
102101| WithCertificatePath | FLAGD_SERVER_CERT_PATH | string | "" | rpc & in-process |
103102| WithLRUCache<br />WithBasicInMemoryCache<br />WithoutCache | FLAGD_CACHE | string (lru, mem, disabled) | lru | rpc |
104103| WithEventStreamConnectionMaxAttempts | FLAGD_MAX_EVENT_STREAM_RETRIES | int | 5 | rpc |
105- | WithOfflineFilePath | FLAGD_OFFLINE_FLAG_SOURCE_PATH | string | "" | in-process |
104+ | WithOfflineFilePath | FLAGD_OFFLINE_FLAG_SOURCE_PATH | string | "" | file |
106105| WithProviderID | FLAGD_SOURCE_PROVIDER_ID | string | "" | in-process |
107106| WithSelector | FLAGD_SOURCE_SELECTOR | string | "" | in-process |
108107
@@ -115,10 +114,11 @@ In the event that another configuration option is passed to the `flagd.NewProvid
115114
116115e.g. below the values set by ` FromEnv() ` overwrite the value set by ` WithHost("localhost") ` .
117116``` go
118- openfeature. SetProvider ( flagd.NewProvider (
117+ provider , err := flagd.NewProvider (
119118 flagd.WithHost (" localhost" ),
120119 flagd.FromEnv (),
121- ))
120+ )
121+ openfeature.SetProvider (provider)
122122```
123123
124124### Caching
@@ -138,10 +138,11 @@ and one custom resolver for `envoy` proxy resolution. For more details, please r
138138[ RFC] ( https://github.com/open-feature/flagd/blob/main/docs/reference/specifications/proposal/rfc-grpc-custom-name-resolver.md ) document.
139139
140140``` go
141- openfeature. SetProvider ( flagd.NewProvider (
141+ provider , err := flagd.NewProvider (
142142 flagd.WithInProcessResolver (),
143143 flagd.WithTargetUri (" envoy://localhost:9211/test.service" ),
144- ))
144+ )
145+ openfeature.SetProvider (provider)
145146```
146147
147148### gRPC DialOptions override
@@ -158,11 +159,12 @@ dialOptions := []grpc.DialOption{
158159 grpc.WithAuthority (...),
159160 }
160161
161- openfeature. SetProvider ( flagd.NewProvider (
162+ provider , err := flagd.NewProvider (
162163 flagd.WithInProcessResolver (),
163164 flagd.WithHost (" example.com/flagdSyncApi" ), flagd.WithPort (443 ),
164165 flagd.WithGrpcDialOptionsOverride (dialOptions),
165- ))
166+ )
167+ openfeature.SetProvider (provider)
166168```
167169
168170## Supported Events
@@ -199,7 +201,7 @@ for many of the popular logger packages.
199201var l logr.Logger
200202l = integratedlogr.New () // replace with your chosen integrator
201203
202- provider := flagd.NewProvider (flagd.WithLogger (l)) // set the provider's logger
204+ provider , err := flagd.NewProvider (flagd.WithLogger (l)) // set the provider's logger
203205```
204206
205207[ logr] ( https://github.com/go-logr/logr ) uses incremental verbosity levels (akin to named levels but in integer form).
0 commit comments