@nebulr-group/bridge-auth-core 0.1.2 → 0.4.0-beta.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 (132) hide show
  1. package/dist/billing/bridge-subscription.d.ts +71 -0
  2. package/dist/billing/bridge-subscription.d.ts.map +1 -0
  3. package/dist/billing/bridge-subscription.js +209 -0
  4. package/dist/billing/bridge-subscription.js.map +1 -0
  5. package/dist/billing/entitlements-store.d.ts +61 -0
  6. package/dist/billing/entitlements-store.d.ts.map +1 -0
  7. package/dist/billing/entitlements-store.js +127 -0
  8. package/dist/billing/entitlements-store.js.map +1 -0
  9. package/dist/billing/fetch-billing-state.d.ts +9 -0
  10. package/dist/billing/fetch-billing-state.d.ts.map +1 -0
  11. package/dist/billing/fetch-billing-state.js +22 -0
  12. package/dist/billing/fetch-billing-state.js.map +1 -0
  13. package/dist/billing/lock-signal.d.ts +6 -0
  14. package/dist/billing/lock-signal.d.ts.map +1 -0
  15. package/dist/billing/lock-signal.js +8 -0
  16. package/dist/billing/lock-signal.js.map +1 -0
  17. package/dist/billing/quota-store.d.ts +86 -0
  18. package/dist/billing/quota-store.d.ts.map +1 -0
  19. package/dist/billing/quota-store.js +180 -0
  20. package/dist/billing/quota-store.js.map +1 -0
  21. package/dist/billing/types.d.ts +64 -0
  22. package/dist/billing/types.d.ts.map +1 -0
  23. package/dist/billing/types.js +49 -0
  24. package/dist/billing/types.js.map +1 -0
  25. package/dist/billing/use-bridge.d.ts +131 -0
  26. package/dist/billing/use-bridge.d.ts.map +1 -0
  27. package/dist/billing/use-bridge.js +181 -0
  28. package/dist/billing/use-bridge.js.map +1 -0
  29. package/dist/bridge-auth.d.ts +39 -1
  30. package/dist/bridge-auth.d.ts.map +1 -1
  31. package/dist/bridge-auth.js +89 -6
  32. package/dist/bridge-auth.js.map +1 -1
  33. package/dist/direct-auth.d.ts +1 -0
  34. package/dist/direct-auth.d.ts.map +1 -1
  35. package/dist/direct-auth.js +7 -0
  36. package/dist/direct-auth.js.map +1 -1
  37. package/dist/errors.d.ts +11 -0
  38. package/dist/errors.d.ts.map +1 -1
  39. package/dist/errors.js +14 -0
  40. package/dist/errors.js.map +1 -1
  41. package/dist/flags/attribute-providers.d.ts +229 -0
  42. package/dist/flags/attribute-providers.d.ts.map +1 -0
  43. package/dist/flags/attribute-providers.js +375 -0
  44. package/dist/flags/attribute-providers.js.map +1 -0
  45. package/dist/flags/dev-attribute-provider.d.ts +67 -0
  46. package/dist/flags/dev-attribute-provider.d.ts.map +1 -0
  47. package/dist/flags/dev-attribute-provider.js +200 -0
  48. package/dist/flags/dev-attribute-provider.js.map +1 -0
  49. package/dist/flags/evaluator.d.ts +58 -0
  50. package/dist/flags/evaluator.d.ts.map +1 -0
  51. package/dist/flags/evaluator.js +160 -0
  52. package/dist/flags/evaluator.js.map +1 -0
  53. package/dist/flags/flag.d.ts +199 -0
  54. package/dist/flags/flag.d.ts.map +1 -0
  55. package/dist/flags/flag.js +337 -0
  56. package/dist/flags/flag.js.map +1 -0
  57. package/dist/flags/identity.d.ts +77 -0
  58. package/dist/flags/identity.d.ts.map +1 -0
  59. package/dist/flags/identity.js +134 -0
  60. package/dist/flags/identity.js.map +1 -0
  61. package/dist/flags/index.d.ts +20 -0
  62. package/dist/flags/index.d.ts.map +1 -0
  63. package/dist/flags/index.js +21 -0
  64. package/dist/flags/index.js.map +1 -0
  65. package/dist/flags/operators.d.ts +63 -0
  66. package/dist/flags/operators.d.ts.map +1 -0
  67. package/dist/flags/operators.js +299 -0
  68. package/dist/flags/operators.js.map +1 -0
  69. package/dist/flags/propagation.d.ts +16 -0
  70. package/dist/flags/propagation.d.ts.map +1 -0
  71. package/dist/flags/propagation.js +107 -0
  72. package/dist/flags/propagation.js.map +1 -0
  73. package/dist/flags/realtime.d.ts +353 -0
  74. package/dist/flags/realtime.d.ts.map +1 -0
  75. package/dist/flags/realtime.js +779 -0
  76. package/dist/flags/realtime.js.map +1 -0
  77. package/dist/flags/runtime-mode.d.ts +32 -0
  78. package/dist/flags/runtime-mode.d.ts.map +1 -0
  79. package/dist/flags/runtime-mode.js +84 -0
  80. package/dist/flags/runtime-mode.js.map +1 -0
  81. package/dist/flags/telemetry.d.ts +79 -0
  82. package/dist/flags/telemetry.d.ts.map +1 -0
  83. package/dist/flags/telemetry.js +286 -0
  84. package/dist/flags/telemetry.js.map +1 -0
  85. package/dist/http.d.ts +4 -0
  86. package/dist/http.d.ts.map +1 -1
  87. package/dist/http.js +44 -12
  88. package/dist/http.js.map +1 -1
  89. package/dist/index.d.ts +14 -2
  90. package/dist/index.d.ts.map +1 -1
  91. package/dist/index.js +16 -1
  92. package/dist/index.js.map +1 -1
  93. package/dist/management-types.d.ts +38 -0
  94. package/dist/management-types.d.ts.map +1 -1
  95. package/dist/route-guard.d.ts.map +1 -1
  96. package/dist/route-guard.js +15 -5
  97. package/dist/route-guard.js.map +1 -1
  98. package/dist/token-manager.d.ts +3 -1
  99. package/dist/token-manager.d.ts.map +1 -1
  100. package/dist/token-manager.js +10 -6
  101. package/dist/token-manager.js.map +1 -1
  102. package/dist/types.d.ts +10 -2
  103. package/dist/types.d.ts.map +1 -1
  104. package/dist/usage/index.d.ts +3 -0
  105. package/dist/usage/index.d.ts.map +1 -0
  106. package/dist/usage/index.js +4 -0
  107. package/dist/usage/index.js.map +1 -0
  108. package/dist/usage/storage/durable-storage.d.ts +47 -0
  109. package/dist/usage/storage/durable-storage.d.ts.map +1 -0
  110. package/dist/usage/storage/durable-storage.js +27 -0
  111. package/dist/usage/storage/durable-storage.js.map +1 -0
  112. package/dist/usage/storage/index.d.ts +7 -0
  113. package/dist/usage/storage/index.d.ts.map +1 -0
  114. package/dist/usage/storage/index.js +28 -0
  115. package/dist/usage/storage/index.js.map +1 -0
  116. package/dist/usage/storage/indexeddb-storage.d.ts +18 -0
  117. package/dist/usage/storage/indexeddb-storage.d.ts.map +1 -0
  118. package/dist/usage/storage/indexeddb-storage.js +159 -0
  119. package/dist/usage/storage/indexeddb-storage.js.map +1 -0
  120. package/dist/usage/storage/node-fs-storage.d.ts +29 -0
  121. package/dist/usage/storage/node-fs-storage.d.ts.map +1 -0
  122. package/dist/usage/storage/node-fs-storage.js +180 -0
  123. package/dist/usage/storage/node-fs-storage.js.map +1 -0
  124. package/dist/usage/storage/noop-storage.d.ts +17 -0
  125. package/dist/usage/storage/noop-storage.d.ts.map +1 -0
  126. package/dist/usage/storage/noop-storage.js +67 -0
  127. package/dist/usage/storage/noop-storage.js.map +1 -0
  128. package/dist/usage/usage-reporter.d.ts +64 -0
  129. package/dist/usage/usage-reporter.d.ts.map +1 -0
  130. package/dist/usage/usage-reporter.js +234 -0
  131. package/dist/usage/usage-reporter.js.map +1 -0
  132. package/package.json +2 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"realtime.js","sourceRoot":"","sources":["../../src/flags/realtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ export type BridgeRuntimeMode = 'channel' | 'pull';
2
+ export interface PullCacheOptions {
3
+ /** TTL for cached values in ms. Default 30000 (30s). */
4
+ ttlMs?: number;
5
+ /** Optional override for the default "now" clock — useful in tests. */
6
+ now?: () => number;
7
+ }
8
+ /**
9
+ * Tiny TTL-bounded read cache for pull-mode SDKs.
10
+ *
11
+ * Semantics:
12
+ * - `get(key, fetcher)` returns the cached value if not expired; otherwise
13
+ * awaits `fetcher()` to populate and returns the fresh value.
14
+ * - Concurrent `get(key, ...)` calls share the in-flight promise (no
15
+ * thundering-herd against the upstream REST endpoint).
16
+ * - `invalidate(key?)` clears a specific key or the entire cache.
17
+ *
18
+ * Best-effort: a fetcher rejection clears the in-flight promise so the next
19
+ * `get()` retries instead of returning a stale value forever.
20
+ */
21
+ export declare class BridgePullCache {
22
+ private readonly _entries;
23
+ private readonly _ttlMs;
24
+ private readonly _now;
25
+ constructor(opts?: PullCacheOptions);
26
+ get<T>(key: string, fetcher: () => Promise<T>): Promise<T>;
27
+ /** Force a re-fetch on the next get(). Pass no args to clear all keys. */
28
+ invalidate(key?: string): void;
29
+ /** Number of cached entries currently held (test/diagnostic). */
30
+ size(): number;
31
+ }
32
+ //# sourceMappingURL=runtime-mode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-mode.d.ts","sourceRoot":"","sources":["../../src/flags/runtime-mode.ts"],"names":[],"mappings":"AAsBA,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,MAAM,CAAC;AAEnD,MAAM,WAAW,gBAAgB;IAC/B,wDAAwD;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAQD;;;;;;;;;;;;GAYG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA0C;IACnE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAe;gBAExB,IAAI,CAAC,EAAE,gBAAgB;IAK7B,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IA6BhE,0EAA0E;IAC1E,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAQ9B,iEAAiE;IACjE,IAAI,IAAI,MAAM;CAGf"}
@@ -0,0 +1,84 @@
1
+ // Phase 6 (TBP-290/340) — runtime-mode abstraction.
2
+ //
3
+ // `BridgeRuntimeMode` is orthogonal to `BridgeFlagsMode` (which governs the
4
+ // flag-eval semantics on backend vs frontend). Runtime mode governs HOW the
5
+ // SDK stays fresh:
6
+ //
7
+ // 'channel' — open a WebSocket and consume push events (live updates).
8
+ // Use for long-running processes: SvelteKit SSR servers, NestJS
9
+ // services, Express APIs serving many users from one process.
10
+ //
11
+ // 'pull' — never open a WebSocket. Every read may hit REST with a small
12
+ // TTL cache to deduplicate close-in-time reads. Use for
13
+ // ephemeral runtimes: cron jobs, serverless functions, webhook
14
+ // handlers, CLI scripts.
15
+ //
16
+ // In 'pull' mode `bridge.events.handle()` is a no-op (push events don't exist
17
+ // — for server-side event reactions, use Bridge webhooks instead).
18
+ //
19
+ // In 'channel' mode `bridge.refresh()` is supported but rarely needed (the
20
+ // channel keeps state fresh automatically); in 'pull' mode `bridge.refresh()`
21
+ // explicitly invalidates the cache so the next read re-fetches.
22
+ /**
23
+ * Tiny TTL-bounded read cache for pull-mode SDKs.
24
+ *
25
+ * Semantics:
26
+ * - `get(key, fetcher)` returns the cached value if not expired; otherwise
27
+ * awaits `fetcher()` to populate and returns the fresh value.
28
+ * - Concurrent `get(key, ...)` calls share the in-flight promise (no
29
+ * thundering-herd against the upstream REST endpoint).
30
+ * - `invalidate(key?)` clears a specific key or the entire cache.
31
+ *
32
+ * Best-effort: a fetcher rejection clears the in-flight promise so the next
33
+ * `get()` retries instead of returning a stale value forever.
34
+ */
35
+ export class BridgePullCache {
36
+ _entries = new Map();
37
+ _ttlMs;
38
+ _now;
39
+ constructor(opts) {
40
+ this._ttlMs = opts?.ttlMs ?? 30_000;
41
+ this._now = opts?.now ?? (() => Date.now());
42
+ }
43
+ async get(key, fetcher) {
44
+ const existing = this._entries.get(key);
45
+ if (existing) {
46
+ if (existing.inflight)
47
+ return existing.inflight;
48
+ if (existing.expiresAt > this._now())
49
+ return existing.value;
50
+ }
51
+ const inflight = fetcher()
52
+ .then((v) => {
53
+ this._entries.set(key, {
54
+ value: v,
55
+ expiresAt: this._now() + this._ttlMs,
56
+ });
57
+ return v;
58
+ })
59
+ .catch((err) => {
60
+ // Clear so the next call retries instead of returning stale forever.
61
+ this._entries.delete(key);
62
+ throw err;
63
+ });
64
+ this._entries.set(key, {
65
+ value: existing?.value,
66
+ expiresAt: 0,
67
+ inflight,
68
+ });
69
+ return inflight;
70
+ }
71
+ /** Force a re-fetch on the next get(). Pass no args to clear all keys. */
72
+ invalidate(key) {
73
+ if (key === undefined) {
74
+ this._entries.clear();
75
+ return;
76
+ }
77
+ this._entries.delete(key);
78
+ }
79
+ /** Number of cached entries currently held (test/diagnostic). */
80
+ size() {
81
+ return this._entries.size;
82
+ }
83
+ }
84
+ //# sourceMappingURL=runtime-mode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-mode.js","sourceRoot":"","sources":["../../src/flags/runtime-mode.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,EAAE;AACF,4EAA4E;AAC5E,4EAA4E;AAC5E,mBAAmB;AACnB,EAAE;AACF,yEAAyE;AACzE,8EAA8E;AAC9E,4EAA4E;AAC5E,EAAE;AACF,6EAA6E;AAC7E,sEAAsE;AACtE,6EAA6E;AAC7E,uCAAuC;AACvC,EAAE;AACF,8EAA8E;AAC9E,mEAAmE;AACnE,EAAE;AACF,2EAA2E;AAC3E,8EAA8E;AAC9E,gEAAgE;AAiBhE;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,eAAe;IACT,QAAQ,GAAG,IAAI,GAAG,EAA+B,CAAC;IAClD,MAAM,CAAS;IACf,IAAI,CAAe;IAEpC,YAAY,IAAuB;QACjC,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,KAAK,IAAI,MAAM,CAAC;QACpC,IAAI,CAAC,IAAI,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,GAAG,CAAI,GAAW,EAAE,OAAyB;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAA8B,CAAC;QACrE,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,QAAQ,CAAC,QAAQ;gBAAE,OAAO,QAAQ,CAAC,QAAQ,CAAC;YAChD,IAAI,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE;gBAAE,OAAO,QAAQ,CAAC,KAAK,CAAC;QAC9D,CAAC;QAED,MAAM,QAAQ,GAAG,OAAO,EAAE;aACvB,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;YACV,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE;gBACrB,KAAK,EAAE,CAAC;gBACR,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM;aACrC,CAAC,CAAC;YACH,OAAO,CAAC,CAAC;QACX,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACb,qEAAqE;YACrE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC1B,MAAM,GAAG,CAAC;QACZ,CAAC,CAAC,CAAC;QAEL,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE;YACrB,KAAK,EAAE,QAAQ,EAAE,KAAU;YAC3B,SAAS,EAAE,CAAC;YACZ,QAAQ;SACT,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,0EAA0E;IAC1E,UAAU,CAAC,GAAY;QACrB,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED,iEAAiE;IACjE,IAAI;QACF,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC5B,CAAC;CACF"}
@@ -0,0 +1,79 @@
1
+ import type { BridgeFlags } from './flag.js';
2
+ export interface TelemetryBatcherConfig {
3
+ /** Bridge API base URL (e.g. https://api.thebridge.dev or http://localhost:3500). */
4
+ apiBaseUrl: string;
5
+ /** JWT-shaped workspace API key — sent as `x-api-key` header. */
6
+ apiKey: string;
7
+ /** Flush interval in ms. Default 30s. */
8
+ flushIntervalMs?: number;
9
+ /** Maximum events buffered before forcing a flush. Default 500. */
10
+ flushAtSize?: number;
11
+ /**
12
+ * Short debounce after any discovery / attribute-observation event, so
13
+ * first-sight items reach the admin near-instantly without waiting for the
14
+ * 30s eval cadence. Default 1000ms. Set higher to coalesce more aggressively
15
+ * or to 0 to flush synchronously.
16
+ */
17
+ firstSightFlushMs?: number;
18
+ /** When false, telemetry HTTP calls are skipped — useful for tests + opt-out apps. */
19
+ enabled?: boolean;
20
+ }
21
+ export declare class TelemetryBatcher {
22
+ private readonly evalBuffer;
23
+ private readonly discoveryBuffer;
24
+ private readonly attributeDeclBuffer;
25
+ private readonly attributeObsBuffer;
26
+ private readonly callSiteBuffer;
27
+ private readonly seenCallSites;
28
+ private timer?;
29
+ private firstSightTimer?;
30
+ private readonly cfg;
31
+ private flushing;
32
+ constructor(cfg: TelemetryBatcherConfig);
33
+ /** Schedule a near-instant flush in response to a first-sight event. Debounced
34
+ * so a burst of first-sights collapses to a single flush. Discovery + attribute
35
+ * observation paths both use this; eval events keep the 30s cadence. */
36
+ private scheduleFirstSightFlush;
37
+ /**
38
+ * Attach to a BridgeFlags instance. Registers hooks for eval + discovery
39
+ * + attribute-declaration events. Also starts the periodic flush timer.
40
+ */
41
+ attach(bridge: BridgeFlags): void;
42
+ /** Record a call-site sighting. Caller supplies the fingerprint. */
43
+ recordCallSite(flag: string, identity: string, fingerprint: string, devLabel?: string): void;
44
+ /** Hook entrypoint — coalesces eval events per (identity, flag, value, minute). */
45
+ private recordEval;
46
+ /** Hook entrypoint — discovery events are inherently dedupe'd by BridgeFlags.
47
+ * Schedules a near-instant flush so a new flag shows up in the admin within
48
+ * ~1s of first eval, not at the next 30s tick. */
49
+ private recordDiscovery;
50
+ /** Hook entrypoint — attribute type declarations (TBP-174, deprecated). */
51
+ private recordAttributeDeclaration;
52
+ /** Hook entrypoint — per-call attribute observations (TBP-178). Same near-
53
+ * instant flush so a new dev-supplied attribute reaches the admin catalog
54
+ * within ~1s of first eval. */
55
+ private recordAttributeObservation;
56
+ /** Begin periodic flushing. Idempotent. */
57
+ start(): void;
58
+ /** Stop the timer and force a final flush. Called on app shutdown / SDK teardown. */
59
+ stop(): Promise<void>;
60
+ /** Force a flush now. Returns when all in-flight HTTP calls settle. */
61
+ flush(): Promise<void>;
62
+ /** Telemetry surface for introspection / tests. */
63
+ stats(): {
64
+ evalQueue: number;
65
+ discoveryQueue: number;
66
+ attributeDeclQueue: number;
67
+ attributeObsQueue: number;
68
+ callSiteQueue: number;
69
+ seenCallSites: number;
70
+ };
71
+ private maybeFlushOnSize;
72
+ private flushEvals;
73
+ private flushDiscoveries;
74
+ private flushAttributeDeclarations;
75
+ private flushAttributeObservations;
76
+ private flushCallSites;
77
+ private post;
78
+ }
79
+ //# sourceMappingURL=telemetry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../src/flags/telemetry.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAGV,WAAW,EAGZ,MAAM,WAAW,CAAC;AAEnB,MAAM,WAAW,sBAAsB;IACrC,qFAAqF;IACrF,UAAU,EAAE,MAAM,CAAC;IACnB,iEAAiE;IACjE,MAAM,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mEAAmE;IACnE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,sFAAsF;IACtF,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAuCD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoC;IAC/D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA4B;IAC5D,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAuC;IAC3E,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAuC;IAC1E,OAAO,CAAC,QAAQ,CAAC,cAAc,CAMvB;IACR,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;IACnD,OAAO,CAAC,KAAK,CAAC,CAAiC;IAC/C,OAAO,CAAC,eAAe,CAAC,CAAgC;IACxD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAmC;IACvD,OAAO,CAAC,QAAQ,CAAS;gBAEb,GAAG,EAAE,sBAAsB;IAWvC;;6EAEyE;IACzE,OAAO,CAAC,uBAAuB;IAS/B;;;OAGG;IACH,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAUjC,oEAAoE;IACpE,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAS5F,mFAAmF;IACnF,OAAO,CAAC,UAAU;IAoBlB;;uDAEmD;IACnD,OAAO,CAAC,eAAe;IAWvB,2EAA2E;IAC3E,OAAO,CAAC,0BAA0B;IAUlC;;oCAEgC;IAChC,OAAO,CAAC,0BAA0B;IAWlC,2CAA2C;IAC3C,KAAK,IAAI,IAAI;IAUb,qFAAqF;IAC/E,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAY3B,uEAAuE;IACjE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAwB5B,mDAAmD;IACnD,KAAK,IAAI;QACP,SAAS,EAAE,MAAM,CAAC;QAClB,cAAc,EAAE,MAAM,CAAC;QACvB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,iBAAiB,EAAE,MAAM,CAAC;QAC1B,aAAa,EAAE,MAAM,CAAC;QACtB,aAAa,EAAE,MAAM,CAAC;KACvB;IAWD,OAAO,CAAC,gBAAgB;YAYV,UAAU;YAOV,gBAAgB;YAWhB,0BAA0B;YAe1B,0BAA0B;YAe1B,cAAc;YAMd,IAAI;CAoBnB"}
@@ -0,0 +1,286 @@
1
+ // SDK telemetry batcher (TBP-157).
2
+ //
3
+ // Wires the BridgeFlags hooks (`onEval`, `onDiscover`, `onIdentify`) to the
4
+ // bridge-api ingest endpoints (`/v1/flags/eval-events`, `/v1/flags/discover`,
5
+ // `/v1/flags/call-sites`). Coalesces eval events per (identity, flag, value)
6
+ // per minute, dedupes call-site reports per (identity, fingerprint) for the
7
+ // SDK runtime, and periodically flushes via HTTP.
8
+ //
9
+ // This module is platform-agnostic — it uses global `fetch` and a `setInterval`
10
+ // timer. Framework SDKs construct it during bootstrap and pass the workspace
11
+ // API key. On graceful shutdown they call `stop()` to flush pending events.
12
+ export class TelemetryBatcher {
13
+ evalBuffer = new Map();
14
+ discoveryBuffer = [];
15
+ attributeDeclBuffer = [];
16
+ attributeObsBuffer = [];
17
+ callSiteBuffer = [];
18
+ seenCallSites = new Set(); // dedup per runtime: `identity|fingerprint`
19
+ timer;
20
+ firstSightTimer;
21
+ cfg;
22
+ flushing = false;
23
+ constructor(cfg) {
24
+ this.cfg = {
25
+ apiBaseUrl: cfg.apiBaseUrl.replace(/\/+$/, ''),
26
+ apiKey: cfg.apiKey,
27
+ flushIntervalMs: cfg.flushIntervalMs ?? 30_000,
28
+ flushAtSize: cfg.flushAtSize ?? 500,
29
+ firstSightFlushMs: cfg.firstSightFlushMs ?? 1_000,
30
+ enabled: cfg.enabled !== false,
31
+ };
32
+ }
33
+ /** Schedule a near-instant flush in response to a first-sight event. Debounced
34
+ * so a burst of first-sights collapses to a single flush. Discovery + attribute
35
+ * observation paths both use this; eval events keep the 30s cadence. */
36
+ scheduleFirstSightFlush() {
37
+ if (this.firstSightTimer)
38
+ return;
39
+ this.firstSightTimer = setTimeout(() => {
40
+ this.firstSightTimer = undefined;
41
+ void this.flush();
42
+ }, this.cfg.firstSightFlushMs);
43
+ if (this.firstSightTimer?.unref)
44
+ this.firstSightTimer.unref();
45
+ }
46
+ /**
47
+ * Attach to a BridgeFlags instance. Registers hooks for eval + discovery
48
+ * + attribute-declaration events. Also starts the periodic flush timer.
49
+ */
50
+ attach(bridge) {
51
+ bridge.setHooks({
52
+ onEval: (ev) => this.recordEval(ev),
53
+ onDiscover: (ev) => this.recordDiscovery(ev),
54
+ onAttributeDeclaration: (decl) => this.recordAttributeDeclaration(decl),
55
+ onAttributeObserved: (obs) => this.recordAttributeObservation(obs),
56
+ });
57
+ this.start();
58
+ }
59
+ /** Record a call-site sighting. Caller supplies the fingerprint. */
60
+ recordCallSite(flag, identity, fingerprint, devLabel) {
61
+ if (!identity || !fingerprint)
62
+ return;
63
+ const key = `${identity}|${fingerprint}`;
64
+ if (this.seenCallSites.has(key))
65
+ return;
66
+ this.seenCallSites.add(key);
67
+ this.callSiteBuffer.push({ flag, identity, fingerprint, devLabel, timestamp: Date.now() });
68
+ this.maybeFlushOnSize();
69
+ }
70
+ /** Hook entrypoint — coalesces eval events per (identity, flag, value, minute). */
71
+ recordEval(ev) {
72
+ const valueKey = canonicalValueKey(ev.value);
73
+ const bucketMinute = Math.floor(ev.timestamp / 60_000);
74
+ const key = `${ev.identity ?? ''}::${ev.flag}::${valueKey}::${ev.variantIndex}::${bucketMinute}`;
75
+ const existing = this.evalBuffer.get(key);
76
+ if (existing) {
77
+ existing.count++;
78
+ }
79
+ else {
80
+ this.evalBuffer.set(key, {
81
+ flag: ev.flag,
82
+ value: ev.value,
83
+ variantIndex: ev.variantIndex,
84
+ identity: ev.identity,
85
+ timestamp: ev.timestamp,
86
+ count: 1,
87
+ });
88
+ }
89
+ this.maybeFlushOnSize();
90
+ }
91
+ /** Hook entrypoint — discovery events are inherently dedupe'd by BridgeFlags.
92
+ * Schedules a near-instant flush so a new flag shows up in the admin within
93
+ * ~1s of first eval, not at the next 30s tick. */
94
+ recordDiscovery(ev) {
95
+ this.discoveryBuffer.push({
96
+ flag: ev.flag,
97
+ defaultValue: ev.defaultValue,
98
+ observedType: ev.observedType,
99
+ timestamp: ev.timestamp,
100
+ });
101
+ this.scheduleFirstSightFlush();
102
+ this.maybeFlushOnSize();
103
+ }
104
+ /** Hook entrypoint — attribute type declarations (TBP-174, deprecated). */
105
+ recordAttributeDeclaration(decl) {
106
+ this.attributeDeclBuffer.push({
107
+ name: decl.name,
108
+ type: decl.type,
109
+ timestamp: decl.timestamp,
110
+ });
111
+ this.scheduleFirstSightFlush();
112
+ this.maybeFlushOnSize();
113
+ }
114
+ /** Hook entrypoint — per-call attribute observations (TBP-178). Same near-
115
+ * instant flush so a new dev-supplied attribute reaches the admin catalog
116
+ * within ~1s of first eval. */
117
+ recordAttributeObservation(obs) {
118
+ this.attributeObsBuffer.push({
119
+ key: obs.key,
120
+ sampleValue: obs.sampleValue,
121
+ observedType: obs.observedType,
122
+ timestamp: obs.timestamp,
123
+ });
124
+ this.scheduleFirstSightFlush();
125
+ this.maybeFlushOnSize();
126
+ }
127
+ /** Begin periodic flushing. Idempotent. */
128
+ start() {
129
+ if (this.timer)
130
+ return;
131
+ this.timer = setInterval(() => {
132
+ void this.flush();
133
+ }, this.cfg.flushIntervalMs);
134
+ // Some runtimes (Node) keep the process alive on a timer; in the SDK
135
+ // context this is typically a browser, so it's a no-op there.
136
+ if (this.timer?.unref)
137
+ this.timer.unref();
138
+ }
139
+ /** Stop the timer and force a final flush. Called on app shutdown / SDK teardown. */
140
+ async stop() {
141
+ if (this.timer) {
142
+ clearInterval(this.timer);
143
+ this.timer = undefined;
144
+ }
145
+ if (this.firstSightTimer) {
146
+ clearTimeout(this.firstSightTimer);
147
+ this.firstSightTimer = undefined;
148
+ }
149
+ await this.flush();
150
+ }
151
+ /** Force a flush now. Returns when all in-flight HTTP calls settle. */
152
+ async flush() {
153
+ if (!this.cfg.enabled) {
154
+ this.evalBuffer.clear();
155
+ this.discoveryBuffer.length = 0;
156
+ this.attributeDeclBuffer.length = 0;
157
+ this.attributeObsBuffer.length = 0;
158
+ this.callSiteBuffer.length = 0;
159
+ return;
160
+ }
161
+ if (this.flushing)
162
+ return; // single-flight; the next interval picks up the rest
163
+ this.flushing = true;
164
+ try {
165
+ await Promise.all([
166
+ this.flushEvals(),
167
+ this.flushDiscoveries(),
168
+ this.flushAttributeDeclarations(),
169
+ this.flushAttributeObservations(),
170
+ this.flushCallSites(),
171
+ ]);
172
+ }
173
+ finally {
174
+ this.flushing = false;
175
+ }
176
+ }
177
+ /** Telemetry surface for introspection / tests. */
178
+ stats() {
179
+ return {
180
+ evalQueue: this.evalBuffer.size,
181
+ discoveryQueue: this.discoveryBuffer.length,
182
+ attributeDeclQueue: this.attributeDeclBuffer.length,
183
+ attributeObsQueue: this.attributeObsBuffer.length,
184
+ callSiteQueue: this.callSiteBuffer.length,
185
+ seenCallSites: this.seenCallSites.size,
186
+ };
187
+ }
188
+ maybeFlushOnSize() {
189
+ const total = this.evalBuffer.size +
190
+ this.discoveryBuffer.length +
191
+ this.attributeDeclBuffer.length +
192
+ this.attributeObsBuffer.length +
193
+ this.callSiteBuffer.length;
194
+ if (total >= this.cfg.flushAtSize) {
195
+ void this.flush();
196
+ }
197
+ }
198
+ async flushEvals() {
199
+ if (this.evalBuffer.size === 0)
200
+ return;
201
+ const events = Array.from(this.evalBuffer.values());
202
+ this.evalBuffer.clear();
203
+ await this.post('/v1/flags/eval-events', { events });
204
+ }
205
+ async flushDiscoveries() {
206
+ if (this.discoveryBuffer.length === 0)
207
+ return;
208
+ const events = this.discoveryBuffer.splice(0).map((d) => ({
209
+ kind: 'flag',
210
+ key: d.flag,
211
+ observedType: d.observedType,
212
+ timestamp: d.timestamp,
213
+ }));
214
+ await this.post('/v1/flags/discover', { events });
215
+ }
216
+ async flushAttributeDeclarations() {
217
+ if (this.attributeDeclBuffer.length === 0)
218
+ return;
219
+ // Attribute declarations are sent through the discovery endpoint with
220
+ // `kind: 'attribute'` + observedType. The admin UI's Discovered panel
221
+ // distinguishes declared vs inferred via the observedType + a future
222
+ // `declared: true` field (TODO once the backend supports the flag).
223
+ const events = this.attributeDeclBuffer.splice(0).map((d) => ({
224
+ kind: 'attribute',
225
+ key: d.name,
226
+ observedType: d.type,
227
+ timestamp: d.timestamp,
228
+ }));
229
+ await this.post('/v1/flags/discover', { events });
230
+ }
231
+ async flushAttributeObservations() {
232
+ if (this.attributeObsBuffer.length === 0)
233
+ return;
234
+ // Per-call attribute observations (TBP-178) — relayed to the same discovery
235
+ // endpoint with `kind: 'attribute'` + observedType + sampleValue. Backend
236
+ // accumulates distinct samples per (app, key) via `$addToSet`.
237
+ const events = this.attributeObsBuffer.splice(0).map((o) => ({
238
+ kind: 'attribute',
239
+ key: o.key,
240
+ sampleValue: o.sampleValue,
241
+ observedType: o.observedType,
242
+ timestamp: o.timestamp,
243
+ }));
244
+ await this.post('/v1/flags/discover', { events });
245
+ }
246
+ async flushCallSites() {
247
+ if (this.callSiteBuffer.length === 0)
248
+ return;
249
+ const events = this.callSiteBuffer.splice(0);
250
+ await this.post('/v1/flags/call-sites', { events });
251
+ }
252
+ async post(path, body) {
253
+ const url = `${this.cfg.apiBaseUrl}${path}`;
254
+ try {
255
+ await fetch(url, {
256
+ method: 'POST',
257
+ headers: {
258
+ 'Content-Type': 'application/json',
259
+ 'x-api-key': this.cfg.apiKey,
260
+ },
261
+ body: JSON.stringify(body),
262
+ });
263
+ // We don't currently inspect the response — accepted/rejected counts
264
+ // are useful for debugging but not actionable from the SDK side.
265
+ // A future hardening could log on non-2xx.
266
+ }
267
+ catch {
268
+ // Network errors swallowed — telemetry is best-effort. A future
269
+ // hardening could re-buffer with backoff, but losing some events is
270
+ // strictly preferred over breaking the SDK on a flaky network.
271
+ }
272
+ }
273
+ }
274
+ // ── helpers ─────────────────────────────────────────────────────────────────
275
+ function canonicalValueKey(v) {
276
+ if (v === undefined)
277
+ return 'undefined';
278
+ try {
279
+ const s = JSON.stringify(v);
280
+ return s.length > 256 ? s.slice(0, 256) + '…' : s;
281
+ }
282
+ catch {
283
+ return String(v);
284
+ }
285
+ }
286
+ //# sourceMappingURL=telemetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/flags/telemetry.ts"],"names":[],"mappings":"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"}
package/dist/http.d.ts CHANGED
@@ -4,6 +4,10 @@ export interface HttpOptions {
4
4
  headers?: Record<string, string>;
5
5
  body?: unknown;
6
6
  credentials?: RequestCredentials;
7
+ /** Called when a 401 TOKEN_VERSION_STALE is detected. Should return a fresh
8
+ * access token (or null if refresh fails). When provided the request is
9
+ * retried once with the new token; without it the HttpError is thrown as usual. */
10
+ onTokenStale?: () => Promise<string | null>;
7
11
  }
8
12
  export declare function httpFetch<T>(url: string, options: HttpOptions, logger: Logger): Promise<T>;
9
13
  //# sourceMappingURL=http.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,kBAAkB,CAAC;CAClC;AAED,wBAAsB,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAoChG"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAmB1C,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC;;wFAEoF;IACpF,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAC7C;AAED,wBAAsB,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAsDhG"}
package/dist/http.js CHANGED
@@ -1,18 +1,31 @@
1
- import { HttpError } from './errors.js';
1
+ import { BillingLockedError, HttpError } from './errors.js';
2
+ import { emitBillingLock } from './billing/lock-signal.js';
3
+ function isBillingLockedPayload(body) {
4
+ return (typeof body === 'object' &&
5
+ body !== null &&
6
+ body.reason === 'billing_locked');
7
+ }
8
+ function isTokenVersionStale(status, body) {
9
+ return (status === 401 &&
10
+ typeof body === 'object' &&
11
+ body !== null &&
12
+ body.code === 'TOKEN_VERSION_STALE');
13
+ }
2
14
  export async function httpFetch(url, options, logger) {
3
- const { method = 'GET', headers = {}, body, credentials } = options;
4
- const fetchOptions = {
5
- method,
6
- headers: { 'Content-Type': 'application/json', ...headers },
15
+ const { method = 'GET', headers = {}, body, credentials, onTokenStale } = options;
16
+ const buildFetchOptions = (hdrs) => {
17
+ const init = {
18
+ method,
19
+ headers: { 'Content-Type': 'application/json', ...hdrs },
20
+ };
21
+ if (body !== undefined)
22
+ init.body = JSON.stringify(body);
23
+ if (credentials)
24
+ init.credentials = credentials;
25
+ return init;
7
26
  };
8
- if (body !== undefined) {
9
- fetchOptions.body = JSON.stringify(body);
10
- }
11
- if (credentials) {
12
- fetchOptions.credentials = credentials;
13
- }
14
27
  logger.debug(`${method} ${url}`);
15
- const response = await fetch(url, fetchOptions);
28
+ const response = await fetch(url, buildFetchOptions(headers));
16
29
  if (!response.ok) {
17
30
  let errorBody;
18
31
  try {
@@ -21,6 +34,25 @@ export async function httpFetch(url, options, logger) {
21
34
  catch {
22
35
  errorBody = await response.text().catch(() => null);
23
36
  }
37
+ if (response.status === 402 && isBillingLockedPayload(errorBody)) {
38
+ emitBillingLock(errorBody);
39
+ throw new BillingLockedError(errorBody);
40
+ }
41
+ // TOKEN_VERSION_STALE on REST 401s: refresh and retry once (same mechanism
42
+ // as the WebSocket user.state_changed path; dedup gate in BridgeAuth
43
+ // prevents a double HTTP call if both paths fire simultaneously).
44
+ if (isTokenVersionStale(response.status, errorBody) && onTokenStale) {
45
+ const freshToken = await onTokenStale().catch(() => null);
46
+ if (freshToken) {
47
+ const retryResponse = await fetch(url, buildFetchOptions({ ...headers, Authorization: `Bearer ${freshToken}` }));
48
+ if (retryResponse.ok) {
49
+ const retryText = await retryResponse.text();
50
+ if (!retryText)
51
+ return undefined;
52
+ return JSON.parse(retryText);
53
+ }
54
+ }
55
+ }
24
56
  const message = typeof errorBody === 'object' && errorBody && 'message' in errorBody
25
57
  ? String(errorBody.message)
26
58
  : `HTTP ${response.status}: ${response.statusText}`;
package/dist/http.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAUxC,MAAM,CAAC,KAAK,UAAU,SAAS,CAAI,GAAW,EAAE,OAAoB,EAAE,MAAc;IAClF,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,OAAO,GAAG,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAEpE,MAAM,YAAY,GAAgB;QAChC,MAAM;QACN,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,GAAG,OAAO,EAAE;KAC5D,CAAC;IAEF,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,WAAW,EAAE,CAAC;QAChB,YAAY,CAAC,WAAW,GAAG,WAAW,CAAC;IACzC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC;IAEjC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IAEhD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,IAAI,SAAkB,CAAC;QACvB,IAAI,CAAC;YACH,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACpC,CAAC;QAAC,MAAM,CAAC;YACP,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACtD,CAAC;QACD,MAAM,OAAO,GAAG,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,IAAI,SAAS,IAAI,SAAS;YAClF,CAAC,CAAC,MAAM,CAAE,SAAiB,CAAC,OAAO,CAAC;YACpC,CAAC,CAAC,QAAQ,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE,CAAC;QACtD,MAAM,IAAI,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACnC,IAAI,CAAC,IAAI;QAAE,OAAO,SAAc,CAAC;IACjC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAM,CAAC;AAC/B,CAAC"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}