@bravely-studios/account-web 0.3.10 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/README.md +122 -5
  2. package/dist/ActivationStateMachine.d.ts +1 -1
  3. package/dist/ActivationStateMachine.d.ts.map +1 -1
  4. package/dist/ActivationStateMachine.js +6 -2
  5. package/dist/ActivationStateMachine.js.map +1 -1
  6. package/dist/BravelyAccountManager.d.ts +108 -2
  7. package/dist/BravelyAccountManager.d.ts.map +1 -1
  8. package/dist/BravelyAccountManager.js +376 -29
  9. package/dist/BravelyAccountManager.js.map +1 -1
  10. package/dist/components/BravelyProviderButtons.d.ts.map +1 -1
  11. package/dist/components/BravelyProviderButtons.js.map +1 -1
  12. package/dist/components/BravelySignInScreen.d.ts +55 -0
  13. package/dist/components/BravelySignInScreen.d.ts.map +1 -0
  14. package/dist/components/BravelySignInScreen.js +141 -0
  15. package/dist/components/BravelySignInScreen.js.map +1 -0
  16. package/dist/components/OfferSlotGrid.d.ts +204 -0
  17. package/dist/components/OfferSlotGrid.d.ts.map +1 -0
  18. package/dist/components/OfferSlotGrid.js +490 -0
  19. package/dist/components/OfferSlotGrid.js.map +1 -0
  20. package/dist/index.d.ts +5 -2
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +6 -1
  23. package/dist/index.js.map +1 -1
  24. package/dist/installMetrics.d.ts +40 -0
  25. package/dist/installMetrics.d.ts.map +1 -0
  26. package/dist/installMetrics.js +128 -0
  27. package/dist/installMetrics.js.map +1 -0
  28. package/dist/storage.d.ts +23 -10
  29. package/dist/storage.d.ts.map +1 -1
  30. package/dist/storage.js +52 -16
  31. package/dist/storage.js.map +1 -1
  32. package/dist/types.d.ts +8 -1
  33. package/dist/types.d.ts.map +1 -1
  34. package/dist/types.js +2 -1
  35. package/dist/types.js.map +1 -1
  36. package/package.json +1 -1
@@ -0,0 +1,128 @@
1
+ // Install metrics helpers (login-first cutover D6 — `analytics.first_open_once`
2
+ // + `analytics.install_path`).
3
+ //
4
+ // Two seams, both storage-backed (IndexedDB via the composite default), both
5
+ // per-origin (every Bravely web app runs on its own origin, so the sentinel
6
+ // and install id are per-app automatically):
7
+ //
8
+ // 1. `getOrMintInstallId()` — mint a UUID ONCE per install (origin) and
9
+ // persist it durably. Thread it into `BravelyAccountManager` via
10
+ // `setInstallId()` / `ManagerConfig.installId` so every auth exchange
11
+ // carries `install_id` and the server can reconcile the install onto
12
+ // the resolved `ba_id`.
13
+ //
14
+ // 2. `emitAppFirstOpenedIfNeeded()` — the fire-once `app_first_opened`
15
+ // guard. The HOST fires the actual analytics event inside the `emit`
16
+ // callback (this lib carries no analytics dependency); the helper owns
17
+ // the contract: a durable sentinel is written BEFORE the emit, so a
18
+ // crash between persist and emit can only UNDER-count, never
19
+ // double-fire. Reinstall semantics on web = cleared site data (the only
20
+ // legitimate re-fire). Subsequent opens are `app_relaunched` — the
21
+ // host's job, not this helper's.
22
+ //
23
+ // Per the spec, analytics opt-out / missing keys must no-op the network emit
24
+ // but STILL write the sentinel — implement that by making `emit` a no-op;
25
+ // the helper always persists first regardless.
26
+ import { defaultStorage } from "./storage.js";
27
+ /** Storage key for the per-install UUID (persistent / IndexedDB). */
28
+ export const INSTALL_ID_STORAGE_KEY = "install_id";
29
+ /** Storage key for the `app_first_opened` fire-once sentinel (persistent / IndexedDB). */
30
+ export const FIRST_OPEN_SENTINEL_STORAGE_KEY = "first_open_sentinel";
31
+ /**
32
+ * Module-singleton default storage so concurrent helper calls (and repeat
33
+ * calls across the page lifetime) share one adapter — required for the
34
+ * single-flight mint guard to work without the caller threading a storage
35
+ * instance through.
36
+ */
37
+ let sharedStorage = null;
38
+ function sharedDefaultStorage() {
39
+ if (!sharedStorage)
40
+ sharedStorage = defaultStorage();
41
+ return sharedStorage;
42
+ }
43
+ /**
44
+ * Single-flight mint guard, keyed per storage adapter: two concurrent
45
+ * `getOrMintInstallId()` calls must resolve to the SAME id (an install id
46
+ * that differs between the authorize leg and the token leg would split the
47
+ * install in the ledger).
48
+ */
49
+ const mintInFlight = new WeakMap();
50
+ /**
51
+ * Return the per-install UUID, minting + persisting it on first call.
52
+ * Stable for the life of the install (origin storage); cleared only when the
53
+ * user clears site data — which IS the reinstall boundary on web.
54
+ */
55
+ export function getOrMintInstallId(storage = sharedDefaultStorage()) {
56
+ const inFlight = mintInFlight.get(storage);
57
+ if (inFlight)
58
+ return inFlight;
59
+ const p = (async () => {
60
+ const existing = await storage.get(INSTALL_ID_STORAGE_KEY);
61
+ if (existing)
62
+ return existing;
63
+ const minted = mintUuid();
64
+ await storage.set(INSTALL_ID_STORAGE_KEY, minted);
65
+ return minted;
66
+ })().finally(() => {
67
+ mintInFlight.delete(storage);
68
+ });
69
+ mintInFlight.set(storage, p);
70
+ return p;
71
+ }
72
+ /**
73
+ * Per-storage serialization chain for the fire-once guard: two concurrent
74
+ * calls must not BOTH observe a missing sentinel and double-emit. Calls
75
+ * queue per storage adapter; the second runs after the first persisted the
76
+ * sentinel and therefore no-ops.
77
+ */
78
+ const firstOpenChain = new WeakMap();
79
+ /**
80
+ * Fire-once `app_first_opened` guard. Call at app entry, before any other
81
+ * UI/flow gating (NOT behind onboarding or sign-in). Persist-first contract:
82
+ * the sentinel row is written before `emit` runs. Concurrent calls are
83
+ * serialized per storage adapter (exactly one can fire).
84
+ */
85
+ export function emitAppFirstOpenedIfNeeded(opts) {
86
+ const storage = opts.storage ?? sharedDefaultStorage();
87
+ const prev = firstOpenChain.get(storage) ?? Promise.resolve();
88
+ const next = prev
89
+ .catch(() => undefined) // a failed predecessor must not poison the chain
90
+ .then(async () => {
91
+ const installId = await getOrMintInstallId(storage);
92
+ const existing = await storage.get(FIRST_OPEN_SENTINEL_STORAGE_KEY);
93
+ if (existing !== null) {
94
+ return { fired: false, installId };
95
+ }
96
+ // Persist-first: sentinel BEFORE emit. A crash/throw between the two
97
+ // can only under-count.
98
+ await storage.set(FIRST_OPEN_SENTINEL_STORAGE_KEY, new Date().toISOString());
99
+ try {
100
+ await opts.emit({ installId });
101
+ }
102
+ catch {
103
+ // Swallowed by contract: the sentinel already guarantees no re-fire.
104
+ }
105
+ return { fired: true, installId };
106
+ });
107
+ firstOpenChain.set(storage, next);
108
+ return next;
109
+ }
110
+ /** RFC 4122 v4 UUID via WebCrypto, with a manual fallback for older DOMs. */
111
+ function mintUuid() {
112
+ const c = globalThis.crypto;
113
+ if (c && typeof c.randomUUID === "function")
114
+ return c.randomUUID();
115
+ const bytes = new Uint8Array(16);
116
+ if (c && typeof c.getRandomValues === "function") {
117
+ c.getRandomValues(bytes);
118
+ }
119
+ else {
120
+ for (let i = 0; i < 16; i++)
121
+ bytes[i] = Math.floor(Math.random() * 256);
122
+ }
123
+ bytes[6] = (bytes[6] & 0x0f) | 0x40;
124
+ bytes[8] = (bytes[8] & 0x3f) | 0x80;
125
+ const hex = Array.from(bytes, (b) => b.toString(16).padStart(2, "0")).join("");
126
+ return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
127
+ }
128
+ //# sourceMappingURL=installMetrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installMetrics.js","sourceRoot":"","sources":["../src/installMetrics.ts"],"names":[],"mappings":"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"}
package/dist/storage.d.ts CHANGED
@@ -11,27 +11,40 @@ export interface Storage {
11
11
  /** A no-op storage for SSR or first-render where DOM globals are missing. */
12
12
  declare function memoryStorage(): Storage;
13
13
  /**
14
- * sessionStorage-backed adapter. Page-lifetime — best for BAS + PKCE verifier
15
- * which are not meant to survive a tab close. The refresh_token gets stored
16
- * separately via IndexedDB.
14
+ * sessionStorage-backed adapter. Page-lifetime — used only for the in-flight
15
+ * PKCE verifier + state (single OAuth dance secrets). Everything session-
16
+ * durable lives in IndexedDB.
17
17
  */
18
18
  declare function sessionStorageBacked(): Storage;
19
19
  /**
20
- * IndexedDB-backed adapter for longer-lived state (refresh_token,
21
- * entitlement cache). Wraps the verbose IDB API behind the same simple
22
- * surface. No external dependency small enough to inline.
20
+ * IndexedDB-backed adapter for the durable session (bas / ba_id / email /
21
+ * expires_at / refresh_token), entitlement cache, and install metrics keys.
22
+ * Wraps the verbose IDB API behind the same simple surface. No external
23
+ * dependency — small enough to inline.
23
24
  */
24
25
  declare function indexedDbBacked(dbName?: string, storeName?: string): Storage;
25
26
  /**
26
- * Composite storage: small/session keys land in sessionStorage; persistent
27
- * keys (refresh_token, entitlement cache) land in IndexedDB. Falls back to
28
- * an in-memory map if either subsystem is unavailable (SSR, tests).
27
+ * Composite storage: the in-flight PKCE keys land in sessionStorage; the
28
+ * durable session + caches land in IndexedDB. Falls back to an in-memory map
29
+ * if either subsystem is unavailable (SSR, tests).
29
30
  */
30
31
  declare class CompositeStorage implements Storage {
31
32
  private readonly session;
32
33
  private readonly persistent;
33
- /** Keys routed to persistent storage. Everything else lives in session. */
34
+ /**
35
+ * Keys routed to persistent storage (IndexedDB). Everything else lives in
36
+ * sessionStorage. D4 (login-first cutover): `bas` / `ba_id` / `email` /
37
+ * `expires_at` moved here from sessionStorage so a web sign-in survives
38
+ * tab close + browser restart; the PKCE verifier/state deliberately stay
39
+ * session-scoped.
40
+ */
34
41
  static readonly persistentKeys: Set<string>;
42
+ /**
43
+ * Keys that lived in sessionStorage before 0.4.0 and are now persistent.
44
+ * `get()` falls back to the legacy sessionStorage row and migrates it so a
45
+ * tab that was signed in when the host shipped 0.4.0 stays signed in.
46
+ */
47
+ static readonly legacySessionKeys: Set<string>;
35
48
  constructor(session: Storage, persistent: Storage);
36
49
  private route;
37
50
  set(k: string, v: string): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,OAAO;IACtB,4BAA4B;IAC5B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,oDAAoD;IACpD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACzC,oBAAoB;IACpB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,oDAAoD;IACpD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAID,6EAA6E;AAC7E,iBAAS,aAAa,IAAI,OAAO,CAgBhC;AAED;;;;GAIG;AACH,iBAAS,oBAAoB,IAAI,OAAO,CAoBvC;AAED;;;;GAIG;AACH,iBAAS,eAAe,CAAC,MAAM,SAAoB,EAAE,SAAS,SAAO,GAAG,OAAO,CAsC9E;AAED;;;;GAIG;AACH,cAAM,gBAAiB,YAAW,OAAO;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAU;IACrC,2EAA2E;IAC3E,MAAM,CAAC,QAAQ,CAAC,cAAc,cAI3B;gBAES,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO;IAKjD,OAAO,CAAC,KAAK;IAIP,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAGxC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAGtC,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAGhC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAOxC;AAED,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,oBAAoB,EAAE,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,OAAO;IACtB,4BAA4B;IAC5B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,oDAAoD;IACpD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACzC,oBAAoB;IACpB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,oDAAoD;IACpD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAID,6EAA6E;AAC7E,iBAAS,aAAa,IAAI,OAAO,CAgBhC;AAED;;;;GAIG;AACH,iBAAS,oBAAoB,IAAI,OAAO,CAoBvC;AAED;;;;;GAKG;AACH,iBAAS,eAAe,CAAC,MAAM,SAAoB,EAAE,SAAS,SAAO,GAAG,OAAO,CAsC9E;AAED;;;;GAIG;AACH,cAAM,gBAAiB,YAAW,OAAO;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAU;IACrC;;;;;;OAMG;IACH,MAAM,CAAC,QAAQ,CAAC,cAAc,cAU3B;IACH;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,iBAAiB,cAAsC;gBAE3D,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO;IAKjD,OAAO,CAAC,KAAK;IAIP,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAGxC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAUtC,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOhC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAOxC;AAED,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,oBAAoB,EAAE,eAAe,EAAE,CAAC"}
package/dist/storage.js CHANGED
@@ -2,13 +2,17 @@
2
2
  // verifier, and the entitlement cache without baking in any one backing
3
3
  // store.
4
4
  //
5
- // Priority order (Gate 1):
5
+ // Routing (login-first cutover D4, `identity.session_persistence`):
6
6
  // 1. ServiceWorker-controlled store via postMessage → not implemented yet;
7
7
  // host pages will replace `defaultStorage()` with their own SW adapter.
8
- // 2. sessionStorage for short-lived data (BAS, PKCE verifier)wipes on
9
- // tab close (good).
10
- // 3. IndexedDB for the refresh_token + entitlement cache survives reload
11
- // but no cross-origin leak.
8
+ // 2. sessionStorage ONLY for the in-flight PKCE verifier + state those
9
+ // are single-dance secrets that should die with the tab.
10
+ // 3. IndexedDB for the durable session (bas / ba_id / email / expires_at /
11
+ // refresh_token), the entitlement cache, the DPoP key thumbprint, and
12
+ // the install metrics keys. A web session must survive tab close,
13
+ // browser restart, and app updates — sessionStorage for `bas` was the
14
+ // family-wide "signed out on every visit" bug (spec
15
+ // `identity.session_persistence` calls it out as a red).
12
16
  //
13
17
  // For Gate 2 the refresh_token will be DPoP-bound and the IndexedDB row will
14
18
  // carry the JKT thumbprint of the non-extractable key it is bound to.
@@ -32,9 +36,9 @@ function memoryStorage() {
32
36
  };
33
37
  }
34
38
  /**
35
- * sessionStorage-backed adapter. Page-lifetime — best for BAS + PKCE verifier
36
- * which are not meant to survive a tab close. The refresh_token gets stored
37
- * separately via IndexedDB.
39
+ * sessionStorage-backed adapter. Page-lifetime — used only for the in-flight
40
+ * PKCE verifier + state (single OAuth dance secrets). Everything session-
41
+ * durable lives in IndexedDB.
38
42
  */
39
43
  function sessionStorageBacked() {
40
44
  return {
@@ -60,9 +64,10 @@ function sessionStorageBacked() {
60
64
  };
61
65
  }
62
66
  /**
63
- * IndexedDB-backed adapter for longer-lived state (refresh_token,
64
- * entitlement cache). Wraps the verbose IDB API behind the same simple
65
- * surface. No external dependency small enough to inline.
67
+ * IndexedDB-backed adapter for the durable session (bas / ba_id / email /
68
+ * expires_at / refresh_token), entitlement cache, and install metrics keys.
69
+ * Wraps the verbose IDB API behind the same simple surface. No external
70
+ * dependency — small enough to inline.
66
71
  */
67
72
  function indexedDbBacked(dbName = "bravely-account", storeName = "kv") {
68
73
  const openDb = () => new Promise((resolve, reject) => {
@@ -102,19 +107,37 @@ function indexedDbBacked(dbName = "bravely-account", storeName = "kv") {
102
107
  };
103
108
  }
104
109
  /**
105
- * Composite storage: small/session keys land in sessionStorage; persistent
106
- * keys (refresh_token, entitlement cache) land in IndexedDB. Falls back to
107
- * an in-memory map if either subsystem is unavailable (SSR, tests).
110
+ * Composite storage: the in-flight PKCE keys land in sessionStorage; the
111
+ * durable session + caches land in IndexedDB. Falls back to an in-memory map
112
+ * if either subsystem is unavailable (SSR, tests).
108
113
  */
109
114
  class CompositeStorage {
110
115
  session;
111
116
  persistent;
112
- /** Keys routed to persistent storage. Everything else lives in session. */
117
+ /**
118
+ * Keys routed to persistent storage (IndexedDB). Everything else lives in
119
+ * sessionStorage. D4 (login-first cutover): `bas` / `ba_id` / `email` /
120
+ * `expires_at` moved here from sessionStorage so a web sign-in survives
121
+ * tab close + browser restart; the PKCE verifier/state deliberately stay
122
+ * session-scoped.
123
+ */
113
124
  static persistentKeys = new Set([
125
+ "bas",
126
+ "ba_id",
127
+ "email",
128
+ "expires_at",
114
129
  "refresh_token",
115
130
  "entitlement_cache",
116
131
  "dpop_jkt_thumbprint",
132
+ "install_id",
133
+ "first_open_sentinel",
117
134
  ]);
135
+ /**
136
+ * Keys that lived in sessionStorage before 0.4.0 and are now persistent.
137
+ * `get()` falls back to the legacy sessionStorage row and migrates it so a
138
+ * tab that was signed in when the host shipped 0.4.0 stays signed in.
139
+ */
140
+ static legacySessionKeys = new Set(["bas", "ba_id", "email"]);
118
141
  constructor(session, persistent) {
119
142
  this.session = session;
120
143
  this.persistent = persistent;
@@ -126,10 +149,23 @@ class CompositeStorage {
126
149
  await this.route(k).set(k, v);
127
150
  }
128
151
  async get(k) {
129
- return this.route(k).get(k);
152
+ const value = await this.route(k).get(k);
153
+ if (value !== null || !CompositeStorage.legacySessionKeys.has(k))
154
+ return value;
155
+ // Pre-0.4.0 rows lived in sessionStorage. Migrate on first read.
156
+ const legacy = await this.session.get(k);
157
+ if (legacy === null)
158
+ return null;
159
+ await this.persistent.set(k, legacy);
160
+ await this.session.remove(k);
161
+ return legacy;
130
162
  }
131
163
  async remove(k) {
132
164
  await this.route(k).remove(k);
165
+ // Also clear any legacy sessionStorage copy so a remove is total.
166
+ if (CompositeStorage.legacySessionKeys.has(k)) {
167
+ await this.session.remove(k);
168
+ }
133
169
  }
134
170
  async clear() {
135
171
  await Promise.all([this.session.clear(), this.persistent.clear()]);
@@ -1 +1 @@
1
- {"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -110,7 +110,14 @@ export type BravelyAccountState = {
110
110
  kind: "failed";
111
111
  error: string;
112
112
  };
113
- export type CheckoutPlan = "monthly" | "annual" | "lifetime";
113
+ /**
114
+ * Catalog plan tokens for `openCheckout()`. Slot-1 is interval-true per the
115
+ * 2026-06-10 catalog rename: `monthly` (RVA apps) / `onetime` (IVA apps);
116
+ * `annual`/`lifetime` resolve server-side to the universal bundle plans
117
+ * (`premium_annual`/`premium_lifetime`). Legacy aliases keep working on the
118
+ * wire but new code should send these canonical keys.
119
+ */
120
+ export type CheckoutPlan = "monthly" | "onetime" | "annual" | "lifetime";
114
121
  /** Response from `POST /api/paddle-portal`. */
115
122
  export interface PaddlePortalSession {
116
123
  ok: true;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js CHANGED
@@ -2,6 +2,7 @@
2
2
  // bravely-commerce-router/openapi.yaml. Keep aligned by hand — the spec is
3
3
  // small enough that codegen is more friction than the lib is worth.
4
4
  //
5
- // API version baseline: 1.2.1 (adds Paddle customer-portal session minting).
5
+ // API version baseline: 1.6.0 (`/oauth/token` returns the rotating refresh
6
+ // token + accepts `grant_type=refresh_token`; sliding 365d session window).
6
7
  export {};
7
8
  //# sourceMappingURL=types.js.map
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,2EAA2E;AAC3E,oEAAoE;AACpE,EAAE;AACF,6EAA6E"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,2EAA2E;AAC3E,oEAAoE;AACpE,EAAE;AACF,2EAA2E;AAC3E,4EAA4E"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bravely-studios/account-web",
3
- "version": "0.3.10",
3
+ "version": "0.4.0",
4
4
  "description": "Bravely Account web facade: OAuth 2.1 + PKCE sign-in, BAS lifecycle, entitlement cache, activation state machine, C-ux M2/M3/M4 components. Used by all 10 utility web variants + bravely.dev.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",