diff --git a/package-lock.json b/package-lock.json index 2802921..00fd32c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,15 +1,15 @@ { "name": "@splitsoftware/splitio-browserjs", - "version": "1.7.1", + "version": "1.7.2-rc.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@splitsoftware/splitio-browserjs", - "version": "1.7.1", + "version": "1.7.2-rc.1", "license": "Apache-2.0", "dependencies": { - "@splitsoftware/splitio-commons": "2.12.1", + "@splitsoftware/splitio-commons": "3.0.1-rc.1", "tslib": "^2.3.1", "unfetch": "^4.2.0" }, @@ -1302,20 +1302,28 @@ "dev": true }, "node_modules/@splitsoftware/splitio-commons": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/@splitsoftware/splitio-commons/-/splitio-commons-2.12.1.tgz", - "integrity": "sha512-hoyY2TyG6rY3s622oVPzWT5y7FfQ/pZHIcdnGm5RCOyrr4GZBDiNHf8ftyurFlsXBLqIuSPDVj6L7n+z2LJuFQ==", + "version": "3.0.1-rc.1", + "resolved": "https://registry.npmjs.org/@splitsoftware/splitio-commons/-/splitio-commons-3.0.1-rc.1.tgz", + "integrity": "sha512-XZn3ptV9kCgVZLUoiCzG5Lv/xQttY4XkXyJA4DEWQuTskCfckCZ4TuD4N2C7HLB+elI9vjqmnHWlilpsKbK/wA==", "license": "Apache-2.0", "dependencies": { "@types/ioredis": "^4.28.0", "tslib": "^2.3.1" }, "peerDependencies": { - "ioredis": "^4.28.0 || ^5.0.0" + "bloom-filters": "^3.0.0", + "ioredis": "^4.28.0 || ^5.0.0", + "node-fetch": "^2.7.0" }, "peerDependenciesMeta": { + "bloom-filters": { + "optional": true + }, "ioredis": { "optional": true + }, + "node-fetch": { + "optional": true } } }, @@ -9459,9 +9467,9 @@ "dev": true }, "@splitsoftware/splitio-commons": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/@splitsoftware/splitio-commons/-/splitio-commons-2.12.1.tgz", - "integrity": "sha512-hoyY2TyG6rY3s622oVPzWT5y7FfQ/pZHIcdnGm5RCOyrr4GZBDiNHf8ftyurFlsXBLqIuSPDVj6L7n+z2LJuFQ==", + "version": "3.0.1-rc.1", + "resolved": "https://registry.npmjs.org/@splitsoftware/splitio-commons/-/splitio-commons-3.0.1-rc.1.tgz", + "integrity": "sha512-XZn3ptV9kCgVZLUoiCzG5Lv/xQttY4XkXyJA4DEWQuTskCfckCZ4TuD4N2C7HLB+elI9vjqmnHWlilpsKbK/wA==", "requires": { "@types/ioredis": "^4.28.0", "tslib": "^2.3.1" diff --git a/package.json b/package.json index c27ff75..e89e570 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@splitsoftware/splitio-browserjs", - "version": "1.7.1", + "version": "1.7.2-rc.1", "description": "Split SDK for JavaScript on Browser", "main": "cjs/index.js", "module": "esm/index.js", @@ -59,7 +59,7 @@ "bugs": "https://github.com/splitio/javascript-browser-client/issues", "homepage": "https://github.com/splitio/javascript-browser-client#readme", "dependencies": { - "@splitsoftware/splitio-commons": "2.12.1", + "@splitsoftware/splitio-commons": "3.0.1-rc.1", "tslib": "^2.3.1", "unfetch": "^4.2.0" }, diff --git a/src/__tests__/browserSuites/ready-promise.spec.js b/src/__tests__/browserSuites/ready-promise.spec.js index eb873c1..f2205c2 100644 --- a/src/__tests__/browserSuites/ready-promise.spec.js +++ b/src/__tests__/browserSuites/ready-promise.spec.js @@ -31,7 +31,7 @@ function assertGetTreatmentWhenReady(assert, client) { function assertGetTreatmentControlNotReady(assert, client) { consoleSpy.log.resetHistory(); assert.equal(client.getTreatment('hierarchical_splits_test'), 'control', 'We should get control if client is not ready.'); - assert.true(consoleSpy.log.calledWithExactly('[WARN] splitio => getTreatment: the SDK is not ready to evaluate. Results may be incorrect for feature flag hierarchical_splits_test. Make sure to wait for SDK readiness before using this method.'), 'Telling us that calling getTreatment would return CONTROL since SDK is not ready at this point.'); + assert.true(consoleSpy.log.calledWithExactly('[WARN] splitio => getTreatment: the SDK is not ready to evaluate. Results may be incorrect. Make sure to wait for SDK readiness before using this method.'), 'Telling us that calling getTreatment would return CONTROL since SDK is not ready at this point.'); } function assertGetTreatmentControlNotReadyOnDestroy(assert, client) { @@ -543,13 +543,9 @@ export default function readyPromiseAssertions(fetchMock, assert) { consoleSpy.log.resetHistory(); const sharedClientWithCb = splitio.client('nicolas@split.io'); sharedClientWithCb.on(client.Event.SDK_READY, () => { - t.false(consoleSpy.log.calledWithExactly('[WARN] splitio => No listeners for SDK_READY event detected. Incorrect control treatments could have been logged if you called getTreatment/s while the SDK was not yet synchronized with the backend.'), - 'No warning logged'); const sharedClientWithoutCb = splitio.client('emiliano@split.io'); setTimeout(() => { - t.true(consoleSpy.log.calledWithExactly('[WARN] splitio => No listeners for SDK_READY event detected. Incorrect control treatments could have been logged if you called getTreatment/s while the SDK was not yet synchronized with the backend.'), - 'Warning logged'); Promise.all([sharedClientWithoutCb.destroy(), client.destroy()]).then(() => { client.whenReady() .then(() => { diff --git a/src/__tests__/testUtils/index.js b/src/__tests__/testUtils/index.js index f5fee69..7923fcf 100644 --- a/src/__tests__/testUtils/index.js +++ b/src/__tests__/testUtils/index.js @@ -45,8 +45,9 @@ export function hasNoCacheHeader(fetchMockOpts) { const telemetryEndpointMatcher = /^\/v1\/(metrics|keys)\/(config|usage|ss|cs)/; const eventsEndpointMatcher = /^\/(testImpressions|metrics|events)/; -const authEndpointMatcher = /^\/v2\/auth/; +const authEndpointMatcher = /^\/(v2|v3)\/auth/; const streamingEndpointMatcher = /^\/(sse|event-stream)/; +const configsEndpointMatcher = /^\/v1\/(configs|segmentChanges)/; /** * Switch URLs servers based on target. @@ -69,5 +70,8 @@ export function url(settings, target) { if (streamingEndpointMatcher.test(target)) { return `${settings.urls.streaming}${target}`; } + if (configsEndpointMatcher.test(target)) { + return `${settings.urls.configs}${target}`; + } return `${settings.urls.sdk}${target}`; } diff --git a/src/full/splitFactory.ts b/src/full/splitFactory.ts index 6b36516..4c83c33 100644 --- a/src/full/splitFactory.ts +++ b/src/full/splitFactory.ts @@ -4,11 +4,9 @@ import { getModules } from '../platform/getModules'; import { sdkFactory } from '@splitsoftware/splitio-commons/src/sdkFactory/index'; import { ISdkFactoryParams } from '@splitsoftware/splitio-commons/src/sdkFactory/types'; import { getFetch } from '../platform/getFetchFull'; -import { getEventSource } from '../platform/getEventSource'; -import { EventEmitter } from '@splitsoftware/splitio-commons/src/utils/MinEvents'; -import { now } from '@splitsoftware/splitio-commons/src/utils/timeTracker/now/browser'; +import { platform } from '@splitsoftware/splitio-commons/src/platform/browser'; -const platform = { getFetch, getEventSource, EventEmitter, now }; +const platformWithFetchPolyfill = { ...platform, getFetch }; /** * SplitFactory with pluggable modules for Browser. @@ -21,7 +19,7 @@ const platform = { getFetch, getEventSource, EventEmitter, now }; */ export function SplitFactory(config: SplitIO.IClientSideSettings, __updateModules?: (modules: ISdkFactoryParams) => void) { const settings = settingsFactory(config); - const modules = getModules(settings, platform); + const modules = getModules(settings, platformWithFetchPolyfill); if (__updateModules) __updateModules(modules); return sdkFactory(modules); } diff --git a/src/platform/getEventSource.ts b/src/platform/getEventSource.ts deleted file mode 100644 index 780a012..0000000 --- a/src/platform/getEventSource.ts +++ /dev/null @@ -1,3 +0,0 @@ -export function getEventSource() { - return typeof EventSource === 'function' ? EventSource : undefined; -} diff --git a/src/platform/getFetchSlim.ts b/src/platform/getFetchSlim.ts deleted file mode 100644 index f473fb8..0000000 --- a/src/platform/getFetchSlim.ts +++ /dev/null @@ -1,4 +0,0 @@ -// It doesn't return a ponyfill if global fetch is not available -export function getFetch() { - return typeof fetch === 'function' ? fetch : undefined; -} diff --git a/src/platform/getModules.ts b/src/platform/getModules.ts index 8358ff2..b055a13 100644 --- a/src/platform/getModules.ts +++ b/src/platform/getModules.ts @@ -4,7 +4,6 @@ import { pushManagerFactory } from '@splitsoftware/splitio-commons/src/sync/stre import { pollingManagerCSFactory } from '@splitsoftware/splitio-commons/src/sync/polling/pollingManagerCS'; import { sdkManagerFactory } from '@splitsoftware/splitio-commons/src/sdkManager/index'; import { sdkClientMethodCSFactory } from '@splitsoftware/splitio-commons/src/sdkClient/sdkClientMethodCS'; -import { BrowserSignalListener } from '@splitsoftware/splitio-commons/src/listeners/browser'; import { impressionObserverCSFactory } from '@splitsoftware/splitio-commons/src/trackers/impressionObserver/impressionObserverCS'; import { pluggableIntegrationsManagerFactory } from '@splitsoftware/splitio-commons/src/integrations/pluggable'; import { IPlatform, ISdkFactoryParams } from '@splitsoftware/splitio-commons/src/sdkFactory/types'; @@ -27,17 +26,14 @@ export function getModules(settings: ISettings, platform: IPlatform): ISdkFactor storageFactory: settings.storage as ISdkFactoryParams['storageFactory'], - splitApiFactory, + serviceApiFactory: splitApiFactory, syncManagerFactory: syncManagerStandaloneFactory, sdkManagerFactory, - // @ts-expect-error - To be fixed in commons sdkClientMethodFactory: sdkClientMethodCSFactory, - SignalListener: BrowserSignalListener as ISdkFactoryParams['SignalListener'], - integrationsManagerFactory: settings.integrations && settings.integrations.length > 0 ? pluggableIntegrationsManagerFactory.bind(null, settings.integrations) : undefined, impressionsObserverFactory: impressionObserverCSFactory, @@ -51,9 +47,8 @@ export function getModules(settings: ISettings, platform: IPlatform): ISdkFactor switch (settings.mode) { case LOCALHOST_MODE: - modules.splitApiFactory = undefined; + modules.serviceApiFactory = undefined; modules.syncManagerFactory = localhostFromObjectFactory; - modules.SignalListener = undefined; break; case CONSUMER_MODE: modules.syncManagerFactory = undefined; diff --git a/src/settings/defaults.ts b/src/settings/defaults.ts index d8ae1f1..7b4a60a 100644 --- a/src/settings/defaults.ts +++ b/src/settings/defaults.ts @@ -2,7 +2,7 @@ import type SplitIO from '@splitsoftware/splitio-commons/types/splitio'; import { LogLevels, isLogLevelString } from '@splitsoftware/splitio-commons/src/logger/index'; import { CONSENT_GRANTED } from '@splitsoftware/splitio-commons/src/utils/constants'; -const packageVersion = '1.7.1'; +const packageVersion = '1.7.2-rc.1'; /** * In browser, the default debug level, can be set via the `localStorage.splitio_debug` item. diff --git a/src/splitFactory.ts b/src/splitFactory.ts index cdf93fb..edbd2cd 100644 --- a/src/splitFactory.ts +++ b/src/splitFactory.ts @@ -3,12 +3,7 @@ import { settingsFactory } from './settings'; import { getModules } from './platform/getModules'; import { sdkFactory } from '@splitsoftware/splitio-commons/src/sdkFactory/index'; import { ISdkFactoryParams } from '@splitsoftware/splitio-commons/src/sdkFactory/types'; -import { getFetch } from './platform/getFetchSlim'; -import { getEventSource } from './platform/getEventSource'; -import { EventEmitter } from '@splitsoftware/splitio-commons/src/utils/MinEvents'; -import { now } from '@splitsoftware/splitio-commons/src/utils/timeTracker/now/browser'; - -const platform = { getFetch, getEventSource, EventEmitter, now }; +import { platform } from '@splitsoftware/splitio-commons/src/platform/browser'; /** * SplitFactory with pluggable modules for Browser.