Skip to content

Commit eec87bc

Browse files
committed
fix(optimizely): only work with main entrypoint for now
need a few things from other entrypoints but not available in node resolution
1 parent 1c1d0cd commit eec87bc

File tree

2 files changed

+40
-38
lines changed

2 files changed

+40
-38
lines changed

packages/adapter-optimizely/src/edge-runtime-hooks.ts

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
import { LogEvent } from '@optimizely/optimizely-sdk';
21
import {
3-
OpaqueConfigManager,
4-
wrapConfigManager,
5-
} from '@optimizely/optimizely-sdk/dist/project_config/config_manager_factory';
6-
import { ProjectConfigManagerImpl } from '@optimizely/optimizely-sdk/dist/project_config/project_config_manager';
2+
createPollingProjectConfigManager,
3+
LogEvent,
4+
} from '@optimizely/optimizely-sdk';
5+
import type { OpaqueConfigManager } from '@optimizely/optimizely-sdk/dist/project_config/config_manager_factory';
76
import { createClient } from '@vercel/edge-config';
87

98
/**
@@ -55,13 +54,16 @@ export async function createEdgeProjectConfigManager(options: {
5554
edgeConfigItemKey: string;
5655
}): Promise<OpaqueConfigManager> {
5756
const edgeConfigClient = createClient(options.edgeConfigConnectionString);
58-
const datafile = await edgeConfigClient.get<string | Record<string, unknown>>(
57+
const datafile = await edgeConfigClient.get<string>(
5958
options.edgeConfigItemKey,
6059
);
6160

62-
return wrapConfigManager(
63-
new ProjectConfigManagerImpl({
64-
datafile,
65-
}),
66-
);
61+
return createPollingProjectConfigManager({
62+
datafile,
63+
// sdkKey is not used for Edge Config
64+
sdkKey: '',
65+
// Never try to update the datafile
66+
updateInterval: Infinity,
67+
autoUpdate: false,
68+
});
6769
}

packages/adapter-optimizely/src/index.ts

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,14 @@ import {
66
OpaqueConfigManager,
77
OptimizelyDecision,
88
UserAttributes,
9+
createInstance,
910
} from '@optimizely/optimizely-sdk';
10-
import { createInstance } from '@optimizely/optimizely-sdk/dist/index.universal';
1111
import type { OptimizelyUserContext } from '@optimizely/optimizely-sdk';
1212
import type { Adapter } from 'flags';
1313
import {
1414
createEdgeProjectConfigManager,
1515
dispatchEvent,
1616
} from './edge-runtime-hooks';
17-
import { AbortableRequest } from '@optimizely/optimizely-sdk/dist/utils/http_request_handler/http';
1817

1918
let defaultOptimizelyAdapter:
2019
| ReturnType<typeof createOptimizelyAdapter>
@@ -82,32 +81,33 @@ export function createOptimizelyAdapter({
8281
}),
8382
// Request handler can be used for personalization, both `node` and `browser` versions of the SDK have invalid
8483
// request mechanisms for edge runtimes (XHR and node http(s)), hence the fetch wrapper.
85-
requestHandler: {
86-
makeRequest(requestUrl, headers, method, data) {
87-
const abortController = new AbortController();
84+
// TODO: Disabled for now as we can't update the request handler for the default node export
85+
// requestHandler: {
86+
// makeRequest(requestUrl, headers, method, data) {
87+
// const abortController = new AbortController();
8888

89-
const responsePromise = fetch(requestUrl, {
90-
headers: headers as any,
91-
method,
92-
body: data,
93-
signal: abortController.signal,
94-
});
95-
return {
96-
abort: () => abortController.abort(),
97-
responsePromise: responsePromise.then(async (response) => {
98-
const headersObj: Record<string, string> = {};
99-
response.headers.forEach((value, key) => {
100-
headersObj[key] = value;
101-
});
102-
return {
103-
statusCode: response.status,
104-
body: (await response.text()) ?? '',
105-
headers: headersObj,
106-
};
107-
}),
108-
} satisfies AbortableRequest;
109-
},
110-
},
89+
// const responsePromise = fetch(requestUrl, {
90+
// headers: headers as any,
91+
// method,
92+
// body: data,
93+
// signal: abortController.signal,
94+
// });
95+
// return {
96+
// abort: () => abortController.abort(),
97+
// responsePromise: responsePromise.then(async (response) => {
98+
// const headersObj: Record<string, string> = {};
99+
// response.headers.forEach((value, key) => {
100+
// headersObj[key] = value;
101+
// });
102+
// return {
103+
// statusCode: response.status,
104+
// body: (await response.text()) ?? '',
105+
// headers: headersObj,
106+
// };
107+
// }),
108+
// } satisfies AbortableRequest;
109+
// },
110+
// },
111111
});
112112

113113
await optimizelyInstance.onReady({ timeout: 500 });

0 commit comments

Comments
 (0)