Skip to content

Commit 0ad453b

Browse files
committed
fix: working decisions after testing
1 parent 8104aba commit 0ad453b

File tree

1 file changed

+33
-21
lines changed

1 file changed

+33
-21
lines changed

packages/adapter-optimizely/src/index.ts

Lines changed: 33 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
export { getProviderData } from './provider';
22
import {
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';
1818
import { createClient } from '@vercel/edge-config';
@@ -70,28 +70,30 @@ const requestHandler: RequestHandler = {
7070
export 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

Comments
 (0)