@farthershore/farthershore-js 0.30.0 → 0.32.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.
- package/CHANGELOG.md +124 -0
- package/README.md +13 -4
- package/dist/auth-user.d.ts +1 -1
- package/dist/auth-user.d.ts.map +1 -1
- package/dist/auth-user.js +5 -6
- package/dist/auth-user.js.map +1 -1
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +49 -0
- package/dist/bootstrap.js.map +1 -1
- package/dist/client.d.ts +2 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +15 -4
- package/dist/client.js.map +1 -1
- package/dist/components/_internal.d.ts +19 -0
- package/dist/components/_internal.d.ts.map +1 -1
- package/dist/components/_internal.js +33 -0
- package/dist/components/_internal.js.map +1 -1
- package/dist/components/access-control.d.ts.map +1 -1
- package/dist/components/access-control.js +8 -5
- package/dist/components/access-control.js.map +1 -1
- package/dist/components/api-keys-manager.d.ts.map +1 -1
- package/dist/components/api-keys-manager.js +58 -13
- package/dist/components/api-keys-manager.js.map +1 -1
- package/dist/components/app.js +1 -1
- package/dist/components/app.js.map +1 -1
- package/dist/components/auth-guard.d.ts +3 -4
- package/dist/components/auth-guard.d.ts.map +1 -1
- package/dist/components/auth-guard.js +5 -5
- package/dist/components/auth-guard.js.map +1 -1
- package/dist/components/auth.d.ts +23 -0
- package/dist/components/auth.d.ts.map +1 -1
- package/dist/components/auth.js +274 -93
- package/dist/components/auth.js.map +1 -1
- package/dist/components/bill-preview-card.d.ts.map +1 -1
- package/dist/components/bill-preview-card.js +21 -1
- package/dist/components/bill-preview-card.js.map +1 -1
- package/dist/components/billing.d.ts.map +1 -1
- package/dist/components/billing.js +71 -5
- package/dist/components/billing.js.map +1 -1
- package/dist/components/cancel-subscription.d.ts.map +1 -1
- package/dist/components/cancel-subscription.js +48 -18
- package/dist/components/cancel-subscription.js.map +1 -1
- package/dist/components/keys.d.ts.map +1 -1
- package/dist/components/keys.js +1 -19
- package/dist/components/keys.js.map +1 -1
- package/dist/components/onboarding-plan-rail.d.ts +7 -3
- package/dist/components/onboarding-plan-rail.d.ts.map +1 -1
- package/dist/components/onboarding-plan-rail.js +1 -1
- package/dist/components/onboarding-plan-rail.js.map +1 -1
- package/dist/components/plans-table.d.ts.map +1 -1
- package/dist/components/plans-table.js +8 -4
- package/dist/components/plans-table.js.map +1 -1
- package/dist/components/pricing-plan-card.d.ts.map +1 -1
- package/dist/components/pricing-plan-card.js +11 -2
- package/dist/components/pricing-plan-card.js.map +1 -1
- package/dist/components/sign-in.d.ts +1 -3
- package/dist/components/sign-in.d.ts.map +1 -1
- package/dist/components/sign-in.js +5 -25
- package/dist/components/sign-in.js.map +1 -1
- package/dist/components/team-panel.d.ts.map +1 -1
- package/dist/components/team-panel.js +2 -2
- package/dist/components/team-panel.js.map +1 -1
- package/dist/components/team.js +1 -1
- package/dist/components/upgrade-prompt.d.ts +10 -1
- package/dist/components/upgrade-prompt.d.ts.map +1 -1
- package/dist/components/upgrade-prompt.js +79 -13
- package/dist/components/upgrade-prompt.js.map +1 -1
- package/dist/components/usage-limits.d.ts.map +1 -1
- package/dist/components/usage-limits.js +25 -2
- package/dist/components/usage-limits.js.map +1 -1
- package/dist/components/usage-surfaces.d.ts +14 -2
- package/dist/components/usage-surfaces.d.ts.map +1 -1
- package/dist/components/usage-surfaces.js +101 -14
- package/dist/components/usage-surfaces.js.map +1 -1
- package/dist/components/usage.d.ts.map +1 -1
- package/dist/components/usage.js +7 -8
- package/dist/components/usage.js.map +1 -1
- package/dist/config.d.ts +17 -10
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +4 -3
- package/dist/config.js.map +1 -1
- package/dist/deny-codes.d.ts +3 -0
- package/dist/deny-codes.d.ts.map +1 -1
- package/dist/deny-codes.js +7 -0
- package/dist/deny-codes.js.map +1 -1
- package/dist/format/catalog-display.d.ts +126 -3
- package/dist/format/catalog-display.d.ts.map +1 -1
- package/dist/format/catalog-display.js +397 -20
- package/dist/format/catalog-display.js.map +1 -1
- package/dist/format/index.d.ts +3 -1
- package/dist/format/index.d.ts.map +1 -1
- package/dist/format/index.js +22 -2
- package/dist/format/index.js.map +1 -1
- package/dist/format/plan-transition.d.ts +46 -0
- package/dist/format/plan-transition.d.ts.map +1 -0
- package/dist/format/plan-transition.js +133 -0
- package/dist/format/plan-transition.js.map +1 -0
- package/dist/format/usage-labels.d.ts +21 -0
- package/dist/format/usage-labels.d.ts.map +1 -0
- package/dist/format/usage-labels.js +71 -0
- package/dist/format/usage-labels.js.map +1 -0
- package/dist/generated/catalog-types.d.ts +80 -0
- package/dist/generated/catalog-types.d.ts.map +1 -1
- package/dist/generated/version.d.ts +2 -2
- package/dist/generated/version.js +2 -2
- package/dist/http.d.ts.map +1 -1
- package/dist/http.js +13 -2
- package/dist/http.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/mock/fixtures.d.ts.map +1 -1
- package/dist/mock/fixtures.js +5 -0
- package/dist/mock/fixtures.js.map +1 -1
- package/dist/mock/transport.d.ts.map +1 -1
- package/dist/mock/transport.js +1 -10
- package/dist/mock/transport.js.map +1 -1
- package/dist/organization.js +3 -3
- package/dist/organization.js.map +1 -1
- package/dist/react/hooks.d.ts +20 -10
- package/dist/react/hooks.d.ts.map +1 -1
- package/dist/react/hooks.js +4 -7
- package/dist/react/hooks.js.map +1 -1
- package/dist/react/mounted-types.d.ts +5 -1
- package/dist/react/mounted-types.d.ts.map +1 -1
- package/dist/resources/auth.d.ts +11 -37
- package/dist/resources/auth.d.ts.map +1 -1
- package/dist/resources/auth.js +50 -135
- package/dist/resources/auth.js.map +1 -1
- package/dist/resources/billing.d.ts +22 -9
- package/dist/resources/billing.d.ts.map +1 -1
- package/dist/resources/billing.js +83 -6
- package/dist/resources/billing.js.map +1 -1
- package/dist/test-utils/mock-client.d.ts.map +1 -1
- package/dist/test-utils/mock-client.js +18 -8
- package/dist/test-utils/mock-client.js.map +1 -1
- package/dist/types.d.ts +171 -23
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,130 @@ This project adheres to Semantic Versioning (pre-1.0: minors may break).
|
|
|
5
5
|
|
|
6
6
|
## [Unreleased]
|
|
7
7
|
|
|
8
|
+
## [0.32.0] - 2026-09-15
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- Completing SIGN-UP on a managed portal no longer leaves the visitor on the
|
|
13
|
+
signed-out landing page until they press refresh (FAR-1084 follow-up; stage
|
|
14
|
+
repro on Recall 2026-09-16). The satellite session recovery watched
|
|
15
|
+
`__client_uat` only at mount plus a 5-second window armed by the
|
|
16
|
+
`signIn()`/`signUp()` click. Sign-in's cookie lands on the first return
|
|
17
|
+
document, so that fit; sign-up reaches the portal across several documents
|
|
18
|
+
(email-code verification, an `sso-callback` hop, clerk-js's dev-browser
|
|
19
|
+
transfer) and spent the armed window on an earlier hop, so the document the
|
|
20
|
+
cookie finally landed on had nothing watching. The recovery now watches the
|
|
21
|
+
cookie for as long as the portal renders signed-out, and the armed
|
|
22
|
+
`fs-signin-return-pending` latch is gone.
|
|
23
|
+
|
|
24
|
+
- A hosted-auth round-trip (sign-in or sign-up) now returns to the portal with
|
|
25
|
+
the `#fs-sso` hint, so the satellite boot planner runs the cross-domain
|
|
26
|
+
handshake on the return document. It previously had to infer "this is an auth
|
|
27
|
+
return" from `document.referrer`, which Clerk's redirect back does not
|
|
28
|
+
reliably carry: measured on stage 2026-09-16 with an empty referrer, the
|
|
29
|
+
planner suppressed satellite auto-sync and the visitor landed on a portal that
|
|
30
|
+
was signed-out with no session to recover — a state no reload fixes, and one
|
|
31
|
+
that reads to the visitor as a CTA that did nothing. The hint is
|
|
32
|
+
self-limiting: the planner short-circuits when the origin already has the
|
|
33
|
+
session cookie, so the extra hop happens only where the flow was stuck.
|
|
34
|
+
|
|
35
|
+
- Every public portal CTA — "Sign Up", "Log in", each plan's "Get started" —
|
|
36
|
+
now navigates to the hosted auth page directly instead of asking clerk-js to
|
|
37
|
+
do it. Measured on the live Recall portal (stage 2026-09-16) with clerk-js
|
|
38
|
+
loaded and `Clerk.buildSignUpUrl()` returning the correct destination,
|
|
39
|
+
`await Clerk.redirectToSignUp({...})` RESOLVED WITHOUT NAVIGATING — no
|
|
40
|
+
console error, no request — while a plain assignment to the same URL
|
|
41
|
+
navigated fine, so every CTA read as a dead button. The SDK already computed
|
|
42
|
+
that URL for the clerk-js-never-loaded path, which has always worked; the
|
|
43
|
+
healthy and degraded paths now share it. The clerk-js call remains as the
|
|
44
|
+
fallback for a host that configured no hosted-auth URL.
|
|
45
|
+
|
|
46
|
+
- `<BillPreviewCard>` no longer reports in-flight requests as permanently
|
|
47
|
+
unpriceable. The unrated-usage caveat summed `pendingEventCount` and
|
|
48
|
+
`unratableEventCount` and printed the TOTAL inside the "could not be priced,
|
|
49
|
+
permanently" sentence, so a number presented to the subscriber as final moved
|
|
50
|
+
as traffic settled (measured on stage: 24 → 33 → 24, while the builder plane
|
|
51
|
+
correctly held at 24).
|
|
52
|
+
|
|
53
|
+
### Changed
|
|
54
|
+
|
|
55
|
+
- The bill-preview unrated-usage caveat is now two quiet statements instead of
|
|
56
|
+
one alarming one: `"N requests could not be priced and will not be billed."`
|
|
57
|
+
for the terminal set, and `"N requests are still being priced."` for the
|
|
58
|
+
in-flight set. The "contact support before treating this as your final bill"
|
|
59
|
+
escalation and the `since <date>` qualifier are gone — the date was derived
|
|
60
|
+
from the oldest event across BOTH sets, so it dated the permanent claim by an
|
|
61
|
+
in-flight event.
|
|
62
|
+
|
|
63
|
+
### Changed — cancelling actually cancels (BREAKING)
|
|
64
|
+
|
|
65
|
+
`billing.cancelSubscription()` / `useBilling().cancel()` now PERFORM the
|
|
66
|
+
cancellation and return a typed result. A paid subscription is scheduled on the
|
|
67
|
+
provider for the end of the current billing period; the result carries
|
|
68
|
+
`cancelsAt`, the boundary the provider confirmed (`null` when it reported
|
|
69
|
+
none — never inferred). `<CancelSubscription>` shows that date in its confirm
|
|
70
|
+
dialog instead of navigating away, and `<BillingSummary>` renders
|
|
71
|
+
"Cancels on <date>" for as long as the cancel is pending.
|
|
72
|
+
|
|
73
|
+
Breaking: `CancelSubscriptionResult.portalRedirect` is gone and
|
|
74
|
+
`cancelSubscription()` no longer accepts `returnUrl` — there is no hosted page
|
|
75
|
+
to come back from. Previously a paid cancel redirected into the Stripe Customer
|
|
76
|
+
Portal and scheduled nothing, so the dialog's promise and its effect had nothing
|
|
77
|
+
to do with each other (stage certification finding 68).
|
|
78
|
+
|
|
79
|
+
### Changed — a scheduled cancel can be taken back, in the product (BREAKING)
|
|
80
|
+
|
|
81
|
+
Finding 68 made cancelling real but left its undo as the shape it condemned:
|
|
82
|
+
`POST /me/restore` answered a paid restore with a Stripe Customer Portal URL,
|
|
83
|
+
and no SDK component had ever called it — so a subscriber who scheduled a
|
|
84
|
+
cancel had no way to reverse it except "Manage billing" and hunting for
|
|
85
|
+
Stripe's own "Renew" button on a hosted page.
|
|
86
|
+
|
|
87
|
+
- `billing.restoreSubscription()` / `useBilling().restore()` now return a typed
|
|
88
|
+
`RestoreSubscriptionResult` carrying the platform's POST-restore
|
|
89
|
+
`cancelAtPeriodEnd` (`null` only when the response carried no subscription
|
|
90
|
+
state to read it from — never guessed). Core lifts Stripe's
|
|
91
|
+
`cancel_at_period_end` in band under a scoped idempotency key, so a
|
|
92
|
+
double-clicked undo collapses onto one provider mutation.
|
|
93
|
+
- `<BillingSummary>` renders a **"Keep subscription"** action beside its
|
|
94
|
+
"Cancels on <date>" notice whenever a cancel is pending. It calls the
|
|
95
|
+
platform operation and re-renders off the refreshed subscription, so the
|
|
96
|
+
notice disappears because the platform says the cancel is gone — never
|
|
97
|
+
optimistically. A failed restore surfaces its error and leaves the notice in
|
|
98
|
+
place. Gated on `subscription:restore`, the permission core enforces for the
|
|
99
|
+
route (stage certification finding 68b, FAR-1100).
|
|
100
|
+
|
|
101
|
+
Breaking: `restoreSubscription()` no longer resolves to `{ raw }` alone, and
|
|
102
|
+
neither it nor the route accepts `returnUrl` — there is no hosted page to come
|
|
103
|
+
back from.
|
|
104
|
+
|
|
105
|
+
### Added — prepaid plans can be funded from the portal
|
|
106
|
+
|
|
107
|
+
- `billing.addFunds({ amountCents })` / `useBilling().addFunds(...)` starts a
|
|
108
|
+
provider checkout for more prepaid balance and returns its URL. Gated by core
|
|
109
|
+
on `invoice:pay`.
|
|
110
|
+
- `<BillingSummary>` shows the remaining prepaid balance and an "Add <amount>"
|
|
111
|
+
action for `prepaid` / `hybrid` plans that declare a prepaid funding bucket,
|
|
112
|
+
under the existing `invoice:pay` gate. An unavailable or opaque balance
|
|
113
|
+
renders as "—", never as `$0`.
|
|
114
|
+
- `format.prepaidFundingBucket(plan)` and `format.prepaidBalanceNanos(preview)`
|
|
115
|
+
expose the same two readers.
|
|
116
|
+
- `format.planPriceHeadline()` headlines a fee-less prepaid plan with its
|
|
117
|
+
declared amount ("$25" / "each period") instead of the bare word "Prepaid"
|
|
118
|
+
over "priced per the catalog" (stage certification finding 70).
|
|
119
|
+
|
|
120
|
+
## [0.31.0] - 2026-09-13
|
|
121
|
+
|
|
122
|
+
### Changed
|
|
123
|
+
|
|
124
|
+
- Test-persona browser auth is now server-owned. The SDK uses the platform
|
|
125
|
+
shell's host-only HttpOnly cookie for `/me`, Gateway context-token minting,
|
|
126
|
+
and logout; it no longer exchanges access keys or handoff fragments, returns
|
|
127
|
+
persona session bearers, or persists them in `sessionStorage`.
|
|
128
|
+
- `/me` hydrates the safe persona identity, organization, and expiry metadata
|
|
129
|
+
used by the managed auth layer. `FsSignIn` directs preview users to the CLI
|
|
130
|
+
instead of rendering a bearer-key form.
|
|
131
|
+
|
|
8
132
|
## [0.30.0] - 2026-09-10
|
|
9
133
|
|
|
10
134
|
### Added — signed-in customer readiness is automatic
|
package/README.md
CHANGED
|
@@ -3,8 +3,7 @@
|
|
|
3
3
|
The **Farther Shore Frontend SDK** — the browser + React integration layer for
|
|
4
4
|
your product's subscriber portal.
|
|
5
5
|
|
|
6
|
-
> **Status: `0.
|
|
7
|
-
> patches are additive. Pin the version you build against and read
|
|
6
|
+
> **Status: `0.32.0` (pre-1.0).** Pin the version you build against and read
|
|
8
7
|
> [`CHANGELOG.md`](./CHANGELOG.md) before upgrading.
|
|
9
8
|
|
|
10
9
|
```bash
|
|
@@ -155,10 +154,20 @@ const fs = createFartherShoreClientWithPlatformConfig({
|
|
|
155
154
|
Explicit config always wins over the injected channel. A request attempted
|
|
156
155
|
with no resolvable `coreUrl` throws an actionable `FartherShoreConfigError`.
|
|
157
156
|
|
|
157
|
+
### Test-persona browser sessions
|
|
158
|
+
|
|
159
|
+
In preview environments, run `farthershore persona login <business>
|
|
160
|
+
<persona-id> --env <environment>`. The CLI opens the platform-owned sign-in
|
|
161
|
+
bridge, which establishes a host-only HttpOnly cookie before returning to the
|
|
162
|
+
exact application route. The SDK then reads session identity and RBAC from
|
|
163
|
+
`/me` and mints short-lived Gateway context tokens with that same-origin
|
|
164
|
+
cookie. Application code never parses a handoff URL, receives a persona bearer,
|
|
165
|
+
or stores one in web storage.
|
|
166
|
+
|
|
158
167
|
## 2. BYO auth
|
|
159
168
|
|
|
160
|
-
Feed the client your own session token instead of the managed
|
|
161
|
-
|
|
169
|
+
Feed the client your own session token instead of the managed auth layer in one
|
|
170
|
+
of two ways:
|
|
162
171
|
|
|
163
172
|
- **At construction**, via `getToken` in the config:
|
|
164
173
|
|
package/dist/auth-user.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { FsAuthUser } from "./types.js";
|
|
2
|
-
/** Normalize a Clerk user object
|
|
2
|
+
/** Normalize a Clerk user object or safe persona identity view into the
|
|
3
3
|
* SDK's {@link FsAuthUser}. Returns null when `raw` isn't an object (signed
|
|
4
4
|
* out / unknown). Every named field degrades to null; `fullName` falls back to
|
|
5
5
|
* `first last` when Clerk/persona doesn't supply one. */
|
package/dist/auth-user.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-user.d.ts","sourceRoot":"","sources":["../src/auth-user.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth-user.d.ts","sourceRoot":"","sources":["../src/auth-user.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAkB7C;;;0DAG0D;AAC1D,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,GAAG,IAAI,CAmBjE"}
|
package/dist/auth-user.js
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
// W6.1 — the FsAuthUser normalizer. One typed identity (`FsAuthUser`) over the
|
|
2
|
-
//
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
// a flat `email` fallback. SDK-only: no platform/contracts dependency.
|
|
2
|
+
// identity shapes the SDK sees. Clerk supplies a rich user object; Core's safe
|
|
3
|
+
// persona session view supplies only non-secret identity metadata. SDK-only:
|
|
4
|
+
// no platform/contracts dependency.
|
|
6
5
|
function str(v) {
|
|
7
6
|
return typeof v === "string" && v.length > 0 ? v : null;
|
|
8
7
|
}
|
|
9
|
-
/** Read the primary email from
|
|
8
|
+
/** Read the primary email from either the Clerk-style nested
|
|
10
9
|
* `primaryEmailAddress.emailAddress` path OR a flat top-level `email`. */
|
|
11
10
|
function readEmail(o) {
|
|
12
11
|
const nested = o.primaryEmailAddress;
|
|
@@ -18,7 +17,7 @@ function readEmail(o) {
|
|
|
18
17
|
}
|
|
19
18
|
return str(o.email);
|
|
20
19
|
}
|
|
21
|
-
/** Normalize a Clerk user object
|
|
20
|
+
/** Normalize a Clerk user object or safe persona identity view into the
|
|
22
21
|
* SDK's {@link FsAuthUser}. Returns null when `raw` isn't an object (signed
|
|
23
22
|
* out / unknown). Every named field degrades to null; `fullName` falls back to
|
|
24
23
|
* `first last` when Clerk/persona doesn't supply one. */
|
package/dist/auth-user.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-user.js","sourceRoot":"","sources":["../src/auth-user.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E
|
|
1
|
+
{"version":3,"file":"auth-user.js","sourceRoot":"","sources":["../src/auth-user.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,+EAA+E;AAC/E,6EAA6E;AAC7E,oCAAoC;AAIpC,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"}
|
package/dist/bootstrap.d.ts.map
CHANGED
|
@@ -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;AAGjD,OAAO,KAAK,EAEV,SAAS,EAKT,IAAI,
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,OAAO,KAAK,EAEV,SAAS,EAKT,IAAI,EAOL,MAAM,YAAY,CAAC;AAMpB,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACb,aAAa,EAId,MAAM,8BAA8B,CAAC;AAkDtC,KAAK,YAAY,GAAG,aAAa,CAAC;AAClC,KAAK,YAAY,GAAG,aAAa,CAAC;AAQlC,MAAM,MAAM,aAAa,GAAG,IAAI,CAC9B,cAAc,EACZ,QAAQ,GACR,QAAQ,GACR,aAAa,GACb,iBAAiB,GACjB,yBAAyB,GACzB,yBAAyB,CAC5B,GAAG;IACF,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,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IAChD,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzC,CAAC;AA0IF;;uEAEuE;AACvE,wBAAgB,OAAO,CAAC,CAAC,EAAE,aAAa,GAAG,IAAI,CAwB9C;AAyED;kDACkD;AAClD,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,CA6C7E"}
|
package/dist/bootstrap.js
CHANGED
|
@@ -81,6 +81,54 @@ function mapPlanLimit(l) {
|
|
|
81
81
|
...(l.enforcement ? { enforcement: l.enforcement } : {}),
|
|
82
82
|
};
|
|
83
83
|
}
|
|
84
|
+
function mapPricingAmount(a) {
|
|
85
|
+
return {
|
|
86
|
+
num: a.num,
|
|
87
|
+
den: a.den,
|
|
88
|
+
decimal: a.decimal,
|
|
89
|
+
// A reader that drops the flag would present a truncated rate as exact.
|
|
90
|
+
rounded: a.rounded === true,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
function mapPricingRule(r) {
|
|
94
|
+
const shared = {
|
|
95
|
+
key: r.key,
|
|
96
|
+
measurementKey: r.measurementKey,
|
|
97
|
+
item: r.item ?? null,
|
|
98
|
+
where: r.where ?? [],
|
|
99
|
+
};
|
|
100
|
+
return r.kind === "perUnit"
|
|
101
|
+
? { ...shared, kind: "perUnit", amount: mapPricingAmount(r.amount) }
|
|
102
|
+
: {
|
|
103
|
+
...shared,
|
|
104
|
+
kind: r.kind,
|
|
105
|
+
tiers: r.tiers.map((t) => ({
|
|
106
|
+
upTo: t.upTo,
|
|
107
|
+
amount: mapPricingAmount(t.amount),
|
|
108
|
+
})),
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
/** Map the PUBLIC catalog-terms projection, when Core sent one. Absent means
|
|
112
|
+
* the plan binds no catalog or the builder declared opaque disclosure — both
|
|
113
|
+
* render as the "priced per the catalog" fallback, never as free. */
|
|
114
|
+
function mapPricingDisplay(d) {
|
|
115
|
+
if (!d)
|
|
116
|
+
return null;
|
|
117
|
+
return {
|
|
118
|
+
pricingPolicyKey: d.pricingPolicyKey,
|
|
119
|
+
meterKey: d.meterKey,
|
|
120
|
+
currency: d.currency,
|
|
121
|
+
binding: { kind: d.binding.kind, version: d.binding.version ?? null },
|
|
122
|
+
rules: (d.rules ?? []).map(mapPricingRule),
|
|
123
|
+
funding: (d.funding ?? []).map((f) => ({
|
|
124
|
+
kind: f.kind,
|
|
125
|
+
amountMinor: f.amountMinor,
|
|
126
|
+
recurs: f.recurs === true,
|
|
127
|
+
display: f.display ?? null,
|
|
128
|
+
})),
|
|
129
|
+
exhaustion: d.exhaustion ?? null,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
84
132
|
/** Map a snake_case wire `PortalPlan` → the camelCase domain {@link Plan}.
|
|
85
133
|
* INTERNAL helper shared by `resolveBootstrap` (catalog) and the `/me`
|
|
86
134
|
* account surface (`availablePlans`) — NOT part of the public API. */
|
|
@@ -106,6 +154,7 @@ export function mapPlan(p) {
|
|
|
106
154
|
limits: (p.limits ?? []).map(mapPlanLimit),
|
|
107
155
|
planDetails: p.planDetails ?? [],
|
|
108
156
|
resourceLimits: p.resource_limits ?? {},
|
|
157
|
+
pricingDisplay: mapPricingDisplay(p.pricingDisplay),
|
|
109
158
|
};
|
|
110
159
|
}
|
|
111
160
|
/** Map the resolve DTO's declared-resource catalog into the SDK domain type,
|
package/dist/bootstrap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,iFAAiF;AACjF,iFAAiF;AACjF,sCAAsC;AACtC,EAAE;AACF,+EAA+E;AAC/E,yEAAyE;AACzE,yEAAyE;AACzE,sEAAsE;AACtE,6EAA6E;AAC7E,iCAAiC;AAEjC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAExD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"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"}
|
package/dist/client.d.ts
CHANGED
|
@@ -113,7 +113,8 @@ export interface FartherShoreClient {
|
|
|
113
113
|
};
|
|
114
114
|
/** The business this frontend runs for (resolved via bootstrap). */
|
|
115
115
|
readonly business: BusinessResource;
|
|
116
|
-
/** Consumer session:
|
|
116
|
+
/** Consumer session: current identity, server-owned persona logout, and
|
|
117
|
+
* short-lived Gateway context-token minting. */
|
|
117
118
|
readonly auth: AuthResource;
|
|
118
119
|
/** The consumer's API keys (list / create / revoke / rotate). */
|
|
119
120
|
readonly keys: KeysResource;
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAaA,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,0BAA0B,EAC/B,KAAK,aAAa,EAInB,MAAM,aAAa,CAAC;AAOrB,OAAO,EAAa,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAEL,KAAK,gBAAgB,EACtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/client.js
CHANGED
|
@@ -16,7 +16,7 @@ import { bustReadCache, bustReadCacheAndWake, bustEntitlementCaches, } from "./c
|
|
|
16
16
|
import { coreFetch } from "./http.js";
|
|
17
17
|
import { createManagedIntegration, } from "./integrations.js";
|
|
18
18
|
import { createBusinessResource, } from "./resources/business.js";
|
|
19
|
-
import { createAuthResource
|
|
19
|
+
import { createAuthResource } from "./resources/auth.js";
|
|
20
20
|
import { createKeysResource } from "./resources/keys.js";
|
|
21
21
|
import { createUsageResource } from "./resources/usage.js";
|
|
22
22
|
import { createUsageLimitsResource, } from "./resources/usage-limits.js";
|
|
@@ -28,6 +28,19 @@ import { createRouteResource } from "./resources/route.js";
|
|
|
28
28
|
import { createResourcesResource, } from "./resources/resources.js";
|
|
29
29
|
import { persistOrganizationId, readPersistedOrganizationSelection, } from "./organization.js";
|
|
30
30
|
let mockModeBannerShown = false;
|
|
31
|
+
/** Remove bearer material written by frontend SDK <=0.30.0. New persona
|
|
32
|
+
* sessions are host-only HttpOnly cookies owned by the platform shell. */
|
|
33
|
+
function clearLegacyPersonaBearerStorage() {
|
|
34
|
+
try {
|
|
35
|
+
if (typeof window === "undefined")
|
|
36
|
+
return;
|
|
37
|
+
window.sessionStorage.removeItem("fs_persona_session_token");
|
|
38
|
+
window.sessionStorage.removeItem("fs_persona_session");
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
// Storage can be unavailable in privacy modes; the new SDK never reads it.
|
|
42
|
+
}
|
|
43
|
+
}
|
|
31
44
|
function installMockTransport(ctx) {
|
|
32
45
|
if (!mockModeBannerShown) {
|
|
33
46
|
mockModeBannerShown = true;
|
|
@@ -98,12 +111,10 @@ export function createFartherShoreClientWithPlatformConfig(config = {}) {
|
|
|
98
111
|
// no window/location/__FS_CONFIG__ reads itself, so construction can never
|
|
99
112
|
// throw for a missing coreUrl (only a later read of ctx.coreUrl can).
|
|
100
113
|
const ctx = buildContext(config);
|
|
114
|
+
clearLegacyPersonaBearerStorage();
|
|
101
115
|
if (isMockMode(config)) {
|
|
102
116
|
installMockTransport(ctx);
|
|
103
117
|
}
|
|
104
|
-
// Self-managed persona sessions: restore a persisted (unexpired) session so
|
|
105
|
-
// reloads stay signed in without any host wiring. No-op outside the browser.
|
|
106
|
-
primePersistedPersona(ctx);
|
|
107
118
|
// Self-persist the active org (W9.1b): restore the last explicit selection
|
|
108
119
|
// so a reload keeps either the chosen workspace OR an explicit request for
|
|
109
120
|
// the user's default subscription. `undefined` means no config selection,
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,yEAAyE;AACzE,8EAA8E;AAC9E,2CAA2C;AAC3C,EAAE;AACF,+EAA+E;AAC/E,+EAA+E;AAC/E,2EAA2E;AAC3E,wEAAwE;AACxE,gFAAgF;AAChF,uEAAuE;AACvE,oDAAoD;AAEpD,OAAO,EAIL,YAAY,EACZ,UAAU,EACV,sBAAsB,GACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,SAAS,EAAoB,MAAM,WAAW,CAAC;AACxD,OAAO,EACL,wBAAwB,GAEzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,sBAAsB,GAEvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,25 @@
|
|
|
1
1
|
/** Join class names, skipping falsy — the host-extension contract: every
|
|
2
2
|
* public component accepts `className` and appends it to its root. */
|
|
3
3
|
export declare function cx(...parts: Array<string | null | undefined | false>): string;
|
|
4
|
+
/** Raw ids mean nothing to a subscriber — when no roster label resolves, show
|
|
5
|
+
* a short recognizable stub instead of a full UUID. */
|
|
6
|
+
export declare function shortId(id: string): string;
|
|
7
|
+
/** A member's human-friendly label: name → email → a LABELED short id.
|
|
8
|
+
*
|
|
9
|
+
* The last step is never the naked external id: a roster row can arrive with
|
|
10
|
+
* neither name nor email (a seat provisioned by invite the person hasn't
|
|
11
|
+
* completed, a synthetic test member, a provider that projects no profile),
|
|
12
|
+
* and a bare UUID reads as a bug, not an identity. "Member b553f029…" stays
|
|
13
|
+
* distinguishable — the prefix is unique enough to pick the right seat —
|
|
14
|
+
* while saying what the thing is.
|
|
15
|
+
*
|
|
16
|
+
* Shared by every surface that names a seat (the API-keys "Mint for" picker,
|
|
17
|
+
* the roster, the team panel) so they cannot drift apart. */
|
|
18
|
+
export declare function memberLabel(m: {
|
|
19
|
+
userExternalId: string;
|
|
20
|
+
[k: string]: unknown;
|
|
21
|
+
}): string;
|
|
22
|
+
export declare function teamRoleLabel(role: string): string;
|
|
4
23
|
export declare function ArrowIcon(): import("react").JSX.Element;
|
|
5
24
|
export declare function CheckIcon({ className }: {
|
|
6
25
|
className?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_internal.d.ts","sourceRoot":"","sources":["../../src/components/_internal.tsx"],"names":[],"mappings":"AAIA;uEACuE;AACvE,wBAAgB,EAAE,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,KAAK,CAAC,GAAG,MAAM,CAE7E;AAED,wBAAgB,SAAS,gCAgBxB;AAED,wBAAgB,SAAS,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BAgB9D;AAED;2EAC2E;AAC3E,wBAAgB,eAAe,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BAcpE;AAED;oEACoE;AACpE,wBAAgB,cAAc,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BAenE"}
|
|
1
|
+
{"version":3,"file":"_internal.d.ts","sourceRoot":"","sources":["../../src/components/_internal.tsx"],"names":[],"mappings":"AAIA;uEACuE;AACvE,wBAAgB,EAAE,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,KAAK,CAAC,GAAG,MAAM,CAE7E;AAED;wDACwD;AACxD,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE1C;AAED;;;;;;;;;;8DAU8D;AAC9D,wBAAgB,WAAW,CAAC,CAAC,EAAE;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB,GAAG,MAAM,CAKT;AAYD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,wBAAgB,SAAS,gCAgBxB;AAED,wBAAgB,SAAS,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BAgB9D;AAED;2EAC2E;AAC3E,wBAAgB,eAAe,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BAcpE;AAED;oEACoE;AACpE,wBAAgB,cAAc,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BAenE"}
|
|
@@ -7,6 +7,39 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
7
7
|
export function cx(...parts) {
|
|
8
8
|
return parts.filter(Boolean).join(" ");
|
|
9
9
|
}
|
|
10
|
+
/** Raw ids mean nothing to a subscriber — when no roster label resolves, show
|
|
11
|
+
* a short recognizable stub instead of a full UUID. */
|
|
12
|
+
export function shortId(id) {
|
|
13
|
+
return id.length > 10 ? `${id.slice(0, 8)}…` : id;
|
|
14
|
+
}
|
|
15
|
+
/** A member's human-friendly label: name → email → a LABELED short id.
|
|
16
|
+
*
|
|
17
|
+
* The last step is never the naked external id: a roster row can arrive with
|
|
18
|
+
* neither name nor email (a seat provisioned by invite the person hasn't
|
|
19
|
+
* completed, a synthetic test member, a provider that projects no profile),
|
|
20
|
+
* and a bare UUID reads as a bug, not an identity. "Member b553f029…" stays
|
|
21
|
+
* distinguishable — the prefix is unique enough to pick the right seat —
|
|
22
|
+
* while saying what the thing is.
|
|
23
|
+
*
|
|
24
|
+
* Shared by every surface that names a seat (the API-keys "Mint for" picker,
|
|
25
|
+
* the roster, the team panel) so they cannot drift apart. */
|
|
26
|
+
export function memberLabel(m) {
|
|
27
|
+
const name = typeof m.name === "string" && m.name.length > 0 ? m.name : null;
|
|
28
|
+
const email = typeof m.email === "string" && m.email.length > 0 ? m.email : null;
|
|
29
|
+
return name ?? email ?? `Member ${shortId(m.userExternalId)}`;
|
|
30
|
+
}
|
|
31
|
+
/** The account-role DISPLAY vocabulary. `VIEWER` is the internal DB enum; the
|
|
32
|
+
* word the CLI documents — and the only one a subscriber should ever read —
|
|
33
|
+
* is `member`. Mapped at the UI boundary ONLY: every wire value (the select
|
|
34
|
+
* `value`, the PATCH body, the invite `role`) stays the enum. */
|
|
35
|
+
const TEAM_ROLE_WORDS = {
|
|
36
|
+
OWNER: "owner",
|
|
37
|
+
ADMIN: "admin",
|
|
38
|
+
VIEWER: "member",
|
|
39
|
+
};
|
|
40
|
+
export function teamRoleLabel(role) {
|
|
41
|
+
return TEAM_ROLE_WORDS[role] ?? role.toLowerCase();
|
|
42
|
+
}
|
|
10
43
|
export function ArrowIcon() {
|
|
11
44
|
return (_jsx("svg", { className: "fs-btn__arrow", fill: "none", viewBox: "0 0 24 24", strokeWidth: 2.5, stroke: "currentColor", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M13.5 4.5L21 12m0 0l-7.5 7.5M21 12H3" }) }));
|
|
12
45
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_internal.js","sourceRoot":"","sources":["../../src/components/_internal.tsx"],"names":[],"mappings":";AAAA,0EAA0E;AAC1E,2EAA2E;AAC3E,yBAAyB;AAEzB;uEACuE;AACvE,MAAM,UAAU,EAAE,CAAC,GAAG,KAA+C;IACnE,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,OAAO,CACL,cACE,SAAS,EAAC,eAAe,EACzB,IAAI,EAAC,MAAM,EACX,OAAO,EAAC,WAAW,EACnB,WAAW,EAAE,GAAG,EAChB,MAAM,EAAC,cAAc,YAErB,eACE,aAAa,EAAC,OAAO,EACrB,cAAc,EAAC,OAAO,EACtB,CAAC,EAAC,sCAAsC,GACxC,GACE,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,EAAE,SAAS,EAA0B;IAC7D,OAAO,CACL,cACE,SAAS,EAAE,SAAS,EACpB,IAAI,EAAC,MAAM,EACX,OAAO,EAAC,WAAW,EACnB,WAAW,EAAE,GAAG,EAChB,MAAM,EAAC,cAAc,YAErB,eACE,aAAa,EAAC,OAAO,EACrB,cAAc,EAAC,OAAO,EACtB,CAAC,EAAC,uBAAuB,GACzB,GACE,CACP,CAAC;AACJ,CAAC;AAED;2EAC2E;AAC3E,MAAM,UAAU,eAAe,CAAC,EAAE,SAAS,EAA0B;IACnE,OAAO,CACL,eACE,SAAS,EAAE,SAAS,iBACR,MAAM,EAClB,IAAI,EAAC,MAAM,EACX,OAAO,EAAC,WAAW,EACnB,WAAW,EAAE,IAAI,EACjB,MAAM,EAAC,cAAc,aAErB,iBAAQ,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,MAAM,GAAG,EAClC,eAAM,aAAa,EAAC,OAAO,EAAC,CAAC,EAAC,4BAA4B,GAAG,IACzD,CACP,CAAC;AACJ,CAAC;AAED;oEACoE;AACpE,MAAM,UAAU,cAAc,CAAC,EAAE,SAAS,EAA0B;IAClE,OAAO,CACL,eACE,SAAS,EAAE,SAAS,iBACR,MAAM,EAClB,IAAI,EAAC,MAAM,EACX,OAAO,EAAC,WAAW,EACnB,WAAW,EAAE,IAAI,EACjB,MAAM,EAAC,cAAc,aAErB,eAAM,CAAC,EAAC,MAAM,EAAC,CAAC,EAAC,KAAK,EAAC,KAAK,EAAC,MAAM,EAAC,MAAM,EAAC,GAAG,EAAC,EAAE,EAAC,MAAM,GAAG,EAC3D,eAAM,CAAC,EAAC,MAAM,EAAC,CAAC,EAAC,MAAM,EAAC,KAAK,EAAC,MAAM,EAAC,MAAM,EAAC,GAAG,EAAC,EAAE,EAAC,MAAM,GAAG,EAC5D,eAAM,aAAa,EAAC,OAAO,EAAC,CAAC,EAAC,uBAAuB,GAAG,IACpD,CACP,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"_internal.js","sourceRoot":"","sources":["../../src/components/_internal.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"access-control.d.ts","sourceRoot":"","sources":["../../src/components/access-control.tsx"],"names":[],"mappings":"AA8CA;;8DAE8D;AAC9D,eAAO,MAAM,sBAAsB,qBAAqB,CAAC;AAyEzD,MAAM,WAAW,iBAAiB;IAChC,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;6EAGyE;IACzE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;oDACgD;IAChD,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;CAC7B;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,EAC3B,SAAS,EACT,SAAS,EACT,cAAc,GACf,GAAE,iBAAsB,sCAuexB;AAID,MAAM,WAAW,kBAAkB;IACjC,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;+DAC2D;IAC3D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,qEAAqE;IACrE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;uDAEmD;IACnD,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,EAC5B,SAAS,EACT,SAAS,EACT,SAAS,EACT,KAAsB,EACtB,aAAa,GACd,GAAE,kBAAuB,+
|
|
1
|
+
{"version":3,"file":"access-control.d.ts","sourceRoot":"","sources":["../../src/components/access-control.tsx"],"names":[],"mappings":"AA8CA;;8DAE8D;AAC9D,eAAO,MAAM,sBAAsB,qBAAqB,CAAC;AAyEzD,MAAM,WAAW,iBAAiB;IAChC,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;6EAGyE;IACzE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;oDACgD;IAChD,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;CAC7B;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,EAC3B,SAAS,EACT,SAAS,EACT,cAAc,GACf,GAAE,iBAAsB,sCAuexB;AAID,MAAM,WAAW,kBAAkB;IACjC,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;+DAC2D;IAC3D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,qEAAqE;IACrE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;uDAEmD;IACnD,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,EAC5B,SAAS,EACT,SAAS,EACT,SAAS,EACT,KAAsB,EACtB,aAAa,GACd,GAAE,kBAAuB,+BA6PzB;AAMD,MAAM,WAAW,oBAAoB;IACnC,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;sCAEkC;IAClC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;0DACsD;IACtD,cAAc,CAAC,EAAE,SAAS;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC/D;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,EAC9B,SAAS,EACT,SAAiB,EACjB,cAAmB,GACpB,GAAE,oBAAyB,sCAgM3B;AAID,MAAM,WAAW,mBAAmB;IAClC,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;iEAC6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,EAC7B,SAAS,EACT,KAAK,EAAE,SAAS,EAChB,UAAU,GACX,GAAE,mBAAwB,+BA+D1B;AAID,MAAM,WAAW,oBAAoB;IACnC,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,EAAE,SAAS,EAAE,GAAE,oBAAyB,sCAqJvE;AAID,MAAM,WAAW,0BAA0B;IACzC,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kEAAkE;IAClE,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,SAAS,EACT,SAAiB,GAClB,GAAE,0BAA+B,sCAoGjC;AAID,MAAM,WAAW,oBAAoB;IACnC,+BAA+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;wDAGoD;IACpD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,qEAAqE;IACrE,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,EAC9B,SAAS,EACT,SAAS,EACT,SAAS,GACV,GAAE,oBAAyB,+BAyC3B"}
|
|
@@ -30,7 +30,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
30
30
|
import { useCallback, useEffect, useRef, useState } from "react";
|
|
31
31
|
import { useFartherShore, useMe, useTeam } from "../react/index.js";
|
|
32
32
|
import { FartherShoreApiError } from "../errors/index.js";
|
|
33
|
-
import { cx } from "./_internal.js";
|
|
33
|
+
import { cx, memberLabel, teamRoleLabel } from "./_internal.js";
|
|
34
34
|
import { useOptionalFsAuth } from "./auth.js";
|
|
35
35
|
/** The subscriber-management permission every /me/rbac/* route enforces
|
|
36
36
|
* (apps/core/src/routes/portal-customer/rbac.ts → `requirePermission(…,
|
|
@@ -390,13 +390,16 @@ export function FsMemberRoles({ className, canManage, canRemove, title = "Team m
|
|
|
390
390
|
}
|
|
391
391
|
}
|
|
392
392
|
return (_jsxs("section", { className: cx("fs-card", "fs-members", className), children: [_jsx("div", { className: "fs-card__head", children: _jsx("h3", { className: "fs-card__title", children: title }) }), !teamOk && (_jsx("p", { className: "fs-error fs-card__note", children: team.data?.error ??
|
|
393
|
-
"Team access could not be loaded. Management actions are disabled until the page can refresh." })), error && (_jsx("p", { className: "fs-error fs-card__note", "aria-live": "polite", children: error })), staleMembers.length > 0 && (_jsxs("div", { className: "fs-members__stale", role: "status", children: [_jsx("strong", { children: "Stale role assignments." }), " ", staleMembers.map((m) => m
|
|
393
|
+
"Team access could not be loaded. Management actions are disabled until the page can refresh." })), error && (_jsx("p", { className: "fs-error fs-card__note", "aria-live": "polite", children: error })), staleMembers.length > 0 && (_jsxs("div", { className: "fs-members__stale", role: "status", children: [_jsx("strong", { children: "Stale role assignments." }), " ", staleMembers.map((m) => memberLabel(m)).join(", "), " ", staleMembers.length === 1 ? "has" : "have", " roles that no longer exist (shown struck-through below). Stale roles grant nothing \u2014 re-assign these members to restore their access."] })), team.isLoading ? (_jsx("p", { className: "fs-muted", children: "Loading\u2026" })) : team.error ? (_jsx("p", { className: "fs-error", children: team.error.message })) : members.length === 0 ? (_jsx("p", { className: "fs-muted", children: "No team members yet." })) : (_jsxs("table", { className: "fs-table fs-members__table", children: [_jsx("caption", { className: "fs-sr-only", children: "Team members" }), _jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { scope: "col", children: "User" }), _jsx("th", { scope: "col", children: "Role" }), showBusinessRoles && _jsx("th", { scope: "col", children: "Product roles" }), _jsx("th", { scope: "col", children: "Joined" }), _jsx("th", { scope: "col", children: "Actions" })] }) }), _jsx("tbody", { children: members.map((m) => {
|
|
394
394
|
const isSelf = m.userExternalId === currentUserId;
|
|
395
|
-
|
|
395
|
+
// D7 — a subscriber reads people, not UUIDs. Same rule as the
|
|
396
|
+
// API-keys "Mint for" picker (memberLabel in _internal).
|
|
397
|
+
const label = memberLabel(m);
|
|
398
|
+
return (_jsxs("tr", { children: [_jsxs("td", { children: [_jsx("span", { className: "fs-members__name", children: label }), isSelf && (_jsx("span", { className: "fs-tag fs-tag--muted", children: "you" }))] }), _jsx("td", { children: resolvedCanManage && !isSelf ? (_jsxs(_Fragment, { children: [_jsxs("label", { className: "fs-sr-only", htmlFor: `fs-role-${m.id}`, children: ["Role for ", label] }), _jsx("select", { id: `fs-role-${m.id}`, className: "fs-select fs-select--sm", value: m.role, disabled: busyId === m.id, onChange: (e) => void handleRoleChange(m.id, e.target.value), children: TEAM_ROLES.map((r) => (_jsx("option", { value: r, children: teamRoleLabel(r) }, r))) })] })) : (_jsx("span", { children: teamRoleLabel(m.role) })) }), showBusinessRoles && (_jsxs("td", { children: [resolvedCanManage ? (_jsx("span", { role: "group", "aria-label": `Product roles for ${label}`, className: "fs-members__roleopts", children: availableRoles.map((role) => (_jsxs("label", { className: "fs-keygrant__opt", children: [_jsx("input", { type: "checkbox", checked: (m.businessRoleKeys ?? []).includes(role.roleKey), disabled: busyId === m.id, onChange: () => void handleToggleBusinessRole(m, role.roleKey) }), " ", role.name] }, role.roleKey))) })) : (_jsx("span", { children: (m.businessRoleKeys ?? [])
|
|
396
399
|
.filter((key) => !(m.staleRoleKeys ?? []).includes(key))
|
|
397
400
|
.join(", ") || "—" })), (m.staleRoleKeys ?? []).map((key) => (_jsx("span", { className: "fs-tag fs-tag--err", children: _jsx("s", { children: key }) }, key)))] })), _jsx("td", { children: m.createdAt
|
|
398
401
|
? new Date(m.createdAt).toLocaleDateString()
|
|
399
|
-
: "—" }), _jsx("td", { children: resolvedCanRemove && !isSelf && (_jsx("button", { type: "button", className: "fs-linkbtn fs-linkbtn--danger", "aria-label": `Remove ${
|
|
402
|
+
: "—" }), _jsx("td", { children: resolvedCanRemove && !isSelf && (_jsx("button", { type: "button", className: "fs-linkbtn fs-linkbtn--danger", "aria-label": `Remove ${label}`, disabled: busyId === m.id, onClick: () => void handleRemove(m.id), children: busyId === m.id ? "Removing…" : "Remove" })) })] }, m.id));
|
|
400
403
|
}) })] }))] }));
|
|
401
404
|
}
|
|
402
405
|
/* ── FsInviteMembers ───────────────────────────────────────────── */
|
|
@@ -479,7 +482,7 @@ export function FsInviteMembers({ className, canManage = false, availableRoles =
|
|
|
479
482
|
});
|
|
480
483
|
}
|
|
481
484
|
const emailValid = /^[^@\s]+@[^@\s]+\.[^@\s]+$/.test(email.trim());
|
|
482
|
-
return (_jsxs("section", { className: cx("fs-card", "fs-invites", className), "aria-busy": busy, children: [_jsx("div", { className: "fs-card__head", children: _jsxs("div", { children: [_jsx("h3", { className: "fs-card__title", children: "Invite teammates" }), _jsx("p", { className: "fs-card__note fs-muted", children: "Send an email invitation. The teammate joins with the role you pick once they accept \u2014 the link alone never grants access." })] }) }), error && (_jsx("p", { className: "fs-error fs-card__note", "aria-live": "polite", children: error })), _jsxs("div", { className: "fs-invites__form", children: [_jsxs("div", { className: "fs-rbac__field", children: [_jsx("label", { className: "fs-label", htmlFor: "fs-invite-email", children: "Email" }), _jsx("input", { id: "fs-invite-email", type: "email", className: "fs-input", placeholder: "teammate@example.com", value: email, disabled: busy, onChange: (e) => setEmail(e.target.value) })] }), _jsxs("div", { className: "fs-rbac__field", children: [_jsx("label", { className: "fs-label", htmlFor: "fs-invite-role", children: "Role" }), _jsx("select", { id: "fs-invite-role", className: "fs-select", value: role, disabled: busy, onChange: (e) => setRole(e.target.value), children: INVITE_ROLES.map((r) => (_jsx("option", { value: r, children: r }, r))) })] }), availableRoles.length > 0 && (_jsxs("fieldset", { className: "fs-keygrant__group", children: [_jsx("legend", { className: "fs-keygrant__legend", children: "Product roles" }), _jsx("div", { className: "fs-keygrant__opts", children: availableRoles.map((r) => (_jsxs("label", { className: "fs-keygrant__opt", children: [_jsx("input", { type: "checkbox", checked: roleKeys.has(r.roleKey), disabled: busy, onChange: () => toggleRoleKey(r.roleKey) }), " ", r.name] }, r.roleKey))) })] })), _jsx("button", { type: "button", className: "fs-btn fs-btn--cta fs-btn--sm", disabled: busy || !emailValid, onClick: () => void submit(), children: busy ? "Sending…" : "Send invitation" })] }), lastToken && (_jsxs("p", { className: "fs-card__note fs-muted", "aria-live": "polite", children: ["Invitation sent. Share this link if the email doesn't arrive:", " ", _jsxs("code", { className: "fs-code-inline", children: ["/accept-invite?token=", lastToken] })] })), invites.length > 0 && (_jsx("ul", { className: "fs-rows fs-invites__pending", children: invites.map((inv) => (_jsxs("li", { className: "fs-row", children: [_jsxs("span", { className: "fs-row__main", children: [inv.email, " ", _jsxs("span", { className: "fs-muted fs-row__label", children: [inv.role, inv.businessRoleKeys.length > 0
|
|
485
|
+
return (_jsxs("section", { className: cx("fs-card", "fs-invites", className), "aria-busy": busy, children: [_jsx("div", { className: "fs-card__head", children: _jsxs("div", { children: [_jsx("h3", { className: "fs-card__title", children: "Invite teammates" }), _jsx("p", { className: "fs-card__note fs-muted", children: "Send an email invitation. The teammate joins with the role you pick once they accept \u2014 the link alone never grants access." })] }) }), error && (_jsx("p", { className: "fs-error fs-card__note", "aria-live": "polite", children: error })), _jsxs("div", { className: "fs-invites__form", children: [_jsxs("div", { className: "fs-rbac__field", children: [_jsx("label", { className: "fs-label", htmlFor: "fs-invite-email", children: "Email" }), _jsx("input", { id: "fs-invite-email", type: "email", className: "fs-input", placeholder: "teammate@example.com", value: email, disabled: busy, onChange: (e) => setEmail(e.target.value) })] }), _jsxs("div", { className: "fs-rbac__field", children: [_jsx("label", { className: "fs-label", htmlFor: "fs-invite-role", children: "Role" }), _jsx("select", { id: "fs-invite-role", className: "fs-select", value: role, disabled: busy, onChange: (e) => setRole(e.target.value), children: INVITE_ROLES.map((r) => (_jsx("option", { value: r, children: teamRoleLabel(r) }, r))) })] }), availableRoles.length > 0 && (_jsxs("fieldset", { className: "fs-keygrant__group", children: [_jsx("legend", { className: "fs-keygrant__legend", children: "Product roles" }), _jsx("div", { className: "fs-keygrant__opts", children: availableRoles.map((r) => (_jsxs("label", { className: "fs-keygrant__opt", children: [_jsx("input", { type: "checkbox", checked: roleKeys.has(r.roleKey), disabled: busy, onChange: () => toggleRoleKey(r.roleKey) }), " ", r.name] }, r.roleKey))) })] })), _jsx("button", { type: "button", className: "fs-btn fs-btn--cta fs-btn--sm", disabled: busy || !emailValid, onClick: () => void submit(), children: busy ? "Sending…" : "Send invitation" })] }), lastToken && (_jsxs("p", { className: "fs-card__note fs-muted", "aria-live": "polite", children: ["Invitation sent. Share this link if the email doesn't arrive:", " ", _jsxs("code", { className: "fs-code-inline", children: ["/accept-invite?token=", lastToken] })] })), invites.length > 0 && (_jsx("ul", { className: "fs-rows fs-invites__pending", children: invites.map((inv) => (_jsxs("li", { className: "fs-row", children: [_jsxs("span", { className: "fs-row__main", children: [inv.email, " ", _jsxs("span", { className: "fs-muted fs-row__label", children: [inv.role, inv.businessRoleKeys.length > 0
|
|
483
486
|
? ` · ${inv.businessRoleKeys.join(", ")}`
|
|
484
487
|
: ""] })] }), _jsx("span", { className: "fs-row__actions", children: _jsx("button", { type: "button", className: "fs-linkbtn fs-linkbtn--danger", disabled: busy, onClick: () => void revoke(inv.id), children: "Revoke" }) })] }, inv.id))) }))] }));
|
|
485
488
|
}
|