11export { getProviderData } from './provider' ;
22import {
33 Client ,
4- createStaticProjectConfigManager ,
54 OpaqueConfigManager ,
65 OptimizelyDecision ,
76 UserAttributes ,
@@ -13,6 +12,7 @@ import {
1312 createForwardingEventProcessor ,
1413 createInstance ,
1514 createPollingProjectConfigManager ,
15+ createStaticProjectConfigManager ,
1616 RequestHandler ,
1717} from '@optimizely/optimizely-sdk/universal' ;
1818import { createClient } from '@vercel/edge-config' ;
@@ -70,28 +70,30 @@ const requestHandler: RequestHandler = {
7070export function createOptimizelyAdapter ( {
7171 sdkKey,
7272 edgeConfig,
73- edgeConfigItemKey,
7473} : {
7574 sdkKey ?: string ;
7675 edgeConfig ?: {
7776 connectionString : string ;
7877 itemKey : string ;
7978 } ;
80- edgeConfigItemKey ?: string ;
8179} ) : AdapterResponse {
8280 let optimizelyInstance : Client | undefined ;
8381
8482 const initializeOptimizely = async ( ) => {
8583 let projectConfigManager : OpaqueConfigManager | undefined ;
86- if ( edgeConfig && edgeConfigItemKey ) {
84+ if ( edgeConfig ) {
8785 const edgeConfigClient = createClient ( edgeConfig . connectionString ) ;
88- const datafile = await edgeConfigClient . get < string > ( edgeConfigItemKey ) ;
86+ const datafile = await edgeConfigClient . get < string > ( edgeConfig . itemKey ) ;
8987
90- if ( datafile ) {
91- projectConfigManager = createStaticProjectConfigManager ( {
92- datafile,
93- } ) ;
88+ if ( ! datafile ) {
89+ throw new Error (
90+ 'Optimizely Adapter: Could not get datafile from edge config' ,
91+ ) ;
9492 }
93+
94+ projectConfigManager = createStaticProjectConfigManager ( {
95+ datafile : JSON . stringify ( datafile ) ,
96+ } ) ;
9597 }
9698
9799 if ( ! projectConfigManager && sdkKey ) {
@@ -108,19 +110,25 @@ export function createOptimizelyAdapter({
108110 ) ;
109111 }
110112
111- optimizelyInstance = createInstance ( {
112- clientEngine : 'javascript-sdk/flags-sdk' ,
113- projectConfigManager ,
114- // TODO: Check if batch event processor works here or if we should just force a single `waitUntil` flush of all events
115- eventProcessor : createForwardingEventProcessor ( {
113+ try {
114+ optimizelyInstance = createInstance ( {
115+ clientEngine : 'javascript-sdk/flags-sdk' ,
116+ projectConfigManager ,
117+ // TODO: Check if batch event processor works here or if we should just force a single `waitUntil` flush of all events
116118 // TODO: Check if running this in a `waitUntil()` doesn't break things
117119 // @ts -expect-error - dispatchEvent runs in `waitUntil` so it's not going to return a response
118- eventDispatcher : { dispatchEvent } ,
119- } ) ,
120-
121- requestHandler,
122- } ) ;
120+ eventProcessor : createForwardingEventProcessor ( { dispatchEvent } ) ,
121+ requestHandler,
122+ } ) ;
123+ } catch ( error ) {
124+ throw new Error (
125+ `Optimizely Adapter: Error creating optimizely instance, ${
126+ error instanceof Error ? error . message : error
127+ } `,
128+ ) ;
129+ }
123130
131+ // This resolves instantly when using the edge config, the timeout is just for fetching the datafile from the polling project config manager
124132 await optimizelyInstance . onReady ( { timeout : 500 } ) ;
125133 } ;
126134
@@ -131,7 +139,9 @@ export function createOptimizelyAdapter({
131139 }
132140 await _initializePromise ;
133141 if ( ! optimizelyInstance ) {
134- throw new Error ( 'Optimizely instance not initialized' ) ;
142+ throw new Error (
143+ 'Optimizely Adapter: Optimizely instance not initialized' ,
144+ ) ;
135145 }
136146 return optimizelyInstance ;
137147 } ;
@@ -148,7 +158,9 @@ export function createOptimizelyAdapter({
148158 decide : async ( { key, entities } ) => {
149159 await initialize ( ) ;
150160 if ( ! optimizelyInstance ) {
151- throw new Error ( 'Optimizely instance not initialized' ) ;
161+ throw new Error (
162+ 'Optimizely Adapter: Optimizely instance not initialized' ,
163+ ) ;
152164 }
153165 const context = optimizelyInstance . createUserContext (
154166 entities ,
0 commit comments