@goable-io/sdk 0.2.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Fabio Carucci
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,17 +1,22 @@
1
1
  # @goable-io/sdk
2
2
 
3
+ [![npm](https://img.shields.io/npm/v/@goable-io/sdk.svg)](https://www.npmjs.com/package/@goable-io/sdk)
4
+ [![CI](https://github.com/goable-io/sdk/actions/workflows/ci.yml/badge.svg)](https://github.com/goable-io/sdk/actions/workflows/ci.yml)
5
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](./LICENSE)
6
+
3
7
  TypeScript client for the [Goable](https://goable.io) API — 0-100 suitability
4
8
  scoring for outdoor activities (water, snow, air, land) from real-time weather
5
9
  and multi-domain physics.
6
10
 
7
- > **Status: v0.1, publish-ready (not yet on npm).** Thin, typed transport over
8
- > the public tenant-facing REST surface. Zero runtime dependencies. Works in
9
- > Node ≥18 and modern browser/edge runtimes (uses the global `fetch`).
11
+ Thin, typed transport over the public tenant-facing REST surface. **Zero runtime
12
+ dependencies.** Works in Node ≥18 and modern browser/edge runtimes (uses the
13
+ global `fetch`). Published to npm with [provenance](https://docs.npmjs.com/generating-provenance-statements).
10
14
 
11
15
  ## Install
12
16
 
13
17
  ```bash
14
- npm install @goable-io/sdk # once published
18
+ npm install @goable-io/sdk
19
+ # or: pnpm add @goable-io/sdk
15
20
  ```
16
21
 
17
22
  ## Quickstart
@@ -21,6 +26,7 @@ import { GoableClient } from "@goable-io/sdk"
21
26
 
22
27
  const goable = new GoableClient({ apiKey: process.env.GOABLE_API_KEY! })
23
28
 
29
+ // Score a single activity at a location + time window
24
30
  const result = await goable.score({
25
31
  activity: "kitesurfing",
26
32
  location: { lat: 43.7, lng: 7.27 },
@@ -32,14 +38,44 @@ result.verdict // "unsafe" | "poor" | "marginal" | "fair" | "favorable" | "exce
32
38
  result.confidence
33
39
  ```
34
40
 
41
+ Inverse query — "where should I go?" — ranks sub-spots for an activity within
42
+ a region:
43
+
44
+ ```ts
45
+ const spots = await goable.recommendSpot({
46
+ activity: "kitesurfing",
47
+ region: { center: { lat: 43.7, lng: 7.27 }, radiusKm: 50 },
48
+ window: { from: "2026-06-01T06:00:00Z", to: "2026-06-01T18:00:00Z" },
49
+ topK: 5,
50
+ })
51
+ ```
52
+
53
+ ## Authentication
54
+
55
+ Every request carries your tenant API key. The canonical production header is
56
+ **`X-Goable-Key`**, which the client sends automatically:
57
+
58
+ ```ts
59
+ new GoableClient({ apiKey: "gk_…" }) // → sends "X-Goable-Key: gk_…"
60
+ ```
61
+
62
+ > The API also accepts `Authorization: Bearer <key>` as a legacy fallback for
63
+ > direct testing, but new integrations should use the default `X-Goable-Key`
64
+ > path. (Production traffic sits behind CloudFront, which reserves the
65
+ > `Authorization` header for its own signature — the custom header sidesteps
66
+ > that.)
67
+
68
+ Mint a key from the tenant portal at
69
+ [console.goable.io/portal/keys](https://console.goable.io/portal/keys).
70
+
35
71
  ## Configuration
36
72
 
37
73
  ```ts
38
74
  new GoableClient({
39
- apiKey: "…", // required — sent as Authorization: Bearer
75
+ apiKey: "…", // required — sent as X-Goable-Key
40
76
  baseUrl: "https://api.goable.io", // default
41
- timeoutMs: 30_000, // default; 0 disables
42
- fetch: customFetch, // default globalThis.fetch (inject for Node <18 / tests)
77
+ timeoutMs: 30_000, // default; 0 disables
78
+ fetch: customFetch, // default globalThis.fetch (inject for Node <18 / tests)
43
79
  })
44
80
  ```
45
81
 
@@ -53,6 +89,7 @@ new GoableClient({
53
89
  | `scoreHistorical(input)` | `POST /v1/score/historical` | climatology percentiles (Pro+) |
54
90
  | `scorePortfolio(input)` | `POST /v1/score/portfolio` | multi-spot joint variance |
55
91
  | `explainCounterfactual(input)` | `POST /v1/score/explain-counterfactual` | binding constraint, sensitivities, best window/spot |
92
+ | `recommendSpot(input)` | `POST /v1/recommend-spot` | inverse query: top-K ranked sub-spots |
56
93
  | `decision(input)` | `POST /v1/decision` | personalized go/no-go (Pro+) |
57
94
  | `deleteUserData(pseudonym)` | `DELETE /v1/decision/user-data/:p` | GDPR erasure; returns receipt headers |
58
95
  | `explain(input)` / `briefing(input)` | `POST /v1/intelligence/*` | LLM narratives (Pro+) |
@@ -60,6 +97,8 @@ new GoableClient({
60
97
  | `quote(input)` | `POST /v1/underwriting/quote` | parametric premium (Scale) |
61
98
  | `health()` | `GET /v1/health` | liveness |
62
99
 
100
+ Full endpoint reference: [goable.io/docs](https://goable.io/docs).
101
+
63
102
  ## Errors
64
103
 
65
104
  ```ts
@@ -69,8 +108,8 @@ try {
69
108
  await goable.score({ activity: "kitesurfing", location: { lat: 43.7, lng: 7.27 }, ensemble: true })
70
109
  } catch (err) {
71
110
  if (err instanceof GoableApiError) {
72
- err.status // 402
73
- err.code // "PAYMENT_REQUIRED"
111
+ err.status // e.g. 402
112
+ err.code // e.g. "PAYMENT_REQUIRED"
74
113
  err.issues // Zod issues on 422 VALIDATION_ERROR
75
114
  err.detail // free-form context (e.g. plan info)
76
115
  } else if (err instanceof GoableNetworkError) {
@@ -82,40 +121,23 @@ try {
82
121
  ## Browser use
83
122
 
84
123
  The client runs in the browser, but **API keys are secrets** — prefer
85
- server-side use. For direct browser calls the API's CORS allowlist must
86
- include your origin (contact Goable to allowlist it).
124
+ server-side use. For direct browser calls the API's CORS allowlist must include
125
+ your origin (contact Goable to allowlist it).
87
126
 
88
127
  ## Types are generated from the API contract
89
128
 
90
- The request/response types are **generated** from the API's OpenAPI
91
- document (`apps/api/src/openapi/spec.ts`) via
92
- [`openapi-typescript`](https://github.com/openapi-ts/openapi-typescript) —
93
- they are never hand-authored, so they can't drift from the server. When the
94
- API contract changes, a maintainer runs:
95
-
96
- ```bash
97
- pnpm --filter @goable-io/sdk gen
98
- ```
99
-
100
- which rewrites `src/generated/api.ts` + `openapi.json`. A test
101
- (`generatedFresh.test.ts`) fails in CI if the committed output is stale, so
102
- the types are always in lock-step with the contract. Adding a brand-new
103
- endpoint is the only manual step (a new client method).
129
+ The request/response types are **generated** from the Goable API's OpenAPI
130
+ document (`openapi.json`) via
131
+ [`openapi-typescript`](https://github.com/openapi-ts/openapi-typescript) — they
132
+ are never hand-authored, so they can't drift from the contract. The committed
133
+ `openapi.json` tracks the live public API; see
134
+ [CONTRIBUTING.md](./CONTRIBUTING.md) for how it stays in sync.
104
135
 
105
- Request types are precise (the API rejects unknown fields). Some response
106
- bodies are modelled as open objects where the endpoint returns a rich,
107
- documented payload — the full wire payload is always returned, and these
108
- tighten automatically as the OpenAPI response schemas are enriched.
136
+ ## Contributing & releases
109
137
 
110
- ## Release (maintainers)
138
+ See [CONTRIBUTING.md](./CONTRIBUTING.md). Releases are automated: merging to
139
+ `main` publishes to npm with provenance.
111
140
 
112
- Publishing is automated by `.github/workflows/sdk-release.yml` (on changes
113
- to `packages/sdk/**` on `main`): it builds, runs the freshness guard +
114
- tests, resolves the next version, prints `npm pack --dry-run` as a leak
115
- check, and `pnpm publish --access public` using the org `NPM_TOKEN`. The
116
- private engine never leaves the repo — only this package's `files` are
117
- published. `publishConfig` repoints `main`/`types`/`exports` at `dist/` at
118
- publish time, so in-repo development keeps using the TS sources.
141
+ ## License
119
142
 
120
- > No npm provenance: it requires a public source repo, and the SDK source
121
- > stays in this private monorepo by design.
143
+ MIT © Fabio Carucci
package/dist/client.d.ts CHANGED
@@ -2,7 +2,7 @@
2
2
  * GoableClient — thin typed transport over the public Goable REST API.
3
3
  * No caching, no business logic; one `request<T>` powers every method.
4
4
  */
5
- import type { BriefingRequest, BriefingResponse, CounterfactualRequest, CounterfactualResponse, DecisionRequest, DecisionResponse, DeleteUserDataResult, ExplainRequest, ExplainResponse, HealthResponse, ProjectionsRequest, ProjectionsResponse, QuoteRequest, QuoteResponse, RecommendSpotRequest, RecommendSpotResponse, ScoreHistoricalRequest, ScoreHistoricalResponse, ScoreMultiRequest, ScoreMultiResponse, ScorePortfolioRequest, ScorePortfolioResponse, ScoreRequest, ScoreResponse, ScoreSeriesRequest, ScoreSeriesResponse } from "./types.ts";
5
+ import type { AdaptationReportRequest, AdaptationReportResponse, BindPolicyRequest, BindPolicyResponse, BriefingRequest, BriefingResponse, CatalogStatsResponse, CounterfactualRequest, CounterfactualResponse, CreateStationRequest, CreateStationResponse, DecisionRequest, DecisionResponse, DeleteUserDataResult, EdgeCaseRequest, EdgeCaseResponse, EvaluatePolicyResponse, ExplainRequest, ExplainResponse, HealthResponse, ListPoliciesQuery, ListPoliciesResponse, ListStationsResponse, PolicyResponse, ProjectionsPortfolioRequest, ProjectionsPortfolioResponse, ProjectionsRequest, ProjectionsResponse, PublicSignupRequest, PublicSignupResponse, QuoteByIdResponse, QuoteRequest, QuoteResponse, RecentObservationsQuery, RecentObservationsResponse, RecommendSpotRequest, RecommendSpotResponse, ReportOutcomeRequest, ReportOutcomeResponse, ScoreDifficultyRequest, ScoreDifficultyResponse, ScoreHistoricalRequest, ScoreHistoricalResponse, ScoreMultiRequest, ScoreMultiResponse, ScorePortfolioRequest, ScorePortfolioResponse, ScoreRequest, ScoreResponse, ScoreSeriesRequest, ScoreSeriesResponse, SettlePolicyRequest, SettlePolicyResponse, SubmitObservationsRequest, SubmitObservationsResponse, SustainabilityIndexQuery, SustainabilityIndexResponse, UpdateStationRequest, UpdateStationResponse, VerificationExportQuery } from "./types.ts";
6
6
  export type FetchLike = (input: string, init?: {
7
7
  method?: string;
8
8
  headers?: Record<string, string>;
@@ -53,9 +53,68 @@ export declare class GoableClient {
53
53
  * cold-start blend.
54
54
  */
55
55
  recommendSpot(input: RecommendSpotRequest): Promise<RecommendSpotResponse>;
56
+ /** L15 — skill-conditioned difficulty grids per scoring dimension (Pro+). */
57
+ scoreDifficulty(input: ScoreDifficultyRequest): Promise<ScoreDifficultyResponse>;
58
+ /** Close the calibration loop: report the observed outcome of a scored
59
+ * session. Requires the `outcomes:write` scope. */
60
+ reportOutcome(sessionId: string, input: ReportOutcomeRequest): Promise<ReportOutcomeResponse>;
61
+ /** LLM edge-case narrative for a marginal score. */
62
+ edgeCase(input: EdgeCaseRequest): Promise<EdgeCaseResponse>;
63
+ /** T3 — multi-spot climate-decadal projections (Scale). */
64
+ projectionsPortfolio(input: ProjectionsPortfolioRequest): Promise<ProjectionsPortfolioResponse>;
65
+ /** T3 — adaptation report across months × scenarios × decades (Scale). */
66
+ adaptationReport(input: AdaptationReportRequest): Promise<AdaptationReportResponse>;
67
+ /** Fetch a stored quote by id. */
68
+ getQuote(id: string): Promise<QuoteByIdResponse>;
69
+ /**
70
+ * Bind a recent quote into a policy. Responds 201. A watch-level drift event
71
+ * on the resolved cell surfaces as `driftAdvisories` on success; a
72
+ * warning/critical event refuses the bind with `422 DRIFT_ACTIVE`, thrown as
73
+ * a {@link DriftActiveError}.
74
+ */
75
+ bindPolicy(input: BindPolicyRequest): Promise<BindPolicyResponse>;
76
+ /** List the calling tenant's bound policies (paginated, boundAt DESC). */
77
+ listPolicies(query?: ListPoliciesQuery): Promise<ListPoliciesResponse>;
78
+ /** Fetch a single policy + its payout events. */
79
+ getPolicy(policyId: string): Promise<PolicyResponse>;
80
+ /** Re-evaluate a bound policy against the historical archive; inserts any
81
+ * newly detected payout events. No request body. */
82
+ evaluatePolicy(policyId: string): Promise<EvaluatePolicyResponse>;
83
+ /**
84
+ * Settle a bound policy. PLATFORM-OPS ONLY — requires the `platform_admin`
85
+ * scope (a cross-tenant underwriter operation, normally run by the daily
86
+ * settlement cron). Not a policyholder self-service action; tenant
87
+ * integrations should not call this.
88
+ */
89
+ settlePolicy(policyId: string, input: SettlePolicyRequest): Promise<SettlePolicyResponse>;
90
+ /** Register a tenant observation station. Responds 201. */
91
+ createStation(input: CreateStationRequest): Promise<CreateStationResponse>;
92
+ /** List the calling tenant's observation stations. */
93
+ listStations(): Promise<ListStationsResponse>;
94
+ /** Patch a station (partial update). */
95
+ updateStation(stationId: string, input: UpdateStationRequest): Promise<UpdateStationResponse>;
96
+ /** Push station observations into the 0-6h assimilation window (Pro+).
97
+ * Responds 202. */
98
+ submitObservations(input: SubmitObservationsRequest): Promise<SubmitObservationsResponse>;
99
+ /** Most-recent observations for one of the tenant's stations. */
100
+ recentObservations(stationId: string, query?: RecentObservationsQuery): Promise<RecentObservationsResponse>;
101
+ /** Public Goable Sustainability Index (JSON-LD, CC BY 4.0). */
102
+ sustainabilityIndex(query: SustainabilityIndexQuery): Promise<SustainabilityIndexResponse>;
103
+ /** Public Stream F forecast-verification export. Returns the raw NDJSON
104
+ * stream as a string (one cell per line + a trailing meta line). */
105
+ verificationExport(query?: VerificationExportQuery): Promise<string>;
106
+ /** Public L15 Difficulty Atlas export. Returns the raw NDJSON stream. */
107
+ difficultyAtlasExport(): Promise<string>;
108
+ /** Self-service tenant signup (no auth). Always 202 on success. */
109
+ publicSignup(input: PublicSignupRequest): Promise<PublicSignupResponse>;
110
+ /** Open catalogue coverage stats (no auth). */
111
+ catalogStats(): Promise<CatalogStatsResponse>;
56
112
  /** GDPR Art. 17 erasure. Surfaces the receipt headers from a 204. */
57
113
  deleteUserData(pseudonym: string): Promise<DeleteUserDataResult>;
58
114
  private request;
115
+ /** Like {@link request} but returns the raw response body as text — used for
116
+ * the NDJSON research streams, which are not a single JSON document. */
117
+ private requestText;
59
118
  private rawRequest;
60
119
  }
61
120
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/client.js CHANGED
@@ -70,6 +70,107 @@ export class GoableClient {
70
70
  recommendSpot(input) {
71
71
  return this.request("POST", "/v1/recommend-spot", input);
72
72
  }
73
+ /** L15 — skill-conditioned difficulty grids per scoring dimension (Pro+). */
74
+ scoreDifficulty(input) {
75
+ return this.request("POST", "/v1/score/difficulty", input);
76
+ }
77
+ /** Close the calibration loop: report the observed outcome of a scored
78
+ * session. Requires the `outcomes:write` scope. */
79
+ reportOutcome(sessionId, input) {
80
+ return this.request("POST", `/v1/score/${encodeURIComponent(sessionId)}/outcome`, input);
81
+ }
82
+ /** LLM edge-case narrative for a marginal score. */
83
+ edgeCase(input) {
84
+ return this.request("POST", "/v1/intelligence/edge-case", input);
85
+ }
86
+ /** T3 — multi-spot climate-decadal projections (Scale). */
87
+ projectionsPortfolio(input) {
88
+ return this.request("POST", "/v1/projections/portfolio", input);
89
+ }
90
+ /** T3 — adaptation report across months × scenarios × decades (Scale). */
91
+ adaptationReport(input) {
92
+ return this.request("POST", "/v1/projections/adaptation-report", input);
93
+ }
94
+ // ── underwriting policy lifecycle (Scale) ─────────────────────────────────
95
+ /** Fetch a stored quote by id. */
96
+ getQuote(id) {
97
+ return this.request("GET", `/v1/underwriting/quote/${encodeURIComponent(id)}`);
98
+ }
99
+ /**
100
+ * Bind a recent quote into a policy. Responds 201. A watch-level drift event
101
+ * on the resolved cell surfaces as `driftAdvisories` on success; a
102
+ * warning/critical event refuses the bind with `422 DRIFT_ACTIVE`, thrown as
103
+ * a {@link DriftActiveError}.
104
+ */
105
+ bindPolicy(input) {
106
+ return this.request("POST", "/v1/underwriting/policy/bind", input);
107
+ }
108
+ /** List the calling tenant's bound policies (paginated, boundAt DESC). */
109
+ listPolicies(query) {
110
+ return this.request("GET", `/v1/underwriting/policy${toQuery(query)}`);
111
+ }
112
+ /** Fetch a single policy + its payout events. */
113
+ getPolicy(policyId) {
114
+ return this.request("GET", `/v1/underwriting/policy/${encodeURIComponent(policyId)}`);
115
+ }
116
+ /** Re-evaluate a bound policy against the historical archive; inserts any
117
+ * newly detected payout events. No request body. */
118
+ evaluatePolicy(policyId) {
119
+ return this.request("POST", `/v1/underwriting/policy/${encodeURIComponent(policyId)}/evaluate`);
120
+ }
121
+ /**
122
+ * Settle a bound policy. PLATFORM-OPS ONLY — requires the `platform_admin`
123
+ * scope (a cross-tenant underwriter operation, normally run by the daily
124
+ * settlement cron). Not a policyholder self-service action; tenant
125
+ * integrations should not call this.
126
+ */
127
+ settlePolicy(policyId, input) {
128
+ return this.request("POST", `/v1/underwriting/policy/${encodeURIComponent(policyId)}/settle`, input);
129
+ }
130
+ // ── observations / nowcasting (L5.3) ──────────────────────────────────────
131
+ /** Register a tenant observation station. Responds 201. */
132
+ createStation(input) {
133
+ return this.request("POST", "/v1/observations/stations", input);
134
+ }
135
+ /** List the calling tenant's observation stations. */
136
+ listStations() {
137
+ return this.request("GET", "/v1/observations/stations");
138
+ }
139
+ /** Patch a station (partial update). */
140
+ updateStation(stationId, input) {
141
+ return this.request("PATCH", `/v1/observations/stations/${encodeURIComponent(stationId)}`, input);
142
+ }
143
+ /** Push station observations into the 0-6h assimilation window (Pro+).
144
+ * Responds 202. */
145
+ submitObservations(input) {
146
+ return this.request("POST", "/v1/observations", input);
147
+ }
148
+ /** Most-recent observations for one of the tenant's stations. */
149
+ recentObservations(stationId, query) {
150
+ return this.request("GET", `/v1/observations/stations/${encodeURIComponent(stationId)}/recent${toQuery(query)}`);
151
+ }
152
+ // ── public / research (no-auth surfaces) ──────────────────────────────────
153
+ /** Public Goable Sustainability Index (JSON-LD, CC BY 4.0). */
154
+ sustainabilityIndex(query) {
155
+ return this.request("GET", `/v1/public/sustainability-index${toQuery(query)}`);
156
+ }
157
+ /** Public Stream F forecast-verification export. Returns the raw NDJSON
158
+ * stream as a string (one cell per line + a trailing meta line). */
159
+ verificationExport(query) {
160
+ return this.requestText("GET", `/v1/research/verification/export${toQuery(query)}`);
161
+ }
162
+ /** Public L15 Difficulty Atlas export. Returns the raw NDJSON stream. */
163
+ difficultyAtlasExport() {
164
+ return this.requestText("GET", "/v1/research/difficulty-atlas/export.jsonl");
165
+ }
166
+ /** Self-service tenant signup (no auth). Always 202 on success. */
167
+ publicSignup(input) {
168
+ return this.request("POST", "/v1/public/signup", input);
169
+ }
170
+ /** Open catalogue coverage stats (no auth). */
171
+ catalogStats() {
172
+ return this.request("GET", "/v1/public/catalog-stats");
173
+ }
73
174
  /** GDPR Art. 17 erasure. Surfaces the receipt headers from a 204. */
74
175
  async deleteUserData(pseudonym) {
75
176
  const res = await this.rawRequest("DELETE", `/v1/decision/user-data/${encodeURIComponent(pseudonym)}`);
@@ -97,6 +198,29 @@ export class GoableClient {
97
198
  throw toApiError(res.status, parsed);
98
199
  return parsed;
99
200
  }
201
+ /** Like {@link request} but returns the raw response body as text — used for
202
+ * the NDJSON research streams, which are not a single JSON document. */
203
+ async requestText(method, path) {
204
+ const res = await this.rawRequest(method, path);
205
+ let text;
206
+ try {
207
+ text = await res.text();
208
+ }
209
+ catch (err) {
210
+ throw new GoableNetworkError("Failed to read response body", "parse", err);
211
+ }
212
+ if (!res.ok) {
213
+ let parsed = text;
214
+ try {
215
+ parsed = JSON.parse(text);
216
+ }
217
+ catch {
218
+ // non-JSON error body — pass the raw text through to toApiError
219
+ }
220
+ throw toApiError(res.status, parsed);
221
+ }
222
+ return text;
223
+ }
100
224
  async rawRequest(method, path, body) {
101
225
  // `X-Goable-Key` rather than `Authorization: Bearer` — the API
102
226
  // sits behind CloudFront with OAC, which hijacks the standard
@@ -130,6 +254,19 @@ export class GoableClient {
130
254
  }
131
255
  }
132
256
  }
257
+ /** Serialise a query object into a leading-`?` string (or "" when empty).
258
+ * Skips undefined/null; isomorphic (URLSearchParams is a Node 18+/browser global). */
259
+ function toQuery(params) {
260
+ if (!params)
261
+ return "";
262
+ const usp = new URLSearchParams();
263
+ for (const [k, v] of Object.entries(params)) {
264
+ if (v !== undefined && v !== null)
265
+ usp.append(k, String(v));
266
+ }
267
+ const s = usp.toString();
268
+ return s ? `?${s}` : "";
269
+ }
133
270
  async function safeJson(res) {
134
271
  let text;
135
272
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/errors.d.ts CHANGED
@@ -13,7 +13,7 @@ export interface ZodIssueLike {
13
13
  [k: string]: unknown;
14
14
  }
15
15
  export declare class GoableApiError extends Error {
16
- readonly name = "GoableApiError";
16
+ readonly name: string;
17
17
  /** HTTP status code. */
18
18
  readonly status: number;
19
19
  /** Machine-readable code from the `error` field (e.g. "PAYMENT_REQUIRED"). */
@@ -27,6 +27,23 @@ export declare class GoableApiError extends Error {
27
27
  detail?: Record<string, unknown>;
28
28
  });
29
29
  }
30
+ /**
31
+ * Raised on a `422 DRIFT_ACTIVE` from `POST /v1/underwriting/policy/bind`:
32
+ * the resolved cell has an open warning/critical L9 drift event, so the bind
33
+ * is refused (a watch-level event is a soft `driftAdvisories` on success, not
34
+ * an error). Subclasses `GoableApiError`, so existing `instanceof
35
+ * GoableApiError` / `.code === "DRIFT_ACTIVE"` checks keep working.
36
+ */
37
+ export declare class DriftActiveError extends GoableApiError {
38
+ readonly name = "DriftActiveError";
39
+ /** The blocking cells, from the server's `detail.openDriftEvents`. Shape is
40
+ * per-cell and best-effort (documented, not part of the typed contract). */
41
+ readonly openDriftEvents: Array<Record<string, unknown>>;
42
+ constructor(status: number, code: string, message?: string, extra?: {
43
+ issues?: ZodIssueLike[];
44
+ detail?: Record<string, unknown>;
45
+ });
46
+ }
30
47
  export declare class GoableNetworkError extends Error {
31
48
  readonly name = "GoableNetworkError";
32
49
  /** "timeout" when the request was aborted by the configured timeout. */
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAA;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CACrB;AAED,qBAAa,cAAe,SAAQ,KAAK;IACvC,SAAkB,IAAI,oBAAmB;IACzC,wBAAwB;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,8EAA8E;IAC9E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,wEAAwE;IACxE,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,CAAA;IAChC,0DAA0D;IAC1D,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;gBAGvC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE;CAUxE;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,SAAkB,IAAI,wBAAuB;IAC7C,wEAAwE;IACxE,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,CAAA;IAC9C,SAAkB,KAAK,CAAC,EAAE,OAAO,CAAA;gBAErB,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,EAAE,KAAK,CAAC,EAAE,OAAO;CAMpF;AASD;6EAC6E;AAC7E,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,cAAc,CAQxE"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAA;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CACrB;AAED,qBAAa,cAAe,SAAQ,KAAK;IAGvC,SAAkB,IAAI,EAAE,MAAM,CAAmB;IACjD,wBAAwB;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,8EAA8E;IAC9E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,wEAAwE;IACxE,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,CAAA;IAChC,0DAA0D;IAC1D,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;gBAGvC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE;CAUxE;AAED;;;;;;GAMG;AACH,qBAAa,gBAAiB,SAAQ,cAAc;IAClD,SAAkB,IAAI,sBAAqB;IAC3C;iFAC6E;IAC7E,QAAQ,CAAC,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;gBAGtD,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE;CAOxE;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,SAAkB,IAAI,wBAAuB;IAC7C,wEAAwE;IACxE,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,CAAA;IAC9C,SAAkB,KAAK,CAAC,EAAE,OAAO,CAAA;gBAErB,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,EAAE,KAAK,CAAC,EAAE,OAAO;CAMpF;AASD;6EAC6E;AAC7E,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,cAAc,CAWxE"}
package/dist/errors.js CHANGED
@@ -7,6 +7,8 @@
7
7
  * (DNS, connection, abort/timeout, JSON parse).
8
8
  */
9
9
  export class GoableApiError extends Error {
10
+ // Typed `string` (not the literal) so subclasses like DriftActiveError can
11
+ // override it with their own name.
10
12
  name = "GoableApiError";
11
13
  /** HTTP status code. */
12
14
  status;
@@ -28,6 +30,25 @@ export class GoableApiError extends Error {
28
30
  Object.setPrototypeOf(this, GoableApiError.prototype);
29
31
  }
30
32
  }
33
+ /**
34
+ * Raised on a `422 DRIFT_ACTIVE` from `POST /v1/underwriting/policy/bind`:
35
+ * the resolved cell has an open warning/critical L9 drift event, so the bind
36
+ * is refused (a watch-level event is a soft `driftAdvisories` on success, not
37
+ * an error). Subclasses `GoableApiError`, so existing `instanceof
38
+ * GoableApiError` / `.code === "DRIFT_ACTIVE"` checks keep working.
39
+ */
40
+ export class DriftActiveError extends GoableApiError {
41
+ name = "DriftActiveError";
42
+ /** The blocking cells, from the server's `detail.openDriftEvents`. Shape is
43
+ * per-cell and best-effort (documented, not part of the typed contract). */
44
+ openDriftEvents;
45
+ constructor(status, code, message, extra) {
46
+ super(status, code, message, extra);
47
+ const raw = extra?.detail?.openDriftEvents;
48
+ this.openDriftEvents = Array.isArray(raw) ? raw : [];
49
+ Object.setPrototypeOf(this, DriftActiveError.prototype);
50
+ }
51
+ }
31
52
  export class GoableNetworkError extends Error {
32
53
  name = "GoableNetworkError";
33
54
  /** "timeout" when the request was aborted by the configured timeout. */
@@ -52,6 +73,10 @@ export function toApiError(status, body) {
52
73
  extra.issues = b.issues;
53
74
  if (b.detail && typeof b.detail === "object")
54
75
  extra.detail = b.detail;
76
+ // Specialise the one error the SDK models with its own class. Stays a
77
+ // GoableApiError subclass, so generic catch sites are unaffected.
78
+ if (code === "DRIFT_ACTIVE")
79
+ return new DriftActiveError(status, code, message, extra);
55
80
  return new GoableApiError(status, code, message, extra);
56
81
  }
57
82
  //# sourceMappingURL=errors.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH,MAAM,OAAO,cAAe,SAAQ,KAAK;IACrB,IAAI,GAAG,gBAAgB,CAAA;IACzC,wBAAwB;IACf,MAAM,CAAQ;IACvB,8EAA8E;IACrE,IAAI,CAAQ;IACrB,wEAAwE;IAC/D,MAAM,CAAiB;IAChC,0DAA0D;IACjD,MAAM,CAA0B;IAEzC,YACE,MAAc,EACd,IAAY,EACZ,OAAgB,EAChB,KAAqE;QAErE,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,CAAA;QACtB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,KAAK,EAAE,MAAM;YAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAA;QAC7C,IAAI,KAAK,EAAE,MAAM;YAAE,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAA;QAC7C,yEAAyE;QACzE,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,cAAc,CAAC,SAAS,CAAC,CAAA;IACvD,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IACzB,IAAI,GAAG,oBAAoB,CAAA;IAC7C,wEAAwE;IAC/D,IAAI,CAAiC;IAC5B,KAAK,CAAU;IAEjC,YAAY,OAAe,EAAE,IAAqC,EAAE,KAAe;QACjF,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,KAAK,KAAK,SAAS;YAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAC3C,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAA;IAC3D,CAAC;CACF;AASD;6EAC6E;AAC7E,MAAM,UAAU,UAAU,CAAC,MAAc,EAAE,IAAa;IACtD,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAiB,CAAA;IACtC,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,MAAM,EAAE,CAAA;IACrE,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAA;IACrE,MAAM,KAAK,GAAkE,EAAE,CAAA;IAC/E,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;QAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,MAAwB,CAAA;IACtE,IAAI,CAAC,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ;QAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,MAAiC,CAAA;IAChG,OAAO,IAAI,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;AACzD,CAAC"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}