@farthershore/farthershore-js 0.0.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +23 -0
- package/README.md +97 -18
- package/dist/catalog.d.ts +2 -2
- package/dist/catalog.d.ts.map +1 -1
- package/dist/catalog.js +15 -5
- package/dist/catalog.js.map +1 -1
- package/dist/client.d.ts +62 -2
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +50 -3
- package/dist/client.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +3 -2
- package/dist/config.js.map +1 -1
- package/dist/errors.d.ts +30 -6
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +34 -7
- package/dist/errors.js.map +1 -1
- package/dist/http.d.ts +3 -0
- package/dist/http.d.ts.map +1 -1
- package/dist/http.js +12 -1
- package/dist/http.js.map +1 -1
- package/dist/index.d.ts +5 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/react/hooks.d.ts +5 -1
- package/dist/react/hooks.d.ts.map +1 -1
- package/dist/react/hooks.js +7 -11
- package/dist/react/hooks.js.map +1 -1
- package/dist/react/index.d.ts +2 -0
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +4 -0
- package/dist/react/index.js.map +1 -1
- package/dist/react/provider.d.ts.map +1 -1
- package/dist/react/provider.js +3 -3
- package/dist/react/provider.js.map +1 -1
- package/dist/react/use-async.d.ts +4 -2
- package/dist/react/use-async.d.ts.map +1 -1
- package/dist/react/use-async.js +11 -2
- package/dist/react/use-async.js.map +1 -1
- package/dist/resources/auth.d.ts +4 -1
- package/dist/resources/auth.d.ts.map +1 -1
- package/dist/resources/auth.js +2 -1
- package/dist/resources/auth.js.map +1 -1
- package/dist/resources/billing.d.ts +6 -5
- package/dist/resources/billing.d.ts.map +1 -1
- package/dist/resources/billing.js +5 -6
- package/dist/resources/billing.js.map +1 -1
- package/dist/resources/keys.d.ts +5 -1
- package/dist/resources/keys.d.ts.map +1 -1
- package/dist/resources/keys.js +2 -1
- package/dist/resources/keys.js.map +1 -1
- package/dist/resources/usage.d.ts +12 -6
- package/dist/resources/usage.d.ts.map +1 -1
- package/dist/resources/usage.js +27 -18
- package/dist/resources/usage.js.map +1 -1
- package/dist/types.d.ts +13 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +8 -4
- package/dist/resources/analytics.d.ts +0 -8
- package/dist/resources/analytics.d.ts.map +0 -1
- package/dist/resources/analytics.js +0 -9
- package/dist/resources/analytics.js.map +0 -1
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to `@farthershore/farthershore-js` are documented here.
|
|
4
|
+
This project adheres to Semantic Versioning (pre-1.0: minors may break).
|
|
5
|
+
|
|
6
|
+
## [Unreleased]
|
|
7
|
+
|
|
8
|
+
## [0.1.1] - 2026-06-09
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- `createServerClient()` — a documented SSR/server entry point (explicit `portalHost` + injectable `fetch` + per-request `getToken`; no `window`/`location` assumption).
|
|
13
|
+
- Request cancellation: the read methods (`auth.getSession`, `keys.list`, `usage.*`, `billing.subscription`/`creditBalance`) accept `{ signal }`, and the React hooks abort the in-flight request on unmount / dep-change.
|
|
14
|
+
- `FartherShoreAbortError` — mapped from a fetch `AbortError`; ignored by the hooks (a cancelled read is never a user-facing error).
|
|
15
|
+
- `FartherShoreConfigError` for construction/misconfiguration; an ESLint guard on `src/**` ensures every failure stays a typed `FartherShore*` error.
|
|
16
|
+
- Contract **drift-detection** test that guards the SDK's mapped shapes against `@farthershore/contracts` (compile-time + runtime), plus exhaustive unit coverage (35 → 65 tests) and a tree-shaking verification test.
|
|
17
|
+
- Docs: Getting Started, Versioning & stability sections, and this CHANGELOG.
|
|
18
|
+
|
|
19
|
+
## [0.1.0] - 2026-06-08
|
|
20
|
+
|
|
21
|
+
### Added
|
|
22
|
+
|
|
23
|
+
- Initial public release: a framework-agnostic client + `/react` hooks + `catalog.ts` display helpers; the `auth` (Clerk `setToken` + persona `signIn`), `keys`, `usage`, `billing`, `plans`, `product`, and Gateway `feature()` resources. ESM, tree-shakeable (`sideEffects: false`), with the domain types re-exported from the `/react` subpath.
|
package/README.md
CHANGED
|
@@ -4,11 +4,16 @@ The **Farther Shore Frontend SDK** — the canonical browser integration layer
|
|
|
4
4
|
between a static frontend artifact (the default dev-portal template, generated
|
|
5
5
|
frontends, managed components, custom frontends) and the Farther Shore platform.
|
|
6
6
|
|
|
7
|
-
> **
|
|
8
|
-
>
|
|
9
|
-
> managed
|
|
10
|
-
>
|
|
11
|
-
>
|
|
7
|
+
> **Status: `0.1.0` (early release).** Published to npm. Pre-1.0, so minor
|
|
8
|
+
> versions may include breaking changes while the API stabilizes against the dev
|
|
9
|
+
> portal, managed template, and real builder features. See [`PUBLISHING.md`](./PUBLISHING.md)
|
|
10
|
+
> for the gates to `1.0.0` (wire-contract lock, browser token exchange, gateway
|
|
11
|
+
> CORS, stage e2e). The `@stripe/stripe-js` analog to the server-side
|
|
12
|
+
> `@farthershore/sdk`.
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
pnpm add @farthershore/farthershore-js # React is an optional peer (for /react)
|
|
16
|
+
```
|
|
12
17
|
|
|
13
18
|
## Philosophy
|
|
14
19
|
|
|
@@ -31,6 +36,45 @@ The SDK decides **where** each request goes (Core for platform concerns, the
|
|
|
31
36
|
Gateway for builder features), **how** it's authenticated, and the host/env
|
|
32
37
|
scoping headers Core needs.
|
|
33
38
|
|
|
39
|
+
## Getting started
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
pnpm add @farthershore/farthershore-js
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
```ts
|
|
46
|
+
import { createFartherShoreClient } from "@farthershore/farthershore-js";
|
|
47
|
+
|
|
48
|
+
// 1. Create the client. In the browser, `coreUrl` is usually the only required
|
|
49
|
+
// field — `portalHost` defaults to `window.location.host`.
|
|
50
|
+
const fs = createFartherShoreClient({
|
|
51
|
+
coreUrl: "https://core.farthershore.com",
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
// 2. Discover the product/env/plans for this host (memoized; safe to re-call).
|
|
55
|
+
const { product, plans } = await fs.bootstrap();
|
|
56
|
+
|
|
57
|
+
// 3. Authenticate. In a preview/test env, exchange a persona access key for a
|
|
58
|
+
// session (Clerk envs instead pass `getToken` to the config / `setToken`).
|
|
59
|
+
await fs.auth.signIn({ apiKey: "fsk_test_…" });
|
|
60
|
+
|
|
61
|
+
// 4. Read platform state through the typed resources (→ Core).
|
|
62
|
+
const keys = await fs.keys.list(); // ApiKey[]
|
|
63
|
+
const usage = await fs.usage.snapshot(); // { summary, events, billingBasis }
|
|
64
|
+
|
|
65
|
+
// 5. Call a builder-defined feature (→ Gateway). Set the consumer API key once,
|
|
66
|
+
// then express intent by feature name + path — no Gateway URL in app code.
|
|
67
|
+
fs.setApiKey("fsk_live_…");
|
|
68
|
+
const forecast = await fs.feature("weather").json("/forecast?city=NYC");
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
In React, the same calls are hooks that return `{ data, loading, error, refresh }`
|
|
72
|
+
(plus mutations) — see [React](#react-farthershorefarthershore-jsreact) below:
|
|
73
|
+
|
|
74
|
+
```tsx
|
|
75
|
+
const { data, loading, error, refresh } = useApiKeys();
|
|
76
|
+
```
|
|
77
|
+
|
|
34
78
|
## Surface
|
|
35
79
|
|
|
36
80
|
| Namespace | Routes to | Methods |
|
|
@@ -39,15 +83,11 @@ scoping headers Core needs.
|
|
|
39
83
|
| `fs.product` | (bootstrap) | `get()` |
|
|
40
84
|
| `fs.auth` | Core | `getSession()`, `signIn({apiKey})` (persona), `signOut()`, `setToken()` |
|
|
41
85
|
| `fs.keys` | Core | `list()`, `create()`, `revoke()`, `rotate()` |
|
|
42
|
-
| `fs.usage` | Core | `summary()`, `events()`,
|
|
43
|
-
| `fs.billing` | Core | `subscription()`, `openBillingPortal()`,
|
|
44
|
-
| `fs.
|
|
86
|
+
| `fs.usage` | Core | `summary()`, `events()`, `snapshot()` |
|
|
87
|
+
| `fs.billing` | Core | `subscription()`, `openBillingPortal()`, `creditBalance()` |
|
|
88
|
+
| `fs.plans` | Core / (bootstrap) | `list()`, `subscribe()` |
|
|
45
89
|
| `fs.feature(name)` / `fs.invoke(path)` | **Gateway** | `fetch(path)`, `json(path)` |
|
|
46
90
|
|
|
47
|
-
Struck-through methods have **no platform endpoint yet** and throw
|
|
48
|
-
`FartherShoreNotImplementedError` (the SDK never silently no-ops a missing
|
|
49
|
-
capability) — see Deferred.
|
|
50
|
-
|
|
51
91
|
## Auth
|
|
52
92
|
|
|
53
93
|
- **Core** calls use the consumer **session token** as `Authorization: Bearer`.
|
|
@@ -76,6 +116,29 @@ createFartherShoreClient({
|
|
|
76
116
|
});
|
|
77
117
|
```
|
|
78
118
|
|
|
119
|
+
## SSR / server usage
|
|
120
|
+
|
|
121
|
+
On a server there is no `window`/`location` to infer the portal host from and no
|
|
122
|
+
ambient browser session — so use `createServerClient`, a documented alias for
|
|
123
|
+
`createFartherShoreClient` that makes that contract explicit. Pass `portalHost`
|
|
124
|
+
and `fetch` instead of relying on globals, and resolve the per-request session
|
|
125
|
+
via `getToken` (each request authenticates as a different user). Behaviour is
|
|
126
|
+
identical to the browser client — the config already guards `globalThis.location`
|
|
127
|
+
and requires an injectable `fetch` — so this is purely a discoverable entry point.
|
|
128
|
+
|
|
129
|
+
```ts
|
|
130
|
+
import { createServerClient } from "@farthershore/farthershore-js";
|
|
131
|
+
|
|
132
|
+
const fs = createServerClient({
|
|
133
|
+
coreUrl: process.env.FS_CORE_URL!,
|
|
134
|
+
portalHost: "weather.farthershore.com", // no window.location on the server
|
|
135
|
+
getToken: () => sessionTokenForThisRequest, // per-request bearer
|
|
136
|
+
fetch, // Node 18+ global, or an injected impl
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
const sub = await fs.billing.subscription();
|
|
140
|
+
```
|
|
141
|
+
|
|
79
142
|
## React (`@farthershore/farthershore-js/react`)
|
|
80
143
|
|
|
81
144
|
The hooks live in a **subpath** of the same package — `react` is an _optional_
|
|
@@ -117,17 +180,33 @@ client. They're thin wrappers over the client — no duplicated logic.
|
|
|
117
180
|
|
|
118
181
|
## Deferred (no platform endpoint yet)
|
|
119
182
|
|
|
120
|
-
- `usage.timeseries()` — Core exposes `summary` + recent `events` only; derive a
|
|
121
|
-
series client-side or add a Core timeseries route.
|
|
122
|
-
- `billing.invoices()` — invoices are viewed through `billing.openBillingPortal()`
|
|
123
|
-
(Stripe-hosted); there's no JSON invoice list.
|
|
124
|
-
- `analytics.requests()` — no consumer analytics endpoint; closest is
|
|
125
|
-
`usage.events()` + audit logs.
|
|
126
183
|
- **Clerk browser sign-in** is host-app-driven (pass `getToken`); the SDK doesn't
|
|
127
184
|
bundle `@clerk/clerk-js`.
|
|
128
185
|
- A browser-safe **short-lived gateway token** (vs. a long-lived `fsk_` key in the
|
|
129
186
|
page) — the platform's `fsc_` context token is server-minted today.
|
|
130
187
|
|
|
188
|
+
## Versioning & stability
|
|
189
|
+
|
|
190
|
+
This package is **pre-1.0 (`0.x`)**. Under SemVer's 0.x rules a **minor** bump
|
|
191
|
+
(`0.1.x` → `0.2.0`) may include **breaking changes**, so the usual caret range is
|
|
192
|
+
unsafe here:
|
|
193
|
+
|
|
194
|
+
- ❌ `^0.1` / `^0.1.0` — caret does **not** lock the minor across `0.x`; it would
|
|
195
|
+
silently accept a breaking `0.2.0`.
|
|
196
|
+
- ✅ Pin **exact** (`0.1.0`) or use a patch-only tilde (`~0.1.0`) until `1.0.0`.
|
|
197
|
+
|
|
198
|
+
Breaking changes within `0.x` are recorded in [`CHANGELOG.md`](./CHANGELOG.md)
|
|
199
|
+
(Keep a Changelog format) — read it before bumping.
|
|
200
|
+
|
|
201
|
+
**Path to `1.0.0`:** the API graduates to a stable major once the
|
|
202
|
+
[`PUBLISHING.md`](./PUBLISHING.md) gates clear — wire-contract lock (generated
|
|
203
|
+
from / pinned to `@farthershore/contracts`), the browser-safe gateway token
|
|
204
|
+
exchange, gateway CORS for product origins, and a live-stage e2e. At `1.0.0`,
|
|
205
|
+
caret ranges become safe again.
|
|
206
|
+
|
|
207
|
+
The `/react` subpath ships in the same package and version; **`react` is an
|
|
208
|
+
_optional_ peer dependency**, so non-React consumers never pull it in.
|
|
209
|
+
|
|
131
210
|
## Scripts
|
|
132
211
|
|
|
133
212
|
```bash
|
package/dist/catalog.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Grant, Meter, Plan, PlanMeter } from "./types.js";
|
|
1
|
+
import type { Grant, Meter, Plan, PlanMeter, UsageBillingBasis } from "./types.js";
|
|
2
2
|
export type PlanKind = "free" | "pay_as_you_go" | "subscription" | "hybrid" | "prepaid" | "trial" | "custom";
|
|
3
3
|
/**
|
|
4
4
|
* Classify a plan into a single canonical kind — mirrors the shared
|
|
@@ -77,5 +77,5 @@ export type MeterUsageRow = {
|
|
|
77
77
|
* `meters` is the product-level meter catalog (for labels/units); when empty,
|
|
78
78
|
* the summary keys are used directly.
|
|
79
79
|
*/
|
|
80
|
-
export declare function buildMeterUsageRows(plan: Plan | null, summary: Record<string, number>, meters: Meter[]): MeterUsageRow[];
|
|
80
|
+
export declare function buildMeterUsageRows(plan: Plan | null, summary: Record<string, number>, meters: Meter[], billingBasis?: UsageBillingBasis): MeterUsageRow[];
|
|
81
81
|
//# sourceMappingURL=catalog.d.ts.map
|
package/dist/catalog.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,KAAK,EACL,KAAK,EACL,IAAI,EAEJ,SAAS,EACT,iBAAiB,EAClB,MAAM,YAAY,CAAC;AASpB,MAAM,MAAM,QAAQ,GAChB,MAAM,GACN,eAAe,GACf,cAAc,GACd,QAAQ,GACR,SAAS,GACT,OAAO,GACP,QAAQ,CAAC;AAUb;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,QAAQ,CAQjD;AAED;8EAC8E;AAC9E,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAO9C;AAED,4EAA4E;AAC5E,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAEpD;AAID;;;2CAG2C;AAC3C,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAO7E;AAED,0EAA0E;AAC1E,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGjD;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAQ5D;AAED,2DAA2D;AAC3D,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAE9D;AAED,gFAAgF;AAChF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAI5D;AAID;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,EAAE,CAoB3D;AAID,MAAM,MAAM,QAAQ,GAAG;IACrB,wBAAwB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACpB,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;IACd,+BAA+B;IAC/B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,CAAC;AAsBF;;uCAEuC;AACvC,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,KAAK,EAAE,CAMnD;AAED,kFAAkF;AAClF,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,QAAQ,EAAE,CAMrD;AAwED,2EAA2E;AAC3E,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,IAAI,GAAG,IAAI,EACjB,SAAS,EAAE,MAAM,GAChB,MAAM,GAAG,IAAI,CAKf;AAED,+EAA+E;AAC/E,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,IAAI,GAAG,SAAS,GAAG,OAAO,CAAA;CAAE,CAIrD;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,IAAI,GAAG,IAAI,EACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,MAAM,EAAE,KAAK,EAAE,EACf,YAAY,CAAC,EAAE,iBAAiB,GAC/B,aAAa,EAAE,CA0CjB"}
|
package/dist/catalog.js
CHANGED
|
@@ -244,14 +244,20 @@ export function computeProgressBar(used, total) {
|
|
|
244
244
|
* `meters` is the product-level meter catalog (for labels/units); when empty,
|
|
245
245
|
* the summary keys are used directly.
|
|
246
246
|
*/
|
|
247
|
-
export function buildMeterUsageRows(plan, summary, meters) {
|
|
248
|
-
// Union of catalog dimensions and any dimension present in the
|
|
247
|
+
export function buildMeterUsageRows(plan, summary, meters, billingBasis) {
|
|
248
|
+
// Union of catalog dimensions and any builder-metered dimension present in the
|
|
249
|
+
// summary. The built-in `dollars` credit/cost dimension the gateway records is
|
|
250
|
+
// NOT a product meter — only surface it if the builder explicitly defined a
|
|
251
|
+
// meter for it (then it's already in the catalog above). (`bandwidth_bytes`
|
|
252
|
+
// was removed from the meter model — `requests` is the only native meter.)
|
|
253
|
+
const TELEMETRY_DIMENSIONS = new Set(["dollars"]);
|
|
249
254
|
const byKey = new Map();
|
|
250
255
|
for (const m of meters)
|
|
251
256
|
byKey.set(m.key, m);
|
|
252
257
|
for (const key of Object.keys(summary)) {
|
|
253
|
-
if (
|
|
254
|
-
|
|
258
|
+
if (byKey.has(key) || TELEMETRY_DIMENSIONS.has(key))
|
|
259
|
+
continue;
|
|
260
|
+
byKey.set(key, { key, display: key });
|
|
255
261
|
}
|
|
256
262
|
const rows = [];
|
|
257
263
|
for (const meter of byKey.values()) {
|
|
@@ -260,7 +266,11 @@ export function buildMeterUsageRows(plan, summary, meters) {
|
|
|
260
266
|
if (quota != null || used > 0) {
|
|
261
267
|
rows.push({
|
|
262
268
|
key: meter.key,
|
|
263
|
-
|
|
269
|
+
// A weighted/usage-billed product relabels the bare `requests` count as
|
|
270
|
+
// "Usage" (a call can cost >1 unit); every other meter keeps its name.
|
|
271
|
+
label: meter.key === "requests" && billingBasis === "usage"
|
|
272
|
+
? "Usage"
|
|
273
|
+
: meter.display,
|
|
264
274
|
used,
|
|
265
275
|
quota,
|
|
266
276
|
...(meter.unit ? { unit: meter.unit } : {}),
|
package/dist/catalog.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,qEAAqE;AACrE,gFAAgF;AAChF,EAAE;AACF,4EAA4E;AAC5E,gFAAgF;AAChF,6EAA6E;AAC7E,0BAA0B;
|
|
1
|
+
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"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"}
|
package/dist/client.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { type FartherShoreConfig } from "./config.js";
|
|
2
|
+
import { type CoreRequest } from "./http.js";
|
|
2
3
|
import { type ProductResource } from "./resources/product.js";
|
|
3
4
|
import { type AuthResource } from "./resources/auth.js";
|
|
4
5
|
import { type KeysResource } from "./resources/keys.js";
|
|
5
6
|
import { type UsageResource } from "./resources/usage.js";
|
|
6
7
|
import { type BillingResource } from "./resources/billing.js";
|
|
7
8
|
import { type PlansResource } from "./resources/plans.js";
|
|
8
|
-
import { type AnalyticsResource } from "./resources/analytics.js";
|
|
9
9
|
import { type FeatureHandle, type GatewayRequestInit } from "./resources/feature.js";
|
|
10
10
|
import type { Bootstrap } from "./types.js";
|
|
11
11
|
export interface FartherShoreClient {
|
|
@@ -16,18 +16,78 @@ export interface FartherShoreClient {
|
|
|
16
16
|
setApiKey(key: string | null): void;
|
|
17
17
|
/** Set the Core session bearer directly (e.g. from the Clerk browser SDK). */
|
|
18
18
|
setSessionToken(token: string | null): void;
|
|
19
|
+
/** The product this frontend runs for (resolved via bootstrap). */
|
|
19
20
|
readonly product: ProductResource;
|
|
21
|
+
/** Consumer session: persona/Clerk sign-in, the current session, sign-out. */
|
|
20
22
|
readonly auth: AuthResource;
|
|
23
|
+
/** The consumer's API keys (list / create / revoke / rotate). */
|
|
21
24
|
readonly keys: KeysResource;
|
|
25
|
+
/** Per-dimension usage totals + recent events for this product. */
|
|
22
26
|
readonly usage: UsageResource;
|
|
27
|
+
/** The consumer's subscription, the Stripe billing portal, and credit balance. */
|
|
23
28
|
readonly billing: BillingResource;
|
|
24
29
|
/** The product's plan catalog + the subscribe/checkout flow. */
|
|
25
30
|
readonly plans: PlansResource;
|
|
26
|
-
readonly analytics: AnalyticsResource;
|
|
27
31
|
/** A handle to a builder-defined feature, routed through the Gateway. */
|
|
28
32
|
feature(name: string): FeatureHandle;
|
|
29
33
|
/** Generic Gateway call (alias for `feature("…").fetch`). */
|
|
30
34
|
invoke(path: string, init?: GatewayRequestInit): Promise<Response>;
|
|
35
|
+
/**
|
|
36
|
+
* Generic authenticated Core call — the escape hatch for platform endpoints
|
|
37
|
+
* the typed resources don't model yet (e.g. a product's `/me/team`,
|
|
38
|
+
* `/me/audit-logs`, `/me/addons`). The Core counterpart to {@link invoke}:
|
|
39
|
+
* it attaches the session bearer + the host/env/org scoping headers and maps
|
|
40
|
+
* non-2xx to {@link FartherShoreApiError}, exactly like the typed resources —
|
|
41
|
+
* the caller only supplies the path and the response type. Prefer a typed
|
|
42
|
+
* resource (`fs.usage`, `fs.keys`, …) when one exists.
|
|
43
|
+
*/
|
|
44
|
+
core<T>(req: CoreRequest): Promise<T>;
|
|
31
45
|
}
|
|
46
|
+
/**
|
|
47
|
+
* SSR / server-side entry point. A thin, documented alias for
|
|
48
|
+
* {@link createFartherShoreClient} that makes the server contract explicit:
|
|
49
|
+
* there is **no `window`/`location`** to fall back on, so a server caller must
|
|
50
|
+
* supply what the browser would otherwise provide implicitly —
|
|
51
|
+
*
|
|
52
|
+
* - `portalHost` — the product/env host (no `globalThis.location.host` default
|
|
53
|
+
* exists on the server);
|
|
54
|
+
* - `fetch` — an injectable fetch (the platform doesn't assume a global one);
|
|
55
|
+
* - `getToken` — the per-request session bearer (each request authenticates as a
|
|
56
|
+
* different user, so resolve the token per call rather than via the browser's
|
|
57
|
+
* ambient session).
|
|
58
|
+
*
|
|
59
|
+
* Behaviour is identical to {@link createFartherShoreClient} — `buildContext`
|
|
60
|
+
* already guards `globalThis.location` and requires an injectable `fetch` — so
|
|
61
|
+
* this adds no runtime behaviour; it's a discoverable, self-documenting entry
|
|
62
|
+
* point for SSR/server usage.
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```ts
|
|
66
|
+
* const fs = createServerClient({
|
|
67
|
+
* coreUrl: process.env.FS_CORE_URL!,
|
|
68
|
+
* portalHost: "weather.farthershore.com",
|
|
69
|
+
* getToken: () => sessionTokenForThisRequest,
|
|
70
|
+
* fetch, // Node 18+ global, or an injected impl
|
|
71
|
+
* });
|
|
72
|
+
* const sub = await fs.billing.subscription();
|
|
73
|
+
* ```
|
|
74
|
+
*/
|
|
75
|
+
export declare function createServerClient(config: FartherShoreConfig): FartherShoreClient;
|
|
76
|
+
/**
|
|
77
|
+
* Create a {@link FartherShoreClient}. In the browser the minimal config is
|
|
78
|
+
* `{ coreUrl }` — the platform Core base URL; `portalHost` defaults to
|
|
79
|
+
* `window.location.host` and the product is discovered at {@link
|
|
80
|
+
* FartherShoreClient.bootstrap}. The returned client owns all routing (Core vs
|
|
81
|
+
* Gateway), auth, and host/env scoping; app code only expresses intent via its
|
|
82
|
+
* typed resources (`fs.usage`, `fs.keys`, `fs.feature(…)`, …). For SSR/server
|
|
83
|
+
* use, prefer {@link createServerClient}.
|
|
84
|
+
*
|
|
85
|
+
* @example
|
|
86
|
+
* ```ts
|
|
87
|
+
* const fs = createFartherShoreClient({ coreUrl: "https://core.farthershore.com" });
|
|
88
|
+
* const { product } = await fs.bootstrap();
|
|
89
|
+
* const keys = await fs.keys.list();
|
|
90
|
+
* ```
|
|
91
|
+
*/
|
|
32
92
|
export declare function createFartherShoreClient(config: FartherShoreConfig): FartherShoreClient;
|
|
33
93
|
//# sourceMappingURL=client.d.ts.map
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,KAAK,kBAAkB,EAGxB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,KAAK,kBAAkB,EAGxB,MAAM,aAAa,CAAC;AAErB,OAAO,EAA2B,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AACtE,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACxB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,WAAW,kBAAkB;IACjC;yCACqC;IACrC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,+DAA+D;IAC/D,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IACpC,8EAA8E;IAC9E,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IAE5C,mEAAmE;IACnE,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,8EAA8E;IAC9E,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,iEAAiE;IACjE,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,mEAAmE;IACnE,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,kFAAkF;IAClF,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,gEAAgE;IAChE,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAE9B,yEAAyE;IACzE,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC;IACrC,6DAA6D;IAC7D,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnE;;;;;;;;OAQG;IACH,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CACvC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,kBAAkB,GACzB,kBAAkB,CAEpB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,kBAAkB,GACzB,kBAAkB,CAwCpB"}
|
package/dist/client.js
CHANGED
|
@@ -4,15 +4,62 @@
|
|
|
4
4
|
// vs Gateway, auth, host/env scoping.
|
|
5
5
|
import { buildContext, } from "./config.js";
|
|
6
6
|
import { resolveBootstrap } from "./bootstrap.js";
|
|
7
|
-
import { gatewayFetch } from "./http.js";
|
|
7
|
+
import { coreFetch, gatewayFetch } from "./http.js";
|
|
8
8
|
import { createProductResource, } from "./resources/product.js";
|
|
9
9
|
import { createAuthResource } from "./resources/auth.js";
|
|
10
10
|
import { createKeysResource } from "./resources/keys.js";
|
|
11
11
|
import { createUsageResource } from "./resources/usage.js";
|
|
12
12
|
import { createBillingResource, } from "./resources/billing.js";
|
|
13
13
|
import { createPlansResource } from "./resources/plans.js";
|
|
14
|
-
import { createAnalyticsResource, } from "./resources/analytics.js";
|
|
15
14
|
import { createFeature, } from "./resources/feature.js";
|
|
15
|
+
/**
|
|
16
|
+
* SSR / server-side entry point. A thin, documented alias for
|
|
17
|
+
* {@link createFartherShoreClient} that makes the server contract explicit:
|
|
18
|
+
* there is **no `window`/`location`** to fall back on, so a server caller must
|
|
19
|
+
* supply what the browser would otherwise provide implicitly —
|
|
20
|
+
*
|
|
21
|
+
* - `portalHost` — the product/env host (no `globalThis.location.host` default
|
|
22
|
+
* exists on the server);
|
|
23
|
+
* - `fetch` — an injectable fetch (the platform doesn't assume a global one);
|
|
24
|
+
* - `getToken` — the per-request session bearer (each request authenticates as a
|
|
25
|
+
* different user, so resolve the token per call rather than via the browser's
|
|
26
|
+
* ambient session).
|
|
27
|
+
*
|
|
28
|
+
* Behaviour is identical to {@link createFartherShoreClient} — `buildContext`
|
|
29
|
+
* already guards `globalThis.location` and requires an injectable `fetch` — so
|
|
30
|
+
* this adds no runtime behaviour; it's a discoverable, self-documenting entry
|
|
31
|
+
* point for SSR/server usage.
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```ts
|
|
35
|
+
* const fs = createServerClient({
|
|
36
|
+
* coreUrl: process.env.FS_CORE_URL!,
|
|
37
|
+
* portalHost: "weather.farthershore.com",
|
|
38
|
+
* getToken: () => sessionTokenForThisRequest,
|
|
39
|
+
* fetch, // Node 18+ global, or an injected impl
|
|
40
|
+
* });
|
|
41
|
+
* const sub = await fs.billing.subscription();
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export function createServerClient(config) {
|
|
45
|
+
return createFartherShoreClient(config);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Create a {@link FartherShoreClient}. In the browser the minimal config is
|
|
49
|
+
* `{ coreUrl }` — the platform Core base URL; `portalHost` defaults to
|
|
50
|
+
* `window.location.host` and the product is discovered at {@link
|
|
51
|
+
* FartherShoreClient.bootstrap}. The returned client owns all routing (Core vs
|
|
52
|
+
* Gateway), auth, and host/env scoping; app code only expresses intent via its
|
|
53
|
+
* typed resources (`fs.usage`, `fs.keys`, `fs.feature(…)`, …). For SSR/server
|
|
54
|
+
* use, prefer {@link createServerClient}.
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* ```ts
|
|
58
|
+
* const fs = createFartherShoreClient({ coreUrl: "https://core.farthershore.com" });
|
|
59
|
+
* const { product } = await fs.bootstrap();
|
|
60
|
+
* const keys = await fs.keys.list();
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
16
63
|
export function createFartherShoreClient(config) {
|
|
17
64
|
const ctx = buildContext(config);
|
|
18
65
|
let cached = null;
|
|
@@ -48,9 +95,9 @@ export function createFartherShoreClient(config) {
|
|
|
48
95
|
usage: createUsageResource(ctx),
|
|
49
96
|
billing: createBillingResource(ctx),
|
|
50
97
|
plans: createPlansResource(ctx, ensureBootstrap),
|
|
51
|
-
analytics: createAnalyticsResource(),
|
|
52
98
|
feature: (name) => createFeature(ctx, name),
|
|
53
99
|
invoke: (path, init) => gatewayFetch(ctx, path, init),
|
|
100
|
+
core: (req) => coreFetch(ctx, req),
|
|
54
101
|
};
|
|
55
102
|
}
|
|
56
103
|
//# sourceMappingURL=client.js.map
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,4EAA4E;AAC5E,+EAA+E;AAC/E,sCAAsC;AAEtC,OAAO,EAGL,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,4EAA4E;AAC5E,+EAA+E;AAC/E,sCAAsC;AAEtC,OAAO,EAGL,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,YAAY,EAAoB,MAAM,WAAW,CAAC;AACtE,OAAO,EACL,qBAAqB,GAEtB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,kBAAkB,EAAqB,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAqB,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAsB,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EACL,qBAAqB,GAEtB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,mBAAmB,EAAsB,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EACL,aAAa,GAGd,MAAM,wBAAwB,CAAC;AAyChC;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAA0B;IAE1B,OAAO,wBAAwB,CAAC,MAAM,CAAC,CAAC;AAC1C,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,wBAAwB,CACtC,MAA0B;IAE1B,MAAM,GAAG,GAAkB,YAAY,CAAC,MAAM,CAAC,CAAC;IAEhD,IAAI,MAAM,GAAqB,IAAI,CAAC;IACpC,IAAI,QAAQ,GAA8B,IAAI,CAAC;IAC/C,SAAS,eAAe;QACtB,IAAI,MAAM;YAAE,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC;iBAC7B,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;gBACV,MAAM,GAAG,CAAC,CAAC;gBACX,QAAQ,GAAG,IAAI,CAAC;gBAChB,OAAO,CAAC,CAAC;YACX,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE;gBACpB,QAAQ,GAAG,IAAI,CAAC;gBAChB,MAAM,CAAC,CAAC;YACV,CAAC,CAAC,CAAC;QACP,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,OAAO;QACL,SAAS,EAAE,eAAe;QAC1B,SAAS,CAAC,GAAG;YACX,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC;QACnB,CAAC;QACD,eAAe,CAAC,KAAK;YACnB,GAAG,CAAC,YAAY,GAAG,KAAK,CAAC;QAC3B,CAAC;QACD,OAAO,EAAE,qBAAqB,CAAC,eAAe,CAAC;QAC/C,IAAI,EAAE,kBAAkB,CAAC,GAAG,CAAC;QAC7B,IAAI,EAAE,kBAAkB,CAAC,GAAG,CAAC;QAC7B,KAAK,EAAE,mBAAmB,CAAC,GAAG,CAAC;QAC/B,OAAO,EAAE,qBAAqB,CAAC,GAAG,CAAC;QACnC,KAAK,EAAE,mBAAmB,CAAC,GAAG,EAAE,eAAe,CAAC;QAChD,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC;QAC3C,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC;QACrD,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC;KACnC,CAAC;AACJ,CAAC"}
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,SAAS,GAAG,OAAO,KAAK,CAAC;AAErC;+EAC+E;AAC/E,MAAM,MAAM,aAAa,GAAG,MACxB,MAAM,GACN,IAAI,GACJ,SAAS,GACT,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;AAEvC,MAAM,WAAW,kBAAkB;IACjC;oEACgE;IAChE,OAAO,EAAE,MAAM,CAAC;IAChB;qDACiD;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;uBACmB;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8EAA8E;IAC9E,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B;4CACwC;IACxC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B;qDACiD;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;+CAC2C;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;kEAE8D;IAC9D,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,iFAAiF;IACjF,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED;8EAC8E;AAC9E,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB;0CACsC;IACtC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,KAAK,EAAE,SAAS,CAAC;CAClB;AAMD,wBAAgB,YAAY,CAAC,MAAM,EAAE,kBAAkB,GAAG,aAAa,CAkCtE;AAED;4DAC4D;AAC5D,wBAAsB,YAAY,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAO7E"}
|
package/dist/config.js
CHANGED
|
@@ -4,12 +4,13 @@
|
|
|
4
4
|
// endpoints, or routing rules. It configures the client ONCE (usually just a
|
|
5
5
|
// coreUrl) and expresses intent (`fs.usage.summary()`); the SDK owns where the
|
|
6
6
|
// request goes and how it's authenticated.
|
|
7
|
+
import { FartherShoreConfigError } from "./errors.js";
|
|
7
8
|
function trimTrailingSlash(u) {
|
|
8
9
|
return u.replace(/\/+$/, "");
|
|
9
10
|
}
|
|
10
11
|
export function buildContext(config) {
|
|
11
12
|
if (!config.coreUrl) {
|
|
12
|
-
throw new
|
|
13
|
+
throw new FartherShoreConfigError("createFartherShoreClient: `coreUrl` is required");
|
|
13
14
|
}
|
|
14
15
|
const portalHost = config.portalHost ??
|
|
15
16
|
(typeof globalThis !== "undefined" &&
|
|
@@ -19,7 +20,7 @@ export function buildContext(config) {
|
|
|
19
20
|
const fetchImpl = config.fetch ??
|
|
20
21
|
(typeof fetch !== "undefined" ? fetch.bind(globalThis) : undefined);
|
|
21
22
|
if (!fetchImpl) {
|
|
22
|
-
throw new
|
|
23
|
+
throw new FartherShoreConfigError("createFartherShoreClient: no global fetch; pass `fetch` in the config");
|
|
23
24
|
}
|
|
24
25
|
return {
|
|
25
26
|
coreUrl: trimTrailingSlash(config.coreUrl),
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,EAAE;AACF,+EAA+E;AAC/E,6EAA6E;AAC7E,+EAA+E;AAC/E,2CAA2C;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,EAAE;AACF,+EAA+E;AAC/E,6EAA6E;AAC7E,+EAA+E;AAC/E,2CAA2C;AAE3C,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AA0DtD,SAAS,iBAAiB,CAAC,CAAS;IAClC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAA0B;IACrD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,uBAAuB,CAC/B,iDAAiD,CAClD,CAAC;IACJ,CAAC;IACD,MAAM,UAAU,GACd,MAAM,CAAC,UAAU;QACjB,CAAC,OAAO,UAAU,KAAK,WAAW;YACjC,UAA+C,CAAC,QAAQ,EAAE,IAAI;YAC7D,CAAC,CAAE,UAA6C,CAAC,QAAQ,CAAC,IAAI;YAC9D,CAAC,CAAC,IAAI,CAAC,CAAC;IAEZ,MAAM,SAAS,GACb,MAAM,CAAC,KAAK;QACZ,CAAC,OAAO,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACtE,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,uBAAuB,CAC/B,uEAAuE,CACxE,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC;QAC1C,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI;QACxD,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,IAAI;QACnC,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,IAAI;QAC3C,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,IAAI;QAC7C,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI;QAC3E,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,IAAI;QAC7B,YAAY,EAAE,IAAI;QAClB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,KAAK,EAAE,SAAS;KACjB,CAAC;AACJ,CAAC;AAED;4DAC4D;AAC5D,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAkB;IACnD,IAAI,GAAG,CAAC,YAAY;QAAE,OAAO,GAAG,CAAC,YAAY,CAAC;IAC9C,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;QACjB,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC/B,OAAO,CAAC,IAAI,IAAI,CAAC;IACnB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/errors.d.ts
CHANGED
|
@@ -1,8 +1,27 @@
|
|
|
1
1
|
export declare class FartherShoreError extends Error {
|
|
2
2
|
constructor(message: string);
|
|
3
3
|
}
|
|
4
|
-
/**
|
|
5
|
-
*
|
|
4
|
+
/**
|
|
5
|
+
* A non-2xx response from Core or the Gateway. Exposes:
|
|
6
|
+
* - `.status` — the HTTP status code;
|
|
7
|
+
* - `.code` — the platform error code from the `{ error: { code, message } }`
|
|
8
|
+
* envelope (or a fallback when the envelope is absent);
|
|
9
|
+
* - `.body` — the parsed response body, for richer error detail.
|
|
10
|
+
*
|
|
11
|
+
* Callers commonly branch on `.status` — e.g. `401`/`403` (re-auth), `404`
|
|
12
|
+
* (treat as absent), `409` (conflict/retry) — rather than parsing the message.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts
|
|
16
|
+
* try {
|
|
17
|
+
* await fs.keys.list();
|
|
18
|
+
* } catch (err) {
|
|
19
|
+
* if (err instanceof FartherShoreApiError && err.status === 401) {
|
|
20
|
+
* // session expired — prompt re-auth
|
|
21
|
+
* } else throw err;
|
|
22
|
+
* }
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
6
25
|
export declare class FartherShoreApiError extends FartherShoreError {
|
|
7
26
|
readonly status: number;
|
|
8
27
|
readonly code: string;
|
|
@@ -14,14 +33,19 @@ export declare class FartherShoreNetworkError extends FartherShoreError {
|
|
|
14
33
|
readonly cause?: unknown;
|
|
15
34
|
constructor(message: string, cause?: unknown);
|
|
16
35
|
}
|
|
17
|
-
/** Thrown when
|
|
18
|
-
*
|
|
19
|
-
export declare class
|
|
20
|
-
constructor(message
|
|
36
|
+
/** Thrown when a request was aborted (e.g. a React hook unmounted or its deps
|
|
37
|
+
* changed before the request resolved). Callers/hooks should ignore it. */
|
|
38
|
+
export declare class FartherShoreAbortError extends FartherShoreError {
|
|
39
|
+
constructor(message?: string);
|
|
21
40
|
}
|
|
22
41
|
/** Thrown when the client is used before `bootstrap()` has resolved the product
|
|
23
42
|
* it needs (e.g. a per-product call with no configured productId). */
|
|
24
43
|
export declare class FartherShoreNotReadyError extends FartherShoreError {
|
|
25
44
|
constructor(message: string);
|
|
26
45
|
}
|
|
46
|
+
/** Thrown at client construction for invalid/missing config (e.g. no `coreUrl`,
|
|
47
|
+
* no global `fetch`). */
|
|
48
|
+
export declare class FartherShoreConfigError extends FartherShoreError {
|
|
49
|
+
constructor(message: string);
|
|
50
|
+
}
|
|
27
51
|
//# sourceMappingURL=errors.d.ts.map
|
package/dist/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAEA,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,OAAO,EAAE,MAAM;CAI5B;AAED;
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAEA,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,oBAAqB,SAAQ,iBAAiB;IACzD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;gBACX,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO;CAOzE;AAED,8DAA8D;AAC9D,qBAAa,wBAAyB,SAAQ,iBAAiB;IAC7D,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;gBACb,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAK7C;AAED;4EAC4E;AAC5E,qBAAa,sBAAuB,SAAQ,iBAAiB;gBAC/C,OAAO,SAAoB;CAIxC;AAED;uEACuE;AACvE,qBAAa,yBAA0B,SAAQ,iBAAiB;gBAClD,OAAO,EAAE,MAAM;CAI5B;AAED;0BAC0B;AAC1B,qBAAa,uBAAwB,SAAQ,iBAAiB;gBAChD,OAAO,EAAE,MAAM;CAI5B"}
|