@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.
- package/dist/index.cjs +312 -0
- package/dist/index.cjs.map +1 -0
- package/dist/{declarations/src/adapter/adapter.d.ts → index.d.cts} +6 -2
- package/dist/index.d.ts +27 -0
- package/dist/index.js +312 -0
- package/dist/index.js.map +1 -0
- package/package.json +34 -10
- package/dist/declarations/src/adapter/index.d.ts +0 -3
- package/dist/declarations/src/index.d.ts +0 -3
- package/dist/flopflip-http-adapter.cjs.d.ts +0 -3
- package/dist/flopflip-http-adapter.cjs.dev.js +0 -250
- package/dist/flopflip-http-adapter.cjs.js +0 -7
- package/dist/flopflip-http-adapter.cjs.prod.js +0 -250
- package/dist/flopflip-http-adapter.esm.js +0 -239
|
@@ -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 };
|