@reflag/node-sdk 1.0.0-alpha.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.
Files changed (56) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +835 -0
  3. package/dist/package.json +49 -0
  4. package/dist/src/batch-buffer.js +85 -0
  5. package/dist/src/batch-buffer.js.map +1 -0
  6. package/dist/src/cache.js +71 -0
  7. package/dist/src/cache.js.map +1 -0
  8. package/dist/src/client.js +1141 -0
  9. package/dist/src/client.js.map +1 -0
  10. package/dist/src/config.js +98 -0
  11. package/dist/src/config.js.map +1 -0
  12. package/dist/src/edgeClient.js +32 -0
  13. package/dist/src/edgeClient.js.map +1 -0
  14. package/dist/src/fetch-http-client.js +85 -0
  15. package/dist/src/fetch-http-client.js.map +1 -0
  16. package/dist/src/flusher.js +56 -0
  17. package/dist/src/flusher.js.map +1 -0
  18. package/dist/src/inRequestCache.js +72 -0
  19. package/dist/src/inRequestCache.js.map +1 -0
  20. package/dist/src/index.js +9 -0
  21. package/dist/src/index.js.map +1 -0
  22. package/dist/src/periodicallyUpdatingCache.js +78 -0
  23. package/dist/src/periodicallyUpdatingCache.js.map +1 -0
  24. package/dist/src/rate-limiter.js +52 -0
  25. package/dist/src/rate-limiter.js.map +1 -0
  26. package/dist/src/types.js +6 -0
  27. package/dist/src/types.js.map +1 -0
  28. package/dist/src/utils.js +207 -0
  29. package/dist/src/utils.js.map +1 -0
  30. package/dist/types/src/batch-buffer.d.ts +27 -0
  31. package/dist/types/src/batch-buffer.d.ts.map +1 -0
  32. package/dist/types/src/cache.d.ts +16 -0
  33. package/dist/types/src/cache.d.ts.map +1 -0
  34. package/dist/types/src/client.d.ts +410 -0
  35. package/dist/types/src/client.d.ts.map +1 -0
  36. package/dist/types/src/config.d.ts +20 -0
  37. package/dist/types/src/config.d.ts.map +1 -0
  38. package/dist/types/src/edgeClient.d.ts +25 -0
  39. package/dist/types/src/edgeClient.d.ts.map +1 -0
  40. package/dist/types/src/fetch-http-client.d.ts +20 -0
  41. package/dist/types/src/fetch-http-client.d.ts.map +1 -0
  42. package/dist/types/src/flusher.d.ts +4 -0
  43. package/dist/types/src/flusher.d.ts.map +1 -0
  44. package/dist/types/src/inRequestCache.d.ts +7 -0
  45. package/dist/types/src/inRequestCache.d.ts.map +1 -0
  46. package/dist/types/src/index.d.ts +4 -0
  47. package/dist/types/src/index.d.ts.map +1 -0
  48. package/dist/types/src/periodicallyUpdatingCache.d.ts +16 -0
  49. package/dist/types/src/periodicallyUpdatingCache.d.ts.map +1 -0
  50. package/dist/types/src/rate-limiter.d.ts +14 -0
  51. package/dist/types/src/rate-limiter.d.ts.map +1 -0
  52. package/dist/types/src/types.d.ts +639 -0
  53. package/dist/types/src/types.d.ts.map +1 -0
  54. package/dist/types/src/utils.d.ts +65 -0
  55. package/dist/types/src/utils.d.ts.map +1 -0
  56. package/package.json +50 -0
@@ -0,0 +1,20 @@
1
+ export declare const API_BASE_URL = "https://front.reflag.com";
2
+ export declare const SDK_VERSION_HEADER_NAME = "reflag-sdk-version";
3
+ export declare const SDK_VERSION: string;
4
+ export declare const API_TIMEOUT_MS = 10000;
5
+ export declare const END_FLUSH_TIMEOUT_MS = 5000;
6
+ export declare const REFLAG_LOG_PREFIX = "[Reflag]";
7
+ export declare const FLAG_EVENT_RATE_LIMITER_WINDOW_SIZE_MS: number;
8
+ export declare const FLAGS_REFETCH_MS: number;
9
+ export declare const BATCH_MAX_SIZE = 100;
10
+ export declare const BATCH_INTERVAL_MS: number;
11
+ export declare function loadConfig(file?: string): {
12
+ secretKey: string | undefined;
13
+ logLevel: string | undefined;
14
+ offline: boolean | undefined;
15
+ apiBaseUrl: any;
16
+ flagOverrides: {
17
+ [x: string]: any;
18
+ };
19
+ };
20
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/config.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,YAAY,6BAA6B,CAAC;AACvD,eAAO,MAAM,uBAAuB,uBAAuB,CAAC;AAC5D,eAAO,MAAM,WAAW,QAAwB,CAAC;AACjD,eAAO,MAAM,cAAc,QAAQ,CAAC;AACpC,eAAO,MAAM,oBAAoB,OAAO,CAAC;AAEzC,eAAO,MAAM,iBAAiB,aAAa,CAAC;AAE5C,eAAO,MAAM,sCAAsC,QAAY,CAAC;AAEhE,eAAO,MAAM,gBAAgB,QAAY,CAAC;AAE1C,eAAO,MAAM,cAAc,MAAM,CAAC;AAClC,eAAO,MAAM,iBAAiB,QAAY,CAAC;AA4G3C,wBAAgB,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM;;;;;;;;EAkBvC"}
@@ -0,0 +1,25 @@
1
+ import { ReflagClient } from "./client";
2
+ import { ClientOptions } from "./types";
3
+ export type EdgeClientOptions = Omit<ClientOptions, "cacheStrategy" | "flushIntervalMs" | "batchOptions">;
4
+ /**
5
+ * The EdgeClient is ReflagClient pre-configured to be used in edge runtimes, like
6
+ * Cloudflare Workers.
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * // set the REFLAG_SECRET_KEY environment variable or pass the secret key in the constructor
11
+ * const client = new EdgeClient();
12
+ *
13
+ * // evaluate a flag
14
+ * const context = {
15
+ * user: { id: "user-id" },
16
+ * company: { id: "company-id" },
17
+ * }
18
+ * const { isEnabled } = client.getFlag(context, "flag-key");
19
+ *
20
+ * ```
21
+ */
22
+ export declare class EdgeClient extends ReflagClient {
23
+ constructor(options?: EdgeClientOptions);
24
+ }
25
+ //# sourceMappingURL=edgeClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edgeClient.d.ts","sourceRoot":"","sources":["../../../src/edgeClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAClC,aAAa,EACb,eAAe,GAAG,iBAAiB,GAAG,cAAc,CACrD,CAAC;AAEF;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,UAAW,SAAQ,YAAY;gBAC9B,OAAO,GAAE,iBAAsB;CAU5C"}
@@ -0,0 +1,20 @@
1
+ import { HttpClient } from "./types";
2
+ /**
3
+ * The default HTTP client implementation.
4
+ *
5
+ * @remarks
6
+ * This implementation uses the `fetch` API to send HTTP requests.
7
+ **/
8
+ declare const fetchClient: HttpClient;
9
+ /**
10
+ * Implements exponential backoff retry logic for async functions.
11
+ *
12
+ * @param fn - The async function to retry.
13
+ * @param maxRetries - Maximum number of retry attempts.
14
+ * @param baseDelay - Base delay in milliseconds before retrying.
15
+ * @param maxDelay - Maximum delay in milliseconds.
16
+ * @returns The result of the function call or throws an error if all retries fail.
17
+ */
18
+ export declare function withRetry<T>(fn: () => Promise<T>, onFailedTry: () => void, maxRetries: number, baseDelay: number, maxDelay: number): Promise<T>;
19
+ export default fetchClient;
20
+ //# sourceMappingURL=fetch-http-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch-http-client.d.ts","sourceRoot":"","sources":["../../../src/fetch-http-client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGrC;;;;;IAKI;AACJ,QAAA,MAAM,WAAW,EAAE,UA8ClB,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAsB,SAAS,CAAC,CAAC,EAC/B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,WAAW,EAAE,MAAM,IAAI,EACvB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,CAAC,CAAC,CA0BZ;AAED,eAAe,WAAW,CAAC"}
@@ -0,0 +1,4 @@
1
+ type Callback = () => Promise<void>;
2
+ export declare function subscribe(callback: Callback, timeout?: number): void;
3
+ export {};
4
+ //# sourceMappingURL=flusher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flusher.d.ts","sourceRoot":"","sources":["../../../src/flusher.ts"],"names":[],"mappings":"AAKA,KAAK,QAAQ,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;AAIpC,wBAAgB,SAAS,CACvB,QAAQ,EAAE,QAAQ,EAClB,OAAO,GAAE,MAA6B,QAkDvC"}
@@ -0,0 +1,7 @@
1
+ import { Logger } from "./types";
2
+ export default function inRequestCache<T>(ttl: number, logger: Logger | undefined, fn: () => Promise<T | undefined>): {
3
+ get(): T | undefined;
4
+ refresh(): Promise<T | undefined>;
5
+ waitRefresh: () => Promise<void>;
6
+ };
7
+ //# sourceMappingURL=inRequestCache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inRequestCache.d.ts","sourceRoot":"","sources":["../../../src/inRequestCache.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,CAAC,EACtC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;WAkCvB,CAAC,GAAG,SAAS;eAgBH,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;;EAK1C"}
@@ -0,0 +1,4 @@
1
+ export { BoundReflagClient, ReflagClient } from "./client";
2
+ export { EdgeClient, EdgeClientOptions } from "./edgeClient";
3
+ export type { Attributes, BatchBufferOptions, CacheStrategy, ClientOptions, Context, ContextWithTracking, EmptyFlagRemoteConfig, Flag, FlagConfigVariant, FlagDefinition, FlagOverride, FlagOverrides, FlagOverridesFn, FlagRemoteConfig, Flags, FlagType, HttpClient, HttpClientResponse, IdType, LOG_LEVELS, Logger, LogLevel, RawFlag, RawFlagRemoteConfig, TrackingMeta, TrackOptions, TypedFlagKey, TypedFlags, } from "./types";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC7D,YAAY,EACV,UAAU,EACV,kBAAkB,EAClB,aAAa,EACb,aAAa,EACb,OAAO,EACP,mBAAmB,EACnB,qBAAqB,EACrB,IAAI,EACJ,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,KAAK,EACL,QAAQ,EACR,UAAU,EACV,kBAAkB,EAClB,MAAM,EACN,UAAU,EACV,MAAM,EACN,QAAQ,EACR,OAAO,EACP,mBAAmB,EACnB,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,UAAU,GACX,MAAM,SAAS,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { Cache, Logger } from "./types";
2
+ /**
3
+ * Create a cached function that updates the value asynchronously.
4
+ *
5
+ * The value is updated every `ttl` milliseconds.
6
+ * If the value is older than `staleTtl` milliseconds, a warning is logged.
7
+ *
8
+ * @typeParam T - The type of the value.
9
+ * @param ttl - The time-to-live in milliseconds.
10
+ * @param staleTtl - The time-to-live after which a warning is logged.
11
+ * @param logger - The logger to use.
12
+ * @param fn - The function to call to get the value.
13
+ * @returns The cache object.
14
+ **/
15
+ export default function periodicallyUpdatingCache<T>(ttl: number, staleTtl: number, logger: Logger | undefined, fn: () => Promise<T | undefined>): Cache<T>;
16
+ //# sourceMappingURL=periodicallyUpdatingCache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"periodicallyUpdatingCache.d.ts","sourceRoot":"","sources":["../../../src/periodicallyUpdatingCache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAExC;;;;;;;;;;;;IAYI;AACJ,MAAM,CAAC,OAAO,UAAU,yBAAyB,CAAC,CAAC,EACjD,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,GAC/B,KAAK,CAAC,CAAC,CAAC,CA2DV"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Creates a new rate limiter.
3
+ *
4
+ * @typeparam TKey - The type of the key.
5
+ * @param windowSizeMs - The length of the time window in milliseconds.
6
+ *
7
+ * @returns The rate limiter.
8
+ **/
9
+ export declare function newRateLimiter(windowSizeMs: number): {
10
+ clearStale: (all?: boolean) => void;
11
+ isAllowed: (key: string) => boolean;
12
+ cacheSize: () => number;
13
+ };
14
+ //# sourceMappingURL=rate-limiter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limiter.d.ts","sourceRoot":"","sources":["../../../src/rate-limiter.ts"],"names":[],"mappings":"AAEA;;;;;;;IAOI;AACJ,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM;uBAQxB,OAAO,KAAW,IAAI;qBAoBvB,MAAM,KAAG,OAAO;;EAyBzC"}