@flopflip/http-adapter 14.0.2 → 15.0.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.
@@ -1,239 +0,0 @@
1
- import _objectSpread from '@babel/runtime/helpers/esm/objectSpread2';
2
- import _slicedToArray from '@babel/runtime/helpers/esm/slicedToArray';
3
- import _classPrivateFieldLooseBase from '@babel/runtime/helpers/esm/classPrivateFieldLooseBase';
4
- import _classPrivateFieldLooseKey from '@babel/runtime/helpers/esm/classPrivateFieldLooseKey';
5
- import { exposeGlobally, normalizeFlags, normalizeFlag } from '@flopflip/adapter-utilities';
6
- import { getCache } from '@flopflip/cache';
7
- import { AdapterSubscriptionStatus, AdapterConfigurationStatus, adapterIdentifiers, cacheModes, AdapterInitializationStatus } from '@flopflip/types';
8
- import isEqual from 'lodash/isEqual';
9
- import mitt from 'mitt';
10
- import warning from 'tiny-warning';
11
-
12
- const intialAdapterState = {
13
- subscriptionStatus: AdapterSubscriptionStatus.Subscribed,
14
- configurationStatus: AdapterConfigurationStatus.Unconfigured,
15
- flags: {},
16
- lockedFlags: new Set(),
17
- user: {},
18
- emitter: mitt()
19
- };
20
- var _internalConfiguredStatusChange__ = /*#__PURE__*/_classPrivateFieldLooseKey("__internalConfiguredStatusChange__");
21
- var _flagPollingInternal = /*#__PURE__*/_classPrivateFieldLooseKey("flagPollingInternal");
22
- var _adapterState = /*#__PURE__*/_classPrivateFieldLooseKey("adapterState");
23
- var _defaultpollingIntervalMs = /*#__PURE__*/_classPrivateFieldLooseKey("defaultpollingIntervalMs");
24
- var _getIsAdapterUnsubscribed = /*#__PURE__*/_classPrivateFieldLooseKey("getIsAdapterUnsubscribed");
25
- var _getIsFlagLocked = /*#__PURE__*/_classPrivateFieldLooseKey("getIsFlagLocked");
26
- var _didFlagsChange = /*#__PURE__*/_classPrivateFieldLooseKey("didFlagsChange");
27
- var _fetchFlags = /*#__PURE__*/_classPrivateFieldLooseKey("fetchFlags");
28
- var _subscribeToFlagsChanges = /*#__PURE__*/_classPrivateFieldLooseKey("subscribeToFlagsChanges");
29
- class HttpAdapter {
30
- constructor() {
31
- this.id = void 0;
32
- // eslint-disable-next-line @typescript-eslint/prefer-readonly
33
- Object.defineProperty(this, _internalConfiguredStatusChange__, {
34
- writable: true,
35
- value: '__internalConfiguredStatusChange__'
36
- });
37
- Object.defineProperty(this, _flagPollingInternal, {
38
- writable: true,
39
- value: void 0
40
- });
41
- Object.defineProperty(this, _adapterState, {
42
- writable: true,
43
- value: void 0
44
- });
45
- Object.defineProperty(this, _defaultpollingIntervalMs, {
46
- writable: true,
47
- value: 1000 * 60
48
- });
49
- Object.defineProperty(this, _getIsAdapterUnsubscribed, {
50
- writable: true,
51
- value: () => _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].subscriptionStatus === AdapterSubscriptionStatus.Unsubscribed
52
- });
53
- Object.defineProperty(this, _getIsFlagLocked, {
54
- writable: true,
55
- value: flagName => _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].lockedFlags.has(flagName)
56
- });
57
- Object.defineProperty(this, _didFlagsChange, {
58
- writable: true,
59
- value: nextFlags => {
60
- const previousFlags = _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].flags;
61
- if (previousFlags === undefined) return true;
62
- return !isEqual(nextFlags, previousFlags);
63
- }
64
- });
65
- Object.defineProperty(this, _fetchFlags, {
66
- writable: true,
67
- value: async adapterArgs => {
68
- const flags = await adapterArgs.execute(adapterArgs);
69
- return flags;
70
- }
71
- });
72
- Object.defineProperty(this, _subscribeToFlagsChanges, {
73
- writable: true,
74
- value: adapterArgs => {
75
- var _adapterArgs$pollingI;
76
- const pollingIntervalMs = (_adapterArgs$pollingI = adapterArgs.pollingIntervalMs) !== null && _adapterArgs$pollingI !== void 0 ? _adapterArgs$pollingI : _classPrivateFieldLooseBase(this, _defaultpollingIntervalMs)[_defaultpollingIntervalMs];
77
- if (_classPrivateFieldLooseBase(this, _flagPollingInternal)[_flagPollingInternal]) {
78
- clearInterval(_classPrivateFieldLooseBase(this, _flagPollingInternal)[_flagPollingInternal]);
79
- }
80
- _classPrivateFieldLooseBase(this, _flagPollingInternal)[_flagPollingInternal] = setInterval(async () => {
81
- if (!_classPrivateFieldLooseBase(this, _getIsAdapterUnsubscribed)[_getIsAdapterUnsubscribed]()) {
82
- const nextFlags = normalizeFlags(await _classPrivateFieldLooseBase(this, _fetchFlags)[_fetchFlags](adapterArgs));
83
- if (_classPrivateFieldLooseBase(this, _didFlagsChange)[_didFlagsChange](nextFlags)) {
84
- if (adapterArgs.cacheIdentifier) {
85
- var _classPrivateFieldLoo;
86
- const cache = await getCache(adapterArgs.cacheIdentifier, adapterIdentifiers.http, {
87
- key: (_classPrivateFieldLoo = _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].user) === null || _classPrivateFieldLoo === void 0 ? void 0 : _classPrivateFieldLoo.key
88
- });
89
- cache.set(nextFlags);
90
- }
91
- _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].flags = nextFlags;
92
- if (adapterArgs.cacheMode === cacheModes.lazy) {
93
- return;
94
- }
95
- _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].emitter.emit('flagsStateChange', nextFlags);
96
- }
97
- }
98
- }, pollingIntervalMs);
99
- }
100
- });
101
- this.getUser = () => _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].user;
102
- this.updateFlags = (flags, options) => {
103
- const isAdapterConfigured = this.getIsConfigurationStatus(AdapterConfigurationStatus.Configured);
104
- warning(isAdapterConfigured, '@flopflip/http-adapter: adapter not configured. Flags can not be updated before.');
105
- if (!isAdapterConfigured) return;
106
- const previousFlags = _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].flags;
107
- const updatedFlags = Object.entries(flags).reduce((updatedFlags, _ref) => {
108
- let _ref2 = _slicedToArray(_ref, 2),
109
- flagName = _ref2[0],
110
- flagValue = _ref2[1];
111
- const _normalizeFlag = normalizeFlag(flagName, flagValue),
112
- _normalizeFlag2 = _slicedToArray(_normalizeFlag, 2),
113
- normalizedFlagName = _normalizeFlag2[0],
114
- normalizedFlagValue = _normalizeFlag2[1];
115
- if (_classPrivateFieldLooseBase(this, _getIsFlagLocked)[_getIsFlagLocked](normalizedFlagName)) return updatedFlags;
116
- if (options !== null && options !== void 0 && options.lockFlags) {
117
- _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].lockedFlags.add(normalizedFlagName);
118
- }
119
- updatedFlags = _objectSpread(_objectSpread({}, updatedFlags), {}, {
120
- [normalizedFlagName]: normalizedFlagValue
121
- });
122
- return updatedFlags;
123
- }, {});
124
- const nextFlags = _objectSpread(_objectSpread({}, previousFlags), updatedFlags);
125
- _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].flags = nextFlags;
126
- _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].emitter.emit('flagsStateChange', nextFlags);
127
- };
128
- this.reset = () => {
129
- _classPrivateFieldLooseBase(this, _adapterState)[_adapterState] = _objectSpread({}, intialAdapterState);
130
- };
131
- this.unsubscribe = () => {
132
- _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].subscriptionStatus = AdapterSubscriptionStatus.Unsubscribed;
133
- };
134
- this.subscribe = () => {
135
- _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].subscriptionStatus = AdapterSubscriptionStatus.Subscribed;
136
- };
137
- this.id = adapterIdentifiers.http;
138
- _classPrivateFieldLooseBase(this, _adapterState)[_adapterState] = _objectSpread({}, intialAdapterState);
139
- }
140
- async configure(adapterArgs, adapterEventHandlers) {
141
- const handleFlagsChange = nextFlags => {
142
- if (_classPrivateFieldLooseBase(this, _getIsAdapterUnsubscribed)[_getIsAdapterUnsubscribed]()) return;
143
- adapterEventHandlers.onFlagsStateChange({
144
- flags: nextFlags,
145
- id: this.id
146
- });
147
- };
148
- const handleStatusChange = nextStatus => {
149
- if (_classPrivateFieldLooseBase(this, _getIsAdapterUnsubscribed)[_getIsAdapterUnsubscribed]()) return;
150
- adapterEventHandlers.onStatusStateChange({
151
- status: nextStatus,
152
- id: this.id
153
- });
154
- };
155
- _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].emitter.on('flagsStateChange', handleFlagsChange);
156
- _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].emitter.on('statusStateChange', handleStatusChange);
157
- this.setConfigurationStatus(AdapterConfigurationStatus.Configuring);
158
- _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].user = adapterArgs.user;
159
- return Promise.resolve().then(async () => {
160
- let cachedFlags;
161
- if (adapterArgs.cacheIdentifier) {
162
- var _classPrivateFieldLoo2;
163
- const cache = await getCache(adapterArgs.cacheIdentifier, adapterIdentifiers.http, {
164
- key: (_classPrivateFieldLoo2 = _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].user) === null || _classPrivateFieldLoo2 === void 0 ? void 0 : _classPrivateFieldLoo2.key
165
- });
166
- cachedFlags = cache.get();
167
- if (cachedFlags) {
168
- _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].flags = cachedFlags;
169
- _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].emitter.emit('flagsStateChange', cachedFlags);
170
- }
171
- }
172
- const flags = normalizeFlags(await _classPrivateFieldLooseBase(this, _fetchFlags)[_fetchFlags](adapterArgs));
173
- _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].flags = flags;
174
- this.setConfigurationStatus(AdapterConfigurationStatus.Configured);
175
- if (adapterArgs.cacheIdentifier) {
176
- var _classPrivateFieldLoo3;
177
- const cache = await getCache(adapterArgs.cacheIdentifier, adapterIdentifiers.http, {
178
- key: (_classPrivateFieldLoo3 = _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].user) === null || _classPrivateFieldLoo3 === void 0 ? void 0 : _classPrivateFieldLoo3.key
179
- });
180
- cache.set(flags);
181
- }
182
- if (adapterArgs.cacheMode !== cacheModes.lazy) {
183
- _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].emitter.emit('flagsStateChange', flags);
184
- }
185
- _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].emitter.emit(_classPrivateFieldLooseBase(this, _internalConfiguredStatusChange__)[_internalConfiguredStatusChange__]);
186
- _classPrivateFieldLooseBase(this, _subscribeToFlagsChanges)[_subscribeToFlagsChanges](adapterArgs);
187
- return {
188
- initializationStatus: AdapterInitializationStatus.Succeeded
189
- };
190
- });
191
- }
192
- async reconfigure(adapterArgs, _adapterEventHandlers) {
193
- if (!this.getIsConfigurationStatus(AdapterConfigurationStatus.Configured)) return Promise.reject(new Error('@flopflip/http-adapter: please configure adapter before reconfiguring.'));
194
- const nextUser = adapterArgs.user;
195
- if (!isEqual(_classPrivateFieldLooseBase(this, _adapterState)[_adapterState].user, nextUser)) {
196
- _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].flags = {};
197
- if (adapterArgs.cacheIdentifier) {
198
- var _classPrivateFieldLoo4;
199
- const cache = await getCache(adapterArgs.cacheIdentifier, adapterIdentifiers.http, {
200
- key: (_classPrivateFieldLoo4 = _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].user) === null || _classPrivateFieldLoo4 === void 0 ? void 0 : _classPrivateFieldLoo4.key
201
- });
202
- cache.unset();
203
- }
204
- _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].user = nextUser;
205
- const flags = normalizeFlags(await _classPrivateFieldLooseBase(this, _fetchFlags)[_fetchFlags](adapterArgs));
206
- _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].flags = flags;
207
- _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].emitter.emit('flagsStateChange', flags);
208
- _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].emitter.emit(_classPrivateFieldLooseBase(this, _internalConfiguredStatusChange__)[_internalConfiguredStatusChange__]);
209
- _classPrivateFieldLooseBase(this, _subscribeToFlagsChanges)[_subscribeToFlagsChanges](adapterArgs);
210
- }
211
- return Promise.resolve({
212
- initializationStatus: AdapterInitializationStatus.Succeeded
213
- });
214
- }
215
- async waitUntilConfigured() {
216
- return new Promise(resolve => {
217
- if (this.getIsConfigurationStatus(AdapterConfigurationStatus.Configured)) resolve();else _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].emitter.on(_classPrivateFieldLooseBase(this, _internalConfiguredStatusChange__)[_internalConfiguredStatusChange__], resolve);
218
- });
219
- }
220
- getIsConfigurationStatus(configurationStatus) {
221
- return _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].configurationStatus === configurationStatus;
222
- }
223
- getFlag(flagName) {
224
- var _classPrivateFieldLoo5;
225
- return (_classPrivateFieldLoo5 = _classPrivateFieldLooseBase(this, _adapterState)[_adapterState]) === null || _classPrivateFieldLoo5 === void 0 ? void 0 : _classPrivateFieldLoo5.flags[flagName];
226
- }
227
- setConfigurationStatus(nextConfigurationStatus) {
228
- _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].configurationStatus = nextConfigurationStatus;
229
- _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].emitter.emit('statusStateChange', {
230
- configurationStatus: _classPrivateFieldLooseBase(this, _adapterState)[_adapterState].configurationStatus
231
- });
232
- }
233
- }
234
- const adapter = new HttpAdapter();
235
- exposeGlobally(adapter);
236
-
237
- const version = "14.0.2";
238
-
239
- export { adapter as default, version };