@flopflip/graphql-adapter 14.0.2 → 15.0.1

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 ADDED
@@ -0,0 +1,323 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __typeError = (msg) => {
8
+ throw TypeError(msg);
9
+ };
10
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
11
+ var __spreadValues = (a, b) => {
12
+ for (var prop in b || (b = {}))
13
+ if (__hasOwnProp.call(b, prop))
14
+ __defNormalProp(a, prop, b[prop]);
15
+ if (__getOwnPropSymbols)
16
+ for (var prop of __getOwnPropSymbols(b)) {
17
+ if (__propIsEnum.call(b, prop))
18
+ __defNormalProp(a, prop, b[prop]);
19
+ }
20
+ return a;
21
+ };
22
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
23
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
24
+ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
25
+ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
26
+ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
27
+ var __async = (__this, __arguments, generator) => {
28
+ return new Promise((resolve, reject) => {
29
+ var fulfilled = (value) => {
30
+ try {
31
+ step(generator.next(value));
32
+ } catch (e) {
33
+ reject(e);
34
+ }
35
+ };
36
+ var rejected = (value) => {
37
+ try {
38
+ step(generator.throw(value));
39
+ } catch (e) {
40
+ reject(e);
41
+ }
42
+ };
43
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
44
+ step((generator = generator.apply(__this, __arguments)).next());
45
+ });
46
+ };
47
+
48
+ // src/adapter.ts
49
+
50
+
51
+
52
+
53
+ var _adapterutilities = require('@flopflip/adapter-utilities');
54
+ var _cache = require('@flopflip/cache');
55
+
56
+
57
+
58
+
59
+
60
+
61
+ var _types = require('@flopflip/types');
62
+ var _isEqual = require('lodash/isEqual'); var _isEqual2 = _interopRequireDefault(_isEqual);
63
+ var _mitt = require('mitt'); var _mitt2 = _interopRequireDefault(_mitt);
64
+ var _tinywarning = require('tiny-warning'); var _tinywarning2 = _interopRequireDefault(_tinywarning);
65
+ var intialAdapterState = {
66
+ subscriptionStatus: _types.AdapterSubscriptionStatus.Subscribed,
67
+ configurationStatus: _types.AdapterConfigurationStatus.Unconfigured,
68
+ flags: {},
69
+ lockedFlags: /* @__PURE__ */ new Set(),
70
+ user: {},
71
+ emitter: _mitt2.default.call(void 0, )
72
+ };
73
+ var ___internalConfiguredStatusChange__, _adapterState, _flagPollingInternal, _defaultpollingIntervalMs, _getIsAdapterUnsubscribed, _getIsFlagLocked, _didFlagsChange, _fetchFlags, _subscribeToFlagsChanges;
74
+ var GraphQlAdapter = class {
75
+ constructor() {
76
+ __privateAdd(this, ___internalConfiguredStatusChange__, "__internalConfiguredStatusChange__");
77
+ __privateAdd(this, _adapterState);
78
+ __privateAdd(this, _flagPollingInternal);
79
+ __privateAdd(this, _defaultpollingIntervalMs, 1e3 * 60);
80
+ __privateAdd(this, _getIsAdapterUnsubscribed, () => __privateGet(this, _adapterState).subscriptionStatus === _types.AdapterSubscriptionStatus.Unsubscribed);
81
+ __privateAdd(this, _getIsFlagLocked, (flagName) => __privateGet(this, _adapterState).lockedFlags.has(flagName));
82
+ __privateAdd(this, _didFlagsChange, (nextFlags) => {
83
+ const previousFlags = __privateGet(this, _adapterState).flags;
84
+ if (previousFlags === void 0) {
85
+ return true;
86
+ }
87
+ return !_isEqual2.default.call(void 0, nextFlags, previousFlags);
88
+ });
89
+ __privateAdd(this, _fetchFlags, (adapterArgs) => __async(null, null, function* () {
90
+ var _a, _b, _c, _d, _e, _f, _g;
91
+ const fetcher = (_a = adapterArgs.fetcher) != null ? _a : fetch;
92
+ const response = yield fetcher(adapterArgs.uri, {
93
+ method: "POST",
94
+ headers: __spreadValues({
95
+ "Content-Type": "application/json"
96
+ }, (_c = (_b = adapterArgs.getRequestHeaders) == null ? void 0 : _b.call(adapterArgs, adapterArgs)) != null ? _c : {}),
97
+ body: JSON.stringify({
98
+ query: adapterArgs.query,
99
+ variables: (_e = (_d = adapterArgs == null ? void 0 : adapterArgs.getQueryVariables) == null ? void 0 : _d.call(adapterArgs, adapterArgs)) != null ? _e : {}
100
+ })
101
+ });
102
+ const json = yield response.json();
103
+ const flags = (_g = (_f = adapterArgs.parseFlags) == null ? void 0 : _f.call(adapterArgs, json.data)) != null ? _g : json.data;
104
+ return flags;
105
+ }));
106
+ __privateAdd(this, _subscribeToFlagsChanges, (adapterArgs) => {
107
+ var _a;
108
+ const pollingIntervalMs = (_a = adapterArgs.pollingIntervalMs) != null ? _a : __privateGet(this, _defaultpollingIntervalMs);
109
+ if (__privateGet(this, _flagPollingInternal)) {
110
+ clearInterval(__privateGet(this, _flagPollingInternal));
111
+ }
112
+ __privateSet(this, _flagPollingInternal, setInterval(() => __async(this, null, function* () {
113
+ var _a2;
114
+ if (!__privateGet(this, _getIsAdapterUnsubscribed).call(this)) {
115
+ const nextFlags = _adapterutilities.normalizeFlags.call(void 0, yield __privateGet(this, _fetchFlags).call(this, adapterArgs));
116
+ if (__privateGet(this, _didFlagsChange).call(this, nextFlags)) {
117
+ if (adapterArgs.cacheIdentifier) {
118
+ const cache = yield _cache.getCache.call(void 0,
119
+ adapterArgs.cacheIdentifier,
120
+ _types.adapterIdentifiers.graphql,
121
+ { key: (_a2 = __privateGet(this, _adapterState).user) == null ? void 0 : _a2.key }
122
+ );
123
+ cache.set(nextFlags);
124
+ }
125
+ __privateGet(this, _adapterState).flags = nextFlags;
126
+ if (adapterArgs.cacheMode === _types.cacheModes.lazy) {
127
+ return;
128
+ }
129
+ __privateGet(this, _adapterState).emitter.emit("flagsStateChange", nextFlags);
130
+ }
131
+ }
132
+ }), pollingIntervalMs));
133
+ });
134
+ this.getUser = () => __privateGet(this, _adapterState).user;
135
+ this.updateFlags = (flags, options) => {
136
+ const isAdapterConfigured = this.getIsConfigurationStatus(
137
+ _types.AdapterConfigurationStatus.Configured
138
+ );
139
+ _tinywarning2.default.call(void 0,
140
+ isAdapterConfigured,
141
+ "@flopflip/graphql-adapter: adapter not configured. Flags can not be updated before."
142
+ );
143
+ if (!isAdapterConfigured) {
144
+ return;
145
+ }
146
+ const previousFlags = __privateGet(this, _adapterState).flags;
147
+ const updatedFlags = Object.entries(flags).reduce(
148
+ (updatedFlags2, [flagName, flagValue]) => {
149
+ const [normalizedFlagName, normalizedFlagValue] = _adapterutilities.normalizeFlag.call(void 0,
150
+ flagName,
151
+ flagValue
152
+ );
153
+ if (__privateGet(this, _getIsFlagLocked).call(this, normalizedFlagName)) {
154
+ return updatedFlags2;
155
+ }
156
+ if (options == null ? void 0 : options.lockFlags) {
157
+ __privateGet(this, _adapterState).lockedFlags.add(normalizedFlagName);
158
+ }
159
+ const updated = __spreadProps(__spreadValues({}, updatedFlags2), {
160
+ [normalizedFlagName]: normalizedFlagValue
161
+ });
162
+ return updated;
163
+ },
164
+ {}
165
+ );
166
+ const nextFlags = __spreadValues(__spreadValues({}, previousFlags), updatedFlags);
167
+ __privateGet(this, _adapterState).flags = nextFlags;
168
+ __privateGet(this, _adapterState).emitter.emit("flagsStateChange", nextFlags);
169
+ };
170
+ this.reset = () => {
171
+ __privateSet(this, _adapterState, __spreadValues({}, intialAdapterState));
172
+ };
173
+ this.unsubscribe = () => {
174
+ __privateGet(this, _adapterState).subscriptionStatus = _types.AdapterSubscriptionStatus.Unsubscribed;
175
+ };
176
+ this.subscribe = () => {
177
+ __privateGet(this, _adapterState).subscriptionStatus = _types.AdapterSubscriptionStatus.Subscribed;
178
+ };
179
+ this.id = _types.adapterIdentifiers.graphql;
180
+ __privateSet(this, _adapterState, __spreadValues({}, intialAdapterState));
181
+ }
182
+ configure(adapterArgs, adapterEventHandlers) {
183
+ return __async(this, null, function* () {
184
+ const handleFlagsChange = (nextFlags) => {
185
+ if (__privateGet(this, _getIsAdapterUnsubscribed).call(this)) {
186
+ return;
187
+ }
188
+ adapterEventHandlers.onFlagsStateChange({
189
+ flags: nextFlags,
190
+ id: this.id
191
+ });
192
+ };
193
+ const handleStatusChange = (nextStatus) => {
194
+ if (__privateGet(this, _getIsAdapterUnsubscribed).call(this)) {
195
+ return;
196
+ }
197
+ adapterEventHandlers.onStatusStateChange({
198
+ status: nextStatus,
199
+ id: this.id
200
+ });
201
+ };
202
+ __privateGet(this, _adapterState).emitter.on("flagsStateChange", handleFlagsChange);
203
+ __privateGet(this, _adapterState).emitter.on("statusStateChange", handleStatusChange);
204
+ this.setConfigurationStatus(_types.AdapterConfigurationStatus.Configuring);
205
+ __privateGet(this, _adapterState).user = adapterArgs.user;
206
+ return Promise.resolve().then(() => __async(this, null, function* () {
207
+ var _a, _b;
208
+ let cachedFlags = null;
209
+ if (adapterArgs.cacheIdentifier) {
210
+ const cache = yield _cache.getCache.call(void 0,
211
+ adapterArgs.cacheIdentifier,
212
+ _types.adapterIdentifiers.graphql,
213
+ { key: (_a = __privateGet(this, _adapterState).user) == null ? void 0 : _a.key }
214
+ );
215
+ cachedFlags = cache.get();
216
+ if (cachedFlags) {
217
+ __privateGet(this, _adapterState).flags = cachedFlags;
218
+ __privateGet(this, _adapterState).emitter.emit(
219
+ "flagsStateChange",
220
+ cachedFlags
221
+ );
222
+ }
223
+ }
224
+ this.setConfigurationStatus(_types.AdapterConfigurationStatus.Configured);
225
+ const flags = _adapterutilities.normalizeFlags.call(void 0, yield __privateGet(this, _fetchFlags).call(this, adapterArgs));
226
+ __privateGet(this, _adapterState).flags = flags;
227
+ if (adapterArgs.cacheIdentifier) {
228
+ const cache = yield _cache.getCache.call(void 0,
229
+ adapterArgs.cacheIdentifier,
230
+ _types.adapterIdentifiers.graphql,
231
+ { key: (_b = __privateGet(this, _adapterState).user) == null ? void 0 : _b.key }
232
+ );
233
+ cache.set(flags);
234
+ }
235
+ if (adapterArgs.cacheMode !== _types.cacheModes.lazy) {
236
+ __privateGet(this, _adapterState).emitter.emit("flagsStateChange", flags);
237
+ }
238
+ __privateGet(this, _adapterState).emitter.emit(__privateGet(this, ___internalConfiguredStatusChange__));
239
+ __privateGet(this, _subscribeToFlagsChanges).call(this, adapterArgs);
240
+ return {
241
+ initializationStatus: _types.AdapterInitializationStatus.Succeeded
242
+ };
243
+ }));
244
+ });
245
+ }
246
+ reconfigure(adapterArgs, _adapterEventHandlers) {
247
+ return __async(this, null, function* () {
248
+ var _a;
249
+ if (!this.getIsConfigurationStatus(_types.AdapterConfigurationStatus.Configured)) {
250
+ return Promise.reject(
251
+ new Error(
252
+ "@flopflip/graphql-adapter: please configure adapter before reconfiguring."
253
+ )
254
+ );
255
+ }
256
+ __privateGet(this, _adapterState).flags = {};
257
+ if (adapterArgs.cacheIdentifier) {
258
+ const cache = yield _cache.getCache.call(void 0,
259
+ adapterArgs.cacheIdentifier,
260
+ _types.adapterIdentifiers.graphql,
261
+ { key: (_a = __privateGet(this, _adapterState).user) == null ? void 0 : _a.key }
262
+ );
263
+ cache.unset();
264
+ }
265
+ const nextUser = adapterArgs.user;
266
+ __privateGet(this, _adapterState).user = nextUser;
267
+ const flags = _adapterutilities.normalizeFlags.call(void 0, yield __privateGet(this, _fetchFlags).call(this, adapterArgs));
268
+ __privateGet(this, _adapterState).flags = flags;
269
+ __privateGet(this, _adapterState).emitter.emit("flagsStateChange", flags);
270
+ __privateGet(this, _adapterState).emitter.emit(__privateGet(this, ___internalConfiguredStatusChange__));
271
+ __privateGet(this, _subscribeToFlagsChanges).call(this, adapterArgs);
272
+ return Promise.resolve({
273
+ initializationStatus: _types.AdapterInitializationStatus.Succeeded
274
+ });
275
+ });
276
+ }
277
+ waitUntilConfigured() {
278
+ return __async(this, null, function* () {
279
+ return new Promise((resolve) => {
280
+ if (this.getIsConfigurationStatus(_types.AdapterConfigurationStatus.Configured)) {
281
+ resolve();
282
+ } else {
283
+ __privateGet(this, _adapterState).emitter.on(
284
+ __privateGet(this, ___internalConfiguredStatusChange__),
285
+ resolve
286
+ );
287
+ }
288
+ });
289
+ });
290
+ }
291
+ getIsConfigurationStatus(configurationStatus) {
292
+ return __privateGet(this, _adapterState).configurationStatus === configurationStatus;
293
+ }
294
+ getFlag(flagName) {
295
+ var _a;
296
+ return (_a = __privateGet(this, _adapterState)) == null ? void 0 : _a.flags[flagName];
297
+ }
298
+ setConfigurationStatus(nextConfigurationStatus) {
299
+ __privateGet(this, _adapterState).configurationStatus = nextConfigurationStatus;
300
+ __privateGet(this, _adapterState).emitter.emit("statusStateChange", {
301
+ configurationStatus: __privateGet(this, _adapterState).configurationStatus
302
+ });
303
+ }
304
+ };
305
+ ___internalConfiguredStatusChange__ = new WeakMap();
306
+ _adapterState = new WeakMap();
307
+ _flagPollingInternal = new WeakMap();
308
+ _defaultpollingIntervalMs = new WeakMap();
309
+ _getIsAdapterUnsubscribed = new WeakMap();
310
+ _getIsFlagLocked = new WeakMap();
311
+ _didFlagsChange = new WeakMap();
312
+ _fetchFlags = new WeakMap();
313
+ _subscribeToFlagsChanges = new WeakMap();
314
+ var adapter = new GraphQlAdapter();
315
+ _adapterutilities.exposeGlobally.call(void 0, adapter);
316
+
317
+ // src/index.ts
318
+ var version = "__@FLOPFLIP/VERSION_OF_RELEASE__";
319
+
320
+
321
+
322
+ exports.adapter = adapter; exports.version = version;
323
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/flopflip/flopflip/packages/graphql-adapter/dist/index.cjs","../src/adapter.ts","../src/index.ts"],"names":["_a","updatedFlags"],"mappings":"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","file":"/home/runner/work/flopflip/flopflip/packages/graphql-adapter/dist/index.cjs","sourcesContent":[null,"import {\n exposeGlobally,\n normalizeFlag,\n normalizeFlags,\n} from '@flopflip/adapter-utilities';\nimport { getCache } from '@flopflip/cache';\nimport {\n AdapterConfigurationStatus,\n AdapterInitializationStatus,\n AdapterSubscriptionStatus,\n type TAdapterEventHandlers,\n type TAdapterStatus,\n type TAdapterStatusChange,\n type TCacheIdentifiers,\n type TFlagName,\n type TFlagVariation,\n type TFlags,\n type TFlagsChange,\n type TFlagsUpdateFunction,\n type TGraphQlAdapterArgs,\n type TGraphQlAdapterInterface,\n type TUser,\n adapterIdentifiers,\n cacheModes,\n} from '@flopflip/types';\nimport isEqual from 'lodash/isEqual';\nimport mitt, { type Emitter } from 'mitt';\nimport warning from 'tiny-warning';\n\ntype TInternalStatusChange = '__internalConfiguredStatusChange__';\ntype TEmitterEvents = {\n __internalConfiguredStatusChange__: undefined;\n flagsStateChange: TFlags;\n statusStateChange: Partial<TAdapterStatus>;\n};\ntype TGraphQlAdapterState = {\n flags: TFlags;\n user?: TUser;\n emitter: Emitter<TEmitterEvents>;\n lockedFlags: Set<TFlagName>;\n cacheIdentifier?: TCacheIdentifiers;\n};\n\nconst intialAdapterState: TAdapterStatus & TGraphQlAdapterState = {\n subscriptionStatus: AdapterSubscriptionStatus.Subscribed,\n configurationStatus: AdapterConfigurationStatus.Unconfigured,\n flags: {},\n lockedFlags: new Set<TFlagName>(),\n user: {},\n emitter: mitt(),\n};\n\nclass GraphQlAdapter implements TGraphQlAdapterInterface {\n id: typeof adapterIdentifiers.graphql;\n\n #__internalConfiguredStatusChange__: TInternalStatusChange =\n '__internalConfiguredStatusChange__';\n\n #adapterState: TAdapterStatus & TGraphQlAdapterState;\n #flagPollingInternal?: ReturnType<typeof setInterval>;\n readonly #defaultpollingIntervalMs = 1000 * 60;\n\n constructor() {\n this.id = adapterIdentifiers.graphql;\n this.#adapterState = {\n ...intialAdapterState,\n };\n }\n\n readonly #getIsAdapterUnsubscribed = () =>\n this.#adapterState.subscriptionStatus ===\n AdapterSubscriptionStatus.Unsubscribed;\n\n readonly #getIsFlagLocked = (flagName: TFlagName) =>\n this.#adapterState.lockedFlags.has(flagName);\n\n readonly #didFlagsChange = (nextFlags: TFlags) => {\n const previousFlags = this.#adapterState.flags;\n\n if (previousFlags === undefined) {\n return true;\n }\n\n return !isEqual(nextFlags, previousFlags);\n };\n\n readonly #fetchFlags = async (\n adapterArgs: TGraphQlAdapterArgs\n ): Promise<TFlags> => {\n const fetcher = adapterArgs.fetcher ?? fetch;\n\n const response = await fetcher(adapterArgs.uri, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...(adapterArgs.getRequestHeaders?.(adapterArgs) ?? {}),\n },\n body: JSON.stringify({\n query: adapterArgs.query,\n variables: adapterArgs?.getQueryVariables?.(adapterArgs) ?? {},\n }),\n });\n\n const json = await response.json();\n\n const flags = adapterArgs.parseFlags?.(json.data) ?? (json.data as TFlags);\n\n return flags;\n };\n\n readonly #subscribeToFlagsChanges = (adapterArgs: TGraphQlAdapterArgs) => {\n const pollingIntervalMs =\n adapterArgs.pollingIntervalMs ?? this.#defaultpollingIntervalMs;\n\n if (this.#flagPollingInternal) {\n clearInterval(this.#flagPollingInternal);\n }\n\n this.#flagPollingInternal = setInterval(async () => {\n if (!this.#getIsAdapterUnsubscribed()) {\n const nextFlags = normalizeFlags(await this.#fetchFlags(adapterArgs));\n\n if (this.#didFlagsChange(nextFlags)) {\n if (adapterArgs.cacheIdentifier) {\n const cache = await getCache(\n adapterArgs.cacheIdentifier,\n adapterIdentifiers.graphql,\n { key: this.#adapterState.user?.key }\n );\n\n cache.set(nextFlags);\n }\n\n this.#adapterState.flags = nextFlags;\n\n if (adapterArgs.cacheMode === cacheModes.lazy) {\n return;\n }\n\n this.#adapterState.emitter.emit('flagsStateChange', nextFlags);\n }\n }\n }, pollingIntervalMs);\n };\n\n getUser = () => this.#adapterState.user;\n\n updateFlags: TFlagsUpdateFunction = (flags, options) => {\n const isAdapterConfigured = this.getIsConfigurationStatus(\n AdapterConfigurationStatus.Configured\n );\n\n warning(\n isAdapterConfigured,\n '@flopflip/graphql-adapter: adapter not configured. Flags can not be updated before.'\n );\n\n if (!isAdapterConfigured) {\n return;\n }\n\n const previousFlags: TFlags | undefined = this.#adapterState.flags;\n\n const updatedFlags = Object.entries(flags).reduce(\n (updatedFlags, [flagName, flagValue]) => {\n const [normalizedFlagName, normalizedFlagValue] = normalizeFlag(\n flagName,\n flagValue\n );\n\n if (this.#getIsFlagLocked(normalizedFlagName)) {\n return updatedFlags;\n }\n\n if (options?.lockFlags) {\n this.#adapterState.lockedFlags.add(normalizedFlagName);\n }\n\n const updated = {\n ...updatedFlags,\n [normalizedFlagName]: normalizedFlagValue,\n };\n\n return updated;\n },\n {}\n );\n\n const nextFlags: TFlags = {\n ...previousFlags,\n ...updatedFlags,\n };\n\n this.#adapterState.flags = nextFlags;\n this.#adapterState.emitter.emit('flagsStateChange', nextFlags);\n };\n\n async configure(\n adapterArgs: TGraphQlAdapterArgs,\n adapterEventHandlers: TAdapterEventHandlers\n ) {\n const handleFlagsChange = (nextFlags: TFlagsChange['flags']) => {\n if (this.#getIsAdapterUnsubscribed()) {\n return;\n }\n\n adapterEventHandlers.onFlagsStateChange({\n flags: nextFlags,\n id: this.id,\n });\n };\n\n const handleStatusChange = (nextStatus: TAdapterStatusChange['status']) => {\n if (this.#getIsAdapterUnsubscribed()) {\n return;\n }\n\n adapterEventHandlers.onStatusStateChange({\n status: nextStatus,\n id: this.id,\n });\n };\n\n this.#adapterState.emitter.on('flagsStateChange', handleFlagsChange);\n this.#adapterState.emitter.on('statusStateChange', handleStatusChange);\n\n this.setConfigurationStatus(AdapterConfigurationStatus.Configuring);\n\n this.#adapterState.user = adapterArgs.user;\n\n return Promise.resolve().then(async () => {\n let cachedFlags = null;\n\n if (adapterArgs.cacheIdentifier) {\n const cache = await getCache(\n adapterArgs.cacheIdentifier,\n adapterIdentifiers.graphql,\n { key: this.#adapterState.user?.key }\n );\n\n cachedFlags = cache.get();\n\n if (cachedFlags) {\n this.#adapterState.flags = cachedFlags;\n this.#adapterState.emitter.emit(\n 'flagsStateChange',\n cachedFlags as TFlags\n );\n }\n }\n\n this.setConfigurationStatus(AdapterConfigurationStatus.Configured);\n\n const flags = normalizeFlags(await this.#fetchFlags(adapterArgs));\n\n this.#adapterState.flags = flags;\n\n if (adapterArgs.cacheIdentifier) {\n const cache = await getCache(\n adapterArgs.cacheIdentifier,\n adapterIdentifiers.graphql,\n { key: this.#adapterState.user?.key }\n );\n\n cache.set(flags);\n }\n\n if (adapterArgs.cacheMode !== cacheModes.lazy) {\n this.#adapterState.emitter.emit('flagsStateChange', flags);\n }\n\n this.#adapterState.emitter.emit(this.#__internalConfiguredStatusChange__);\n\n this.#subscribeToFlagsChanges(adapterArgs);\n\n return {\n initializationStatus: AdapterInitializationStatus.Succeeded,\n };\n });\n }\n\n async reconfigure(\n adapterArgs: TGraphQlAdapterArgs,\n _adapterEventHandlers: TAdapterEventHandlers\n ) {\n if (!this.getIsConfigurationStatus(AdapterConfigurationStatus.Configured)) {\n return Promise.reject(\n new Error(\n '@flopflip/graphql-adapter: please configure adapter before reconfiguring.'\n )\n );\n }\n\n this.#adapterState.flags = {};\n\n if (adapterArgs.cacheIdentifier) {\n const cache = await getCache(\n adapterArgs.cacheIdentifier,\n adapterIdentifiers.graphql,\n { key: this.#adapterState.user?.key }\n );\n\n cache.unset();\n }\n\n const nextUser = adapterArgs.user;\n\n this.#adapterState.user = nextUser;\n\n const flags = normalizeFlags(await this.#fetchFlags(adapterArgs));\n\n this.#adapterState.flags = flags;\n\n this.#adapterState.emitter.emit('flagsStateChange', flags);\n\n this.#adapterState.emitter.emit(this.#__internalConfiguredStatusChange__);\n\n this.#subscribeToFlagsChanges(adapterArgs);\n\n return Promise.resolve({\n initializationStatus: AdapterInitializationStatus.Succeeded,\n });\n }\n\n async waitUntilConfigured() {\n return new Promise<void>((resolve) => {\n if (\n this.getIsConfigurationStatus(AdapterConfigurationStatus.Configured)\n ) {\n resolve();\n } else {\n this.#adapterState.emitter.on(\n this.#__internalConfiguredStatusChange__,\n resolve\n );\n }\n });\n }\n\n getIsConfigurationStatus(configurationStatus: AdapterConfigurationStatus) {\n return this.#adapterState.configurationStatus === configurationStatus;\n }\n\n getFlag(flagName: TFlagName): TFlagVariation {\n return this.#adapterState?.flags[flagName];\n }\n\n reset = () => {\n this.#adapterState = {\n ...intialAdapterState,\n };\n };\n\n setConfigurationStatus(nextConfigurationStatus: AdapterConfigurationStatus) {\n this.#adapterState.configurationStatus = nextConfigurationStatus;\n\n this.#adapterState.emitter.emit('statusStateChange', {\n configurationStatus: this.#adapterState.configurationStatus,\n });\n }\n\n unsubscribe = () => {\n this.#adapterState.subscriptionStatus =\n AdapterSubscriptionStatus.Unsubscribed;\n };\n\n subscribe = () => {\n this.#adapterState.subscriptionStatus =\n AdapterSubscriptionStatus.Subscribed;\n };\n}\n\nconst adapter = new GraphQlAdapter();\n\nexposeGlobally(adapter);\n\nexport { adapter };\n","const version = '__@FLOPFLIP/VERSION_OF_RELEASE__';\n\nexport { adapter } from './adapter';\nexport { version };\n"]}
@@ -1,4 +1,5 @@
1
- import { AdapterConfigurationStatus, adapterIdentifiers, AdapterInitializationStatus, type TAdapterEventHandlers, type TFlagName, type TFlagsUpdateFunction, type TFlagVariation, type TGraphQlAdapterArgs, type TGraphQlAdapterInterface, type TUser } from '@flopflip/types';
1
+ import { TGraphQlAdapterInterface, adapterIdentifiers, TUser, TFlagsUpdateFunction, TGraphQlAdapterArgs, TAdapterEventHandlers, AdapterInitializationStatus, AdapterConfigurationStatus, TFlagName, TFlagVariation } from '@flopflip/types';
2
+
2
3
  declare class GraphQlAdapter implements TGraphQlAdapterInterface {
3
4
  #private;
4
5
  id: typeof adapterIdentifiers.graphql;
@@ -20,4 +21,7 @@ declare class GraphQlAdapter implements TGraphQlAdapterInterface {
20
21
  subscribe: () => void;
21
22
  }
22
23
  declare const adapter: GraphQlAdapter;
23
- export default adapter;
24
+
25
+ declare const version = "__@FLOPFLIP/VERSION_OF_RELEASE__";
26
+
27
+ export { adapter, version };
@@ -0,0 +1,27 @@
1
+ import { TGraphQlAdapterInterface, adapterIdentifiers, TUser, TFlagsUpdateFunction, TGraphQlAdapterArgs, TAdapterEventHandlers, AdapterInitializationStatus, AdapterConfigurationStatus, TFlagName, TFlagVariation } from '@flopflip/types';
2
+
3
+ declare class GraphQlAdapter implements TGraphQlAdapterInterface {
4
+ #private;
5
+ id: typeof adapterIdentifiers.graphql;
6
+ constructor();
7
+ getUser: () => TUser | undefined;
8
+ updateFlags: TFlagsUpdateFunction;
9
+ configure(adapterArgs: TGraphQlAdapterArgs, adapterEventHandlers: TAdapterEventHandlers): Promise<{
10
+ initializationStatus: AdapterInitializationStatus;
11
+ }>;
12
+ reconfigure(adapterArgs: TGraphQlAdapterArgs, _adapterEventHandlers: TAdapterEventHandlers): Promise<{
13
+ initializationStatus: AdapterInitializationStatus;
14
+ }>;
15
+ waitUntilConfigured(): Promise<void>;
16
+ getIsConfigurationStatus(configurationStatus: AdapterConfigurationStatus): boolean;
17
+ getFlag(flagName: TFlagName): TFlagVariation;
18
+ reset: () => void;
19
+ setConfigurationStatus(nextConfigurationStatus: AdapterConfigurationStatus): void;
20
+ unsubscribe: () => void;
21
+ subscribe: () => void;
22
+ }
23
+ declare const adapter: GraphQlAdapter;
24
+
25
+ declare const version = "__@FLOPFLIP/VERSION_OF_RELEASE__";
26
+
27
+ export { adapter, version };