@reflag/node-sdk 1.2.0 → 1.4.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.
@@ -0,0 +1,307 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
36
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
37
+ return new (P || (P = Promise))(function (resolve, reject) {
38
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
39
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
40
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
41
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
42
+ });
43
+ };
44
+ var __importDefault = (this && this.__importDefault) || function (mod) {
45
+ return (mod && mod.__esModule) ? mod : { "default": mod };
46
+ };
47
+ Object.defineProperty(exports, "__esModule", { value: true });
48
+ exports.isFlagsFallbackSnapshot = isFlagsFallbackSnapshot;
49
+ exports.createStaticFallbackProvider = createStaticFallbackProvider;
50
+ exports.createFileFallbackProvider = createFileFallbackProvider;
51
+ exports.createS3FallbackProvider = createS3FallbackProvider;
52
+ exports.createGCSFallbackProvider = createGCSFallbackProvider;
53
+ exports.createRedisFallbackProvider = createRedisFallbackProvider;
54
+ const fs_1 = require("fs");
55
+ const path_1 = __importDefault(require("path"));
56
+ const utils_1 = require("./utils");
57
+ function defaultSnapshotName(secretKeyHash) {
58
+ return `flags-fallback-${secretKeyHash.slice(0, 16)}.json`;
59
+ }
60
+ function snapshotFilePath(context, directory = path_1.default.join(process.cwd(), ".reflag")) {
61
+ return path_1.default.join(directory, defaultSnapshotName(context.secretKeyHash));
62
+ }
63
+ function trimTrailingCharacter(value, character) {
64
+ let endIndex = value.length;
65
+ while (endIndex > 0 && value[endIndex - 1] === character) {
66
+ endIndex -= 1;
67
+ }
68
+ return value.slice(0, endIndex);
69
+ }
70
+ function snapshotObjectKey(context, keyPrefix = "reflag/flags-fallback") {
71
+ return `${trimTrailingCharacter(keyPrefix, "/")}/${defaultSnapshotName(context.secretKeyHash)}`;
72
+ }
73
+ function snapshotRedisKey(context, keyPrefix = "reflag:flags-fallback") {
74
+ return `${trimTrailingCharacter(keyPrefix, ":")}:${context.secretKeyHash.slice(0, 16)}`;
75
+ }
76
+ function isFlagsFallbackSnapshot(value) {
77
+ return ((0, utils_1.isObject)(value) &&
78
+ value.version === 1 &&
79
+ typeof value.savedAt === "string" &&
80
+ Array.isArray(value.flags) &&
81
+ value.flags.every(isFlagApiResponse));
82
+ }
83
+ function isFlagApiResponse(value) {
84
+ return ((0, utils_1.isObject)(value) &&
85
+ typeof value.key === "string" &&
86
+ typeof value.description !== "undefined" &&
87
+ (0, utils_1.isObject)(value.targeting) &&
88
+ typeof value.targeting.version === "number" &&
89
+ Array.isArray(value.targeting.rules) &&
90
+ (value.config === undefined ||
91
+ ((0, utils_1.isObject)(value.config) &&
92
+ typeof value.config.version === "number" &&
93
+ Array.isArray(value.config.variants))));
94
+ }
95
+ function readBodyAsString(body) {
96
+ return __awaiter(this, void 0, void 0, function* () {
97
+ if (typeof body === "string")
98
+ return body;
99
+ if (body instanceof Uint8Array)
100
+ return Buffer.from(body).toString("utf-8");
101
+ if (body && typeof body === "object") {
102
+ if ("transformToString" in body &&
103
+ typeof body.transformToString === "function") {
104
+ return yield body.transformToString();
105
+ }
106
+ }
107
+ return undefined;
108
+ });
109
+ }
110
+ function parseSnapshot(raw) {
111
+ const parsed = JSON.parse(raw);
112
+ return isFlagsFallbackSnapshot(parsed) ? parsed : undefined;
113
+ }
114
+ function staticFlagApiResponse(key, isEnabled) {
115
+ return {
116
+ key,
117
+ description: null,
118
+ targeting: {
119
+ version: 1,
120
+ rules: [
121
+ {
122
+ filter: {
123
+ type: "constant",
124
+ value: isEnabled,
125
+ },
126
+ },
127
+ ],
128
+ },
129
+ };
130
+ }
131
+ function createDefaultS3Client() {
132
+ return __awaiter(this, void 0, void 0, function* () {
133
+ const { S3Client } = yield Promise.resolve().then(() => __importStar(require("@aws-sdk/client-s3")));
134
+ return new S3Client({});
135
+ });
136
+ }
137
+ function createDefaultGCSClient() {
138
+ return __awaiter(this, void 0, void 0, function* () {
139
+ const { Storage } = yield Promise.resolve().then(() => __importStar(require("@google-cloud/storage")));
140
+ return new Storage();
141
+ });
142
+ }
143
+ function createStaticFallbackProvider({ flags, }) {
144
+ return {
145
+ load() {
146
+ return __awaiter(this, void 0, void 0, function* () {
147
+ return {
148
+ version: 1,
149
+ savedAt: new Date().toISOString(),
150
+ flags: Object.entries(flags).map(([key, isEnabled]) => staticFlagApiResponse(key, isEnabled)),
151
+ };
152
+ });
153
+ },
154
+ save() {
155
+ return __awaiter(this, void 0, void 0, function* () {
156
+ // no-op
157
+ });
158
+ },
159
+ };
160
+ }
161
+ function createFileFallbackProvider({ directory, } = {}) {
162
+ return {
163
+ load(context) {
164
+ return __awaiter(this, void 0, void 0, function* () {
165
+ const resolvedPath = snapshotFilePath(context, directory);
166
+ try {
167
+ const fileContents = yield fs_1.promises.readFile(resolvedPath, "utf-8");
168
+ return parseSnapshot(fileContents);
169
+ }
170
+ catch (error) {
171
+ if ((error === null || error === void 0 ? void 0 : error.code) === "ENOENT") {
172
+ return undefined;
173
+ }
174
+ throw error;
175
+ }
176
+ });
177
+ },
178
+ save(context, snapshot) {
179
+ return __awaiter(this, void 0, void 0, function* () {
180
+ const resolvedPath = snapshotFilePath(context, directory);
181
+ yield fs_1.promises.mkdir(path_1.default.dirname(resolvedPath), { recursive: true });
182
+ const tempPath = `${resolvedPath}.tmp-${process.pid}-${Date.now()}-${Math.random().toString(36).slice(2)}`;
183
+ yield fs_1.promises.writeFile(tempPath, JSON.stringify(snapshot), "utf-8");
184
+ yield fs_1.promises.rename(tempPath, resolvedPath);
185
+ });
186
+ },
187
+ };
188
+ }
189
+ function createS3FallbackProvider({ bucket, client, keyPrefix, }) {
190
+ let defaultClient;
191
+ const getClient = () => __awaiter(this, void 0, void 0, function* () {
192
+ defaultClient !== null && defaultClient !== void 0 ? defaultClient : (defaultClient = client !== null && client !== void 0 ? client : (yield createDefaultS3Client()));
193
+ return defaultClient;
194
+ });
195
+ return {
196
+ load(context) {
197
+ return __awaiter(this, void 0, void 0, function* () {
198
+ var _a;
199
+ const s3 = yield getClient();
200
+ const { GetObjectCommand } = yield Promise.resolve().then(() => __importStar(require("@aws-sdk/client-s3")));
201
+ try {
202
+ const response = yield s3.send(new GetObjectCommand({
203
+ Bucket: bucket,
204
+ Key: snapshotObjectKey(context, keyPrefix),
205
+ }));
206
+ const body = yield readBodyAsString(response.Body);
207
+ if (!body)
208
+ return undefined;
209
+ return parseSnapshot(body);
210
+ }
211
+ catch (error) {
212
+ if ((error === null || error === void 0 ? void 0 : error.name) === "NoSuchKey" ||
213
+ ((_a = error === null || error === void 0 ? void 0 : error.$metadata) === null || _a === void 0 ? void 0 : _a.httpStatusCode) === 404) {
214
+ return undefined;
215
+ }
216
+ throw error;
217
+ }
218
+ });
219
+ },
220
+ save(context, snapshot) {
221
+ return __awaiter(this, void 0, void 0, function* () {
222
+ const s3 = yield getClient();
223
+ const { PutObjectCommand } = yield Promise.resolve().then(() => __importStar(require("@aws-sdk/client-s3")));
224
+ yield s3.send(new PutObjectCommand({
225
+ Bucket: bucket,
226
+ Key: snapshotObjectKey(context, keyPrefix),
227
+ Body: JSON.stringify(snapshot),
228
+ ContentType: "application/json",
229
+ }));
230
+ });
231
+ },
232
+ };
233
+ }
234
+ function createGCSFallbackProvider({ bucket, client, keyPrefix, }) {
235
+ let defaultClient;
236
+ const getClient = () => __awaiter(this, void 0, void 0, function* () {
237
+ defaultClient !== null && defaultClient !== void 0 ? defaultClient : (defaultClient = client !== null && client !== void 0 ? client : (yield createDefaultGCSClient()));
238
+ return defaultClient;
239
+ });
240
+ return {
241
+ load(context) {
242
+ return __awaiter(this, void 0, void 0, function* () {
243
+ const storage = yield getClient();
244
+ const file = storage
245
+ .bucket(bucket)
246
+ .file(snapshotObjectKey(context, keyPrefix));
247
+ const [exists] = yield file.exists();
248
+ if (!exists) {
249
+ return undefined;
250
+ }
251
+ const [contents] = yield file.download();
252
+ return parseSnapshot(Buffer.from(contents).toString("utf-8"));
253
+ });
254
+ },
255
+ save(context, snapshot) {
256
+ return __awaiter(this, void 0, void 0, function* () {
257
+ const storage = yield getClient();
258
+ yield storage
259
+ .bucket(bucket)
260
+ .file(snapshotObjectKey(context, keyPrefix))
261
+ .save(JSON.stringify(snapshot), {
262
+ contentType: "application/json",
263
+ });
264
+ });
265
+ },
266
+ };
267
+ }
268
+ function createRedisFallbackProvider({ client, keyPrefix, } = {}) {
269
+ let defaultClient;
270
+ let connectPromise;
271
+ const getClient = () => __awaiter(this, void 0, void 0, function* () {
272
+ if (client) {
273
+ return client;
274
+ }
275
+ if (!process.env.REDIS_URL) {
276
+ throw new Error("fallbackProviders.redis() requires REDIS_URL to be set when no client is provided");
277
+ }
278
+ if (!defaultClient) {
279
+ const { createClient } = yield Promise.resolve().then(() => __importStar(require("@redis/client")));
280
+ defaultClient = createClient({ url: process.env.REDIS_URL });
281
+ }
282
+ if (!defaultClient.isOpen) {
283
+ connectPromise !== null && connectPromise !== void 0 ? connectPromise : (connectPromise = defaultClient.connect());
284
+ yield connectPromise;
285
+ }
286
+ return defaultClient;
287
+ });
288
+ return {
289
+ load(context) {
290
+ return __awaiter(this, void 0, void 0, function* () {
291
+ const redis = yield getClient();
292
+ const raw = yield redis.get(snapshotRedisKey(context, keyPrefix));
293
+ if (!raw) {
294
+ return undefined;
295
+ }
296
+ return parseSnapshot(raw);
297
+ });
298
+ },
299
+ save(context, snapshot) {
300
+ return __awaiter(this, void 0, void 0, function* () {
301
+ const redis = yield getClient();
302
+ yield redis.set(snapshotRedisKey(context, keyPrefix), JSON.stringify(snapshot));
303
+ });
304
+ },
305
+ };
306
+ }
307
+ //# sourceMappingURL=flagsFallbackProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flagsFallbackProvider.js","sourceRoot":"","sources":["../../src/flagsFallbackProvider.ts"],"names":[],"mappings":"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"}
package/dist/src/index.js CHANGED
@@ -1,9 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.EdgeClient = exports.ReflagClient = exports.BoundReflagClient = void 0;
3
+ exports.fallbackProviders = exports.EdgeClient = exports.ReflagClient = exports.BoundReflagClient = void 0;
4
+ const flagsFallbackProvider_1 = require("./flagsFallbackProvider");
4
5
  var client_1 = require("./client");
5
6
  Object.defineProperty(exports, "BoundReflagClient", { enumerable: true, get: function () { return client_1.BoundReflagClient; } });
6
7
  Object.defineProperty(exports, "ReflagClient", { enumerable: true, get: function () { return client_1.ReflagClient; } });
7
8
  var edgeClient_1 = require("./edgeClient");
8
9
  Object.defineProperty(exports, "EdgeClient", { enumerable: true, get: function () { return edgeClient_1.EdgeClient; } });
10
+ exports.fallbackProviders = {
11
+ static: flagsFallbackProvider_1.createStaticFallbackProvider,
12
+ file: flagsFallbackProvider_1.createFileFallbackProvider,
13
+ redis: flagsFallbackProvider_1.createRedisFallbackProvider,
14
+ s3: flagsFallbackProvider_1.createS3FallbackProvider,
15
+ gcs: flagsFallbackProvider_1.createGCSFallbackProvider,
16
+ };
9
17
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,mCAA2D;AAAlD,2GAAA,iBAAiB,OAAA;AAAE,sGAAA,YAAY,OAAA;AACxC,2CAA6D;AAApD,wGAAA,UAAU,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,mEAMiC;AAEjC,mCAA2D;AAAlD,2GAAA,iBAAiB,OAAA;AAAE,sGAAA,YAAY,OAAA;AACxC,2CAA6D;AAApD,wGAAA,UAAU,OAAA;AASN,QAAA,iBAAiB,GAAG;IAC/B,MAAM,EAAE,oDAA4B;IACpC,IAAI,EAAE,kDAA0B;IAChC,KAAK,EAAE,mDAA2B;IAClC,EAAE,EAAE,gDAAwB;IAC5B,GAAG,EAAE,iDAAyB;CAC/B,CAAC"}
@@ -14,18 +14,15 @@ exports.default = periodicallyUpdatingCache;
14
14
  * Create a cached function that updates the value asynchronously.
15
15
  *
16
16
  * The value is updated every `ttl` milliseconds.
17
- * If the value is older than `staleTtl` milliseconds, a warning is logged.
18
17
  *
19
18
  * @typeParam T - The type of the value.
20
19
  * @param ttl - The time-to-live in milliseconds.
21
- * @param staleTtl - The time-to-live after which a warning is logged.
22
20
  * @param logger - The logger to use.
23
21
  * @param fn - The function to call to get the value.
24
22
  * @returns The cache object.
25
23
  **/
26
- function periodicallyUpdatingCache(ttl, staleTtl, logger, fn) {
24
+ function periodicallyUpdatingCache(ttl, logger, fn) {
27
25
  let cachedValue;
28
- let lastUpdate;
29
26
  let timeoutId;
30
27
  let refreshPromise;
31
28
  const update = () => __awaiter(this, void 0, void 0, function* () {
@@ -39,7 +36,6 @@ function periodicallyUpdatingCache(ttl, staleTtl, logger, fn) {
39
36
  }
40
37
  logger === null || logger === void 0 ? void 0 : logger.info("refreshed flag definitions");
41
38
  cachedValue = newValue;
42
- lastUpdate = Date.now();
43
39
  logger === null || logger === void 0 ? void 0 : logger.debug("updated cached value", cachedValue);
44
40
  }
45
41
  catch (e) {
@@ -51,12 +47,6 @@ function periodicallyUpdatingCache(ttl, staleTtl, logger, fn) {
51
47
  }
52
48
  });
53
49
  const get = () => {
54
- if (lastUpdate !== undefined) {
55
- const age = Date.now() - lastUpdate;
56
- if (age > staleTtl) {
57
- logger === null || logger === void 0 ? void 0 : logger.warn("cached value is stale", { age, cachedValue });
58
- }
59
- }
60
50
  return cachedValue;
61
51
  };
62
52
  const refresh = () => __awaiter(this, void 0, void 0, function* () {
@@ -1 +1 @@
1
- {"version":3,"file":"periodicallyUpdatingCache.js","sourceRoot":"","sources":["../../src/periodicallyUpdatingCache.ts"],"names":[],"mappings":";;;;;;;;;;;AAeA,4CAyEC;AAtFD;;;;;;;;;;;;IAYI;AACJ,SAAwB,yBAAyB,CAC/C,GAAW,EACX,QAAgB,EAChB,MAA0B,EAC1B,EAAgC;IAEhC,IAAI,WAA0B,CAAC;IAC/B,IAAI,UAA8B,CAAC;IACnC,IAAI,SAAqC,CAAC;IAC1C,IAAI,cAAyC,CAAC;IAE9C,MAAM,MAAM,GAAG,GAAS,EAAE;QACxB,IAAI,SAAS,EAAE,CAAC;YACd,YAAY,CAAC,SAAS,CAAC,CAAC;QAC1B,CAAC;QAED,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,EAAE,EAAE,CAAC;YAC5B,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,OAAO;YACT,CAAC;YACD,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,CAAC,4BAA4B,CAAC,CAAC;YAE3C,WAAW,GAAG,QAAQ,CAAC;YAEvB,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAExB,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,CAAC,sBAAsB,EAAE,WAAW,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,CAAC,+BAA+B,EAAE,CAAC,CAAC,CAAC;QACpD,CAAC;gBAAS,CAAC;YACT,cAAc,GAAG,SAAS,CAAC;YAC3B,SAAS,GAAG,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;QAC9C,CAAC;IACH,CAAC,CAAA,CAAC;IAEF,MAAM,GAAG,GAAG,GAAG,EAAE;QACf,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,UAAW,CAAC;YACrC,IAAI,GAAG,GAAG,QAAQ,EAAE,CAAC;gBACnB,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,CAAC,uBAAuB,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,GAAS,EAAE;QACzB,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,cAAc,GAAG,MAAM,EAAE,CAAC;QAC5B,CAAC;QACD,MAAM,cAAc,CAAC;QACrB,OAAO,GAAG,EAAE,CAAC;IACf,CAAC,CAAA,CAAC;IAEF,MAAM,WAAW,GAAG,GAAS,EAAE;QAC7B,QAAQ;IACV,CAAC,CAAA,CAAC;IAEF,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,IAAI,SAAS,EAAE,CAAC;YACd,YAAY,CAAC,SAAS,CAAC,CAAC;YACxB,SAAS,GAAG,SAAS,CAAC;QACxB,CAAC;QACD,cAAc,GAAG,SAAS,CAAC;IAC7B,CAAC,CAAC;IAEF,OAAO;QACL,GAAG;QACH,OAAO;QACP,WAAW;QACX,OAAO;KACR,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"periodicallyUpdatingCache.js","sourceRoot":"","sources":["../../src/periodicallyUpdatingCache.ts"],"names":[],"mappings":";;;;;;;;;;;AAaA,4CA8DC;AAzED;;;;;;;;;;IAUI;AACJ,SAAwB,yBAAyB,CAC/C,GAAW,EACX,MAA0B,EAC1B,EAAgC;IAEhC,IAAI,WAA0B,CAAC;IAC/B,IAAI,SAAqC,CAAC;IAC1C,IAAI,cAAyC,CAAC;IAE9C,MAAM,MAAM,GAAG,GAAS,EAAE;QACxB,IAAI,SAAS,EAAE,CAAC;YACd,YAAY,CAAC,SAAS,CAAC,CAAC;QAC1B,CAAC;QAED,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,EAAE,EAAE,CAAC;YAC5B,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,OAAO;YACT,CAAC;YACD,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,IAAI,CAAC,4BAA4B,CAAC,CAAC;YAE3C,WAAW,GAAG,QAAQ,CAAC;YAEvB,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,CAAC,sBAAsB,EAAE,WAAW,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,CAAC,+BAA+B,EAAE,CAAC,CAAC,CAAC;QACpD,CAAC;gBAAS,CAAC;YACT,cAAc,GAAG,SAAS,CAAC;YAC3B,SAAS,GAAG,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;QAC9C,CAAC;IACH,CAAC,CAAA,CAAC;IAEF,MAAM,GAAG,GAAG,GAAG,EAAE;QACf,OAAO,WAAW,CAAC;IACrB,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,GAAS,EAAE;QACzB,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,cAAc,GAAG,MAAM,EAAE,CAAC;QAC5B,CAAC;QACD,MAAM,cAAc,CAAC;QACrB,OAAO,GAAG,EAAE,CAAC;IACf,CAAC,CAAA,CAAC;IAEF,MAAM,WAAW,GAAG,GAAS,EAAE;QAC7B,QAAQ;IACV,CAAC,CAAA,CAAC;IAEF,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,IAAI,SAAS,EAAE,CAAC;YACd,YAAY,CAAC,SAAS,CAAC,CAAC;YACxB,SAAS,GAAG,SAAS,CAAC;QACxB,CAAC;QACD,cAAc,GAAG,SAAS,CAAC;IAC7B,CAAC,CAAC;IAEF,OAAO;QACL,GAAG;QACH,OAAO;QACP,WAAW;QACX,OAAO;KACR,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";AAAA,4DAA4D;;;AA4wB/C,QAAA,UAAU,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAU,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";AAAA,4DAA4D;;;AAo0B/C,QAAA,UAAU,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAU,CAAC"}
package/dist/src/utils.js CHANGED
@@ -9,6 +9,7 @@ exports.applyLogLevel = applyLogLevel;
9
9
  exports.decorateLogger = decorateLogger;
10
10
  exports.mergeSkipUndefined = mergeSkipUndefined;
11
11
  exports.hashObject = hashObject;
12
+ exports.hashString = hashString;
12
13
  exports.once = once;
13
14
  exports.withTimeout = withTimeout;
14
15
  const crypto_1 = require("crypto");
@@ -157,6 +158,16 @@ function hashObject(obj) {
157
158
  updateSha1Hash(hash, obj);
158
159
  return hash.digest("base64");
159
160
  }
161
+ /**
162
+ * Hash a string using SHA256 and return a hex digest.
163
+ *
164
+ * @param value - The string to hash.
165
+ * @returns The SHA256 hash.
166
+ */
167
+ function hashString(value) {
168
+ ok(typeof value === "string", "value must be a string");
169
+ return (0, crypto_1.createHash)("sha256").update(value).digest("hex");
170
+ }
160
171
  function once(fn) {
161
172
  let called = false;
162
173
  let returned;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
@@ -25,11 +25,15 @@ export declare class ReflagClient {
25
25
  private flagsCache;
26
26
  private batchBuffer;
27
27
  private rateLimiter;
28
+ private baseFlagOverrides;
29
+ private flagOverrideLayers;
30
+ private nextFlagOverrideLayerId;
28
31
  /**
29
32
  * Gets the logger associated with the client.
30
33
  */
31
34
  readonly logger: Logger;
32
35
  private initializationFinished;
36
+ private canLoadFlagsFallbackProvider;
33
37
  private _initialize;
34
38
  /**
35
39
  * Creates a new SDK client.
@@ -53,38 +57,70 @@ export declare class ReflagClient {
53
57
  * @throws An error if the options are invalid.
54
58
  **/
55
59
  constructor(options?: ClientOptions);
60
+ private loadFlagsFallbackDefinitions;
61
+ private saveFlagsFallbackDefinitions;
56
62
  /**
57
- * Sets the flag overrides.
63
+ * Replaces the base flag overrides used by the client.
58
64
  *
59
65
  * @param overrides - The flag overrides.
60
66
  *
61
67
  * @remarks
62
- * The flag overrides are used to override the flag definitions.
63
- * This is useful for testing or development.
68
+ * Base overrides are always applied before any temporary layers added through
69
+ * `pushFlagOverrides()`.
64
70
  *
65
71
  * @example
66
72
  * ```ts
67
- * client.flagOverrides = {
73
+ * client.setFlagOverrides({
68
74
  * "flag-1": true,
69
75
  * "flag-2": false,
70
- * };
76
+ * });
71
77
  * ```
72
78
  **/
79
+ setFlagOverrides(overrides: FlagOverridesFn | FlagOverrides): void;
80
+ /**
81
+ * @deprecated
82
+ * Use `setFlagOverrides()` for replacing the base override set.
83
+ **/
73
84
  set flagOverrides(overrides: FlagOverridesFn | FlagOverrides);
74
85
  /**
75
- * Clears the flag overrides.
86
+ * Temporarily layers flag overrides on top of the current overrides.
87
+ *
88
+ * @param overrides - The flag overrides to apply for the scoped period.
89
+ *
90
+ * @returns A remove function that removes only this override layer.
76
91
  *
77
92
  * @remarks
78
- * This is useful for testing or development.
93
+ * This is intended for tests or other short-lived local overrides. The remove
94
+ * function is idempotent and can safely be called multiple times.
79
95
  *
80
96
  * @example
81
97
  * ```ts
82
- * afterAll(() => {
83
- * client.clearFlagOverrides();
98
+ * let remove: (() => void) | undefined;
99
+ *
100
+ * beforeEach(() => {
101
+ * remove = client.pushFlagOverrides({ "flag-1": true });
102
+ * });
103
+ *
104
+ * afterEach(() => {
105
+ * remove?.();
106
+ * remove = undefined;
84
107
  * });
85
108
  * ```
86
109
  **/
110
+ pushFlagOverrides(overrides: FlagOverridesFn | FlagOverrides): () => void;
111
+ /**
112
+ * Clears the base flag overrides.
113
+ *
114
+ * @remarks
115
+ * This does not affect temporary layers added with `pushFlagOverrides()`.
116
+ *
117
+ * @example
118
+ * ```ts
119
+ * client.clearFlagOverrides();
120
+ * ```
121
+ **/
87
122
  clearFlagOverrides(): void;
123
+ private syncFlagOverrides;
88
124
  /**
89
125
  * Returns a new BoundReflagClient with the user/company/otherContext
90
126
  * set to be used in subsequent calls.
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/client.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EACV,iBAAiB,EAKjB,cAAc,EACd,aAAa,EACb,eAAe,EAIf,MAAM,EAGN,YAAY,EACb,MAAM,SAAS,CAAC;AACjB,OAAO,EAGL,aAAa,EACb,OAAO,EACP,mBAAmB,EAGnB,UAAU,EACV,MAAM,EAEN,YAAY,EACZ,UAAU,EACX,MAAM,SAAS,CAAC;AA0HjB;;;;;;;;;;;;;;;;;;IAkBI;AACJ,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAab;IACF,UAAU,EAAE,UAAU,CAAC;IAEvB,OAAO,CAAC,UAAU,CAAgC;IAClD,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,WAAW,CAAoC;IACvD,OAAO,CAAC,iBAAiB,CAA+B;IACxD,OAAO,CAAC,kBAAkB,CAA2B;IACrD,OAAO,CAAC,uBAAuB,CAAK;IAEpC;;OAEG;IACH,SAAgB,MAAM,EAAE,MAAM,CAAC;IAE/B,OAAO,CAAC,sBAAsB,CAAS;IACvC,OAAO,CAAC,4BAA4B,CAAQ;IAC5C,OAAO,CAAC,WAAW,CAYhB;IAEH;;;;;;;;;;;;;;;;;;;;QAoBI;gBACQ,OAAO,GAAE,aAAkB;YA+LzB,4BAA4B;YAuC5B,4BAA4B;IAmB1C;;;;;;;;;;;;;;;;QAgBI;IACJ,gBAAgB,CAAC,SAAS,EAAE,eAAe,GAAG,aAAa;IAK3D;;;QAGI;IACJ,IAAI,aAAa,CAAC,SAAS,EAAE,eAAe,GAAG,aAAa,EAE3D;IAED;;;;;;;;;;;;;;;;;;;;;;;;QAwBI;IACJ,iBAAiB,CAAC,SAAS,EAAE,eAAe,GAAG,aAAa,GAAG,MAAM,IAAI;IA6BzE;;;;;;;;;;QAUI;IACJ,kBAAkB;IAKlB,OAAO,CAAC,iBAAiB;IAOzB;;;;;;;;;;;;;;;;;;QAkBI;IACG,UAAU,CAAC,EAChB,cAAqB,EACrB,GAAG,OAAO,EACX,EAAE,mBAAmB;IAItB;;;;;;;;;;;;QAYI;IACS,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;IAuB9D;;;;;;;;;;;;;QAaI;IACS,aAAa,CACxB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,YAAY,GAAG;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;IA6B9C;;;;;;;;QAQI;IACS,KAAK,CAChB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,YAAY,GAAG;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE;IA+BjD;;;;;;QAMI;IACS,UAAU;IAKvB;;;;;;;;OAQG;IACU,KAAK;IASlB;;;;;;;;;;OAUG;IACU,YAAY;IAIzB;;;;;;;OAOG;IACI,OAAO;IAKd;;;;;OAKG;IACI,kBAAkB,IAAI,cAAc,EAAE;IAU7C;;;;;;;;;;;;;;QAcI;IACG,QAAQ,CAAC,EACd,cAAqB,EACrB,GAAG,OAAO,EACX,EAAE,mBAAmB,GAAG,UAAU;IAWnC;;;;;;;;;QASI;IACG,OAAO,CAAC,IAAI,SAAS,YAAY,EACtC,EAAE,cAAqB,EAAE,GAAG,OAAO,EAAE,EAAE,mBAAmB,EAC1D,GAAG,EAAE,IAAI,GACR,UAAU,CAAC,IAAI,CAAC;IASnB;;;;;;;;;;;;;;;;QAgBI;IACG,oBAAoB,CAAC,EAC1B,cAAqB,EACrB,GAAG,OAAO,EACX,EAAE,mBAAmB,GAAG,iBAAiB;IAQ1C;;;;;;;;;OASG;IACU,cAAc,CACzB,MAAM,CAAC,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,MAAM,EAClB,iBAAiB,CAAC,EAAE,OAAO,GAC1B,OAAO,CAAC,UAAU,CAAC;IAStB;;;;;;;;;;OAUG;IACU,aAAa,CAAC,IAAI,SAAS,YAAY,EAClD,GAAG,EAAE,IAAI,EACT,MAAM,CAAC,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,MAAM,EAClB,iBAAiB,CAAC,EAAE,OAAO,GAC1B,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAI5B,OAAO,CAAC,QAAQ;IAShB;;;;;;;;;QASI;YACU,IAAI;IA4BlB;;;;;;;;QAQI;YACU,GAAG;IAyCjB;;;;;;QAMI;YACU,cAAc;IAY5B;;;;;;;;;;;;;;;;;;;;;QAqBI;YACU,aAAa;IAqE3B;;;;;;;;;;OAUG;YACW,WAAW;IAiCzB;;;;;OAKG;IACH,OAAO,CAAC,6BAA6B;IAiDrC,OAAO,CAAC,SAAS;IAuGjB,OAAO,CAAC,YAAY;YAgFN,eAAe;CA8D9B;AAED;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsB;IAE/C;;;;;;;;OAQG;gBAED,MAAM,EAAE,YAAY,EACpB,EAAE,cAAqB,EAAE,GAAG,OAAO,EAAE,EAAE,mBAAmB;IAU5D;;;;QAII;IACJ,IAAW,YAAY,oCAEtB;IAED;;;;QAII;IACJ,IAAW,IAAI;;;;;;kBAEd;IAED;;;;QAII;IACJ,IAAW,OAAO;;;;;kBAEjB;IAED;;;;;OAKG;IACI,QAAQ,IAAI,UAAU;IAI7B;;;;;OAKG;IACI,oBAAoB,IAAI,iBAAiB;IAIhD;;;;;;;OAOG;IACI,OAAO,CAAC,IAAI,SAAS,YAAY,EAAE,GAAG,EAAE,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;IAItE;;;;OAIG;IACU,cAAc;IAK3B;;;;;;OAMG;IACU,aAAa,CAAC,GAAG,EAAE,MAAM;IAKtC;;;;;;;;;;OAUG;IACU,KAAK,CAChB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,YAAY,GAAG;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE;IA4BjD;;;;;;;;;;;;OAYG;IACI,UAAU,CAAC,EAChB,IAAI,EACJ,OAAO,EACP,KAAK,EACL,cAAc,EACd,IAAI,GACL,EAAE,mBAAmB;IActB;;OAEG;IACU,KAAK;IAIlB;;OAEG;IACU,YAAY;CAG1B"}
@@ -0,0 +1,81 @@
1
+ import type { FlagsFallbackProvider, FlagsFallbackSnapshot } from "./types";
2
+ export type FileFallbackProviderOptions = {
3
+ /**
4
+ * Directory where per-environment snapshots are stored.
5
+ *
6
+ * @defaultValue `path.join(process.cwd(), ".reflag")`
7
+ */
8
+ directory?: string;
9
+ };
10
+ export type S3FallbackProviderOptions = {
11
+ /**
12
+ * Bucket where snapshots are stored.
13
+ */
14
+ bucket: string;
15
+ /**
16
+ * Optional S3 client. A default client is created when omitted.
17
+ */
18
+ client?: {
19
+ send(command: unknown): Promise<any>;
20
+ };
21
+ /**
22
+ * Prefix for generated per-environment keys.
23
+ *
24
+ * @defaultValue `reflag/flags-fallback`
25
+ */
26
+ keyPrefix?: string;
27
+ };
28
+ export type GCSFallbackProviderOptions = {
29
+ /**
30
+ * Bucket where snapshots are stored.
31
+ */
32
+ bucket: string;
33
+ /**
34
+ * Optional GCS client. A default client is created when omitted.
35
+ */
36
+ client?: {
37
+ bucket(name: string): {
38
+ file(path: string): {
39
+ exists(): Promise<[boolean]>;
40
+ download(): Promise<[Uint8Array]>;
41
+ save(body: string, options: {
42
+ contentType: string;
43
+ }): Promise<unknown>;
44
+ };
45
+ };
46
+ };
47
+ /**
48
+ * Prefix for generated per-environment keys.
49
+ *
50
+ * @defaultValue `reflag/flags-fallback`
51
+ */
52
+ keyPrefix?: string;
53
+ };
54
+ export type RedisFallbackProviderOptions = {
55
+ /**
56
+ * Optional Redis client. When omitted, a client is created using `REDIS_URL`.
57
+ */
58
+ client?: {
59
+ get(key: string): Promise<string | null | undefined>;
60
+ set(key: string, value: string): Promise<unknown>;
61
+ };
62
+ /**
63
+ * Prefix for generated per-environment keys.
64
+ *
65
+ * @defaultValue `reflag:flags-fallback`
66
+ */
67
+ keyPrefix?: string;
68
+ };
69
+ export type StaticFallbackProviderOptions = {
70
+ /**
71
+ * Static fallback flags keyed by flag key.
72
+ */
73
+ flags: Record<string, boolean>;
74
+ };
75
+ export declare function isFlagsFallbackSnapshot(value: unknown): value is FlagsFallbackSnapshot;
76
+ export declare function createStaticFallbackProvider({ flags, }: StaticFallbackProviderOptions): FlagsFallbackProvider;
77
+ export declare function createFileFallbackProvider({ directory, }?: FileFallbackProviderOptions): FlagsFallbackProvider;
78
+ export declare function createS3FallbackProvider({ bucket, client, keyPrefix, }: S3FallbackProviderOptions): FlagsFallbackProvider;
79
+ export declare function createGCSFallbackProvider({ bucket, client, keyPrefix, }: GCSFallbackProviderOptions): FlagsFallbackProvider;
80
+ export declare function createRedisFallbackProvider({ client, keyPrefix, }?: RedisFallbackProviderOptions): FlagsFallbackProvider;
81
+ //# sourceMappingURL=flagsFallbackProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flagsFallbackProvider.d.ts","sourceRoot":"","sources":["../../../src/flagsFallbackProvider.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,qBAAqB,EAErB,qBAAqB,EACtB,MAAM,SAAS,CAAC;AAGjB,MAAM,MAAM,2BAA2B,GAAG;IACxC;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,MAAM,CAAC,EAAE;QACP,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;KACtC,CAAC;IAEF;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACvC;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,MAAM,CAAC,EAAE;QACP,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG;YACpB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG;gBAClB,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;gBAC7B,QAAQ,IAAI,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;gBAClC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;oBAAE,WAAW,EAAE,MAAM,CAAA;iBAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;aACxE,CAAC;SACH,CAAC;KACH,CAAC;IAEF;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC;;OAEG;IACH,MAAM,CAAC,EAAE;QACP,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;QACrD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;KACnD,CAAC;IAEF;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,CAAC;AAmCF,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,qBAAqB,CAQhC;AAmED,wBAAgB,4BAA4B,CAAC,EAC3C,KAAK,GACN,EAAE,6BAA6B,GAAG,qBAAqB,CAgBvD;AAED,wBAAgB,0BAA0B,CAAC,EACzC,SAAS,GACV,GAAE,2BAAgC,GAAG,qBAAqB,CAuB1D;AAED,wBAAgB,wBAAwB,CAAC,EACvC,MAAM,EACN,MAAM,EACN,SAAS,GACV,EAAE,yBAAyB,GAAG,qBAAqB,CAsDnD;AAED,wBAAgB,yBAAyB,CAAC,EACxC,MAAM,EACN,MAAM,EACN,SAAS,GACV,EAAE,0BAA0B,GAAG,qBAAqB,CAiCpD;AAED,wBAAgB,2BAA2B,CAAC,EAC1C,MAAM,EACN,SAAS,GACV,GAAE,4BAAiC,GAAG,qBAAqB,CAsD3D"}