@flagship.io/react-sdk 2.1.10-beta.0 → 2.1.11-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/CONTRIBUTING.md +65 -65
  2. package/LICENSE +201 -201
  3. package/README.md +108 -108
  4. package/dist/FlagshipContext.d.ts +99 -0
  5. package/dist/FlagshipContext.js +312 -0
  6. package/dist/FlagshipContext.js.map +1 -0
  7. package/dist/FlagshipErrorBoundary.d.ts +34 -0
  8. package/dist/FlagshipErrorBoundary.js +95 -0
  9. package/dist/FlagshipErrorBoundary.js.map +1 -0
  10. package/dist/FlagshipHooks.d.ts +33 -0
  11. package/dist/FlagshipHooks.js +198 -0
  12. package/dist/FlagshipHooks.js.map +1 -0
  13. package/dist/components/ReactErrorBoundaryContainer/index.d.ts +10 -0
  14. package/dist/components/ReactErrorBoundaryContainer/index.js +65 -0
  15. package/dist/components/ReactErrorBoundaryContainer/index.js.map +1 -0
  16. package/dist/index.d.ts +2 -0
  17. package/dist/index.js +15 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/lib/loggerHelper.d.ts +5 -0
  20. package/dist/lib/loggerHelper.js +14 -0
  21. package/dist/lib/loggerHelper.js.map +1 -0
  22. package/dist/lib/utils.d.ts +1 -0
  23. package/dist/lib/utils.js +7 -0
  24. package/dist/lib/utils.js.map +1 -0
  25. package/dist/setupTests.d.ts +1 -0
  26. package/dist/setupTests.js +9 -0
  27. package/dist/setupTests.js.map +1 -0
  28. package/dist/tests/mock/apiAnswers/oneModifInMoreThanOneCampaign.d.ts +3 -0
  29. package/dist/tests/mock/apiAnswers/oneModifInMoreThanOneCampaign.js +51 -0
  30. package/dist/tests/mock/apiAnswers/oneModifInMoreThanOneCampaign.js.map +1 -0
  31. package/dist/tests/mock/env.d.ts +5 -0
  32. package/dist/tests/mock/env.js +8 -0
  33. package/dist/tests/mock/env.js.map +1 -0
  34. package/dist/tests/mock/index.d.ts +74 -0
  35. package/dist/tests/mock/index.js +90 -0
  36. package/dist/tests/mock/index.js.map +1 -0
  37. package/package.json +111 -111
package/README.md CHANGED
@@ -1,108 +1,108 @@
1
- <p align="center">
2
-
3
- <img src="https://mk0abtastybwtpirqi5t.kinstacdn.com/wp-content/uploads/picture-solutions-persona-product-flagship.jpg" width="211" height="182" alt="flagship-react-sdk" />
4
-
5
- </p>
6
-
7
- <h3 align="center">Bring your features to life</h3>
8
-
9
- <div style='display: flex; justify-content: space-around;'>
10
-
11
- <!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
12
-
13
- [![All Contributors](https://img.shields.io/badge/all_contributors-1-orange.svg?style=flat-square)](#contributors-)
14
-
15
- <!-- ALL-CONTRIBUTORS-BADGE:END -->
16
-
17
- [![Apache2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](http://www.apache.org/licenses/LICENSE-2.0)
18
-
19
- [![GitHub release](https://img.shields.io/github/v/release/flagship-io/flagship-react-sdk.svg)](https://github.com/abtasty/flagship-react-sdk/releases)
20
-
21
- </div>
22
-
23
- ## Docs
24
-
25
- **Visit [https://developers.flagship.io/](https://developers.flagship.io/) to get started with Flagship.**
26
-
27
- - [Installation & Getting Started](https://developers.flagship.io/docs/sdk/react/v2.0#getting-started)
28
- - [API Reference](https://developers.flagship.io/docs/sdk/react/v2.0#api-reference)
29
- - [Flagship Provider Props](https://developers.flagship.io/docs/sdk/react/v2.0#flagshipprovider)
30
- - Available Hooks
31
-
32
- - [useFlagship](https://developers.flagship.io/docs/sdk/react/v2.0#useflagship)
33
- - [useFsModifications](https://developers.flagship.io/docs/sdk/react/v2.0#usefsmodifications)
34
- - [useFsActivate](https://developers.flagship.io/docs/sdk/react/v2.0#usefsactivate)
35
-
36
- - [Getting modifications](https://developers.flagship.io/docs/sdk/react/v2.0#getting-modifications)
37
- - [Campaign synchronization](https://developers.flagship.io/docs/sdk/react/v2.0#campaign-synchronization)
38
- - [Hit tracking](https://developers.flagship.io/docs/sdk/react/v2.0#hit-tracking)
39
- - [Release Notes](https://github.com/flagship-io/flagship-react-sdk/blob/master/RELEASENOTES.md)
40
- - [Contributing](https://github.com/flagship-io/flagship-react-sdk/blob/master/CONTRIBUTING.md)
41
-
42
- ## Examples
43
-
44
- Following demos illustrate how the SDK is used in practice ☕
45
-
46
- - With React (for developers):
47
-
48
- <a href="https://flagship-io.github.io/flagship-react-sdk/">
49
- <div style="max-width: 850px; margin: 0 auto;">
50
-
51
- ![react-dev-demo](./src/assets/gif/react-dev-demo.gif)
52
-
53
- </div>
54
- </a>
55
- <div style="display: flex; justify-content: space-around; font-size: 24px">
56
-
57
- [Readme 📖](examples/react-dev-demo/README.md)
58
-
59
- [Live Demo 🕹](https://flagship-io.github.io/flagship-react-sdk/)
60
-
61
- </div>
62
-
63
- - With React, e-commerce app:
64
-
65
- <a href="https://react-ecommerce-demo.internal.flagship.io/">
66
- <div style="max-width: 850px; margin: 0 auto;">
67
-
68
- ![react-ecommerce-demo](./src/assets/gif/react-ecommerce-demo.gif)
69
-
70
- </div>
71
- </a>
72
- <div style="display: flex; justify-content: space-around; font-size: 24px">
73
-
74
- [Readme 📖](examples/react-ecommerce-demo/README.md)
75
-
76
- [Live Demo 🕹](https://react-ecommerce-demo.internal.flagship.io/)
77
-
78
- </div>
79
-
80
- - With React, codeSandbox, using campaign displaying cats / dogs / both:
81
-
82
- <a href="https://codesandbox.io/s/flagship-sdk-react-example-sg5qu">
83
- <div style="max-width: 850px; margin: 0 auto;">
84
-
85
- ![react-sandbox-demo](./src/assets/gif/react-sandbox.gif)
86
-
87
- </div>
88
- </a>
89
- <div style="display: flex; justify-content: space-around; font-size: 24px">
90
-
91
- [Live Demo 🕹](https://codesandbox.io/s/flagship-sdk-react-example-sg5qu)
92
-
93
- </div>
94
- </a>
95
-
96
- - With an universal (isomorphic) app, uses React both on server and client side:
97
-
98
- [Source code 📚](./examples/react-universal-demo/README.md)
99
-
100
- - With a server side rendering app, uses React on server:
101
-
102
- [Source code 📚](./examples/react-ssr-demo/README.md)
103
-
104
- </div>
105
-
106
- ## Licence
107
-
108
- [Apache License.](https://github.com/flagship-io/flagship-react-sdk/blob/master/LICENSE)
1
+ <p align="center">
2
+
3
+ <img src="https://mk0abtastybwtpirqi5t.kinstacdn.com/wp-content/uploads/picture-solutions-persona-product-flagship.jpg" width="211" height="182" alt="flagship-react-sdk" />
4
+
5
+ </p>
6
+
7
+ <h3 align="center">Bring your features to life</h3>
8
+
9
+ <div style='display: flex; justify-content: space-around;'>
10
+
11
+ <!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
12
+
13
+ [![All Contributors](https://img.shields.io/badge/all_contributors-1-orange.svg?style=flat-square)](#contributors-)
14
+
15
+ <!-- ALL-CONTRIBUTORS-BADGE:END -->
16
+
17
+ [![Apache2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](http://www.apache.org/licenses/LICENSE-2.0)
18
+
19
+ [![GitHub release](https://img.shields.io/github/v/release/flagship-io/flagship-react-sdk.svg)](https://github.com/abtasty/flagship-react-sdk/releases)
20
+
21
+ </div>
22
+
23
+ ## Docs
24
+
25
+ **Visit [https://developers.flagship.io/](https://developers.flagship.io/) to get started with Flagship.**
26
+
27
+ - [Installation & Getting Started](https://developers.flagship.io/docs/sdk/react/v2.0#getting-started)
28
+ - [API Reference](https://developers.flagship.io/docs/sdk/react/v2.0#api-reference)
29
+ - [Flagship Provider Props](https://developers.flagship.io/docs/sdk/react/v2.0#flagshipprovider)
30
+ - Available Hooks
31
+
32
+ - [useFlagship](https://developers.flagship.io/docs/sdk/react/v2.0#useflagship)
33
+ - [useFsModifications](https://developers.flagship.io/docs/sdk/react/v2.0#usefsmodifications)
34
+ - [useFsActivate](https://developers.flagship.io/docs/sdk/react/v2.0#usefsactivate)
35
+
36
+ - [Getting modifications](https://developers.flagship.io/docs/sdk/react/v2.0#getting-modifications)
37
+ - [Campaign synchronization](https://developers.flagship.io/docs/sdk/react/v2.0#campaign-synchronization)
38
+ - [Hit tracking](https://developers.flagship.io/docs/sdk/react/v2.0#hit-tracking)
39
+ - [Release Notes](https://github.com/flagship-io/flagship-react-sdk/blob/master/RELEASENOTES.md)
40
+ - [Contributing](https://github.com/flagship-io/flagship-react-sdk/blob/master/CONTRIBUTING.md)
41
+
42
+ ## Examples
43
+
44
+ Following demos illustrate how the SDK is used in practice ☕
45
+
46
+ - With React (for developers):
47
+
48
+ <a href="https://flagship-io.github.io/flagship-react-sdk/">
49
+ <div style="max-width: 850px; margin: 0 auto;">
50
+
51
+ ![react-dev-demo](./src/assets/gif/react-dev-demo.gif)
52
+
53
+ </div>
54
+ </a>
55
+ <div style="display: flex; justify-content: space-around; font-size: 24px">
56
+
57
+ [Readme 📖](examples/react-dev-demo/README.md)
58
+
59
+ [Live Demo 🕹](https://flagship-io.github.io/flagship-react-sdk/)
60
+
61
+ </div>
62
+
63
+ - With React, e-commerce app:
64
+
65
+ <a href="https://react-ecommerce-demo.internal.flagship.io/">
66
+ <div style="max-width: 850px; margin: 0 auto;">
67
+
68
+ ![react-ecommerce-demo](./src/assets/gif/react-ecommerce-demo.gif)
69
+
70
+ </div>
71
+ </a>
72
+ <div style="display: flex; justify-content: space-around; font-size: 24px">
73
+
74
+ [Readme 📖](examples/react-ecommerce-demo/README.md)
75
+
76
+ [Live Demo 🕹](https://react-ecommerce-demo.internal.flagship.io/)
77
+
78
+ </div>
79
+
80
+ - With React, codeSandbox, using campaign displaying cats / dogs / both:
81
+
82
+ <a href="https://codesandbox.io/s/flagship-sdk-react-example-sg5qu">
83
+ <div style="max-width: 850px; margin: 0 auto;">
84
+
85
+ ![react-sandbox-demo](./src/assets/gif/react-sandbox.gif)
86
+
87
+ </div>
88
+ </a>
89
+ <div style="display: flex; justify-content: space-around; font-size: 24px">
90
+
91
+ [Live Demo 🕹](https://codesandbox.io/s/flagship-sdk-react-example-sg5qu)
92
+
93
+ </div>
94
+ </a>
95
+
96
+ - With an universal (isomorphic) app, uses React both on server and client side:
97
+
98
+ [Source code 📚](./examples/react-universal-demo/README.md)
99
+
100
+ - With a server side rendering app, uses React on server:
101
+
102
+ [Source code 📚](./examples/react-ssr-demo/README.md)
103
+
104
+ </div>
105
+
106
+ ## Licence
107
+
108
+ [Apache License.](https://github.com/flagship-io/flagship-react-sdk/blob/master/LICENSE)
@@ -0,0 +1,99 @@
1
+ import React, { SetStateAction, Dispatch } from 'react';
2
+ import { FlagshipSdkConfig, FlagshipVisitorContext, IFlagshipVisitor, SaveCacheArgs, DecisionApiCampaign, PostFlagshipApiCallback, BucketingApiResponse, IFlagship } from '@flagship.io/js-sdk';
3
+ import { FsLogger } from '@flagship.io/js-sdk-logs';
4
+ import { HandleErrorBoundaryDisplay } from './FlagshipErrorBoundary';
5
+ export declare type FsStatus = {
6
+ isLoading: boolean;
7
+ isSdkReady: boolean;
8
+ isVisitorDefined: boolean;
9
+ hasError: boolean;
10
+ lastRefresh: string | null;
11
+ firstInitSuccess: string | null;
12
+ };
13
+ export declare type FsState = {
14
+ fsSdk: IFlagship | null;
15
+ fsVisitor: IFlagshipVisitor | null;
16
+ fsModifications: DecisionApiCampaign[] | null;
17
+ status: FsStatus;
18
+ log: FsLogger | null;
19
+ private: {
20
+ previousFetchedModifications: undefined | DecisionApiCampaign[];
21
+ };
22
+ };
23
+ export interface FlagshipReactSdkConfig extends FlagshipSdkConfig {
24
+ fetchNow?: boolean;
25
+ pollingInterval?: number | null;
26
+ activateNow?: boolean;
27
+ enableConsoleLogs?: boolean;
28
+ decisionMode?: 'API' | 'Bucketing';
29
+ nodeEnv?: string;
30
+ enableClientCache?: boolean;
31
+ flagshipApi?: string;
32
+ apiKey?: string | null;
33
+ initialModifications?: DecisionApiCampaign[] | null;
34
+ initialBucketing?: BucketingApiResponse | null;
35
+ timeout?: number;
36
+ enableErrorLayout?: boolean;
37
+ enableSafeMode?: boolean;
38
+ internal?: {
39
+ react?: {};
40
+ reactNative?: {
41
+ httpCallback?: PostFlagshipApiCallback;
42
+ };
43
+ };
44
+ }
45
+ export declare const initState: FsState;
46
+ export declare type BucketingSuccessArgs = {
47
+ status: string;
48
+ payload: BucketingApiResponse;
49
+ };
50
+ export declare type FsContext = {
51
+ hasError: boolean;
52
+ state: FsState;
53
+ setState: Dispatch<SetStateAction<FsState>> | null;
54
+ };
55
+ declare const FlagshipContext: React.Context<FsContext>;
56
+ export declare type FsOnUpdateArguments = {
57
+ fsModifications: DecisionApiCampaign[] | null;
58
+ config: FlagshipReactSdkConfig;
59
+ status: FsStatus;
60
+ };
61
+ export declare type FsOnUpdate = (data: FsOnUpdateArguments, visitor: IFlagshipVisitor | null) => void;
62
+ interface FlagshipProviderProps {
63
+ children: React.ReactNode;
64
+ loadingComponent?: React.ReactNode;
65
+ envId: string;
66
+ visitorData: {
67
+ id: string;
68
+ context?: FlagshipVisitorContext;
69
+ isAuthenticated?: boolean;
70
+ };
71
+ reactNative?: {
72
+ handleErrorDisplay: HandleErrorBoundaryDisplay;
73
+ httpCallback: PostFlagshipApiCallback;
74
+ };
75
+ fetchNow?: boolean;
76
+ decisionMode?: 'API' | 'Bucketing';
77
+ pollingInterval?: number | null;
78
+ activateNow?: boolean;
79
+ enableConsoleLogs?: boolean;
80
+ enableErrorLayout?: boolean;
81
+ enableSafeMode?: boolean;
82
+ enableClientCache?: boolean;
83
+ nodeEnv?: string;
84
+ timeout?: number;
85
+ flagshipApi?: string;
86
+ apiKey?: string | null;
87
+ initialModifications?: DecisionApiCampaign[];
88
+ initialBucketing?: BucketingApiResponse;
89
+ onInitStart?(): void;
90
+ onInitDone?(): void;
91
+ onBucketingSuccess?(data: BucketingSuccessArgs): void;
92
+ onBucketingFail?(error: Error): void;
93
+ onSavingModificationsInCache?(args: SaveCacheArgs): void;
94
+ onUpdate?: FsOnUpdate;
95
+ }
96
+ export declare const FlagshipProvider: React.SFC<FlagshipProviderProps>;
97
+ export declare const FlagshipConsumer: React.Consumer<FsContext>;
98
+ export default FlagshipContext;
99
+ export declare const useFlagshipContext: () => any;
@@ -0,0 +1,312 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
16
+ }) : (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ o[k2] = m[k];
19
+ }));
20
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
21
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
22
+ }) : function(o, v) {
23
+ o["default"] = v;
24
+ });
25
+ var __importStar = (this && this.__importStar) || function (mod) {
26
+ if (mod && mod.__esModule) return mod;
27
+ var result = {};
28
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
29
+ __setModuleDefault(result, mod);
30
+ return result;
31
+ };
32
+ var __rest = (this && this.__rest) || function (s, e) {
33
+ var t = {};
34
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
35
+ t[p] = s[p];
36
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
37
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
38
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
39
+ t[p[i]] = s[p[i]];
40
+ }
41
+ return t;
42
+ };
43
+ var __spreadArrays = (this && this.__spreadArrays) || function () {
44
+ for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
45
+ for (var r = Array(s), k = 0, i = 0; i < il; i++)
46
+ for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
47
+ r[k] = a[j];
48
+ return r;
49
+ };
50
+ var __importDefault = (this && this.__importDefault) || function (mod) {
51
+ return (mod && mod.__esModule) ? mod : { "default": mod };
52
+ };
53
+ Object.defineProperty(exports, "__esModule", { value: true });
54
+ exports.useFlagshipContext = exports.FlagshipConsumer = exports.FlagshipProvider = exports.initState = void 0;
55
+ var react_1 = __importStar(require("react"));
56
+ var js_sdk_1 = __importDefault(require("@flagship.io/js-sdk"));
57
+ var use_ssr_1 = __importDefault(require("use-ssr"));
58
+ var loggerHelper_1 = __importDefault(require("./lib/loggerHelper"));
59
+ var FlagshipErrorBoundary_1 = __importDefault(require("./FlagshipErrorBoundary"));
60
+ var utils_1 = require("./lib/utils");
61
+ exports.initState = {
62
+ fsSdk: null,
63
+ fsVisitor: null,
64
+ log: null,
65
+ fsModifications: null,
66
+ status: {
67
+ isLoading: true,
68
+ isSdkReady: false,
69
+ isVisitorDefined: false,
70
+ firstInitSuccess: null,
71
+ lastRefresh: null,
72
+ hasError: false
73
+ },
74
+ private: {
75
+ previousFetchedModifications: undefined
76
+ }
77
+ };
78
+ var FlagshipContext = react_1.default.createContext({ state: __assign({}, exports.initState), setState: null, hasError: false });
79
+ exports.FlagshipProvider = function (_a) {
80
+ var children = _a.children, reactNative = _a.reactNative, envId = _a.envId, visitorData = _a.visitorData, loadingComponent = _a.loadingComponent, initialModifications = _a.initialModifications, initialBucketing = _a.initialBucketing, onSavingModificationsInCache = _a.onSavingModificationsInCache, onInitStart = _a.onInitStart, onInitDone = _a.onInitDone, onBucketingSuccess = _a.onBucketingSuccess, onBucketingFail = _a.onBucketingFail, onUpdate = _a.onUpdate, timeout = _a.timeout, fetchNow = _a.fetchNow, activateNow = _a.activateNow, enableConsoleLogs = _a.enableConsoleLogs, enableErrorLayout = _a.enableErrorLayout, enableSafeMode = _a.enableSafeMode, enableClientCache = _a.enableClientCache, nodeEnv = _a.nodeEnv, flagshipApi = _a.flagshipApi, apiKey = _a.apiKey, decisionMode = _a.decisionMode, pollingInterval = _a.pollingInterval;
81
+ var id = visitorData === null || visitorData === void 0 ? void 0 : visitorData.id;
82
+ var context = visitorData === null || visitorData === void 0 ? void 0 : visitorData.context;
83
+ var isAuthenticated = (visitorData === null || visitorData === void 0 ? void 0 : visitorData.isAuthenticated) || false;
84
+ var previousIsAuthenticated = react_1.useRef(isAuthenticated);
85
+ var isFirstRun = react_1.useRef(true);
86
+ var _b = use_ssr_1.default(), isBrowser = _b.isBrowser, isServer = _b.isServer, isNative = _b.isNative;
87
+ var isJest = utils_1.areWeTestingWithJest();
88
+ var extractConfiguration = function () { return ({
89
+ fetchNow: typeof fetchNow !== 'boolean' ? true : fetchNow,
90
+ decisionMode: decisionMode || 'API',
91
+ pollingInterval: pollingInterval || null,
92
+ activateNow: typeof activateNow !== 'boolean' ? false : activateNow,
93
+ timeout: typeof timeout !== 'number' ? undefined : timeout,
94
+ enableConsoleLogs: typeof enableConsoleLogs !== 'boolean' ? false : enableConsoleLogs,
95
+ enableErrorLayout: typeof enableErrorLayout !== 'boolean' ? false : enableErrorLayout,
96
+ enableSafeMode: typeof enableSafeMode !== 'boolean' ? false : enableSafeMode,
97
+ enableClientCache: typeof enableClientCache !== 'boolean' ? true : enableClientCache,
98
+ nodeEnv: nodeEnv || 'production',
99
+ initialBucketing: initialBucketing || null,
100
+ flagshipApi: flagshipApi,
101
+ apiKey: apiKey
102
+ }); };
103
+ var configuration = extractConfiguration();
104
+ var _c = react_1.useState(__assign(__assign({}, exports.initState), { log: loggerHelper_1.default.getLogger(configuration), config: configuration, private: __assign(__assign({}, exports.initState.private), { previousFetchedModifications: initialModifications }) })), state = _c[0], setState = _c[1];
105
+ var _d = react_1.useState({ hasError: false, error: null }), errorData = _d[0], setError = _d[1];
106
+ var handleError = function (error) {
107
+ state.log.fatal("error: " + error.stack);
108
+ setError({ error: error, hasError: !!error });
109
+ };
110
+ var _e = state.status, isLoading = _e.isLoading, isVisitorDefined = _e.isVisitorDefined, firstInitSuccess = _e.firstInitSuccess, lastRefresh = _e.lastRefresh, fsVisitor = state.fsVisitor;
111
+ var tryCatchCallback = function (callback) {
112
+ try {
113
+ callback();
114
+ }
115
+ catch (error) {
116
+ state.log.fatal("error: " + error.stack);
117
+ setError({ error: error, hasError: true });
118
+ }
119
+ };
120
+ var computeConfig = function () {
121
+ var sdkConfig = {
122
+ internal: {
123
+ react: {},
124
+ reactNative: {
125
+ httpCallback: reactNative === null || reactNative === void 0 ? void 0 : reactNative.httpCallback
126
+ }
127
+ }
128
+ };
129
+ if (Array.isArray(state.private.previousFetchedModifications)) {
130
+ return __assign(__assign(__assign({}, configuration), sdkConfig), { initialModifications: __spreadArrays(state.private.previousFetchedModifications) });
131
+ }
132
+ if (state.private.previousFetchedModifications) {
133
+ state.log.warn('initialModifications props is not correctly set and has been ignored, please check the documentation.');
134
+ }
135
+ return __assign(__assign({}, configuration), sdkConfig);
136
+ };
137
+ var computedConfig = computeConfig();
138
+ var handleErrorDisplay = reactNative === null || reactNative === void 0 ? void 0 : reactNative.handleErrorDisplay;
139
+ var initSdk = function (previousBucketing) {
140
+ var theApiKey = computedConfig.apiKey, otherComputedConfig = __rest(computedConfig, ["apiKey"]);
141
+ return js_sdk_1.default.start(envId, theApiKey, __assign(__assign({}, otherComputedConfig), { fetchNow: isServer ? false : otherComputedConfig.fetchNow, initialBucketing: computedConfig.initialBucketing === null ? previousBucketing : computedConfig.initialBucketing }));
142
+ };
143
+ var checkIfVisitorShouldBeNew = function (fsSdk) {
144
+ var _a, _b, _c;
145
+ if ((state === null || state === void 0 ? void 0 : state.fsVisitor) && state.fsVisitor.envId === fsSdk.envId && state.fsVisitor.id === id) {
146
+ if (state.fsVisitor.context !== context) {
147
+ state.log.debug("update visitor after re-render, but context is different (old vs new): vContext (" + JSON.stringify((_a = state.fsVisitor) === null || _a === void 0 ? void 0 : _a.context) + " vs " + JSON.stringify(context) + ")");
148
+ }
149
+ else {
150
+ state.log.debug("update visitor after re-render");
151
+ }
152
+ return false;
153
+ }
154
+ if (state === null || state === void 0 ? void 0 : state.fsVisitor) {
155
+ state.log.debug("unable to update visitor after re-render because of strong update (old vs new): envId (" + ((_b = state.fsVisitor) === null || _b === void 0 ? void 0 : _b.envId) + " vs " + fsSdk.envId + ") or vId (" + ((_c = state.fsVisitor) === null || _c === void 0 ? void 0 : _c.id) + " vs " + id + ")");
156
+ }
157
+ return true;
158
+ };
159
+ var postInitSdkForClientSide = function (fsSdk) {
160
+ fsSdk.eventEmitter.on('bucketPollingSuccess', function (_a) {
161
+ var status = _a.status, payload = _a.payload;
162
+ if (onBucketingSuccess) {
163
+ onBucketingSuccess({ status: status.toString(), payload: payload });
164
+ }
165
+ });
166
+ fsSdk.eventEmitter.on('bucketPollingFailed', function (error) {
167
+ if (onBucketingFail) {
168
+ onBucketingFail(error);
169
+ }
170
+ });
171
+ if (onInitStart && !isVisitorDefined) {
172
+ tryCatchCallback(onInitStart);
173
+ }
174
+ var newVisitorDetected = checkIfVisitorShouldBeNew(fsSdk);
175
+ var visitorInstance = newVisitorDetected
176
+ ? fsSdk.newVisitor(id, context)
177
+ : fsSdk.updateVisitor(state.fsVisitor, { context: context });
178
+ setState(function (s) { return (__assign(__assign({}, s), { status: __assign(__assign({}, s.status), { isVisitorDefined: !!visitorInstance, isLoading: true }), fsVisitor: visitorInstance, fsModifications: visitorInstance.fetchedModifications || null, fsSdk: fsSdk })); });
179
+ visitorInstance.on('ready', function (readyData) {
180
+ var withError = readyData.withError;
181
+ setState(function (s) { return (__assign(__assign({}, s), { status: __assign(__assign({}, s.status), { isVisitorDefined: !!visitorInstance, isLoading: false, lastRefresh: new Date().toISOString(), hasError: withError, firstInitSuccess: (!newVisitorDetected && s.status.firstInitSuccess) || new Date().toISOString() }), fsVisitor: visitorInstance, fsSdk: fsSdk, fsModifications: visitorInstance.fetchedModifications || null, private: {
182
+ previousFetchedModifications: visitorInstance.fetchedModifications || undefined
183
+ } })); });
184
+ });
185
+ visitorInstance.on('saveCache', function (args) {
186
+ if (onSavingModificationsInCache) {
187
+ tryCatchCallback(function () { return onSavingModificationsInCache(args); });
188
+ }
189
+ });
190
+ };
191
+ if (!isJest && isServer && !isVisitorDefined) {
192
+ state.log.debug("SDK run on server side detected.");
193
+ var fsSdk_1 = initSdk();
194
+ var visitorInstance_1 = fsSdk_1.newVisitor(id, context);
195
+ setState(function (s) { return (__assign(__assign({}, s), { status: __assign(__assign({}, s.status), { isVisitorDefined: !!visitorInstance_1 }), fsVisitor: visitorInstance_1, fsModifications: visitorInstance_1.fetchedModifications || null, fsSdk: fsSdk_1 })); });
196
+ }
197
+ else if ((isJest || isNative || isBrowser) && !isVisitorDefined && firstInitSuccess === null) {
198
+ var fsSdk = initSdk();
199
+ postInitSdkForClientSide(fsSdk);
200
+ }
201
+ var updateVisitorIfIdentityChanged = function () {
202
+ var isBeingAuthenticated = previousIsAuthenticated.current === false && isAuthenticated === true;
203
+ var isBeingAnonymous = previousIsAuthenticated.current === true && isAuthenticated === false;
204
+ var hasVisitorIdentityChange = isBeingAnonymous || isBeingAuthenticated;
205
+ var updateVisitorAndStatus = function (fsV, isLoadingValue) {
206
+ setState(function (s) { return (__assign(__assign({}, s), { fsModifications: fsV.fetchedModifications, status: __assign(__assign({}, s.status), { isLoading: isLoadingValue }), fsVisitor: fsV })); });
207
+ };
208
+ if (!fsVisitor) {
209
+ handleError(new Error('Trying to change the anonymous status of visitor that has not been initialized or does not exist.'));
210
+ }
211
+ else {
212
+ if (hasVisitorIdentityChange) {
213
+ fsVisitor.updateContext(context || {});
214
+ }
215
+ if (isBeingAnonymous) {
216
+ if (!fsVisitor.anonymousId) {
217
+ fsVisitor.anonymousId = id;
218
+ }
219
+ fsVisitor.unauthenticate(id).then(function () { return updateVisitorAndStatus(fsVisitor, false); });
220
+ }
221
+ else if (isBeingAuthenticated) {
222
+ fsVisitor.authenticate(id).then(function () { return updateVisitorAndStatus(fsVisitor, false); });
223
+ }
224
+ if (hasVisitorIdentityChange) {
225
+ updateVisitorAndStatus(fsVisitor, true);
226
+ }
227
+ }
228
+ previousIsAuthenticated.current = isAuthenticated;
229
+ return hasVisitorIdentityChange;
230
+ };
231
+ react_1.useEffect(function () {
232
+ var _a;
233
+ if (isFirstRun.current) {
234
+ isFirstRun.current = false;
235
+ return;
236
+ }
237
+ if (!id && !errorData.hasError) {
238
+ var errorMsg = 'No visitor id found. Make sure you\'ve set in prop something like this: visitorData={{id: "MY_VISITOR_ID_VALUE"}} inside the FlagshipProvider component.';
239
+ handleError(new Error(errorMsg));
240
+ return;
241
+ }
242
+ if (isServer) {
243
+ state.log.warn("useEffect triggered in a server environment, SDK stopped.");
244
+ return;
245
+ }
246
+ var previousBucketing = null;
247
+ var isVisitorIdentityChanged = updateVisitorIfIdentityChanged();
248
+ if (isVisitorIdentityChanged) {
249
+ return;
250
+ }
251
+ if (state.fsSdk && state.fsSdk.config.decisionMode === 'Bucketing') {
252
+ state.fsSdk.stopBucketingPolling();
253
+ state.log.info('Bucketing automatically stopped because a setting props from FlagshipProvider has changed. Bucketing will restart automatically if decisionMode is still "Bucketing"');
254
+ state.fsSdk.eventEmitter.removeAllListeners();
255
+ previousBucketing = ((_a = state.fsSdk.bucket) === null || _a === void 0 ? void 0 : _a.data) || null;
256
+ }
257
+ var fsSdk = initSdk(previousBucketing);
258
+ postInitSdkForClientSide(fsSdk);
259
+ }, [envId, id, isAuthenticated, JSON.stringify(configuration) + JSON.stringify(context)]);
260
+ react_1.useEffect(function () {
261
+ var isSdkReady = state.status.isVisitorDefined && state.status.firstInitSuccess !== null;
262
+ if (onUpdate) {
263
+ tryCatchCallback(function () {
264
+ var _a;
265
+ onUpdate({
266
+ status: __assign(__assign({}, state.status), { isSdkReady: isSdkReady }),
267
+ fsModifications: state.fsModifications,
268
+ config: __assign(__assign({}, state.config), (_a = state.fsVisitor) === null || _a === void 0 ? void 0 : _a.config)
269
+ }, state.fsVisitor);
270
+ });
271
+ }
272
+ }, [state === null || state === void 0 ? void 0 : state.config, state === null || state === void 0 ? void 0 : state.fsModifications, state.status]);
273
+ react_1.useEffect(function () {
274
+ if (onInitDone && !!firstInitSuccess && firstInitSuccess === lastRefresh && !isLoading) {
275
+ tryCatchCallback(onInitDone);
276
+ }
277
+ }, [state === null || state === void 0 ? void 0 : state.status]);
278
+ var handleDisplay = function () {
279
+ var isFirstInit = !fsVisitor || !firstInitSuccess;
280
+ if (isLoading && loadingComponent && isFirstInit && fetchNow) {
281
+ return react_1.default.createElement(react_1.default.Fragment, null, loadingComponent);
282
+ }
283
+ return react_1.default.createElement(react_1.default.Fragment, null, children);
284
+ };
285
+ return (react_1.default.createElement(FlagshipContext.Provider, { value: { state: state, setState: setState, hasError: errorData.hasError } }, enableSafeMode ? (react_1.default.createElement(FlagshipErrorBoundary_1.default, { customerChildren: children, onError: handleError, error: errorData.error, sdkSettings: configuration, handleDisplay: handleErrorDisplay, log: state.log }, handleDisplay())) : (handleDisplay())));
286
+ };
287
+ exports.FlagshipProvider.defaultProps = {
288
+ loadingComponent: undefined,
289
+ fetchNow: true,
290
+ activateNow: false,
291
+ decisionMode: 'API',
292
+ pollingInterval: undefined,
293
+ enableConsoleLogs: false,
294
+ enableErrorLayout: false,
295
+ enableSafeMode: false,
296
+ nodeEnv: 'production',
297
+ flagshipApi: undefined,
298
+ apiKey: undefined,
299
+ initialModifications: undefined,
300
+ onInitStart: function () {
301
+ },
302
+ onInitDone: function () {
303
+ },
304
+ onSavingModificationsInCache: function () {
305
+ },
306
+ onUpdate: function () {
307
+ }
308
+ };
309
+ exports.FlagshipConsumer = FlagshipContext.Consumer;
310
+ exports.default = FlagshipContext;
311
+ exports.useFlagshipContext = function () { return react_1.useContext(FlagshipContext); };
312
+ //# sourceMappingURL=FlagshipContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FlagshipContext.js","sourceRoot":"","sources":["../src/FlagshipContext.tsx"],"names":[],"mappings":"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"}