@bravely-studios/account-web 0.5.0 → 0.5.2
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/analyticsEmitThrottle.d.ts +84 -0
- package/dist/analyticsEmitThrottle.d.ts.map +1 -0
- package/dist/analyticsEmitThrottle.js +179 -0
- package/dist/analyticsEmitThrottle.js.map +1 -0
- package/dist/displayName.d.ts.map +1 -1
- package/dist/displayName.js +1 -0
- package/dist/displayName.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +6 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/** Tunable limits. Defaults are the shipping values (verbatim from the .NET throttle). */
|
|
2
|
+
export interface AnalyticsEmitThrottleOptions {
|
|
3
|
+
/** At most one emit of a given coalesce key per this many ms (default 60_000). */
|
|
4
|
+
coalesceWindowMs: number;
|
|
5
|
+
/** Per-process token-bucket capacity (default 200). */
|
|
6
|
+
budgetMax: number;
|
|
7
|
+
/** Token refill cadence: +1 token every this many ms (default 300). */
|
|
8
|
+
budgetRefillMs: number;
|
|
9
|
+
/** Property keys folded into the coalesce key (default slot/source/surface/variant/reason/step/plan). */
|
|
10
|
+
coalesceDiscriminators: string[];
|
|
11
|
+
/** Events that always pass and never consume a token. */
|
|
12
|
+
neverDropEvents: ReadonlySet<string>;
|
|
13
|
+
/** Injectable clock (ms epoch); defaults to `Date.now`. Tests pass a fake. */
|
|
14
|
+
now: () => number;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Synchronous analytics-emit gate. One instance per page/process (hold it in a
|
|
18
|
+
* module singleton on the host's analytics layer). See the file header for the
|
|
19
|
+
* four protections and the firehose incident that motivated it. Pure
|
|
20
|
+
* bookkeeping; never throws.
|
|
21
|
+
*/
|
|
22
|
+
export declare class AnalyticsEmitThrottle {
|
|
23
|
+
private readonly coalesceWindowMs;
|
|
24
|
+
private readonly budgetMax;
|
|
25
|
+
private readonly budgetRefillMs;
|
|
26
|
+
private readonly discriminators;
|
|
27
|
+
private readonly neverDrop;
|
|
28
|
+
private readonly now;
|
|
29
|
+
private readonly lastEmitByKey;
|
|
30
|
+
private budgetTokens;
|
|
31
|
+
private budgetLastRefill;
|
|
32
|
+
constructor(opts?: Partial<AnalyticsEmitThrottleOptions>);
|
|
33
|
+
/**
|
|
34
|
+
* Returns `true` if `eventName` may be emitted now, recording the emit. Drops
|
|
35
|
+
* a repeat of the same coalesce key (name + identifying props) inside the
|
|
36
|
+
* coalesce window, and drops anything over the per-process token budget.
|
|
37
|
+
* `$`-prefixed meta events and `neverDropEvents` always pass (and never
|
|
38
|
+
* consume a token).
|
|
39
|
+
*
|
|
40
|
+
* Call this in the host's `track(...)` BEFORE any serialization/network work,
|
|
41
|
+
* so it gates BOTH the PostHog capture and the `/api/app-events` mirror.
|
|
42
|
+
*/
|
|
43
|
+
allowEmit(eventName: string, properties?: Record<string, unknown> | null): boolean;
|
|
44
|
+
private coalesceKey;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* The resolved entitlement gate the host compares across refreshes to decide
|
|
48
|
+
* whether `entitlement_refreshed` represents a REAL change. PII-free — three
|
|
49
|
+
* booleans, nothing identifying.
|
|
50
|
+
*/
|
|
51
|
+
export interface EntitlementResolution {
|
|
52
|
+
active: boolean;
|
|
53
|
+
trialActive: boolean;
|
|
54
|
+
subscriptionActive: boolean;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Emit-on-change tracker for `entitlement_refreshed`. Hosts run an entitlement
|
|
58
|
+
* refresh on every foreground/visibility change, the post-checkout activation
|
|
59
|
+
* poll, and a timer; an unconditional `entitlement_refreshed` emit on each of
|
|
60
|
+
* those flooded the firehose (the 2026-06 incident). Feed each freshly resolved
|
|
61
|
+
* gate to `changed(...)` and only emit when it returns `true`:
|
|
62
|
+
*
|
|
63
|
+
* ```ts
|
|
64
|
+
* const entitlementEmit = new EntitlementEmitGate();
|
|
65
|
+
* // after a refresh resolves:
|
|
66
|
+
* if (entitlementEmit.changed({ active, trialActive, subscriptionActive })) {
|
|
67
|
+
* track("entitlement_refreshed", { active, trial_active: trialActive, subscription_active: subscriptionActive });
|
|
68
|
+
* }
|
|
69
|
+
* ```
|
|
70
|
+
*
|
|
71
|
+
* The event still fires on every genuine flip (sign-in resolve, purchase, trial
|
|
72
|
+
* expiry, revoke) and collapses the no-op refreshes to nothing.
|
|
73
|
+
*/
|
|
74
|
+
export declare class EntitlementEmitGate {
|
|
75
|
+
private last;
|
|
76
|
+
/**
|
|
77
|
+
* Returns `true` iff `resolution` differs from the last value passed (always
|
|
78
|
+
* `true` on the first call), recording it as the new baseline.
|
|
79
|
+
*/
|
|
80
|
+
changed(resolution: EntitlementResolution): boolean;
|
|
81
|
+
/** Current baseline (the last resolution observed), for tests/diagnostics. */
|
|
82
|
+
get current(): EntitlementResolution | null;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=analyticsEmitThrottle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyticsEmitThrottle.d.ts","sourceRoot":"","sources":["../src/analyticsEmitThrottle.ts"],"names":[],"mappings":"AAmDA,0FAA0F;AAC1F,MAAM,WAAW,4BAA4B;IAC3C,kFAAkF;IAClF,gBAAgB,EAAE,MAAM,CAAC;IACzB,uDAAuD;IACvD,SAAS,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,cAAc,EAAE,MAAM,CAAC;IACvB,yGAAyG;IACzG,sBAAsB,EAAE,MAAM,EAAE,CAAC;IACjC,yDAAyD;IACzD,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACrC,8EAA8E;IAC9E,GAAG,EAAE,MAAM,MAAM,CAAC;CACnB;AAWD;;;;;GAKG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAW;IAC1C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsB;IAChD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IAEnC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA6B;IAC3D,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,gBAAgB,CAAS;gBAErB,IAAI,GAAE,OAAO,CAAC,4BAA4B,CAAM;IAW5D;;;;;;;;;OASG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,OAAO;IAuClF,OAAO,CAAC,WAAW;CASpB;AAED;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,IAAI,CAAsC;IAElD;;;OAGG;IACH,OAAO,CAAC,UAAU,EAAE,qBAAqB,GAAG,OAAO;IAWnD,8EAA8E;IAC9E,IAAI,OAAO,IAAI,qBAAqB,GAAG,IAAI,CAE1C;CACF"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
// Analytics-emit throttle (firehose-hardening #5f) — the web analog of the
|
|
2
|
+
// .NET `Analytics.AllowEmit` (saycopypaste-windows) and a sibling discipline to
|
|
3
|
+
// this package's identity-traffic guardrails, extended to the analytics-emit
|
|
4
|
+
// path. Pure, host-agnostic gates the host calls right before it puts an event
|
|
5
|
+
// on the wire.
|
|
6
|
+
//
|
|
7
|
+
// WHY THIS LIVES IN THE SDK BUT SENDS NOTHING
|
|
8
|
+
// -------------------------------------------
|
|
9
|
+
// This package carries NO analytics dependency — every Bravely web app owns its
|
|
10
|
+
// own PostHog transport and the identity `/api/app-events` mirror (see
|
|
11
|
+
// `installMetrics.ts`: "this lib carries no analytics dependency"). So this is
|
|
12
|
+
// NOT an analytics client; it is a gate:
|
|
13
|
+
//
|
|
14
|
+
// ```ts
|
|
15
|
+
// // host analytics layer, one instance per page/process:
|
|
16
|
+
// const emitThrottle = new AnalyticsEmitThrottle();
|
|
17
|
+
//
|
|
18
|
+
// function track(event: string, props?: Record<string, unknown>) {
|
|
19
|
+
// if (optedOut) return;
|
|
20
|
+
// if (!emitThrottle.allowEmit(event, props)) return;
|
|
21
|
+
// // ...existing posthog.capture(...) + POST /api/app-events mirror...
|
|
22
|
+
// }
|
|
23
|
+
// ```
|
|
24
|
+
//
|
|
25
|
+
// Server-side coalescing + the Cloudflare edge limit already protect ALL
|
|
26
|
+
// platforms; this is client-side defense-in-depth so a re-armed loop in the tab
|
|
27
|
+
// never even attempts the flood. It mirrors the .NET `AllowEmit` one-for-one.
|
|
28
|
+
//
|
|
29
|
+
// WHAT IT DOES
|
|
30
|
+
// ------------
|
|
31
|
+
// 1. Per-event-name coalescing — at most one emit of a given coalesce key per
|
|
32
|
+
// `coalesceWindowMs` (60s). The key is the event name plus identifying
|
|
33
|
+
// discriminator props (`slot`, `source`, `surface`, `variant`, `reason`,
|
|
34
|
+
// `step`, `plan`), so the three distinct `slot_viewed` events the offer
|
|
35
|
+
// grid fires (one per slot) each pass, while a tight loop of IDENTICAL
|
|
36
|
+
// events (the `entitlement_refreshed` flood, whose resolved tuple never
|
|
37
|
+
// changes) collapses to one. The FIRST emit in any window always passes.
|
|
38
|
+
// 2. Per-process token-bucket budget — `budgetMax` (200) tokens refilling +1
|
|
39
|
+
// every `budgetRefillMs` (300ms); a runaway loop drains it to a trickle.
|
|
40
|
+
// 3. Never-drop exemptions — money-critical funnel TERMINALS
|
|
41
|
+
// (`purchase_completed`, `subscription_activated`, `checkout_completed`,
|
|
42
|
+
// `auth_completed`) and genuine entitlement changes (`entitlement_refreshed`)
|
|
43
|
+
// ALWAYS pass and never consume a token, so a prior event storm can't drop
|
|
44
|
+
// the one event that records a real purchase.
|
|
45
|
+
// 4. `$`-prefixed PostHog meta events (`$identify`, …) always pass.
|
|
46
|
+
//
|
|
47
|
+
// `entitlement_refreshed` is never-drop because its durable fix is the
|
|
48
|
+
// EMIT-ON-CHANGE guard (`EntitlementEmitGate` below): only emit when the
|
|
49
|
+
// resolved `(active, trial, subscription)` tuple actually changed. Coalescing it
|
|
50
|
+
// would wrongly drop a second REAL change inside 60s (trial→paid, paid→revoked).
|
|
51
|
+
const DEFAULT_DISCRIMINATORS = ["slot", "source", "surface", "variant", "reason", "step", "plan"];
|
|
52
|
+
const DEFAULT_NEVER_DROP = new Set([
|
|
53
|
+
"purchase_completed",
|
|
54
|
+
"subscription_activated",
|
|
55
|
+
"checkout_completed",
|
|
56
|
+
"auth_completed",
|
|
57
|
+
"entitlement_refreshed",
|
|
58
|
+
]);
|
|
59
|
+
/**
|
|
60
|
+
* Synchronous analytics-emit gate. One instance per page/process (hold it in a
|
|
61
|
+
* module singleton on the host's analytics layer). See the file header for the
|
|
62
|
+
* four protections and the firehose incident that motivated it. Pure
|
|
63
|
+
* bookkeeping; never throws.
|
|
64
|
+
*/
|
|
65
|
+
export class AnalyticsEmitThrottle {
|
|
66
|
+
coalesceWindowMs;
|
|
67
|
+
budgetMax;
|
|
68
|
+
budgetRefillMs;
|
|
69
|
+
discriminators;
|
|
70
|
+
neverDrop;
|
|
71
|
+
now;
|
|
72
|
+
lastEmitByKey = new Map();
|
|
73
|
+
budgetTokens;
|
|
74
|
+
budgetLastRefill;
|
|
75
|
+
constructor(opts = {}) {
|
|
76
|
+
this.coalesceWindowMs = opts.coalesceWindowMs ?? 60_000;
|
|
77
|
+
this.budgetMax = opts.budgetMax ?? 200;
|
|
78
|
+
this.budgetRefillMs = opts.budgetRefillMs ?? 300;
|
|
79
|
+
this.discriminators = opts.coalesceDiscriminators ?? DEFAULT_DISCRIMINATORS;
|
|
80
|
+
this.neverDrop = opts.neverDropEvents ?? DEFAULT_NEVER_DROP;
|
|
81
|
+
this.now = opts.now ?? Date.now;
|
|
82
|
+
this.budgetTokens = this.budgetMax;
|
|
83
|
+
this.budgetLastRefill = this.now();
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Returns `true` if `eventName` may be emitted now, recording the emit. Drops
|
|
87
|
+
* a repeat of the same coalesce key (name + identifying props) inside the
|
|
88
|
+
* coalesce window, and drops anything over the per-process token budget.
|
|
89
|
+
* `$`-prefixed meta events and `neverDropEvents` always pass (and never
|
|
90
|
+
* consume a token).
|
|
91
|
+
*
|
|
92
|
+
* Call this in the host's `track(...)` BEFORE any serialization/network work,
|
|
93
|
+
* so it gates BOTH the PostHog capture and the `/api/app-events` mirror.
|
|
94
|
+
*/
|
|
95
|
+
allowEmit(eventName, properties) {
|
|
96
|
+
// $-prefixed PostHog meta events ($identify, $set, …): never throttled.
|
|
97
|
+
if (eventName.startsWith("$"))
|
|
98
|
+
return true;
|
|
99
|
+
// Money-critical completions + genuine entitlement changes always pass and
|
|
100
|
+
// do NOT consume a token — a purchase must land even mid-storm.
|
|
101
|
+
if (this.neverDrop.has(eventName))
|
|
102
|
+
return true;
|
|
103
|
+
const key = this.coalesceKey(eventName, properties);
|
|
104
|
+
const now = this.now();
|
|
105
|
+
// Refill the token bucket for elapsed wall-clock time.
|
|
106
|
+
const elapsed = now - this.budgetLastRefill;
|
|
107
|
+
if (elapsed > 0 && this.budgetRefillMs > 0) {
|
|
108
|
+
this.budgetTokens = Math.min(this.budgetMax, this.budgetTokens + elapsed / this.budgetRefillMs);
|
|
109
|
+
this.budgetLastRefill = now;
|
|
110
|
+
}
|
|
111
|
+
// Per-key coalescing: at most one of a given key per window.
|
|
112
|
+
const last = this.lastEmitByKey.get(key);
|
|
113
|
+
if (last !== undefined && now - last < this.coalesceWindowMs) {
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
if (this.budgetTokens < 1)
|
|
117
|
+
return false;
|
|
118
|
+
this.budgetTokens -= 1;
|
|
119
|
+
this.lastEmitByKey.set(key, now);
|
|
120
|
+
// Bound the map: prune fully-elapsed keys so a long-running tab doesn't
|
|
121
|
+
// accumulate them.
|
|
122
|
+
if (this.lastEmitByKey.size > 256) {
|
|
123
|
+
for (const [k, v] of this.lastEmitByKey) {
|
|
124
|
+
if (now - v >= this.coalesceWindowMs)
|
|
125
|
+
this.lastEmitByKey.delete(k);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return true;
|
|
129
|
+
}
|
|
130
|
+
coalesceKey(eventName, properties) {
|
|
131
|
+
if (!properties)
|
|
132
|
+
return eventName;
|
|
133
|
+
let key = eventName;
|
|
134
|
+
for (const name of this.discriminators) {
|
|
135
|
+
const v = properties[name];
|
|
136
|
+
if (v !== undefined && v !== null)
|
|
137
|
+
key += `|${name}=${String(v)}`;
|
|
138
|
+
}
|
|
139
|
+
return key;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Emit-on-change tracker for `entitlement_refreshed`. Hosts run an entitlement
|
|
144
|
+
* refresh on every foreground/visibility change, the post-checkout activation
|
|
145
|
+
* poll, and a timer; an unconditional `entitlement_refreshed` emit on each of
|
|
146
|
+
* those flooded the firehose (the 2026-06 incident). Feed each freshly resolved
|
|
147
|
+
* gate to `changed(...)` and only emit when it returns `true`:
|
|
148
|
+
*
|
|
149
|
+
* ```ts
|
|
150
|
+
* const entitlementEmit = new EntitlementEmitGate();
|
|
151
|
+
* // after a refresh resolves:
|
|
152
|
+
* if (entitlementEmit.changed({ active, trialActive, subscriptionActive })) {
|
|
153
|
+
* track("entitlement_refreshed", { active, trial_active: trialActive, subscription_active: subscriptionActive });
|
|
154
|
+
* }
|
|
155
|
+
* ```
|
|
156
|
+
*
|
|
157
|
+
* The event still fires on every genuine flip (sign-in resolve, purchase, trial
|
|
158
|
+
* expiry, revoke) and collapses the no-op refreshes to nothing.
|
|
159
|
+
*/
|
|
160
|
+
export class EntitlementEmitGate {
|
|
161
|
+
last = null;
|
|
162
|
+
/**
|
|
163
|
+
* Returns `true` iff `resolution` differs from the last value passed (always
|
|
164
|
+
* `true` on the first call), recording it as the new baseline.
|
|
165
|
+
*/
|
|
166
|
+
changed(resolution) {
|
|
167
|
+
const prev = this.last;
|
|
168
|
+
this.last = { ...resolution };
|
|
169
|
+
return (prev === null ||
|
|
170
|
+
prev.active !== resolution.active ||
|
|
171
|
+
prev.trialActive !== resolution.trialActive ||
|
|
172
|
+
prev.subscriptionActive !== resolution.subscriptionActive);
|
|
173
|
+
}
|
|
174
|
+
/** Current baseline (the last resolution observed), for tests/diagnostics. */
|
|
175
|
+
get current() {
|
|
176
|
+
return this.last ? { ...this.last } : null;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=analyticsEmitThrottle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyticsEmitThrottle.js","sourceRoot":"","sources":["../src/analyticsEmitThrottle.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"displayName.d.ts","sourceRoot":"","sources":["../src/displayName.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C;;;;;GAKG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"displayName.d.ts","sourceRoot":"","sources":["../src/displayName.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C;;;;;GAKG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAYjD,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAInD"}
|
package/dist/displayName.js
CHANGED
package/dist/displayName.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"displayName.js","sourceRoot":"","sources":["../src/displayName.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,EAAE;AACF,4DAA4D;AAC5D,yEAAyE;AACzE,8EAA8E;AAC9E,sEAAsE;AACtE,4CAA4C;AAC5C,EAAE;AACF,6EAA6E;AAC7E,6EAA6E;AAC7E,sEAAsE;AAItE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAA4B;IACpD,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,UAAU;IACnB,aAAa,EAAE,gBAAgB;IAC/B,UAAU,EAAE,aAAa;IACzB,YAAY,EAAE,cAAc;IAC5B,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,WAAW;IACrB,YAAY,EAAE,eAAe;IAC7B,SAAS,EAAE,YAAY;
|
|
1
|
+
{"version":3,"file":"displayName.js","sourceRoot":"","sources":["../src/displayName.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,EAAE;AACF,4DAA4D;AAC5D,yEAAyE;AACzE,8EAA8E;AAC9E,sEAAsE;AACtE,4CAA4C;AAC5C,EAAE;AACF,6EAA6E;AAC7E,6EAA6E;AAC7E,sEAAsE;AAItE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAA4B;IACpD,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,UAAU;IACnB,aAAa,EAAE,gBAAgB;IAC/B,UAAU,EAAE,aAAa;IACzB,YAAY,EAAE,cAAc;IAC5B,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,WAAW;IACrB,YAAY,EAAE,eAAe;IAC7B,SAAS,EAAE,YAAY;IACvB,KAAK,EAAE,YAAY;CACpB,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,IAAI,IAAI,IAAI,aAAa;QAAE,OAAO,aAAa,CAAC,IAAe,CAAC,CAAC;IACjE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACtD,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -18,4 +18,5 @@ export { ErrorFirehoseClient, CONSENT_KEY, OPT_OUT_SHOWN_KEY, GEO_CACHE_KEY, OPT
|
|
|
18
18
|
export { BravelySignInScreen, SIGN_IN_OFFLINE_HEADLINE, SIGN_IN_OFFLINE_BODY, SIGN_IN_OFFLINE_RETRY_LABEL, SIGN_IN_COMPACT_MAX_WIDTH, type BravelySignInScreenProps, } from "./components/BravelySignInScreen.js";
|
|
19
19
|
export { OfferSlotGrid, buildOfferSlots, bonusAppsForSlug, offerThemeForSlug, planTokenForSlot, telemetryValueForSlot, computeOfferFit, OFFER_THEMES, OFFER_GUARANTEE_LINE, OFFER_GUARANTEE_TOOLTIP, OFFER_FOOTER_NOTE, OFFER_BONUS_FOOTER, OFFER_BUNDLE_TAGLINE, OFFER_FIT_MIN_WIDTH, OFFER_FIT_MIN_SCALE, OFFER_FIT_MAX_SCALE, OFFER_FIT_PAD, OFFER_FIT_HEIGHT_FRACTION, OFFER_FIT_WIDTH_CAP_FRACTION, OFFER_NATURAL_WIDTH, type OfferSlotKind, type OfferAppType, type OfferCtaVariant, type OfferRich, type OfferRichSeg, type OfferBonusApp, type OfferBonus, type OfferSlotCopy, type OfferTheme, type OfferSlotGridProps, type BuildOfferSlotsArgs, type OfferFitInput, type OfferFitResult, } from "./components/OfferSlotGrid.js";
|
|
20
20
|
export { getOrMintInstallId, emitAppFirstOpenedIfNeeded, INSTALL_ID_STORAGE_KEY, FIRST_OPEN_SENTINEL_STORAGE_KEY, type FirstOpenResult, type EmitAppFirstOpenedOptions, } from "./installMetrics.js";
|
|
21
|
+
export { AnalyticsEmitThrottle, EntitlementEmitGate, type AnalyticsEmitThrottleOptions, type EntitlementResolution, } from "./analyticsEmitThrottle.js";
|
|
21
22
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,UAAU,EACV,4BAA4B,GAC7B,MAAM,4BAA4B,CAAC;AACpC,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACnF,OAAO,EAAE,gBAAgB,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AACxF,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,KAAK,eAAe,GACrB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,eAAe,EACf,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,oBAAoB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACtH,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,aAAa,EACb,eAAe,EACf,KAAK,WAAW,GACjB,MAAM,WAAW,CAAC;AACnB,YAAY,EACV,OAAO,EACP,WAAW,EACX,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,EACd,kBAAkB,EAClB,WAAW,EACX,mBAAmB,EACnB,eAAe,EACf,mBAAmB,EACnB,aAAa,EACb,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,SAAS,GACV,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,gBAAgB,EAChB,iCAAiC,EACjC,qBAAqB,EACrB,gBAAgB,EAChB,mBAAmB,EACnB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,GAC3B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,YAAY,EACZ,0BAA0B,EAC1B,yBAAyB,EACzB,kBAAkB,EAClB,KAAK,iBAAiB,GACvB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,sBAAsB,EACtB,KAAK,2BAA2B,EAChC,KAAK,0BAA0B,EAC/B,KAAK,YAAY,GAClB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,+BAA+B,GACrC,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,yBAAyB,EACzB,0BAA0B,EAC1B,KAAK,4BAA4B,EACjC,KAAK,gCAAgC,GACtC,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjE,OAAO,EACL,mBAAmB,EACnB,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,QAAQ,EACR,qBAAqB,EACrB,cAAc,EACd,qBAAqB,EACrB,uBAAuB,EACvB,aAAa,EACb,oBAAoB,EACpB,KAAK,mBAAmB,EACxB,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,cAAc,GACpB,MAAM,4BAA4B,CAAC;AAIpC,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,oBAAoB,EACpB,2BAA2B,EAC3B,yBAAyB,EACzB,KAAK,wBAAwB,GAC9B,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,EACf,YAAY,EACZ,oBAAoB,EACpB,uBAAuB,EACvB,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,aAAa,EACb,yBAAyB,EACzB,4BAA4B,EAC5B,mBAAmB,EACnB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,SAAS,EACd,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,cAAc,GACpB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,kBAAkB,EAClB,0BAA0B,EAC1B,sBAAsB,EACtB,+BAA+B,EAC/B,KAAK,eAAe,EACpB,KAAK,yBAAyB,GAC/B,MAAM,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -20,4 +20,6 @@ export { ErrorFirehoseClient, CONSENT_KEY, OPT_OUT_SHOWN_KEY, GEO_CACHE_KEY, OPT
|
|
|
20
20
|
export { BravelySignInScreen, SIGN_IN_OFFLINE_HEADLINE, SIGN_IN_OFFLINE_BODY, SIGN_IN_OFFLINE_RETRY_LABEL, SIGN_IN_COMPACT_MAX_WIDTH, } from "./components/BravelySignInScreen.js";
|
|
21
21
|
export { OfferSlotGrid, buildOfferSlots, bonusAppsForSlug, offerThemeForSlug, planTokenForSlot, telemetryValueForSlot, computeOfferFit, OFFER_THEMES, OFFER_GUARANTEE_LINE, OFFER_GUARANTEE_TOOLTIP, OFFER_FOOTER_NOTE, OFFER_BONUS_FOOTER, OFFER_BUNDLE_TAGLINE, OFFER_FIT_MIN_WIDTH, OFFER_FIT_MIN_SCALE, OFFER_FIT_MAX_SCALE, OFFER_FIT_PAD, OFFER_FIT_HEIGHT_FRACTION, OFFER_FIT_WIDTH_CAP_FRACTION, OFFER_NATURAL_WIDTH, } from "./components/OfferSlotGrid.js";
|
|
22
22
|
export { getOrMintInstallId, emitAppFirstOpenedIfNeeded, INSTALL_ID_STORAGE_KEY, FIRST_OPEN_SENTINEL_STORAGE_KEY, } from "./installMetrics.js";
|
|
23
|
+
// ---- Analytics-emit throttle (firehose-hardening #5f) -----------------------
|
|
24
|
+
export { AnalyticsEmitThrottle, EntitlementEmitGate, } from "./analyticsEmitThrottle.js";
|
|
23
25
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,wDAAwD;AAExD,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,UAAU,EACV,4BAA4B,GAC7B,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,gBAAgB,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AACxF,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,eAAe,EACf,mBAAmB,GAEpB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,eAAe,EACf,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,oBAAoB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEtH,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,aAAa,EACb,eAAe,GAEhB,MAAM,WAAW,CAAC;AAuBnB,+EAA+E;AAC/E,OAAO,EACL,gBAAgB,EAChB,iCAAiC,EACjC,qBAAqB,EACrB,gBAAgB,EAChB,mBAAmB,GAGpB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,YAAY,EACZ,0BAA0B,EAC1B,yBAAyB,EACzB,kBAAkB,GAEnB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,sBAAsB,GAIvB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EACL,wBAAwB,EACxB,oBAAoB,GAIrB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,yBAAyB,EACzB,0BAA0B,GAG3B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjE,gFAAgF;AAChF,OAAO,EACL,mBAAmB,EACnB,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,QAAQ,EACR,qBAAqB,EACrB,cAAc,EACd,qBAAqB,EACrB,uBAAuB,EACvB,aAAa,EACb,oBAAoB,GAOrB,MAAM,4BAA4B,CAAC;AAEpC,8EAA8E;AAC9E,gFAAgF;AAChF,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,oBAAoB,EACpB,2BAA2B,EAC3B,yBAAyB,GAE1B,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,EACf,YAAY,EACZ,oBAAoB,EACpB,uBAAuB,EACvB,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,aAAa,EACb,yBAAyB,EACzB,4BAA4B,EAC5B,mBAAmB,GAcpB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,kBAAkB,EAClB,0BAA0B,EAC1B,sBAAsB,EACtB,+BAA+B,GAGhC,MAAM,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,wDAAwD;AAExD,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,UAAU,EACV,4BAA4B,GAC7B,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,gBAAgB,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AACxF,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,eAAe,EACf,mBAAmB,GAEpB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,eAAe,EACf,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,oBAAoB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEtH,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,aAAa,EACb,eAAe,GAEhB,MAAM,WAAW,CAAC;AAuBnB,+EAA+E;AAC/E,OAAO,EACL,gBAAgB,EAChB,iCAAiC,EACjC,qBAAqB,EACrB,gBAAgB,EAChB,mBAAmB,GAGpB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,YAAY,EACZ,0BAA0B,EAC1B,yBAAyB,EACzB,kBAAkB,GAEnB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,sBAAsB,GAIvB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EACL,wBAAwB,EACxB,oBAAoB,GAIrB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,yBAAyB,EACzB,0BAA0B,GAG3B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjE,gFAAgF;AAChF,OAAO,EACL,mBAAmB,EACnB,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,QAAQ,EACR,qBAAqB,EACrB,cAAc,EACd,qBAAqB,EACrB,uBAAuB,EACvB,aAAa,EACb,oBAAoB,GAOrB,MAAM,4BAA4B,CAAC;AAEpC,8EAA8E;AAC9E,gFAAgF;AAChF,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,oBAAoB,EACpB,2BAA2B,EAC3B,yBAAyB,GAE1B,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,EACf,YAAY,EACZ,oBAAoB,EACpB,uBAAuB,EACvB,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,aAAa,EACb,yBAAyB,EACzB,4BAA4B,EAC5B,mBAAmB,GAcpB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,kBAAkB,EAClB,0BAA0B,EAC1B,sBAAsB,EACtB,+BAA+B,GAGhC,MAAM,qBAAqB,CAAC;AAE7B,gFAAgF;AAChF,OAAO,EACL,qBAAqB,EACrB,mBAAmB,GAGpB,MAAM,4BAA4B,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
/**
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* The 10 utility app identifiers plus `tools` — the bravely.dev free-tools web
|
|
3
|
+
* client (no entitlements; auth-only gate). Hard-coded from the AppSlug enum in
|
|
4
|
+
* the spec; kept aligned with `APP_SLUGS` in the commerce-router catalog.
|
|
5
|
+
*/
|
|
6
|
+
export type AppSlug = "asapdf" | "diskaroo" | "markdly" | "printscreenly" | "prodjectly" | "saycopypaste" | "scry" | "stickily" | "terminaltags" | "todoingly" | "tools";
|
|
3
7
|
/** Per-app entitlement record. Matches `Entitlement` schema. */
|
|
4
8
|
export interface Entitlement {
|
|
5
9
|
/** Public-safe identifier (e.g. `diskaroo_pro`, `bravely_premium`). Never the internal `entlXXX` RC id. */
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAOA
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bravely-studios/account-web",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.2",
|
|
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",
|
|
@@ -29,13 +29,13 @@
|
|
|
29
29
|
"@testing-library/react": "^16.3.2",
|
|
30
30
|
"@types/react": "^19.2.14",
|
|
31
31
|
"@types/react-dom": "^19.2.3",
|
|
32
|
-
"@vitest/coverage-v8": "^
|
|
32
|
+
"@vitest/coverage-v8": "^4.1.9",
|
|
33
33
|
"fast-check": "^4.7.0",
|
|
34
34
|
"happy-dom": "^20.9.0",
|
|
35
35
|
"react": "^19.2.6",
|
|
36
36
|
"react-dom": "^19.2.6",
|
|
37
37
|
"typescript": "^5.6.0",
|
|
38
|
-
"vitest": "^
|
|
38
|
+
"vitest": "^4.1.9"
|
|
39
39
|
},
|
|
40
40
|
"peerDependencies": {
|
|
41
41
|
"react": ">=18.0.0"
|