Skip to content

Commit 70bdda4

Browse files
authored
feat(ats): [FSSDK-8690] fix configurable ODP request timeouts (#807)
1 parent 790e154 commit 70bdda4

File tree

3 files changed

+41
-7
lines changed

3 files changed

+41
-7
lines changed

packages/optimizely-sdk/lib/plugins/odp_manager/index.browser.ts

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,14 @@
1414
* limitations under the License.
1515
*/
1616

17-
import { BROWSER_CLIENT_VERSION, ERROR_MESSAGES, JAVASCRIPT_CLIENT_ENGINE, ODP_USER_KEY } from '../../utils/enums';
17+
import {
18+
BROWSER_CLIENT_VERSION,
19+
ERROR_MESSAGES,
20+
JAVASCRIPT_CLIENT_ENGINE,
21+
ODP_USER_KEY,
22+
REQUEST_TIMEOUT_ODP_SEGMENTS_MS,
23+
REQUEST_TIMEOUT_ODP_EVENTS_MS
24+
} from '../../utils/enums';
1825
import { getLogger, LoggerFacade, LogHandler, LogLevel } from '../../modules/logging';
1926

2027
import { BrowserRequestHandler } from './../../utils/http_request_handler/browser_request_handler';
@@ -49,16 +56,22 @@ export class BrowserOdpManager extends OdpManager {
4956

5057
if (odpOptions?.segmentsRequestHandler) {
5158
customSegmentRequestHandler = odpOptions.segmentsRequestHandler;
52-
} else if (odpOptions?.segmentsApiTimeout) {
53-
customSegmentRequestHandler = new BrowserRequestHandler(browserLogger, odpOptions.segmentsApiTimeout);
59+
} else {
60+
customSegmentRequestHandler = new BrowserRequestHandler(
61+
browserLogger,
62+
odpOptions?.segmentsApiTimeout || REQUEST_TIMEOUT_ODP_SEGMENTS_MS
63+
);
5464
}
5565

5666
let customEventRequestHandler;
5767

5868
if (odpOptions?.eventRequestHandler) {
5969
customEventRequestHandler = odpOptions.eventRequestHandler;
60-
} else if (odpOptions?.eventApiTimeout) {
61-
customEventRequestHandler = new BrowserRequestHandler(browserLogger, odpOptions.eventApiTimeout);
70+
} else {
71+
customEventRequestHandler = new BrowserRequestHandler(
72+
browserLogger,
73+
odpOptions?.eventApiTimeout || REQUEST_TIMEOUT_ODP_EVENTS_MS
74+
);
6275
}
6376

6477
super({
@@ -68,8 +81,8 @@ export class BrowserOdpManager extends OdpManager {
6881
maxSize: odpOptions?.segmentsCacheSize,
6982
timeout: odpOptions?.segmentsCacheTimeout,
7083
}),
71-
segmentRequestHandler: customSegmentRequestHandler || new BrowserRequestHandler(browserLogger),
72-
eventRequestHandler: customEventRequestHandler || new BrowserRequestHandler(browserLogger),
84+
segmentRequestHandler: customSegmentRequestHandler,
85+
eventRequestHandler: customEventRequestHandler,
7386
logger: browserLogger,
7487
clientEngine: browserClientEngine,
7588
clientVersion: browserClientVersion,

packages/optimizely-sdk/lib/utils/enums/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -337,6 +337,8 @@ export enum NOTIFICATION_TYPES {
337337
* Default milliseconds before request timeout
338338
*/
339339
export const REQUEST_TIMEOUT_MS = 60 * 1000; // 1 minute
340+
export const REQUEST_TIMEOUT_ODP_SEGMENTS_MS = 10 * 1000; // 10 secs
341+
export const REQUEST_TIMEOUT_ODP_EVENTS_MS = 10 * 1000; // 10 secs
340342

341343
/**
342344
* ODP User Key Options

packages/optimizely-sdk/tests/odpManager.browser.spec.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -336,6 +336,13 @@ describe('OdpManager', () => {
336336
expect(browserOdpManager.segmentManager.odpSegmentApiManager.requestHandler.timeout).toBe(4000);
337337
});
338338

339+
it('Browser default Segments API Request Handler timeout should be used when odpOptions does not include segmentsApiTimeout', () => {
340+
const browserOdpManager = new BrowserOdpManager({});
341+
342+
// @ts-ignore
343+
expect(browserOdpManager.segmentManager.odpSegmentApiManager.requestHandler.timeout).toBe(10000);
344+
});
345+
339346
it('Custom odpOptions.segmentsRequestHandler overrides default Segment API Request Handler', () => {
340347
const odpOptions: OdpOptions = {
341348
segmentsRequestHandler: new BrowserRequestHandler(fakeLogger, 4000),
@@ -431,6 +438,18 @@ describe('OdpManager', () => {
431438
expect(browserOdpManager.eventManager.apiManager.requestHandler.timeout).toBe(4000);
432439
});
433440

441+
it('Browser default Events API Request Handler timeout should be used when odpOptions does not include eventsApiTimeout', () => {
442+
const odpOptions: OdpOptions = {
443+
};
444+
445+
const browserOdpManager = new BrowserOdpManager({
446+
odpOptions,
447+
});
448+
449+
// @ts-ignore
450+
expect(browserOdpManager.eventManager.apiManager.requestHandler.timeout).toBe(10000);
451+
});
452+
434453
it('Custom odpOptions.eventFlushInterval overrides default Event Manager flush interval', () => {
435454
const odpOptions: OdpOptions = {
436455
eventFlushInterval: 4000,

0 commit comments

Comments
 (0)