@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.
- package/dist/billing/bridge-subscription.d.ts +71 -0
- package/dist/billing/bridge-subscription.d.ts.map +1 -0
- package/dist/billing/bridge-subscription.js +209 -0
- package/dist/billing/bridge-subscription.js.map +1 -0
- package/dist/billing/entitlements-store.d.ts +61 -0
- package/dist/billing/entitlements-store.d.ts.map +1 -0
- package/dist/billing/entitlements-store.js +127 -0
- package/dist/billing/entitlements-store.js.map +1 -0
- package/dist/billing/fetch-billing-state.d.ts +9 -0
- package/dist/billing/fetch-billing-state.d.ts.map +1 -0
- package/dist/billing/fetch-billing-state.js +22 -0
- package/dist/billing/fetch-billing-state.js.map +1 -0
- package/dist/billing/lock-signal.d.ts +6 -0
- package/dist/billing/lock-signal.d.ts.map +1 -0
- package/dist/billing/lock-signal.js +8 -0
- package/dist/billing/lock-signal.js.map +1 -0
- package/dist/billing/quota-store.d.ts +86 -0
- package/dist/billing/quota-store.d.ts.map +1 -0
- package/dist/billing/quota-store.js +180 -0
- package/dist/billing/quota-store.js.map +1 -0
- package/dist/billing/types.d.ts +64 -0
- package/dist/billing/types.d.ts.map +1 -0
- package/dist/billing/types.js +49 -0
- package/dist/billing/types.js.map +1 -0
- package/dist/billing/use-bridge.d.ts +131 -0
- package/dist/billing/use-bridge.d.ts.map +1 -0
- package/dist/billing/use-bridge.js +181 -0
- package/dist/billing/use-bridge.js.map +1 -0
- package/dist/bridge-auth.d.ts +39 -1
- package/dist/bridge-auth.d.ts.map +1 -1
- package/dist/bridge-auth.js +89 -6
- package/dist/bridge-auth.js.map +1 -1
- package/dist/direct-auth.d.ts +1 -0
- package/dist/direct-auth.d.ts.map +1 -1
- package/dist/direct-auth.js +7 -0
- package/dist/direct-auth.js.map +1 -1
- package/dist/errors.d.ts +11 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +14 -0
- package/dist/errors.js.map +1 -1
- package/dist/flags/attribute-providers.d.ts +229 -0
- package/dist/flags/attribute-providers.d.ts.map +1 -0
- package/dist/flags/attribute-providers.js +375 -0
- package/dist/flags/attribute-providers.js.map +1 -0
- package/dist/flags/dev-attribute-provider.d.ts +67 -0
- package/dist/flags/dev-attribute-provider.d.ts.map +1 -0
- package/dist/flags/dev-attribute-provider.js +200 -0
- package/dist/flags/dev-attribute-provider.js.map +1 -0
- package/dist/flags/evaluator.d.ts +58 -0
- package/dist/flags/evaluator.d.ts.map +1 -0
- package/dist/flags/evaluator.js +160 -0
- package/dist/flags/evaluator.js.map +1 -0
- package/dist/flags/flag.d.ts +199 -0
- package/dist/flags/flag.d.ts.map +1 -0
- package/dist/flags/flag.js +337 -0
- package/dist/flags/flag.js.map +1 -0
- package/dist/flags/identity.d.ts +77 -0
- package/dist/flags/identity.d.ts.map +1 -0
- package/dist/flags/identity.js +134 -0
- package/dist/flags/identity.js.map +1 -0
- package/dist/flags/index.d.ts +20 -0
- package/dist/flags/index.d.ts.map +1 -0
- package/dist/flags/index.js +21 -0
- package/dist/flags/index.js.map +1 -0
- package/dist/flags/operators.d.ts +63 -0
- package/dist/flags/operators.d.ts.map +1 -0
- package/dist/flags/operators.js +299 -0
- package/dist/flags/operators.js.map +1 -0
- package/dist/flags/propagation.d.ts +16 -0
- package/dist/flags/propagation.d.ts.map +1 -0
- package/dist/flags/propagation.js +107 -0
- package/dist/flags/propagation.js.map +1 -0
- package/dist/flags/realtime.d.ts +353 -0
- package/dist/flags/realtime.d.ts.map +1 -0
- package/dist/flags/realtime.js +779 -0
- package/dist/flags/realtime.js.map +1 -0
- package/dist/flags/runtime-mode.d.ts +32 -0
- package/dist/flags/runtime-mode.d.ts.map +1 -0
- package/dist/flags/runtime-mode.js +84 -0
- package/dist/flags/runtime-mode.js.map +1 -0
- package/dist/flags/telemetry.d.ts +79 -0
- package/dist/flags/telemetry.d.ts.map +1 -0
- package/dist/flags/telemetry.js +286 -0
- package/dist/flags/telemetry.js.map +1 -0
- package/dist/http.d.ts +4 -0
- package/dist/http.d.ts.map +1 -1
- package/dist/http.js +44 -12
- package/dist/http.js.map +1 -1
- package/dist/index.d.ts +14 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -1
- package/dist/index.js.map +1 -1
- package/dist/management-types.d.ts +38 -0
- package/dist/management-types.d.ts.map +1 -1
- package/dist/route-guard.d.ts.map +1 -1
- package/dist/route-guard.js +15 -5
- package/dist/route-guard.js.map +1 -1
- package/dist/token-manager.d.ts +3 -1
- package/dist/token-manager.d.ts.map +1 -1
- package/dist/token-manager.js +10 -6
- package/dist/token-manager.js.map +1 -1
- package/dist/types.d.ts +10 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/usage/index.d.ts +3 -0
- package/dist/usage/index.d.ts.map +1 -0
- package/dist/usage/index.js +4 -0
- package/dist/usage/index.js.map +1 -0
- package/dist/usage/storage/durable-storage.d.ts +47 -0
- package/dist/usage/storage/durable-storage.d.ts.map +1 -0
- package/dist/usage/storage/durable-storage.js +27 -0
- package/dist/usage/storage/durable-storage.js.map +1 -0
- package/dist/usage/storage/index.d.ts +7 -0
- package/dist/usage/storage/index.d.ts.map +1 -0
- package/dist/usage/storage/index.js +28 -0
- package/dist/usage/storage/index.js.map +1 -0
- package/dist/usage/storage/indexeddb-storage.d.ts +18 -0
- package/dist/usage/storage/indexeddb-storage.d.ts.map +1 -0
- package/dist/usage/storage/indexeddb-storage.js +159 -0
- package/dist/usage/storage/indexeddb-storage.js.map +1 -0
- package/dist/usage/storage/node-fs-storage.d.ts +29 -0
- package/dist/usage/storage/node-fs-storage.d.ts.map +1 -0
- package/dist/usage/storage/node-fs-storage.js +180 -0
- package/dist/usage/storage/node-fs-storage.js.map +1 -0
- package/dist/usage/storage/noop-storage.d.ts +17 -0
- package/dist/usage/storage/noop-storage.d.ts.map +1 -0
- package/dist/usage/storage/noop-storage.js +67 -0
- package/dist/usage/storage/noop-storage.js.map +1 -0
- package/dist/usage/usage-reporter.d.ts +64 -0
- package/dist/usage/usage-reporter.d.ts.map +1 -0
- package/dist/usage/usage-reporter.js +234 -0
- package/dist/usage/usage-reporter.js.map +1 -0
- package/package.json +2 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"realtime.js","sourceRoot":"","sources":["../../src/flags/realtime.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,EAAE;AACF,8EAA8E;AAC9E,6EAA6E;AAC7E,4EAA4E;AAC5E,yDAAyD;AACzD,EAAE;AACF,4BAA4B;AAC5B,mFAAmF;AACnF,8EAA8E;AAC9E,+EAA+E;AAC/E,8EAA8E;AAC9E,2DAA2D;AAC3D,EAAE;AACF,4EAA4E;AAC5E,2CAA2C;AAC3C,EAAE;AACF,0EAA0E;AAC1E,6EAA6E;AAC7E,8EAA8E;AAuO9E,MAAM,OAAO,cAAc;IACR,GAAG,CASlB;IACM,EAAE,CAAiB;IACnB,KAAK,GAAoB,MAAM,CAAC;IAChC,gBAAgB,CAAS;IACzB,cAAc,CAAiC;IAC/C,MAAM,CAAe;IACrB,eAAe,CAAmC;IAClD,6BAA6B,CAAiD;IAC9E,sBAAsB,CAA0C;IAChE,kBAAkB,CAAsC;IACxD,yBAAyB,CAA6C;IAC9E,0EAA0E;IAC1E,oEAAoE;IAC5D,cAAc,CAAyC;IACvD,UAAU,CAAc;IACxB,WAAW,CAAc;IACzB,OAAO,GAAG,KAAK,CAAC;IAExB,YAAY,GAAyB;QACnC,MAAM,SAAS,GAAG,CAAC,CAAC,GAAW,EAAE,SAA6B,EAAE,EAAE;QAChE,8DAA8D;QAC9D,IAAK,UAAkB,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,CAGjC,CAAC;QACnB,IAAI,CAAC,GAAG,GAAG;YACT,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YAC9C,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,OAAO,EAAE,GAAG,CAAC,OAAO,KAAK,KAAK;YAC9B,eAAe,EAAE,GAAG,CAAC,eAAe,IAAI,IAAI;YAC5C,cAAc,EAAE,GAAG,CAAC,cAAc,IAAI,MAAM;YAC5C,gBAAgB,EAAE,GAAG,CAAC,gBAAgB,IAAI,SAAS;YACnD,OAAO,EAAE,GAAG,CAAC,OAAO,IAAK,CAAC,OAAO,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAkB;YAC5F,YAAY,EAAE,GAAG,CAAC,YAAY;SAC/B,CAAC;QACF,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC;IACnD,CAAC;IAED,+EAA+E;IAC/E,MAAM,CAAC,MAAmB;QACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,qDAAqD;IACrD,cAAc,CAAC,IAAqC;QAClD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;IAC9B,CAAC;IAED;;;;OAIG;IACH,4BAA4B,CAAC,IAAmD;QAC9E,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC;IAC5C,CAAC;IAED;;;;;OAKG;IACH,qBAAqB,CAAC,IAA4C;QAChE,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;IACrC,CAAC;IAED;;;;OAIG;IACH,iBAAiB,CAAC,IAAwC;QACxD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;IACjC,CAAC;IAED;;;;;;;;;;OAUG;IACH,wBAAwB,CAAC,IAA+C;QACtE,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC;IACxC,CAAC;IAED;;;;;;;;;;;OAWG;IACH,aAAa,CAAC,IAA2C;QACvD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;IAC7B,CAAC;IAED;;;;;OAKG;IACH,SAAS,CAAC,IAAgB;QACxB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IACzB,CAAC;IAED;;;;;OAKG;IACH,UAAU,CAAC,IAAgB;QACzB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,KAAK,CAAC,WAAW;QACf,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QAC9C,IAAI,IAAI,CAAC,KAAK,KAAK,YAAY;YAAE,OAAO;QACxC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAClC,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAClC,CAAC;QACD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC;QACjD,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACrC,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC;YACpB,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;YACtB,IAAI,CAAC;gBACH,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;YACvC,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC;QACD,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED;;;;;OAKG;IACH,QAAQ,CAAC,KAAyB;QAChC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,KAAK;YAAE,OAAO;QACrC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;QACvB,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACrC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;YACpC,+EAA+E;QACjF,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,cAAc,CAAC,WAA+B;QAC5C,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,KAAK,WAAW;YAAE,OAAO;QACjD,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC;QACnC,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACrC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,SAAS,CAAC,MAA0B;QAClC,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,MAAM;YAAE,OAAO;QACvC,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;QACzB,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACrC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;YACrC,qFAAqF;QACvF,CAAC;IACH,CAAC;IAED,oCAAoC;IACpC,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QAC9C,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ;YAAE,OAAO;QAE7D,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACpD,IAAI,YAAY,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;gBAC3D,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;gBACtB,OAAO;YACT,CAAC;YACD,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC5C,IAAI,YAAY,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBACpC,yEAAyE;gBACzE,mEAAmE;gBACnE,sEAAsE;gBACtE,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBAC3D,OAAO;YACT,CAAC;YACD,IAAI,YAAY,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBACvC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;gBAC5C,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;gBAChD,OAAO;YACT,CAAC;YACD,mEAAmE;YACnE,8DAA8D;YAC9D,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;QACxB,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;YACtB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,wCAAwC;IACxC,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAClC,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAClC,CAAC;QACD,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAClC,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YACD,IAAI,CAAC,EAAE,GAAG,SAAS,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;IACxB,CAAC;IAED,6BAA6B;IAC7B,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED;;;;;;;;OAQG;IACH,mBAAmB;QACjB,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK;YAAE,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;QACtD,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW;YAAE,GAAG,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;QACxE,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM;YAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QACzD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,6EAA6E;IAErE,KAAK,CAAC,iBAAiB;QAC7B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,kBAAkB,EAAE;YAC3E,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;SAC1C,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,iCAAiC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAyB,CAAC;IACpD,CAAC;IAEO,KAAK,CAAC,SAAS,CAAC,QAAkB;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;QAC3D,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,qBAAqB,EAAE;YAC9E,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,KAAK,EAAE;gBAChC,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;SACnC,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,8BAA8B,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAsB,CAAC;IACjD,CAAC;IAEO,aAAa,CAAC,QAAgB,EAAE,IAAuB;QAC7D,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,EAAE,CAAC,MAAM,GAAG,GAAG,EAAE;YACf,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE;gBAAE,OAAO;YAC3B,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;YACpB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC;YACjD,sEAAsE;YACtE,sEAAsE;YACtE,oEAAoE;YACpE,wEAAwE;YACxE,IAAI,CAAC;gBACH,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;YAC3E,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YACD,IAAI,CAAC;gBACH,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;YACtB,CAAC;YAAC,MAAM,CAAC;gBACP,4CAA4C;YAC9C,CAAC;QACH,CAAC,CAAC;QACF,EAAE,CAAC,SAAS,GAAG,CAAC,EAAE,EAAE,EAAE;YACpB,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE;gBAAE,OAAO;YAC3B,uEAAuE;YACvE,oEAAoE;YACpE,oEAAoE;YACpE,6CAA6C;YAC7C,IAAI,OAAO,EAAE,CAAC,IAAI,KAAK,QAAQ,IAAI,EAAE,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;gBACpD,IAAI,CAAC;oBACH,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAChB,CAAC;gBAAC,MAAM,CAAC;oBACP,gDAAgD;gBAClD,CAAC;gBACD,OAAO;YACT,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;gBACrC,IAAI,MAAM;oBAAE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YACzC,CAAC;YAAC,MAAM,CAAC;gBACP,mBAAmB;YACrB,CAAC;QACH,CAAC,CAAC;QACF,EAAE,CAAC,OAAO,GAAG,GAAG,EAAE;YAChB,+DAA+D;YAC/D,wEAAwE;YACxE,0DAA0D;YAC1D,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE;gBAAE,OAAO;YAC3B,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;YACtB,IAAI,CAAC;gBACH,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,CAAC;YAAC,MAAM,CAAC;gBACP,kDAAkD;YACpD,CAAC;YACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,CAAC,CAAC;QACF,EAAE,CAAC,OAAO,GAAG,GAAG,EAAE;YAChB,sEAAsE;QACxE,CAAC,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACK,oBAAoB,CAAC,QAAgB,EAAE,QAAkB;QAC/D,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAC;QAC7D,uEAAuE;QACvE,uEAAuE;QACvE,sEAAsE;QACtE,qEAAqE;QACrE,2BAA2B;QAC3B,MAAM,UAAU,GAAG,sBAAsB,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC/E,MAAM,cAAc,GAAG,UAAU,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;QAE/E,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC,mBAAmB,EAAE,cAAc,CAAC,CAAC,CAAC;QACjF,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QAEb,EAAE,CAAC,MAAM,GAAG,GAAG,EAAE;YACf,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE;gBAAE,OAAO;YAC3B,oEAAoE;YACpE,iEAAiE;YACjE,uDAAuD;YACvD,IAAI,CAAC;gBACH,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC;YACvD,CAAC;YAAC,MAAM,CAAC;gBACP,8DAA8D;YAChE,CAAC;QACH,CAAC,CAAC;QAEF,EAAE,CAAC,SAAS,GAAG,CAAC,EAAE,EAAE,EAAE;YACpB,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE;gBAAE,OAAO;YAC3B,IAAI,KAAwD,CAAC;YAC7D,IAAI,CAAC;gBACH,KAAK,GAAG,OAAO,EAAE,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC;YACtE,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,qBAAqB;YAC/B,CAAC;YACD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;gBAAE,OAAO;YAChD,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9D,QAAQ,IAAI,EAAE,CAAC;gBACb,KAAK,gBAAgB,CAAC,CAAC,CAAC;oBACtB,sDAAsD;oBACtD,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;oBACpB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC;oBACjD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;wBAC/B,IAAI,CAAC;4BACH,EAAE,CAAC,IAAI,CACL,IAAI,CAAC,SAAS,CAAC;gCACb,IAAI,EAAE,WAAW;gCACjB,EAAE,EAAE,qBAAqB,EAAE;gCAC3B,OAAO,EAAE,oBAAoB,CAAC,OAAO,CAAC;gCACtC,aAAa,EAAE,UAAU;6BAC1B,CAAC,CACH,CAAC;wBACJ,CAAC;wBAAC,MAAM,CAAC;4BACP,iDAAiD;wBACnD,CAAC;oBACH,CAAC;oBACD,IAAI,CAAC;wBACH,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;oBACtB,CAAC;oBAAC,MAAM,CAAC;wBACP,6CAA6C;oBAC/C,CAAC;oBACD,MAAM;gBACR,CAAC;gBACD,KAAK,IAAI;oBACP,6DAA6D;oBAC7D,MAAM;gBACR,KAAK,MAAM,CAAC,CAAC,CAAC;oBACZ,oEAAoE;oBACpE,mEAAmE;oBACnE,+DAA+D;oBAC/D,kEAAkE;oBAClE,mEAAmE;oBACnE,MAAM,OAAO,GAAc,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;wBACnD,CAAC,CAAE,KAAK,CAAC,KAAmB;wBAC5B,CAAC,CAAC,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;4BAC/B,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;4BACf,CAAC,CAAC,EAAE,CAAC;oBACT,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;wBAC1B,IAAI,OAAO,GAAG,KAAK,QAAQ;4BAAE,SAAS;wBACtC,IAAI,OAAgB,CAAC;wBACrB,IAAI,CAAC;4BACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;wBAC5B,CAAC;wBAAC,MAAM,CAAC;4BACP,SAAS;wBACX,CAAC;wBACD,IACE,OAAO;4BACP,OAAO,OAAO,KAAK,QAAQ;4BAC3B,OAAQ,OAA8B,CAAC,IAAI,KAAK,QAAQ,EACxD,CAAC;4BACD,IAAI,CAAC;gCACH,IAAI,CAAC,aAAa,CAAC,OAA0B,CAAC,CAAC;4BACjD,CAAC;4BAAC,MAAM,CAAC;gCACP,yDAAyD;4BAC3D,CAAC;wBACH,CAAC;oBACH,CAAC;oBACD,MAAM;gBACR,CAAC;gBACD,KAAK,mBAAmB;oBACtB,iEAAiE;oBACjE,MAAM;gBACR,KAAK,kBAAkB,CAAC;gBACxB,KAAK,iBAAiB,CAAC;gBACvB,KAAK,OAAO;oBACV,oEAAoE;oBACpE,6DAA6D;oBAC7D,iEAAiE;oBACjE,IAAI,CAAC;wBACH,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC;oBACpC,CAAC;oBAAC,MAAM,CAAC;wBACP,SAAS;oBACX,CAAC;oBACD,MAAM;gBACR;oBACE,8DAA8D;oBAC9D,oDAAoD;oBACpD,MAAM;YACV,CAAC;QACH,CAAC,CAAC;QAEF,EAAE,CAAC,OAAO,GAAG,GAAG,EAAE;YAChB,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE;gBAAE,OAAO;YAC3B,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;YACtB,IAAI,CAAC;gBACH,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACvB,CAAC;YAAC,MAAM,CAAC;gBACP,mDAAmD;YACrD,CAAC;YACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,CAAC,CAAC;QACF,EAAE,CAAC,OAAO,GAAG,GAAG,EAAE;YAChB,sEAAsE;QACxE,CAAC,CAAC;IACJ,CAAC;IAEO,aAAa,CAAC,GAAoB;QACxC,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;YACjB,KAAK,cAAc;gBACjB,IAAI,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI;oBAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC1D,MAAM;YACR,KAAK,cAAc;gBACjB,IAAI,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,GAAG;oBAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACxD,MAAM;YACR,KAAK,oBAAoB;gBACvB,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;oBACzB,IAAI,CAAC;wBACH,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;oBAC5B,CAAC;oBAAC,MAAM,CAAC;wBACP,SAAS;oBACX,CAAC;gBACH,CAAC;gBACD,MAAM;YACR,KAAK,2BAA2B;gBAC9B,IAAI,IAAI,CAAC,6BAA6B,EAAE,CAAC;oBACvC,IAAI,CAAC;wBACH,IAAI,CAAC,6BAA6B,CAAC,GAAG,CAAC,CAAC;oBAC1C,CAAC;oBAAC,MAAM,CAAC;wBACP,SAAS;oBACX,CAAC;gBACH,CAAC;gBACD,MAAM;YACR,KAAK,gBAAgB,CAAC;YACtB,KAAK,mBAAmB,CAAC;YACzB,KAAK,sBAAsB,CAAC;YAC5B,KAAK,sBAAsB,CAAC;YAC5B,KAAK,uBAAuB,CAAC;YAC7B,KAAK,0BAA0B,CAAC;YAChC,KAAK,4BAA4B,CAAC;YAClC,KAAK,gCAAgC,CAAC;YACtC,KAAK,8BAA8B,CAAC;YACpC,KAAK,4BAA4B,CAAC;YAClC,KAAK,iBAAiB,CAAC;YACvB,KAAK,yBAAyB,CAAC;YAC/B,KAAK,mBAAmB,CAAC;YACzB,KAAK,mBAAmB;gBACtB,IAAI,IAAI,CAAC,sBAAsB,EAAE,CAAC;oBAChC,IAAI,CAAC;wBACH,IAAI,CAAC,sBAAsB,CAAC,GAA8B,CAAC,CAAC;oBAC9D,CAAC;oBAAC,MAAM,CAAC;wBACP,SAAS;oBACX,CAAC;gBACH,CAAC;gBACD,MAAM;YACR,KAAK,sBAAsB;gBACzB,kEAAkE;gBAClE,wEAAwE;gBACxE,IAAI,IAAI,CAAC,yBAAyB,EAAE,CAAC;oBACnC,IAAI,CAAC;wBACH,IAAI,CAAC,yBAAyB,CAAC,GAAiC,CAAC,CAAC;oBACpE,CAAC;oBAAC,MAAM,CAAC;wBACP,SAAS;oBACX,CAAC;gBACH,CAAC;gBACD,MAAM;YACR,KAAK,eAAe;gBAClB,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;oBAC5B,IAAI,CAAC;wBACH,IAAI,CAAC,kBAAkB,CAAC,GAA0B,CAAC,CAAC;oBACtD,CAAC;oBAAC,MAAM,CAAC;wBACP,SAAS;oBACX,CAAC;gBACH,CAAC;gBACD,MAAM;YACR,KAAK,kBAAkB;gBACrB,mEAAmE;gBACnE,mEAAmE;gBACnE,iEAAiE;gBACjE,oBAAoB;gBACpB,IAAI,IAAI,CAAC,cAAc,IAAK,GAA8B,CAAC,IAAI,EAAE,CAAC;oBAChE,IAAI,CAAC;wBACH,IAAI,CAAC,cAAc,CAAC,GAA6B,CAAC,CAAC;oBACrD,CAAC;oBAAC,MAAM,CAAC;wBACP,SAAS;oBACX,CAAC;gBACH,CAAC;gBACD,MAAM;QACV,CAAC;IACH,CAAC;IAEO,iBAAiB;QACvB,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QACzB,IAAI,IAAI,CAAC,cAAc;YAAE,OAAO;QAChC,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,GAAG,EAAE;YACpC,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;YAChC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YACrF,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;QACpB,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC1B,IAAK,IAAI,CAAC,cAAsB,EAAE,KAAK;YAAG,IAAI,CAAC,cAAsB,CAAC,KAAK,EAAE,CAAC;IAChF,CAAC;CACF;AAED,SAAS,YAAY,CAAC,GAAY;IAChC,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACzC,IAAI,MAAW,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,kFAAkF;IAClF,yEAAyE;IACzE,4CAA4C;IAC5C,MAAM,IAAI,GACR,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI;QACvB,MAAM,EAAE,GAAG,EAAE,IAAI;QACjB,MAAM,CAAC;IACT,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACpF,OAAO,IAAuB,CAAC;AACjC,CAAC;AAED,gFAAgF;AAEhF,mEAAmE;AACnE,MAAM,mBAAmB,GAAG,sBAAsB,CAAC;AAEnD;;;;;;;;;;;;;;GAcG;AACH,SAAS,wBAAwB,CAAC,QAAgB;IAChD,IAAI,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC1B,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1D,GAAG,GAAG,SAAS,GAAG,EAAE,CAAC;IACvB,CAAC;IACD,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC9B,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACpC,GAAG,GAAG,GAAG,GAAG,iBAAiB,CAAC;IAChC,CAAC;IACD,IAAI,YAAY,GAAG,EAAE,CAAC;IACtB,IAAI,CAAC;QACH,YAAY,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACxE,CAAC;IACD,wEAAwE;IACxE,0EAA0E;IAC1E,2DAA2D;IAC3D,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,wBAAwB,EAAE,eAAe,CAAC,CAAC;IACjF,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;AAChC,CAAC;AAED;;;;GAIG;AACH,SAAS,sBAAsB,CAC7B,KAAyB,EACzB,IAAY;IAEZ,OAAO;QACL,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE;QAC7C,IAAI;KACL,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAS,eAAe,CAAC,KAAa;IACpC,IAAI,GAAW,CAAC;IAChB,8DAA8D;IAC9D,MAAM,CAAC,GAAG,UAAiB,CAAC;IAC5B,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QACjC,yEAAyE;QACzE,+DAA+D;QAC/D,MAAM,IAAI,GAAG,QAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;QACjD,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;SAAM,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,IAAI,KAAK,UAAU,EAAE,CAAC;QAChD,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACzD,CAAC;SAAM,CAAC;QACN,wEAAwE;QACxE,wEAAwE;QACxE,cAAc;QACd,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACxE,CAAC;AAED;;;;;;GAMG;AACH,SAAS,oBAAoB,CAAC,QAAgB;IAC5C,OAAO,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACpC,CAAC;AAED;;;;GAIG;AACH,SAAS,qBAAqB;IAC5B,8DAA8D;IAC9D,MAAM,CAAC,GAAG,UAAiB,CAAC;IAC5B,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC;QACzB,OAAO,CAAC,CAAC,MAAM,CAAC,UAAU,EAAY,CAAC;IACzC,CAAC;IACD,OAAO,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AACrF,CAAC"}
|
|
@@ -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
|
package/dist/http.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"
|
|
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
|
|
5
|
-
|
|
6
|
-
|
|
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,
|
|
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;
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
|