diff --git a/package-lock.json b/package-lock.json index a1ba38a..75a1daa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "0.9.0", "license": "Apache-2.0", "dependencies": { - "@splitsoftware/splitio-commons": "1.16.0" + "@splitsoftware/splitio-commons": "1.16.1-rc.5" }, "devDependencies": { "@react-native-community/eslint-config": "^2.0.0", @@ -4901,9 +4901,9 @@ } }, "node_modules/@splitsoftware/splitio-commons": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/@splitsoftware/splitio-commons/-/splitio-commons-1.16.0.tgz", - "integrity": "sha512-k16cCWJOWut/NB5W1d9hQEYPxFrZXO66manp+8d6RjZYH4r+Q6lu82NYjDcfh5E93H9v+TVKcQLAmpVofbjcvg==", + "version": "1.16.1-rc.5", + "resolved": "https://registry.npmjs.org/@splitsoftware/splitio-commons/-/splitio-commons-1.16.1-rc.5.tgz", + "integrity": "sha512-Kzy/lCHV8BXrI7uJCpH3kynMY5zApgkGOt1aG+7iJy1cK5V1+lHWaTGD5XjophF7lmbpR+VGaNM60+rDqswkIg==", "dependencies": { "tslib": "^2.3.1" }, @@ -21257,9 +21257,9 @@ } }, "@splitsoftware/splitio-commons": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/@splitsoftware/splitio-commons/-/splitio-commons-1.16.0.tgz", - "integrity": "sha512-k16cCWJOWut/NB5W1d9hQEYPxFrZXO66manp+8d6RjZYH4r+Q6lu82NYjDcfh5E93H9v+TVKcQLAmpVofbjcvg==", + "version": "1.16.1-rc.5", + "resolved": "https://registry.npmjs.org/@splitsoftware/splitio-commons/-/splitio-commons-1.16.1-rc.5.tgz", + "integrity": "sha512-Kzy/lCHV8BXrI7uJCpH3kynMY5zApgkGOt1aG+7iJy1cK5V1+lHWaTGD5XjophF7lmbpR+VGaNM60+rDqswkIg==", "requires": { "tslib": "^2.3.1" }, diff --git a/package.json b/package.json index 9bde8ed..7991e4a 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ }, "homepage": "https://github.com/splitio/react-native-client#readme", "dependencies": { - "@splitsoftware/splitio-commons": "1.16.0" + "@splitsoftware/splitio-commons": "1.16.1-rc.5" }, "devDependencies": { "@react-native-community/eslint-config": "^2.0.0", diff --git a/src/settings/defaults.ts b/src/settings/defaults.ts index 9aac4ff..666888a 100644 --- a/src/settings/defaults.ts +++ b/src/settings/defaults.ts @@ -13,6 +13,8 @@ export const defaults = { readyTimeout: 10, // Amount of time we will wait before the first push of events. eventsFirstPushWindow: 10, + // Wait for large segments to emit SDK_READY event. + waitForLargeSegments: true, }, // Consent is considered granted by default diff --git a/src/settings/full.ts b/src/settings/full.ts index b3fef42..d8fc0ea 100644 --- a/src/settings/full.ts +++ b/src/settings/full.ts @@ -6,6 +6,7 @@ import { validatePluggableIntegrations } from '@splitsoftware/splitio-commons/sr import { validateLogger } from '@splitsoftware/splitio-commons/src/utils/settingsValidation/logger/pluggableLogger'; import { validateLocalhostWithDefault } from '@splitsoftware/splitio-commons/src/utils/settingsValidation/localhost/builtin'; import { validateConsent } from '@splitsoftware/splitio-commons/src/utils/settingsValidation/consent'; +import { STANDALONE_MODE } from '@splitsoftware/splitio-commons/src/utils/constants'; const params = { defaults, @@ -22,5 +23,9 @@ export function settingsFactory(config: any) { const settings = settingsValidation(config, params); // @ts-ignore. For internal use, flush data on background until a persistent storage is provided. settings.flushDataOnBackground = true; + + // Override in localhost mode to properly emit SDK_READY + if (settings.mode !== STANDALONE_MODE) settings.sync.largeSegmentsEnabled = false; + return settings; } diff --git a/src/settings/index.ts b/src/settings/index.ts index c86e9d3..664db1f 100644 --- a/src/settings/index.ts +++ b/src/settings/index.ts @@ -6,6 +6,7 @@ import { validatePluggableIntegrations } from '@splitsoftware/splitio-commons/sr import { validateLogger } from '@splitsoftware/splitio-commons/src/utils/settingsValidation/logger/pluggableLogger'; import { validateLocalhost } from '@splitsoftware/splitio-commons/src/utils/settingsValidation/localhost/pluggable'; import { validateConsent } from '@splitsoftware/splitio-commons/src/utils/settingsValidation/consent'; +import { STANDALONE_MODE } from '@splitsoftware/splitio-commons/src/utils/constants'; const params = { defaults, @@ -22,5 +23,9 @@ export function settingsFactory(config: any) { const settings = settingsValidation(config, params); // @ts-ignore. For internal use, flush data on background until a persistent storage is provided. settings.flushDataOnBackground = true; + + // Override in localhost mode to properly emit SDK_READY + if (settings.mode !== STANDALONE_MODE) settings.sync.largeSegmentsEnabled = false; + return settings; } diff --git a/types/splitio.d.ts b/types/splitio.d.ts index 50659a1..e2fa660 100644 --- a/types/splitio.d.ts +++ b/types/splitio.d.ts @@ -53,6 +53,7 @@ interface ISettings { impressionsQueueSize: number, telemetryRefreshRate: number, segmentsRefreshRate: number, + largeSegmentsRefreshRate: number, offlineRefreshRate: number, eventsPushRate: number, eventsQueueSize: number, @@ -62,7 +63,8 @@ interface ISettings { readyTimeout: number, requestTimeoutBeforeReady: number, retriesOnFailureBeforeReady: number, - eventsFirstPushWindow: number + eventsFirstPushWindow: number, + waitForLargeSegments: boolean }, readonly storage?: SplitIO.StorageSyncFactory, readonly urls: { @@ -84,6 +86,8 @@ interface ISettings { splitFilters: SplitIO.SplitFilter[], impressionsMode: SplitIO.ImpressionsMode, enabled: boolean, + largeSegmentsEnabled: boolean, + flagSpecVersion: string, localhostMode?: SplitIO.LocalhostFactory, }, readonly userConsent: SplitIO.ConsentStatus @@ -704,6 +708,13 @@ declare namespace SplitIO { * @default 10 */ eventsFirstPushWindow?: number, + /** + * Whether the SDK should wait for large segments to be ready before emitting SDK_READY event. + * It only applies if largeSegmentsEnabled is true. + * @property {boolean} waitForLargeSegments + * @default true + */ + waitForLargeSegments?: boolean }, /** * SDK scheduler settings. @@ -741,6 +752,13 @@ declare namespace SplitIO { * @default 60 */ segmentsRefreshRate?: number, + /** + * The SDK polls Split servers for changes to large segment definitions. This parameter controls this polling period in seconds. + * It only applies if largeSegmentsEnabled is true. + * @property {number} largeSegmentsRefreshRate + * @default 60 + */ + largeSegmentsRefreshRate?: number, /** * The SDK posts the queued events data in bulks. This parameter controls the posting rate in seconds. * @property {number} eventsPushRate @@ -824,7 +842,15 @@ declare namespace SplitIO { * @typedef {string} userConsent * @default 'GRANTED' */ - userConsent?: ConsentStatus + userConsent?: ConsentStatus, + sync?: ISharedSettings['sync'] & { + /** + * Enables synchronization of large segments. + * @property {boolean} largeSegmentsEnabled + * @default false + */ + largeSegmentsEnabled?: boolean + } } /** * This represents the interface for the SDK instance with synchronous storage and client-side API,