@farthershore/farthershore-js 0.3.0 → 0.8.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 (283) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/README.md +47 -11
  3. package/dist/auth-user.d.ts +7 -0
  4. package/dist/auth-user.d.ts.map +1 -0
  5. package/dist/auth-user.js +43 -0
  6. package/dist/auth-user.js.map +1 -0
  7. package/dist/auto-key.d.ts +14 -0
  8. package/dist/auto-key.d.ts.map +1 -0
  9. package/dist/auto-key.js +70 -0
  10. package/dist/auto-key.js.map +1 -0
  11. package/dist/bootstrap.d.ts +19 -1
  12. package/dist/bootstrap.d.ts.map +1 -1
  13. package/dist/bootstrap.js +49 -1
  14. package/dist/bootstrap.js.map +1 -1
  15. package/dist/cache.d.ts +9 -0
  16. package/dist/cache.d.ts.map +1 -1
  17. package/dist/cache.js +12 -0
  18. package/dist/cache.js.map +1 -1
  19. package/dist/catalog.d.ts +171 -5
  20. package/dist/catalog.d.ts.map +1 -1
  21. package/dist/catalog.js +360 -15
  22. package/dist/catalog.js.map +1 -1
  23. package/dist/client.d.ts +51 -1
  24. package/dist/client.d.ts.map +1 -1
  25. package/dist/client.js +74 -2
  26. package/dist/client.js.map +1 -1
  27. package/dist/components/app.d.ts +7 -0
  28. package/dist/components/app.d.ts.map +1 -1
  29. package/dist/components/app.js +13 -19
  30. package/dist/components/app.js.map +1 -1
  31. package/dist/components/audit-log-table.d.ts +8 -0
  32. package/dist/components/audit-log-table.d.ts.map +1 -0
  33. package/dist/components/audit-log-table.js +49 -0
  34. package/dist/components/audit-log-table.js.map +1 -0
  35. package/dist/components/auth-guard.d.ts +80 -0
  36. package/dist/components/auth-guard.d.ts.map +1 -0
  37. package/dist/components/auth-guard.js +93 -0
  38. package/dist/components/auth-guard.js.map +1 -0
  39. package/dist/components/auth.d.ts +4 -3
  40. package/dist/components/auth.d.ts.map +1 -1
  41. package/dist/components/auth.js +74 -5
  42. package/dist/components/auth.js.map +1 -1
  43. package/dist/components/auto-key-banner.d.ts +8 -0
  44. package/dist/components/auto-key-banner.d.ts.map +1 -0
  45. package/dist/components/auto-key-banner.js +33 -0
  46. package/dist/components/auto-key-banner.js.map +1 -0
  47. package/dist/components/bill-estimator.d.ts +10 -0
  48. package/dist/components/bill-estimator.d.ts.map +1 -0
  49. package/dist/components/bill-estimator.js +22 -0
  50. package/dist/components/bill-estimator.js.map +1 -0
  51. package/dist/components/billing.d.ts.map +1 -1
  52. package/dist/components/billing.js +13 -1
  53. package/dist/components/billing.js.map +1 -1
  54. package/dist/components/cancel-subscription.d.ts +10 -0
  55. package/dist/components/cancel-subscription.d.ts.map +1 -0
  56. package/dist/components/cancel-subscription.js +57 -0
  57. package/dist/components/cancel-subscription.js.map +1 -0
  58. package/dist/components/capability-usage-card.d.ts +8 -0
  59. package/dist/components/capability-usage-card.d.ts.map +1 -0
  60. package/dist/components/capability-usage-card.js +39 -0
  61. package/dist/components/capability-usage-card.js.map +1 -0
  62. package/dist/components/chrome.d.ts.map +1 -1
  63. package/dist/components/chrome.js +1 -0
  64. package/dist/components/chrome.js.map +1 -1
  65. package/dist/components/credit.d.ts.map +1 -1
  66. package/dist/components/credit.js +1 -0
  67. package/dist/components/credit.js.map +1 -1
  68. package/dist/components/docs.d.ts.map +1 -1
  69. package/dist/components/docs.js +1 -0
  70. package/dist/components/docs.js.map +1 -1
  71. package/dist/components/env-badge.d.ts +14 -0
  72. package/dist/components/env-badge.d.ts.map +1 -0
  73. package/dist/components/env-badge.js +23 -0
  74. package/dist/components/env-badge.js.map +1 -0
  75. package/dist/components/error-boundary.d.ts +26 -0
  76. package/dist/components/error-boundary.d.ts.map +1 -0
  77. package/dist/components/error-boundary.js +43 -0
  78. package/dist/components/error-boundary.js.map +1 -0
  79. package/dist/components/feature-gate.d.ts +51 -0
  80. package/dist/components/feature-gate.d.ts.map +1 -0
  81. package/dist/components/feature-gate.js +61 -0
  82. package/dist/components/feature-gate.js.map +1 -0
  83. package/dist/components/feature.d.ts.map +1 -1
  84. package/dist/components/feature.js +1 -0
  85. package/dist/components/feature.js.map +1 -1
  86. package/dist/components/index.d.ts +36 -0
  87. package/dist/components/index.d.ts.map +1 -1
  88. package/dist/components/index.js +31 -0
  89. package/dist/components/index.js.map +1 -1
  90. package/dist/components/keys.d.ts.map +1 -1
  91. package/dist/components/keys.js +1 -0
  92. package/dist/components/keys.js.map +1 -1
  93. package/dist/components/limit-boundary.d.ts +39 -0
  94. package/dist/components/limit-boundary.d.ts.map +1 -0
  95. package/dist/components/limit-boundary.js +63 -0
  96. package/dist/components/limit-boundary.js.map +1 -0
  97. package/dist/components/manifest-nav.d.ts +47 -0
  98. package/dist/components/manifest-nav.d.ts.map +1 -0
  99. package/dist/components/manifest-nav.js +26 -0
  100. package/dist/components/manifest-nav.js.map +1 -0
  101. package/dist/components/onboarding-view.d.ts +16 -0
  102. package/dist/components/onboarding-view.d.ts.map +1 -0
  103. package/dist/components/onboarding-view.js +23 -0
  104. package/dist/components/onboarding-view.js.map +1 -0
  105. package/dist/components/org-switcher.d.ts +11 -0
  106. package/dist/components/org-switcher.d.ts.map +1 -0
  107. package/dist/components/org-switcher.js +32 -0
  108. package/dist/components/org-switcher.js.map +1 -0
  109. package/dist/components/payment-health-banner.d.ts +8 -0
  110. package/dist/components/payment-health-banner.d.ts.map +1 -0
  111. package/dist/components/payment-health-banner.js +42 -0
  112. package/dist/components/payment-health-banner.js.map +1 -0
  113. package/dist/components/plans-table.d.ts.map +1 -1
  114. package/dist/components/plans-table.js +1 -0
  115. package/dist/components/plans-table.js.map +1 -1
  116. package/dist/components/product-docs/markdown.d.ts +8 -14
  117. package/dist/components/product-docs/markdown.d.ts.map +1 -1
  118. package/dist/components/product-docs/markdown.js +10 -14
  119. package/dist/components/product-docs/markdown.js.map +1 -1
  120. package/dist/components/product-docs/navigation.d.ts.map +1 -1
  121. package/dist/components/product-docs/navigation.js +1 -0
  122. package/dist/components/product-docs/navigation.js.map +1 -1
  123. package/dist/components/product-docs/product-docs-shell.d.ts.map +1 -1
  124. package/dist/components/product-docs/product-docs-shell.js +1 -0
  125. package/dist/components/product-docs/product-docs-shell.js.map +1 -1
  126. package/dist/components/product-docs/product-docs.d.ts.map +1 -1
  127. package/dist/components/product-docs/product-docs.js +1 -0
  128. package/dist/components/product-docs/product-docs.js.map +1 -1
  129. package/dist/components/rate-limit-display.d.ts +10 -0
  130. package/dist/components/rate-limit-display.d.ts.map +1 -0
  131. package/dist/components/rate-limit-display.js +48 -0
  132. package/dist/components/rate-limit-display.js.map +1 -0
  133. package/dist/components/resources-panel.d.ts.map +1 -1
  134. package/dist/components/resources-panel.js +1 -0
  135. package/dist/components/resources-panel.js.map +1 -1
  136. package/dist/components/root.d.ts +34 -2
  137. package/dist/components/root.d.ts.map +1 -1
  138. package/dist/components/root.js +33 -8
  139. package/dist/components/root.js.map +1 -1
  140. package/dist/components/sign-in.d.ts.map +1 -1
  141. package/dist/components/sign-in.js +1 -0
  142. package/dist/components/sign-in.js.map +1 -1
  143. package/dist/components/spend-cap-control.d.ts +8 -0
  144. package/dist/components/spend-cap-control.d.ts.map +1 -0
  145. package/dist/components/spend-cap-control.js +64 -0
  146. package/dist/components/spend-cap-control.js.map +1 -0
  147. package/dist/components/splash.d.ts.map +1 -1
  148. package/dist/components/splash.js +1 -0
  149. package/dist/components/splash.js.map +1 -1
  150. package/dist/components/styles.css +290 -0
  151. package/dist/components/team-panel.d.ts +8 -0
  152. package/dist/components/team-panel.d.ts.map +1 -0
  153. package/dist/components/team-panel.js +69 -0
  154. package/dist/components/team-panel.js.map +1 -0
  155. package/dist/components/theme.d.ts.map +1 -1
  156. package/dist/components/theme.js +1 -0
  157. package/dist/components/theme.js.map +1 -1
  158. package/dist/components/top-up-prompt.d.ts +13 -0
  159. package/dist/components/top-up-prompt.d.ts.map +1 -0
  160. package/dist/components/top-up-prompt.js +51 -0
  161. package/dist/components/top-up-prompt.js.map +1 -0
  162. package/dist/components/trial-banner.d.ts +11 -0
  163. package/dist/components/trial-banner.d.ts.map +1 -0
  164. package/dist/components/trial-banner.js +25 -0
  165. package/dist/components/trial-banner.js.map +1 -0
  166. package/dist/components/upgrade-prompt.d.ts +5 -3
  167. package/dist/components/upgrade-prompt.d.ts.map +1 -1
  168. package/dist/components/upgrade-prompt.js +16 -5
  169. package/dist/components/upgrade-prompt.js.map +1 -1
  170. package/dist/components/usage.d.ts.map +1 -1
  171. package/dist/components/usage.js +39 -6
  172. package/dist/components/usage.js.map +1 -1
  173. package/dist/config.d.ts +74 -0
  174. package/dist/config.d.ts.map +1 -1
  175. package/dist/config.js +41 -3
  176. package/dist/config.js.map +1 -1
  177. package/dist/csv.d.ts +44 -0
  178. package/dist/csv.d.ts.map +1 -0
  179. package/dist/csv.js +99 -0
  180. package/dist/csv.js.map +1 -0
  181. package/dist/deny-codes.d.ts +44 -0
  182. package/dist/deny-codes.d.ts.map +1 -0
  183. package/dist/deny-codes.js +76 -0
  184. package/dist/deny-codes.js.map +1 -0
  185. package/dist/errors.d.ts +194 -7
  186. package/dist/errors.d.ts.map +1 -1
  187. package/dist/errors.js +324 -10
  188. package/dist/errors.js.map +1 -1
  189. package/dist/generated/catalog-types.d.ts +119 -0
  190. package/dist/generated/catalog-types.d.ts.map +1 -0
  191. package/dist/generated/catalog-types.js +21 -0
  192. package/dist/generated/catalog-types.js.map +1 -0
  193. package/dist/generated/version.d.ts +5 -0
  194. package/dist/generated/version.d.ts.map +1 -0
  195. package/dist/generated/version.js +18 -0
  196. package/dist/generated/version.js.map +1 -0
  197. package/dist/http.d.ts +6 -0
  198. package/dist/http.d.ts.map +1 -1
  199. package/dist/http.js +233 -59
  200. package/dist/http.js.map +1 -1
  201. package/dist/index.d.ts +20 -10
  202. package/dist/index.d.ts.map +1 -1
  203. package/dist/index.js +34 -3
  204. package/dist/index.js.map +1 -1
  205. package/dist/organization.d.ts +31 -0
  206. package/dist/organization.d.ts.map +1 -0
  207. package/dist/organization.js +90 -0
  208. package/dist/organization.js.map +1 -0
  209. package/dist/react/hooks.d.ts +160 -8
  210. package/dist/react/hooks.d.ts.map +1 -1
  211. package/dist/react/hooks.js +383 -26
  212. package/dist/react/hooks.js.map +1 -1
  213. package/dist/react/index.d.ts +8 -3
  214. package/dist/react/index.d.ts.map +1 -1
  215. package/dist/react/index.js +11 -1
  216. package/dist/react/index.js.map +1 -1
  217. package/dist/react/organization-context.d.ts +42 -0
  218. package/dist/react/organization-context.d.ts.map +1 -0
  219. package/dist/react/organization-context.js +96 -0
  220. package/dist/react/organization-context.js.map +1 -0
  221. package/dist/react/provider.d.ts.map +1 -1
  222. package/dist/react/provider.js +3 -1
  223. package/dist/react/provider.js.map +1 -1
  224. package/dist/react/use-async.d.ts.map +1 -1
  225. package/dist/react/use-async.js +1 -0
  226. package/dist/react/use-async.js.map +1 -1
  227. package/dist/react/use-reconcile.d.ts +26 -0
  228. package/dist/react/use-reconcile.d.ts.map +1 -0
  229. package/dist/react/use-reconcile.js +70 -0
  230. package/dist/react/use-reconcile.js.map +1 -0
  231. package/dist/react/use-upgrade.d.ts +25 -11
  232. package/dist/react/use-upgrade.d.ts.map +1 -1
  233. package/dist/react/use-upgrade.js +34 -7
  234. package/dist/react/use-upgrade.js.map +1 -1
  235. package/dist/reconcile.d.ts +34 -0
  236. package/dist/reconcile.d.ts.map +1 -0
  237. package/dist/reconcile.js +66 -0
  238. package/dist/reconcile.js.map +1 -0
  239. package/dist/resources/account.d.ts +5 -1
  240. package/dist/resources/account.d.ts.map +1 -1
  241. package/dist/resources/account.js +8 -3
  242. package/dist/resources/account.js.map +1 -1
  243. package/dist/resources/api.d.ts +19 -0
  244. package/dist/resources/api.d.ts.map +1 -1
  245. package/dist/resources/api.js +31 -1
  246. package/dist/resources/api.js.map +1 -1
  247. package/dist/resources/auth.d.ts +7 -1
  248. package/dist/resources/auth.d.ts.map +1 -1
  249. package/dist/resources/auth.js +10 -1
  250. package/dist/resources/auth.js.map +1 -1
  251. package/dist/resources/billing.d.ts +47 -6
  252. package/dist/resources/billing.d.ts.map +1 -1
  253. package/dist/resources/billing.js +77 -14
  254. package/dist/resources/billing.js.map +1 -1
  255. package/dist/resources/entitlements.d.ts +24 -0
  256. package/dist/resources/entitlements.d.ts.map +1 -1
  257. package/dist/resources/entitlements.js +34 -0
  258. package/dist/resources/entitlements.js.map +1 -1
  259. package/dist/resources/plans.d.ts +4 -1
  260. package/dist/resources/plans.d.ts.map +1 -1
  261. package/dist/resources/plans.js +26 -1
  262. package/dist/resources/plans.js.map +1 -1
  263. package/dist/resources/product.d.ts +4 -1
  264. package/dist/resources/product.d.ts.map +1 -1
  265. package/dist/resources/product.js +3 -0
  266. package/dist/resources/product.js.map +1 -1
  267. package/dist/resources/resources.d.ts +27 -5
  268. package/dist/resources/resources.d.ts.map +1 -1
  269. package/dist/resources/resources.js +53 -5
  270. package/dist/resources/resources.js.map +1 -1
  271. package/dist/resources/usage.d.ts +15 -3
  272. package/dist/resources/usage.d.ts.map +1 -1
  273. package/dist/resources/usage.js +6 -0
  274. package/dist/resources/usage.js.map +1 -1
  275. package/dist/top-up.d.ts +12 -0
  276. package/dist/top-up.d.ts.map +1 -0
  277. package/dist/top-up.js +33 -0
  278. package/dist/top-up.js.map +1 -0
  279. package/dist/types.d.ts +199 -38
  280. package/dist/types.d.ts.map +1 -1
  281. package/dist/types.js +10 -3
  282. package/dist/types.js.map +1 -1
  283. package/package.json +6 -2
package/CHANGELOG.md CHANGED
@@ -5,6 +5,44 @@ This project adheres to Semantic Versioning (pre-1.0: minors may break).
5
5
 
6
6
  ## [Unreleased]
7
7
 
8
+ ## [0.8.1] - 2026-06-23
9
+
10
+ ### Fixed
11
+
12
+ - **`startOnboarding` cache/token bust.** The onboarding helper now invalidates
13
+ the cached session/token after kicking off onboarding, so the next call sees
14
+ the freshly-provisioned state instead of a stale read.
15
+
16
+ ### Changed
17
+
18
+ - Lockstep family bump `0.8.0` → `0.8.1` to republish shipped drift since the
19
+ `0.8.0` cut. Companion SDK fixes in this family release:
20
+ `@farthershore/backend` route-canon `{rest}` → `{__fs_rest}` parity plus
21
+ HEAD-route reflection; `@farthershore/product` inherited-decorator-config
22
+ guard. Pin all three to `0.8.1`.
23
+
24
+ ## [0.8.0] - 2026-06-22
25
+
26
+ ### Changed
27
+
28
+ - **Lockstep SDK family.** `@farthershore/farthershore-js`,
29
+ `@farthershore/product`, and `@farthershore/backend` now publish at ONE shared
30
+ version (`0.8.0`). The frontend SDK jumps `0.2.0` → `0.8.0` to align with the
31
+ family floor (the highest current SDK). Pin all three to the same version. A CI
32
+ invariant (`sdk-family-version` in `@farthershore/contracts`) keeps the three
33
+ `package.json` versions equal.
34
+
35
+ ### Added
36
+
37
+ - `X-FS-SDK-Version` request header on every Core call — a one-way client
38
+ annotation (value = the SDK version) for platform observability. The platform
39
+ does not branch on it.
40
+ - A compat fingerprint (`CONTRACTS_FP`) is stamped into the generated catalog
41
+ types — a stable hash over the canonical `@farthershore/contracts` DTO set so
42
+ CI can detect when an SDK projection drifts from contracts.
43
+ - The resolve/bootstrap DTO now carries an additive `schemaVersion` for future
44
+ negotiation (read tolerantly; absent = `1`).
45
+
8
46
  ## [0.2.0] - 2026-06-18
9
47
 
10
48
  ### Added
package/README.md CHANGED
@@ -4,12 +4,14 @@ The **Farther Shore Frontend SDK** — the canonical browser integration layer
4
4
  between a static frontend artifact (the default dev-portal template, generated
5
5
  frontends, managed components, custom frontends) and the Farther Shore platform.
6
6
 
7
- > **Status: `0.1.0` (early release).** Published to npm. Pre-1.0, so minor
8
- > versions may include breaking changes while the API stabilizes against the dev
9
- > portal, managed template, and real builder features. See [`PUBLISHING.md`](./PUBLISHING.md)
10
- > for the gates to `1.0.0` (wire-contract lock, browser token exchange, gateway
11
- > CORS, stage e2e). The `@stripe/stripe-js` analog to the upstream runtime
12
- > package `@farthershore/backend`.
7
+ > **Status: `0.8.1` (lockstep SDK family).** Published to npm. Versioned in
8
+ > lockstep with `@farthershore/product` and `@farthershore/backend` — pin the
9
+ > three to the SAME version. Pre-1.0, so minor versions may include breaking
10
+ > changes while the API stabilizes against the dev portal, managed template, and
11
+ > real builder features. See [`PUBLISHING.md`](./PUBLISHING.md) for the gates to
12
+ > `1.0.0` (wire-contract lock, browser token exchange, gateway CORS, stage e2e).
13
+ > The `@stripe/stripe-js` analog to the upstream runtime package
14
+ > `@farthershore/backend`.
13
15
 
14
16
  ```bash
15
17
  pnpm add @farthershore/farthershore-js # React is an optional peer (for /react)
@@ -196,6 +198,37 @@ Hooks: `useBootstrap`, `useProduct`, `useSession` (+ `signIn`/`signOut`),
196
198
  `openBillingPortal`), `useFeature(name)`, plus `useFartherShore()` for the raw
197
199
  client. They're thin wrappers over the client — no duplicated logic.
198
200
 
201
+ ## Customizing the portal (the fork model)
202
+
203
+ Every product ships with a generic managed portal by default. To customize it,
204
+ **edit the product repo's `frontend/` tree** (what `farthershore init` / platform
205
+ provisioning scaffolds): change the components, layout, and styles, then push —
206
+ the platform rebuilds `frontend/` into a custom release and serves it instead of
207
+ the default. Your product's _contract_ (plans, pricing, routes, meters) lives in
208
+ `product/` and is managed as code; the UI lives in `frontend/`.
209
+
210
+ The scaffold is already SDK-wired: one `createFartherShoreClient.fromEnv()`
211
+ client (coreUrl from the bundler env in dev, edge-injected `window.__FS_CONFIG__`
212
+ in prod — env stays automatic) under one `<FartherShoreRoot>`, rendering the
213
+ zero-prop data components (`<PlansTable/>`, `<UsageCard/>`, `<BillingSummary/>`,
214
+ `<ApiKeysPanel/>`, …).
215
+
216
+ ### Rendering a product-authored nav after a fork — `<FsManifestNav>`
217
+
218
+ A product can author a `frontendManifest` (nav + pages) in `product.config.ts`.
219
+ The managed default template renders it, but a **fork that replaces the template
220
+ silently drops it**. `<FsManifestNav>` is the opt-in fix: it maps the manifest's
221
+ `nav` entries to links so the authored nav survives a fork with one import. It's
222
+ zero-prop, accessible (a `<nav aria-label>` of links with `aria-current` on the
223
+ active path), and renders nothing when no manifest was authored.
224
+
225
+ ```tsx
226
+ import { FsManifestNav } from "@farthershore/farthershore-js/components";
227
+
228
+ // Renders boot.frontendManifest.nav; swap in a router <Link> via linkComponent.
229
+ <FsManifestNav activePath={location.pathname} />;
230
+ ```
231
+
199
232
  ## Deferred (no platform endpoint yet)
200
233
 
201
234
  - **Clerk browser sign-in** is host-app-driven (pass `getToken`); the SDK doesn't
@@ -205,13 +238,16 @@ client. They're thin wrappers over the client — no duplicated logic.
205
238
 
206
239
  ## Versioning & stability
207
240
 
208
- This package is **pre-1.0 (`0.x`)**. Under SemVer's 0.x rules a **minor** bump
209
- (`0.1.x` → `0.2.0`) may include **breaking changes**, so the usual caret range is
241
+ This package is **pre-1.0 (`0.x`)** and ships as part of a **lockstep SDK
242
+ family**: `@farthershore/farthershore-js`, `@farthershore/product`, and
243
+ `@farthershore/backend` are published at the SAME version (currently `0.8.1`).
244
+ Pin all three to the same version. Under SemVer's 0.x rules a **minor** bump
245
+ (`0.8.x` → `0.9.0`) may include **breaking changes**, so the usual caret range is
210
246
  unsafe here:
211
247
 
212
- - ❌ `^0.1` / `^0.1.0` — caret does **not** lock the minor across `0.x`; it would
213
- silently accept a breaking `0.2.0`.
214
- - ✅ Pin **exact** (`0.1.0`) or use a patch-only tilde (`~0.1.0`) until `1.0.0`.
248
+ - ❌ `^0.8` / `^0.8.1` — caret does **not** lock the minor across `0.x`; it would
249
+ silently accept a breaking `0.9.0`.
250
+ - ✅ Pin **exact** (`0.8.1`) or use a patch-only tilde (`~0.8.1`) until `1.0.0`.
215
251
 
216
252
  Breaking changes within `0.x` are recorded in [`CHANGELOG.md`](./CHANGELOG.md)
217
253
  (Keep a Changelog format) — read it before bumping.
@@ -0,0 +1,7 @@
1
+ import type { FsAuthUser } from "./types.js";
2
+ /** Normalize a Clerk user object OR a persona sign-in response user into the
3
+ * SDK's {@link FsAuthUser}. Returns null when `raw` isn't an object (signed
4
+ * out / unknown). Every named field degrades to null; `fullName` falls back to
5
+ * `first last` when Clerk/persona doesn't supply one. */
6
+ export declare function normalizeAuthUser(raw: unknown): FsAuthUser | null;
7
+ //# sourceMappingURL=auth-user.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-user.d.ts","sourceRoot":"","sources":["../src/auth-user.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAkB7C;;;0DAG0D;AAC1D,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,GAAG,IAAI,CAmBjE"}
@@ -0,0 +1,43 @@
1
+ // W6.1 — the FsAuthUser normalizer. One typed identity (`FsAuthUser`) over the
2
+ // two shapes the SDK ever sees: Clerk's user object and the persona sign-in
3
+ // RESPONSE user (built by core's `synthesizeUser`). Both put the primary email
4
+ // at the NESTED path `primaryEmailAddress.emailAddress` — read that path, with
5
+ // a flat `email` fallback. SDK-only: no platform/contracts dependency.
6
+ function str(v) {
7
+ return typeof v === "string" && v.length > 0 ? v : null;
8
+ }
9
+ /** Read the primary email from EITHER the Clerk/persona nested
10
+ * `primaryEmailAddress.emailAddress` path OR a flat top-level `email`. */
11
+ function readEmail(o) {
12
+ const nested = o.primaryEmailAddress;
13
+ if (nested && typeof nested === "object") {
14
+ const email = nested.emailAddress;
15
+ const s = str(email);
16
+ if (s)
17
+ return s;
18
+ }
19
+ return str(o.email);
20
+ }
21
+ /** Normalize a Clerk user object OR a persona sign-in response user into the
22
+ * SDK's {@link FsAuthUser}. Returns null when `raw` isn't an object (signed
23
+ * out / unknown). Every named field degrades to null; `fullName` falls back to
24
+ * `first last` when Clerk/persona doesn't supply one. */
25
+ export function normalizeAuthUser(raw) {
26
+ if (!raw || typeof raw !== "object")
27
+ return null;
28
+ const o = raw;
29
+ const firstName = str(o.firstName);
30
+ const lastName = str(o.lastName);
31
+ const explicitFull = str(o.fullName);
32
+ const synthesizedFull = [firstName, lastName].filter(Boolean).join(" ") || null;
33
+ return {
34
+ id: str(o.id),
35
+ firstName,
36
+ lastName,
37
+ fullName: explicitFull ?? synthesizedFull,
38
+ email: readEmail(o),
39
+ imageUrl: str(o.imageUrl),
40
+ raw,
41
+ };
42
+ }
43
+ //# sourceMappingURL=auth-user.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-user.js","sourceRoot":"","sources":["../src/auth-user.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,4EAA4E;AAC5E,+EAA+E;AAC/E,+EAA+E;AAC/E,uEAAuE;AAIvE,SAAS,GAAG,CAAC,CAAU;IACrB,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1D,CAAC;AAED;2EAC2E;AAC3E,SAAS,SAAS,CAAC,CAA0B;IAC3C,MAAM,MAAM,GAAG,CAAC,CAAC,mBAAmB,CAAC;IACrC,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QACzC,MAAM,KAAK,GAAI,MAAqC,CAAC,YAAY,CAAC;QAClE,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;QACrB,IAAI,CAAC;YAAE,OAAO,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AACtB,CAAC;AAED;;;0DAG0D;AAC1D,MAAM,UAAU,iBAAiB,CAAC,GAAY;IAC5C,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACjD,MAAM,CAAC,GAAG,GAA8B,CAAC;IAEzC,MAAM,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACjC,MAAM,YAAY,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACrC,MAAM,eAAe,GACnB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;IAE1D,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACb,SAAS;QACT,QAAQ;QACR,QAAQ,EAAE,YAAY,IAAI,eAAe;QACzC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;QACnB,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;QACzB,GAAG;KACJ,CAAC;AACJ,CAAC"}
@@ -0,0 +1,14 @@
1
+ /** The auto-created key arrives as `string | { secret?: string } | null` on the
2
+ * wire (OnboardingResult.autoApiKey). Normalize it to the bare secret, or null. */
3
+ export declare function normalizeAutoApiKey(value: unknown): string | null;
4
+ /** Stash the one-time secret for the dashboard to reveal. A falsy/invalid value
5
+ * is a no-op (the banner simply never shows). SSR/storage-blocked safe. */
6
+ export declare function storeAutoApiKey(value: unknown): void;
7
+ /** Read the stored secret WITHOUT clearing it. Returns null when none is
8
+ * stashed (or storage is unavailable). Clearing is the caller's explicit
9
+ * post-mount step so a re-render can't consume the showing key. */
10
+ export declare function peekAutoApiKey(): string | null;
11
+ /** Consume the stored secret — call once the reveal banner has mounted, so it is
12
+ * shown exactly once and never re-shown on a later visit. */
13
+ export declare function clearAutoApiKey(): void;
14
+ //# sourceMappingURL=auto-key.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-key.d.ts","sourceRoot":"","sources":["../src/auto-key.ts"],"names":[],"mappings":"AAkBA;oFACoF;AACpF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAOjE;AAED;4EAC4E;AAC5E,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAUpD;AAED;;oEAEoE;AACpE,wBAAgB,cAAc,IAAI,MAAM,GAAG,IAAI,CAS9C;AAED;8DAC8D;AAC9D,wBAAgB,eAAe,IAAI,IAAI,CAQtC"}
@@ -0,0 +1,70 @@
1
+ // One-time auto-created API-key reveal store (W8.4).
2
+ //
3
+ // During onboarding the platform auto-creates an API key whose secret is shown
4
+ // EXACTLY ONCE (`OnboardingResult.autoApiKey`). This SDK-managed store hands that
5
+ // secret from the onboarding/subscribe call to the dashboard, where it is
6
+ // revealed once and cleared — so a generated frontend doesn't hand-roll the
7
+ // stash (the dev-portal template previously kept its own copy).
8
+ //
9
+ // Backed by sessionStorage: the secret never lands in a URL / browser history
10
+ // and dies with the tab. The contract mirrors the SSR portal's 60s HttpOnly
11
+ // cookie: shown once, never re-shown.
12
+ // - storeAutoApiKey(value): stash after the onboarding/subscribe call.
13
+ // - peekAutoApiKey(): read WITHOUT clearing (so a StrictMode double
14
+ // render or remount can't eat the one showing).
15
+ // - clearAutoApiKey(): consume it — call once the banner has mounted.
16
+ const AUTO_KEY_STORAGE_KEY = "fs_auto_key";
17
+ /** The auto-created key arrives as `string | { secret?: string } | null` on the
18
+ * wire (OnboardingResult.autoApiKey). Normalize it to the bare secret, or null. */
19
+ export function normalizeAutoApiKey(value) {
20
+ if (typeof value === "string" && value)
21
+ return value;
22
+ if (value && typeof value === "object") {
23
+ const secret = value.secret;
24
+ if (typeof secret === "string" && secret)
25
+ return secret;
26
+ }
27
+ return null;
28
+ }
29
+ /** Stash the one-time secret for the dashboard to reveal. A falsy/invalid value
30
+ * is a no-op (the banner simply never shows). SSR/storage-blocked safe. */
31
+ export function storeAutoApiKey(value) {
32
+ const key = normalizeAutoApiKey(value);
33
+ if (!key)
34
+ return;
35
+ try {
36
+ if (typeof window !== "undefined" && window.sessionStorage) {
37
+ window.sessionStorage.setItem(AUTO_KEY_STORAGE_KEY, key);
38
+ }
39
+ }
40
+ catch {
41
+ /* no storage → the banner simply never shows */
42
+ }
43
+ }
44
+ /** Read the stored secret WITHOUT clearing it. Returns null when none is
45
+ * stashed (or storage is unavailable). Clearing is the caller's explicit
46
+ * post-mount step so a re-render can't consume the showing key. */
47
+ export function peekAutoApiKey() {
48
+ try {
49
+ if (typeof window !== "undefined" && window.sessionStorage) {
50
+ return window.sessionStorage.getItem(AUTO_KEY_STORAGE_KEY);
51
+ }
52
+ return null;
53
+ }
54
+ catch {
55
+ return null;
56
+ }
57
+ }
58
+ /** Consume the stored secret — call once the reveal banner has mounted, so it is
59
+ * shown exactly once and never re-shown on a later visit. */
60
+ export function clearAutoApiKey() {
61
+ try {
62
+ if (typeof window !== "undefined" && window.sessionStorage) {
63
+ window.sessionStorage.removeItem(AUTO_KEY_STORAGE_KEY);
64
+ }
65
+ }
66
+ catch {
67
+ /* best-effort */
68
+ }
69
+ }
70
+ //# sourceMappingURL=auto-key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-key.js","sourceRoot":"","sources":["../src/auto-key.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,EAAE;AACF,+EAA+E;AAC/E,kFAAkF;AAClF,0EAA0E;AAC1E,4EAA4E;AAC5E,gEAAgE;AAChE,EAAE;AACF,8EAA8E;AAC9E,4EAA4E;AAC5E,sCAAsC;AACtC,yEAAyE;AACzE,4EAA4E;AAC5E,4EAA4E;AAC5E,6EAA6E;AAE7E,MAAM,oBAAoB,GAAG,aAAa,CAAC;AAE3C;oFACoF;AACpF,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IACrD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvC,MAAM,MAAM,GAAI,KAA8B,CAAC,MAAM,CAAC;QACtD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;IAC1D,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;4EAC4E;AAC5E,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,MAAM,GAAG,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACvC,IAAI,CAAC,GAAG;QAAE,OAAO;IACjB,IAAI,CAAC;QACH,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;YAC3D,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,gDAAgD;IAClD,CAAC;AACH,CAAC;AAED;;oEAEoE;AACpE,MAAM,UAAU,cAAc;IAC5B,IAAI,CAAC;QACH,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;YAC3D,OAAO,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;8DAC8D;AAC9D,MAAM,UAAU,eAAe;IAC7B,IAAI,CAAC;QACH,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;YAC3D,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,iBAAiB;IACnB,CAAC;AACH,CAAC"}
@@ -1,6 +1,24 @@
1
1
  import { type ClientContext } from "./config.js";
2
- import type { Bootstrap } from "./types.js";
2
+ import type { Bootstrap, Plan } from "./types.js";
3
+ import type { PortalPlanWire, PlanMeterWire, PlanLimitWire } from "./generated/catalog-types.js";
4
+ type RawPlanMeter = PlanMeterWire;
5
+ type RawPlanLimit = PlanLimitWire;
6
+ type RawPortalPlan = Omit<PortalPlanWire, "grants" | "meters" | "limits" | "planDetails" | "featureGates" | "capability_limits" | "max_monthly_spend_cents" | "min_monthly_spend_cents"> & {
7
+ grants?: PortalPlanWire["grants"] | null;
8
+ meters?: RawPlanMeter[] | null;
9
+ limits?: RawPlanLimit[] | null;
10
+ planDetails?: string[] | null;
11
+ featureGates?: Record<string, boolean> | null;
12
+ capability_limits?: Record<string, number | boolean> | null;
13
+ max_monthly_spend_cents?: number | null;
14
+ min_monthly_spend_cents?: number | null;
15
+ };
16
+ /** Map a snake_case wire `PortalPlan` → the camelCase domain {@link Plan}.
17
+ * INTERNAL helper shared by `resolveBootstrap` (catalog) and the `/me`
18
+ * account surface (`availablePlans`) — NOT part of the public API. */
19
+ export declare function mapPlan(p: RawPortalPlan): Plan;
3
20
  /** Resolve + cache the product/env/gateway onto `ctx`. Idempotent — safe to call
4
21
  * repeatedly; the client memoizes the result. */
5
22
  export declare function resolveBootstrap(ctx: ClientContext): Promise<Bootstrap>;
23
+ export {};
6
24
  //# sourceMappingURL=bootstrap.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,KAAK,EAEV,SAAS,EAYV,MAAM,YAAY,CAAC;AA2MpB;kDACkD;AAClD,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,CAuC7E"}
1
+ {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,KAAK,EAEV,SAAS,EAMT,IAAI,EAKL,MAAM,YAAY,CAAC;AAMpB,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACb,aAAa,EACd,MAAM,8BAA8B,CAAC;AAiDtC,KAAK,YAAY,GAAG,aAAa,CAAC;AAClC,KAAK,YAAY,GAAG,aAAa,CAAC;AAQlC,KAAK,aAAa,GAAG,IAAI,CACvB,cAAc,EACZ,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,aAAa,GACb,cAAc,GACd,mBAAmB,GACnB,yBAAyB,GACzB,yBAAyB,CAC5B,GAAG;IACF,MAAM,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;IACzC,MAAM,CAAC,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;IAC/B,MAAM,CAAC,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC9C,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC;IAC5D,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzC,CAAC;AAoFF;;uEAEuE;AACvE,wBAAgB,OAAO,CAAC,CAAC,EAAE,aAAa,GAAG,IAAI,CAqB9C;AAsED;kDACkD;AAClD,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,CA8C7E"}
package/dist/bootstrap.js CHANGED
@@ -77,13 +77,19 @@ function mapPlanLimit(l) {
77
77
  ...(l.enforcement ? { enforcement: l.enforcement } : {}),
78
78
  };
79
79
  }
80
- function mapPlan(p) {
80
+ /** Map a snake_case wire `PortalPlan` → the camelCase domain {@link Plan}.
81
+ * INTERNAL helper shared by `resolveBootstrap` (catalog) and the `/me`
82
+ * account surface (`availablePlans`) — NOT part of the public API. */
83
+ export function mapPlan(p) {
81
84
  return {
82
85
  id: p.id,
83
86
  key: p.key,
84
87
  name: p.name,
85
88
  description: p.description ?? null,
86
89
  recurringFeeCents: p.recurring_fee_cents,
90
+ // The platform omits `billing_interval` for monthly plans (the default);
91
+ // default a missing/absent value to "month" so the UI always has a cadence.
92
+ billingInterval: p.billing_interval === "year" ? "year" : "month",
87
93
  grants: p.grants ?? [],
88
94
  trialDays: p.trial_days,
89
95
  maxMonthlySpendCents: p.max_monthly_spend_cents ?? null,
@@ -96,6 +102,45 @@ function mapPlan(p) {
96
102
  ...(p.creditPolicy ? { creditPolicy: p.creditPolicy } : {}),
97
103
  };
98
104
  }
105
+ /** Map the resolve DTO's declared-resource catalog into the SDK domain type,
106
+ * enriching each entry with its per-plan numeric `cap`. The cap is NOT on the
107
+ * catalog wire shape — it lives on each plan's `capability_limits[<name>]`
108
+ * (the BARE resource name, e.g. `widgets`, NOT `resource:widgets`). We resolve
109
+ * it from the FEATURED plan when one is set, else the first plan that caps it,
110
+ * so the catalog carries a sensible default ceiling for display. A `true`
111
+ * (unlimited) or non-numeric entry leaves `cap` undefined; a resource no plan
112
+ * caps stays uncapped. The authoritative live cap for the SUBSCRIBER's pinned
113
+ * plan still comes from `fs.resources(name).count()` (W5.2). */
114
+ function mapDeclaredResources(raw, plans, featuredCompiledPlanId) {
115
+ if (!Array.isArray(raw))
116
+ return [];
117
+ const featured = featuredCompiledPlanId
118
+ ? plans.find((p) => p.id === featuredCompiledPlanId)
119
+ : undefined;
120
+ function capFor(name) {
121
+ const fromFeatured = featured?.capabilityLimits[name];
122
+ if (typeof fromFeatured === "number")
123
+ return fromFeatured;
124
+ for (const plan of plans) {
125
+ const value = plan.capabilityLimits[name];
126
+ if (typeof value === "number")
127
+ return value;
128
+ }
129
+ return undefined;
130
+ }
131
+ return raw
132
+ .filter((r) => !!r && typeof r.name === "string")
133
+ .map((r) => {
134
+ const cap = capFor(r.name);
135
+ return {
136
+ name: r.name,
137
+ ...(r.display ? { display: r.display } : {}),
138
+ scope: r.scope === "subject" ? "subject" : "subscription",
139
+ ...(r.subjectType ? { subjectType: r.subjectType } : {}),
140
+ ...(cap !== undefined ? { cap } : {}),
141
+ };
142
+ });
143
+ }
99
144
  /** Derive coarse capability keys from the resolved product + plans so a
100
145
  * managed frontend can branch on what the product actually offers (instead of
101
146
  * the previously hard-coded empty array). */
@@ -145,6 +190,8 @@ export async function resolveBootstrap(ctx) {
145
190
  ctx.environmentId = ctx.environmentId ?? environment.id;
146
191
  ctx.gatewayUrl = ctx.gatewayUrl ?? `https://${product.gatewayHost}`;
147
192
  return {
193
+ // CC5 — tolerant read: absent version means the pre-versioning shape (1).
194
+ schemaVersion: raw.schemaVersion ?? 1,
148
195
  product,
149
196
  environment,
150
197
  branding: product.branding,
@@ -152,6 +199,7 @@ export async function resolveBootstrap(ctx) {
152
199
  frontendReleaseHash: raw.frontendReleaseHash ?? null,
153
200
  frontendManifest: raw.frontendManifest ?? null,
154
201
  capabilities: deriveCapabilities(product, plans),
202
+ declaredResources: mapDeclaredResources(raw.product.declaredResources, plans, product.featuredCompiledPlanId),
155
203
  features: [],
156
204
  };
157
205
  }
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"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"}
package/dist/cache.d.ts CHANGED
@@ -6,4 +6,13 @@ export interface ReadCacheEntry {
6
6
  export declare function cachedRead<T>(ctx: ClientContext, parts: ReadonlyArray<string | null | undefined>, fn: () => Promise<T>): Promise<T>;
7
7
  /** Drop every cached read — after any mutation, auth change, or org switch. */
8
8
  export declare function bustReadCache(ctx: ClientContext): void;
9
+ /**
10
+ * Reset everything an ENTITLEMENT-MUTATING action invalidates (W6.3): the read
11
+ * cache AND the cached short-lived gateway context token. A plan change /
12
+ * cancel / restore / top-up / subscribe can change what the edge grants, so the
13
+ * next feature call must re-mint a token reflecting the new entitlement instead
14
+ * of riding the stale one. Use this (not bare {@link bustReadCache}) after any
15
+ * mutation that can move the subscriber's entitlement.
16
+ */
17
+ export declare function bustEntitlementCaches(ctx: ClientContext): void;
9
18
  //# sourceMappingURL=cache.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAIjD,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;CAC3B;AAED,wBAAgB,UAAU,CAAC,CAAC,EAC1B,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,aAAa,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,EAC/C,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACnB,OAAO,CAAC,CAAC,CAAC,CAaZ;AAED,+EAA+E;AAC/E,wBAAgB,aAAa,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,CAEtD"}
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAIjD,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;CAC3B;AAED,wBAAgB,UAAU,CAAC,CAAC,EAC1B,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,aAAa,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,EAC/C,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACnB,OAAO,CAAC,CAAC,CAAC,CAaZ;AAED,+EAA+E;AAC/E,wBAAgB,aAAa,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,CAEtD;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,CAG9D"}
package/dist/cache.js CHANGED
@@ -31,4 +31,16 @@ export function cachedRead(ctx, parts, fn) {
31
31
  export function bustReadCache(ctx) {
32
32
  ctx.readCache.clear();
33
33
  }
34
+ /**
35
+ * Reset everything an ENTITLEMENT-MUTATING action invalidates (W6.3): the read
36
+ * cache AND the cached short-lived gateway context token. A plan change /
37
+ * cancel / restore / top-up / subscribe can change what the edge grants, so the
38
+ * next feature call must re-mint a token reflecting the new entitlement instead
39
+ * of riding the stale one. Use this (not bare {@link bustReadCache}) after any
40
+ * mutation that can move the subscriber's entitlement.
41
+ */
42
+ export function bustEntitlementCaches(ctx) {
43
+ ctx.readCache.clear();
44
+ ctx.gatewayContextToken = null;
45
+ }
34
46
  //# sourceMappingURL=cache.js.map
package/dist/cache.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cache.js","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,EAAE;AACF,uEAAuE;AACvE,6EAA6E;AAC7E,0EAA0E;AAC1E,4EAA4E;AAC5E,4EAA4E;AAC5E,2EAA2E;AAC3E,yEAAyE;AACzE,EAAE;AACF,qEAAqE;AACrE,yEAAyE;AACzE,sCAAsC;AAItC,MAAM,WAAW,GAAG,MAAM,CAAC;AAO3B,MAAM,UAAU,UAAU,CACxB,GAAkB,EAClB,KAA+C,EAC/C,EAAoB;IAEpB,MAAM,GAAG,GAAG,CAAC,GAAG,KAAK,EAAE,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC,EAAE,GAAG,WAAW;QAAE,OAAO,GAAG,CAAC,OAAqB,CAAC;IACxE,MAAM,OAAO,GAAG,EAAE,EAAE,CAAC;IACrB,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7C,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE;QACjB,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,KAAK,OAAO,EAAE,CAAC;YAChD,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,aAAa,CAAC,GAAkB;IAC9C,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AACxB,CAAC"}
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,EAAE;AACF,uEAAuE;AACvE,6EAA6E;AAC7E,0EAA0E;AAC1E,4EAA4E;AAC5E,4EAA4E;AAC5E,2EAA2E;AAC3E,yEAAyE;AACzE,EAAE;AACF,qEAAqE;AACrE,yEAAyE;AACzE,sCAAsC;AAItC,MAAM,WAAW,GAAG,MAAM,CAAC;AAO3B,MAAM,UAAU,UAAU,CACxB,GAAkB,EAClB,KAA+C,EAC/C,EAAoB;IAEpB,MAAM,GAAG,GAAG,CAAC,GAAG,KAAK,EAAE,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC,EAAE,GAAG,WAAW;QAAE,OAAO,GAAG,CAAC,OAAqB,CAAC;IACxE,MAAM,OAAO,GAAG,EAAE,EAAE,CAAC;IACrB,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7C,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE;QACjB,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,KAAK,OAAO,EAAE,CAAC;YAChD,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,aAAa,CAAC,GAAkB;IAC9C,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AACxB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAkB;IACtD,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACtB,GAAG,CAAC,mBAAmB,GAAG,IAAI,CAAC;AACjC,CAAC"}