@goable-io/sdk 0.4.0 → 0.5.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/README.md +107 -9
- package/dist/client.d.ts +37 -5
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +60 -11
- package/dist/client.js.map +1 -1
- package/dist/errors.d.ts +34 -10
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +28 -2
- package/dist/errors.js.map +1 -1
- package/dist/generated/api.d.ts +459 -46
- package/dist/generated/api.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +38 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/client.ts +107 -10
- package/src/errors.ts +55 -15
- package/src/generated/api.ts +459 -46
- package/src/index.ts +2 -0
- package/src/types.ts +40 -0
package/README.md
CHANGED
|
@@ -81,21 +81,105 @@ new GoableClient({
|
|
|
81
81
|
|
|
82
82
|
## Methods
|
|
83
83
|
|
|
84
|
+
The client mirrors the full public tenant-facing surface — one method per
|
|
85
|
+
OpenAPI path. Grouped by area:
|
|
86
|
+
|
|
87
|
+
### Score
|
|
88
|
+
|
|
84
89
|
| Method | Endpoint | Notes |
|
|
85
90
|
|---|---|---|
|
|
86
|
-
| `score(input)` | `POST /v1/score` | `ensemble: true` → probabilistic (Pro+) |
|
|
91
|
+
| `score(input)` | `POST /v1/score` | `ensemble: true` → probabilistic (Pro+); `rider_skill_level` skill-conditioned (Pro+) |
|
|
87
92
|
| `scoreSeries(input)` | `POST /v1/score/series` | per-step over a window |
|
|
88
93
|
| `scoreMulti(input)` | `POST /v1/score/multi` | many activities, one location |
|
|
89
94
|
| `scoreHistorical(input)` | `POST /v1/score/historical` | climatology percentiles (Pro+) |
|
|
90
95
|
| `scorePortfolio(input)` | `POST /v1/score/portfolio` | multi-spot joint variance |
|
|
96
|
+
| `scoreDifficulty(input)` | `POST /v1/score/difficulty` | L15 skill-conditioned difficulty grids (Pro+) |
|
|
91
97
|
| `explainCounterfactual(input)` | `POST /v1/score/explain-counterfactual` | binding constraint, sensitivities, best window/spot |
|
|
98
|
+
| `reportOutcome(sessionId, input, opts?)` | `POST /v1/score/{sessionId}/outcome` | close the calibration loop; `opts.idempotencyKey` |
|
|
99
|
+
|
|
100
|
+
### Recommend
|
|
101
|
+
|
|
102
|
+
| Method | Endpoint | Notes |
|
|
103
|
+
|---|---|---|
|
|
92
104
|
| `recommendSpot(input)` | `POST /v1/recommend-spot` | inverse query: top-K ranked sub-spots |
|
|
105
|
+
|
|
106
|
+
### Decision
|
|
107
|
+
|
|
108
|
+
| Method | Endpoint | Notes |
|
|
109
|
+
|---|---|---|
|
|
93
110
|
| `decision(input)` | `POST /v1/decision` | personalized go/no-go (Pro+) |
|
|
94
|
-
| `deleteUserData(pseudonym)` | `DELETE /v1/decision/user-data
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
111
|
+
| `deleteUserData(pseudonym)` | `DELETE /v1/decision/user-data/{pseudonym}` | GDPR erasure; returns receipt headers |
|
|
112
|
+
|
|
113
|
+
### Intelligence
|
|
114
|
+
|
|
115
|
+
| Method | Endpoint | Notes |
|
|
116
|
+
|---|---|---|
|
|
117
|
+
| `explain(input)` | `POST /v1/intelligence/explain` | LLM narrative (Pro+) |
|
|
118
|
+
| `briefing(input)` | `POST /v1/intelligence/briefing` | LLM briefing (Pro+) |
|
|
119
|
+
| `edgeCase(input)` | `POST /v1/intelligence/edge-case` | LLM edge-case narrative for a marginal score |
|
|
120
|
+
|
|
121
|
+
### Projections (Scale)
|
|
122
|
+
|
|
123
|
+
| Method | Endpoint | Notes |
|
|
124
|
+
|---|---|---|
|
|
125
|
+
| `projections(input)` | `POST /v1/projections` | single-spot climate-decadal |
|
|
126
|
+
| `projectionsPortfolio(input)` | `POST /v1/projections/portfolio` | multi-spot |
|
|
127
|
+
| `adaptationReport(input)` | `POST /v1/projections/adaptation-report` | months × scenarios × decades |
|
|
128
|
+
|
|
129
|
+
### Underwriting (Scale)
|
|
130
|
+
|
|
131
|
+
| Method | Endpoint | Notes |
|
|
132
|
+
|---|---|---|
|
|
133
|
+
| `quote(input)` | `POST /v1/underwriting/quote` | parametric premium |
|
|
134
|
+
| `getQuote(id)` | `GET /v1/underwriting/quote/{id}` | fetch a stored quote |
|
|
135
|
+
| `bindPolicy(input, opts?)` | `POST /v1/underwriting/policy/bind` | bind a quote; `opts.idempotencyKey`; 422 `DRIFT_ACTIVE` → `DriftActiveError` |
|
|
136
|
+
| `listPolicies(query?)` | `GET /v1/underwriting/policy` | paginated, `boundAt` DESC |
|
|
137
|
+
| `getPolicy(policyId)` | `GET /v1/underwriting/policy/{policyId}` | policy + payout events |
|
|
138
|
+
| `evaluatePolicy(policyId)` | `POST /v1/underwriting/policy/{policyId}/evaluate` | re-evaluate; bodyless |
|
|
139
|
+
| `settlePolicy(policyId, input)` | `POST /v1/underwriting/policy/{policyId}/settle` | platform-ops only |
|
|
140
|
+
|
|
141
|
+
### Observations / nowcasting (L5.3)
|
|
142
|
+
|
|
143
|
+
| Method | Endpoint | Notes |
|
|
144
|
+
|---|---|---|
|
|
145
|
+
| `createStation(input)` | `POST /v1/observations/stations` | register a station |
|
|
146
|
+
| `listStations()` | `GET /v1/observations/stations` | the tenant's stations |
|
|
147
|
+
| `updateStation(stationId, input)` | `PATCH /v1/observations/stations/{stationId}` | partial update |
|
|
148
|
+
| `recentObservations(stationId, query?)` | `GET /v1/observations/stations/{stationId}/recent` | most-recent observations |
|
|
149
|
+
| `submitObservations(input)` | `POST /v1/observations` | push into the 0-6h window (Pro+) |
|
|
150
|
+
| `submitOutcome(input)` | `POST /v1/outcomes` | standalone outcome (not tied to a scored session) |
|
|
151
|
+
|
|
152
|
+
### Audit & compliance
|
|
153
|
+
|
|
154
|
+
| Method | Endpoint | Notes |
|
|
155
|
+
|---|---|---|
|
|
156
|
+
| `auditExport(query)` | `GET /v1/audit/export` | `format: "csv"` → `string`, else parsed JSON |
|
|
157
|
+
|
|
158
|
+
### LLM BYOK (bring-your-own Anthropic key)
|
|
159
|
+
|
|
160
|
+
| Method | Endpoint | Notes |
|
|
161
|
+
|---|---|---|
|
|
162
|
+
| `setLlmKey(input)` | `PUT /v1/tenant/llm-key` | validate + store; resolves `void` (204) |
|
|
163
|
+
| `getLlmKey()` | `GET /v1/tenant/llm-key` | masked status (never the key) |
|
|
164
|
+
| `deleteLlmKey()` | `DELETE /v1/tenant/llm-key` | remove; resolves `void` (204) |
|
|
165
|
+
|
|
166
|
+
### Health, legal & public (no auth)
|
|
167
|
+
|
|
168
|
+
| Method | Endpoint | Notes |
|
|
169
|
+
|---|---|---|
|
|
98
170
|
| `health()` | `GET /v1/health` | liveness |
|
|
171
|
+
| `healthReady()` | `GET /v1/health/ready` | readiness (503 → `GoableApiError`) |
|
|
172
|
+
| `legalDocument(kind)` | `GET /v1/legal/{kind}/current` | current published legal doc |
|
|
173
|
+
| `catalogStats()` | `GET /v1/public/catalog-stats` | open catalogue coverage stats |
|
|
174
|
+
| `sustainabilityIndex(query)` | `GET /v1/public/sustainability-index` | Goable Sustainability Index (JSON-LD) |
|
|
175
|
+
| `publicSignup(input)` | `POST /v1/public/signup` | self-service tenant signup |
|
|
176
|
+
|
|
177
|
+
### Research (open data, CC BY — NDJSON streams returned as `string`)
|
|
178
|
+
|
|
179
|
+
| Method | Endpoint | Notes |
|
|
180
|
+
|---|---|---|
|
|
181
|
+
| `difficultyAtlasExport()` | `GET /v1/research/difficulty-atlas/export.jsonl` | L15 Difficulty Atlas |
|
|
182
|
+
| `verificationExport(query?)` | `GET /v1/research/verification/export` | Stream F forecast verification |
|
|
99
183
|
|
|
100
184
|
Full endpoint reference: [goable.io/docs](https://goable.io/docs).
|
|
101
185
|
|
|
@@ -108,16 +192,30 @@ try {
|
|
|
108
192
|
await goable.score({ activity: "kitesurfing", location: { lat: 43.7, lng: 7.27 }, ensemble: true })
|
|
109
193
|
} catch (err) {
|
|
110
194
|
if (err instanceof GoableApiError) {
|
|
111
|
-
err.status
|
|
112
|
-
err.code
|
|
113
|
-
err.issues
|
|
114
|
-
err.detail
|
|
195
|
+
err.status // e.g. 402
|
|
196
|
+
err.code // e.g. "PAYMENT_REQUIRED"
|
|
197
|
+
err.issues // Zod issues on 422 VALIDATION_ERROR
|
|
198
|
+
err.detail // free-form context (e.g. plan info)
|
|
199
|
+
err.retryAfterSeconds // seconds from `Retry-After` on a 429 (else null)
|
|
200
|
+
err.rateLimit // { limit, remaining, reset } when the response carried X-RateLimit-* headers
|
|
115
201
|
} else if (err instanceof GoableNetworkError) {
|
|
116
202
|
err.kind // "timeout" | "network" | "parse"
|
|
117
203
|
}
|
|
118
204
|
}
|
|
119
205
|
```
|
|
120
206
|
|
|
207
|
+
On a `429`, back off using the server's hint:
|
|
208
|
+
|
|
209
|
+
```ts
|
|
210
|
+
if (err instanceof GoableApiError && err.status === 429 && err.retryAfterSeconds != null) {
|
|
211
|
+
await new Promise((r) => setTimeout(r, err.retryAfterSeconds! * 1000))
|
|
212
|
+
// …then retry
|
|
213
|
+
}
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
`DriftActiveError` (a `GoableApiError` subclass) is thrown on `422 DRIFT_ACTIVE`
|
|
217
|
+
from `bindPolicy()` and exposes `openDriftEvents`.
|
|
218
|
+
|
|
121
219
|
## Browser use
|
|
122
220
|
|
|
123
221
|
The client runs in the browser, but **API keys are secrets** — prefer
|
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 { 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";
|
|
5
|
+
import type { AdaptationReportRequest, AdaptationReportResponse, AuditExportQuery, AuditExportResponse, BindPolicyRequest, BindPolicyResponse, BriefingRequest, BriefingResponse, CatalogStatsResponse, CounterfactualRequest, CounterfactualResponse, CreateStationRequest, CreateStationResponse, DecisionRequest, DecisionResponse, DeleteUserDataResult, EdgeCaseRequest, EdgeCaseResponse, EvaluatePolicyResponse, ExplainRequest, ExplainResponse, HealthReadyResponse, HealthResponse, IdempotencyOptions, LegalDocumentKind, LegalDocumentResponse, ListPoliciesQuery, ListPoliciesResponse, ListStationsResponse, LlmKeyStatus, 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, SetLlmKeyRequest, SettlePolicyRequest, SettlePolicyResponse, SubmitObservationsRequest, SubmitObservationsResponse, SubmitOutcomeRequest, SubmitOutcomeResponse, 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>;
|
|
@@ -33,6 +33,9 @@ export declare class GoableClient {
|
|
|
33
33
|
private readonly timeoutMs;
|
|
34
34
|
constructor(options: GoableClientOptions);
|
|
35
35
|
health(): Promise<HealthResponse>;
|
|
36
|
+
/** Readiness probe (DB + skill lookup + LLM config). Note: a degraded/critical
|
|
37
|
+
* deployment answers `503`, which surfaces here as a {@link GoableApiError}. */
|
|
38
|
+
healthReady(): Promise<HealthReadyResponse>;
|
|
36
39
|
score(input: ScoreRequest): Promise<ScoreResponse>;
|
|
37
40
|
scoreSeries(input: ScoreSeriesRequest): Promise<ScoreSeriesResponse>;
|
|
38
41
|
scoreMulti(input: ScoreMultiRequest): Promise<ScoreMultiResponse>;
|
|
@@ -56,8 +59,14 @@ export declare class GoableClient {
|
|
|
56
59
|
/** L15 — skill-conditioned difficulty grids per scoring dimension (Pro+). */
|
|
57
60
|
scoreDifficulty(input: ScoreDifficultyRequest): Promise<ScoreDifficultyResponse>;
|
|
58
61
|
/** Close the calibration loop: report the observed outcome of a scored
|
|
59
|
-
* session. Requires the `outcomes:write` scope.
|
|
60
|
-
|
|
62
|
+
* session. Requires the `outcomes:write` scope. Pass `idempotencyKey` so a
|
|
63
|
+
* retry after a network timeout can't record the same outcome twice. */
|
|
64
|
+
reportOutcome(sessionId: string, input: ReportOutcomeRequest, options?: IdempotencyOptions): Promise<ReportOutcomeResponse>;
|
|
65
|
+
/** Report a standalone activity outcome not tied to a scored session — the
|
|
66
|
+
* operator-reported behavioural signal behind the calibration + research
|
|
67
|
+
* datasets. Responds 202. Requires the `outcomes:write` scope. For an
|
|
68
|
+
* outcome linked to a specific score, use {@link reportOutcome} instead. */
|
|
69
|
+
submitOutcome(input: SubmitOutcomeRequest): Promise<SubmitOutcomeResponse>;
|
|
61
70
|
/** LLM edge-case narrative for a marginal score. */
|
|
62
71
|
edgeCase(input: EdgeCaseRequest): Promise<EdgeCaseResponse>;
|
|
63
72
|
/** T3 — multi-spot climate-decadal projections (Scale). */
|
|
@@ -72,7 +81,7 @@ export declare class GoableClient {
|
|
|
72
81
|
* warning/critical event refuses the bind with `422 DRIFT_ACTIVE`, thrown as
|
|
73
82
|
* a {@link DriftActiveError}.
|
|
74
83
|
*/
|
|
75
|
-
bindPolicy(input: BindPolicyRequest): Promise<BindPolicyResponse>;
|
|
84
|
+
bindPolicy(input: BindPolicyRequest, options?: IdempotencyOptions): Promise<BindPolicyResponse>;
|
|
76
85
|
/** List the calling tenant's bound policies (paginated, boundAt DESC). */
|
|
77
86
|
listPolicies(query?: ListPoliciesQuery): Promise<ListPoliciesResponse>;
|
|
78
87
|
/** Fetch a single policy + its payout events. */
|
|
@@ -109,11 +118,34 @@ export declare class GoableClient {
|
|
|
109
118
|
publicSignup(input: PublicSignupRequest): Promise<PublicSignupResponse>;
|
|
110
119
|
/** Open catalogue coverage stats (no auth). */
|
|
111
120
|
catalogStats(): Promise<CatalogStatsResponse>;
|
|
121
|
+
/** Fetch the current published legal document of a kind (no auth). */
|
|
122
|
+
legalDocument(kind: LegalDocumentKind): Promise<LegalDocumentResponse>;
|
|
123
|
+
/**
|
|
124
|
+
* Export the calling tenant's own score + outcome audit history for a date
|
|
125
|
+
* range. `format: "csv"` returns the raw CSV as a `string`; the default
|
|
126
|
+
* (`"json"`) returns the parsed {@link AuditExportResponse}. Offset-paginated
|
|
127
|
+
* via `limit` / `offset`.
|
|
128
|
+
*/
|
|
129
|
+
auditExport(query: AuditExportQuery & {
|
|
130
|
+
format: "csv";
|
|
131
|
+
}): Promise<string>;
|
|
132
|
+
auditExport(query: AuditExportQuery & {
|
|
133
|
+
format?: "json";
|
|
134
|
+
}): Promise<AuditExportResponse>;
|
|
135
|
+
/** Set/rotate the tenant's Anthropic API key. The server validates it with
|
|
136
|
+
* one cheap Anthropic call, encrypts it at rest, and never echoes it back.
|
|
137
|
+
* Resolves `void` on the 204. */
|
|
138
|
+
setLlmKey(input: SetLlmKeyRequest): Promise<void>;
|
|
139
|
+
/** Get the tenant's Anthropic key status (masked — never the key itself). */
|
|
140
|
+
getLlmKey(): Promise<LlmKeyStatus>;
|
|
141
|
+
/** Remove the tenant's Anthropic key. Resolves `void` on the 204. */
|
|
142
|
+
deleteLlmKey(): Promise<void>;
|
|
112
143
|
/** GDPR Art. 17 erasure. Surfaces the receipt headers from a 204. */
|
|
113
144
|
deleteUserData(pseudonym: string): Promise<DeleteUserDataResult>;
|
|
114
145
|
private request;
|
|
115
146
|
/** Like {@link request} but returns the raw response body as text — used for
|
|
116
|
-
* the NDJSON research streams
|
|
147
|
+
* the NDJSON research streams and the `format=csv` audit export, which are
|
|
148
|
+
* not a single JSON document. */
|
|
117
149
|
private requestText;
|
|
118
150
|
private rawRequest;
|
|
119
151
|
}
|
package/dist/client.d.ts.map
CHANGED
|
@@ -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":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EACV,uBAAuB,EACvB,wBAAwB,EACxB,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EACrB,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,sBAAsB,EACtB,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,YAAY,EACZ,cAAc,EACd,2BAA2B,EAC3B,4BAA4B,EAC5B,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,uBAAuB,EACvB,0BAA0B,EAC1B,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,uBAAuB,EACvB,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,EACtB,YAAY,EACZ,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,EACpB,yBAAyB,EACzB,0BAA0B,EAC1B,oBAAoB,EACpB,qBAAqB,EACrB,wBAAwB,EACxB,2BAA2B,EAC3B,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACxB,MAAM,YAAY,CAAA;AAEnB,MAAM,MAAM,SAAS,GAAG,CACtB,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE;IACL,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB,KACE,OAAO,CAAC;IACX,EAAE,EAAE,OAAO,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE;QAAE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;KAAE,CAAA;IAC7C,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;CACxB,CAAC,CAAA;AAEF,MAAM,WAAW,mBAAmB;IAClC,yDAAyD;IACzD,MAAM,EAAE,MAAM,CAAA;IACd,8CAA8C;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,mFAAmF;IACnF,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAKD,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;gBAEtB,OAAO,EAAE,mBAAmB;IAaxC,MAAM,IAAI,OAAO,CAAC,cAAc,CAAC;IAIjC;qFACiF;IACjF,WAAW,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAI3C,KAAK,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;IAIlD,WAAW,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAIpE,UAAU,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAIjE,eAAe,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAIhF,cAAc,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAI7E,qBAAqB,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAIpF,QAAQ,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAI3D,OAAO,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAIxD,QAAQ,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAI3D,WAAW,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAIpE,KAAK,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;IAIlD;;;;;;;OAOG;IACH,aAAa,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAI1E,6EAA6E;IAC7E,eAAe,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAIhF;;6EAEyE;IACzE,aAAa,CACX,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,oBAAoB,EAC3B,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,qBAAqB,CAAC;IASjC;;;iFAG6E;IAC7E,aAAa,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAI1E,oDAAoD;IACpD,QAAQ,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAI3D,2DAA2D;IAC3D,oBAAoB,CAAC,KAAK,EAAE,2BAA2B,GAAG,OAAO,CAAC,4BAA4B,CAAC;IAI/F,0EAA0E;IAC1E,gBAAgB,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAKnF,kCAAkC;IAClC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAIhD;;;;;OAKG;IACH,UAAU,CAAC,KAAK,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAS/F,0EAA0E;IAC1E,YAAY,CAAC,KAAK,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAItE,iDAAiD;IACjD,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAIpD;yDACqD;IACrD,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAOjE;;;;;OAKG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IASzF,2DAA2D;IAC3D,aAAa,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAI1E,sDAAsD;IACtD,YAAY,IAAI,OAAO,CAAC,oBAAoB,CAAC;IAI7C,wCAAwC;IACxC,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAQ7F;wBACoB;IACpB,kBAAkB,CAAC,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAIzF,iEAAiE;IACjE,kBAAkB,CAChB,SAAS,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,uBAAuB,GAC9B,OAAO,CAAC,0BAA0B,CAAC;IAQtC,+DAA+D;IAC/D,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,GAAG,OAAO,CAAC,2BAA2B,CAAC;IAO1F;yEACqE;IACrE,kBAAkB,CAAC,KAAK,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,MAAM,CAAC;IAIpE,yEAAyE;IACzE,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC;IAIxC,mEAAmE;IACnE,YAAY,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAIvE,+CAA+C;IAC/C,YAAY,IAAI,OAAO,CAAC,oBAAoB,CAAC;IAI7C,sEAAsE;IACtE,aAAa,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAQtE;;;;;OAKG;IACH,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG;QAAE,MAAM,EAAE,KAAK,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IACzE,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAQxF;;sCAEkC;IAC5B,SAAS,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvD,6EAA6E;IAC7E,SAAS,IAAI,OAAO,CAAC,YAAY,CAAC;IAIlC,qEAAqE;IAC/D,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAInC,qEAAqE;IAC/D,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;YAoBxD,OAAO;IAYrB;;sCAEkC;YACpB,WAAW;YAoBX,UAAU;CA4CzB"}
|
package/dist/client.js
CHANGED
|
@@ -26,6 +26,11 @@ export class GoableClient {
|
|
|
26
26
|
health() {
|
|
27
27
|
return this.request("GET", "/v1/health");
|
|
28
28
|
}
|
|
29
|
+
/** Readiness probe (DB + skill lookup + LLM config). Note: a degraded/critical
|
|
30
|
+
* deployment answers `503`, which surfaces here as a {@link GoableApiError}. */
|
|
31
|
+
healthReady() {
|
|
32
|
+
return this.request("GET", "/v1/health/ready");
|
|
33
|
+
}
|
|
29
34
|
score(input) {
|
|
30
35
|
return this.request("POST", "/v1/score", input);
|
|
31
36
|
}
|
|
@@ -75,9 +80,17 @@ export class GoableClient {
|
|
|
75
80
|
return this.request("POST", "/v1/score/difficulty", input);
|
|
76
81
|
}
|
|
77
82
|
/** Close the calibration loop: report the observed outcome of a scored
|
|
78
|
-
* session. Requires the `outcomes:write` scope.
|
|
79
|
-
|
|
80
|
-
|
|
83
|
+
* session. Requires the `outcomes:write` scope. Pass `idempotencyKey` so a
|
|
84
|
+
* retry after a network timeout can't record the same outcome twice. */
|
|
85
|
+
reportOutcome(sessionId, input, options) {
|
|
86
|
+
return this.request("POST", `/v1/score/${encodeURIComponent(sessionId)}/outcome`, input, idempotencyHeader(options));
|
|
87
|
+
}
|
|
88
|
+
/** Report a standalone activity outcome not tied to a scored session — the
|
|
89
|
+
* operator-reported behavioural signal behind the calibration + research
|
|
90
|
+
* datasets. Responds 202. Requires the `outcomes:write` scope. For an
|
|
91
|
+
* outcome linked to a specific score, use {@link reportOutcome} instead. */
|
|
92
|
+
submitOutcome(input) {
|
|
93
|
+
return this.request("POST", "/v1/outcomes", input);
|
|
81
94
|
}
|
|
82
95
|
/** LLM edge-case narrative for a marginal score. */
|
|
83
96
|
edgeCase(input) {
|
|
@@ -102,8 +115,8 @@ export class GoableClient {
|
|
|
102
115
|
* warning/critical event refuses the bind with `422 DRIFT_ACTIVE`, thrown as
|
|
103
116
|
* a {@link DriftActiveError}.
|
|
104
117
|
*/
|
|
105
|
-
bindPolicy(input) {
|
|
106
|
-
return this.request("POST", "/v1/underwriting/policy/bind", input);
|
|
118
|
+
bindPolicy(input, options) {
|
|
119
|
+
return this.request("POST", "/v1/underwriting/policy/bind", input, idempotencyHeader(options));
|
|
107
120
|
}
|
|
108
121
|
/** List the calling tenant's bound policies (paginated, boundAt DESC). */
|
|
109
122
|
listPolicies(query) {
|
|
@@ -171,6 +184,31 @@ export class GoableClient {
|
|
|
171
184
|
catalogStats() {
|
|
172
185
|
return this.request("GET", "/v1/public/catalog-stats");
|
|
173
186
|
}
|
|
187
|
+
/** Fetch the current published legal document of a kind (no auth). */
|
|
188
|
+
legalDocument(kind) {
|
|
189
|
+
return this.request("GET", `/v1/legal/${encodeURIComponent(kind)}/current`);
|
|
190
|
+
}
|
|
191
|
+
auditExport(query) {
|
|
192
|
+
const path = `/v1/audit/export${toQuery(query)}`;
|
|
193
|
+
if (query.format === "csv")
|
|
194
|
+
return this.requestText("GET", path);
|
|
195
|
+
return this.request("GET", path);
|
|
196
|
+
}
|
|
197
|
+
// ── LLM BYOK (bring-your-own Anthropic key) ───────────────────────────────
|
|
198
|
+
/** Set/rotate the tenant's Anthropic API key. The server validates it with
|
|
199
|
+
* one cheap Anthropic call, encrypts it at rest, and never echoes it back.
|
|
200
|
+
* Resolves `void` on the 204. */
|
|
201
|
+
async setLlmKey(input) {
|
|
202
|
+
await this.request("PUT", "/v1/tenant/llm-key", input);
|
|
203
|
+
}
|
|
204
|
+
/** Get the tenant's Anthropic key status (masked — never the key itself). */
|
|
205
|
+
getLlmKey() {
|
|
206
|
+
return this.request("GET", "/v1/tenant/llm-key");
|
|
207
|
+
}
|
|
208
|
+
/** Remove the tenant's Anthropic key. Resolves `void` on the 204. */
|
|
209
|
+
async deleteLlmKey() {
|
|
210
|
+
await this.request("DELETE", "/v1/tenant/llm-key");
|
|
211
|
+
}
|
|
174
212
|
/** GDPR Art. 17 erasure. Surfaces the receipt headers from a 204. */
|
|
175
213
|
async deleteUserData(pseudonym) {
|
|
176
214
|
const res = await this.rawRequest("DELETE", `/v1/decision/user-data/${encodeURIComponent(pseudonym)}`);
|
|
@@ -191,15 +229,16 @@ export class GoableClient {
|
|
|
191
229
|
};
|
|
192
230
|
}
|
|
193
231
|
// ── transport ─────────────────────────────────────────────────────────────
|
|
194
|
-
async request(method, path, body) {
|
|
195
|
-
const res = await this.rawRequest(method, path, body);
|
|
232
|
+
async request(method, path, body, extraHeaders) {
|
|
233
|
+
const res = await this.rawRequest(method, path, body, extraHeaders);
|
|
196
234
|
const parsed = await safeJson(res);
|
|
197
235
|
if (!res.ok)
|
|
198
|
-
throw toApiError(res.status, parsed);
|
|
236
|
+
throw toApiError(res.status, parsed, res.headers);
|
|
199
237
|
return parsed;
|
|
200
238
|
}
|
|
201
239
|
/** Like {@link request} but returns the raw response body as text — used for
|
|
202
|
-
* the NDJSON research streams
|
|
240
|
+
* the NDJSON research streams and the `format=csv` audit export, which are
|
|
241
|
+
* not a single JSON document. */
|
|
203
242
|
async requestText(method, path) {
|
|
204
243
|
const res = await this.rawRequest(method, path);
|
|
205
244
|
let text;
|
|
@@ -217,11 +256,11 @@ export class GoableClient {
|
|
|
217
256
|
catch {
|
|
218
257
|
// non-JSON error body — pass the raw text through to toApiError
|
|
219
258
|
}
|
|
220
|
-
throw toApiError(res.status, parsed);
|
|
259
|
+
throw toApiError(res.status, parsed, res.headers);
|
|
221
260
|
}
|
|
222
261
|
return text;
|
|
223
262
|
}
|
|
224
|
-
async rawRequest(method, path, body) {
|
|
263
|
+
async rawRequest(method, path, body, extraHeaders) {
|
|
225
264
|
// `X-Goable-Key` rather than `Authorization: Bearer` — the API
|
|
226
265
|
// sits behind CloudFront with OAC, which hijacks the standard
|
|
227
266
|
// Authorization header for its own SigV4 signature. Custom header
|
|
@@ -234,6 +273,12 @@ export class GoableClient {
|
|
|
234
273
|
};
|
|
235
274
|
if (body !== undefined)
|
|
236
275
|
headers["Content-Type"] = "application/json";
|
|
276
|
+
if (extraHeaders) {
|
|
277
|
+
for (const [k, v] of Object.entries(extraHeaders)) {
|
|
278
|
+
if (v !== undefined)
|
|
279
|
+
headers[k] = v;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
237
282
|
const controller = this.timeoutMs > 0 ? new AbortController() : undefined;
|
|
238
283
|
const timer = controller && this.timeoutMs > 0 ? setTimeout(() => controller.abort(), this.timeoutMs) : undefined;
|
|
239
284
|
try {
|
|
@@ -267,6 +312,10 @@ function toQuery(params) {
|
|
|
267
312
|
const s = usp.toString();
|
|
268
313
|
return s ? `?${s}` : "";
|
|
269
314
|
}
|
|
315
|
+
/** Build the optional `Idempotency-Key` header bag from per-call options. */
|
|
316
|
+
function idempotencyHeader(options) {
|
|
317
|
+
return options?.idempotencyKey ? { "Idempotency-Key": options.idempotencyKey } : undefined;
|
|
318
|
+
}
|
|
270
319
|
async function safeJson(res) {
|
|
271
320
|
let text;
|
|
272
321
|
try {
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.d.ts
CHANGED
|
@@ -12,6 +12,24 @@ export interface ZodIssueLike {
|
|
|
12
12
|
message?: string;
|
|
13
13
|
[k: string]: unknown;
|
|
14
14
|
}
|
|
15
|
+
/** Rate-limit snapshot parsed from `X-RateLimit-*` response headers. Present
|
|
16
|
+
* when the server sent them (currently the `score` + `recommend-spot`
|
|
17
|
+
* endpoints; omitted on unlimited Scale plans). */
|
|
18
|
+
export interface RateLimit {
|
|
19
|
+
/** `X-RateLimit-Limit` — daily safety cap for this endpoint + plan. */
|
|
20
|
+
limit: number;
|
|
21
|
+
/** `X-RateLimit-Remaining` — requests left in the current window. */
|
|
22
|
+
remaining: number;
|
|
23
|
+
/** `X-RateLimit-Reset` — Unix timestamp (seconds) when the window resets. */
|
|
24
|
+
reset: number;
|
|
25
|
+
}
|
|
26
|
+
/** Structured extras attached to a {@link GoableApiError}. */
|
|
27
|
+
export interface ApiErrorExtra {
|
|
28
|
+
issues?: ZodIssueLike[];
|
|
29
|
+
detail?: Record<string, unknown>;
|
|
30
|
+
retryAfterSeconds?: number | null;
|
|
31
|
+
rateLimit?: RateLimit;
|
|
32
|
+
}
|
|
15
33
|
export declare class GoableApiError extends Error {
|
|
16
34
|
readonly name: string;
|
|
17
35
|
/** HTTP status code. */
|
|
@@ -22,10 +40,13 @@ export declare class GoableApiError extends Error {
|
|
|
22
40
|
readonly issues?: ZodIssueLike[];
|
|
23
41
|
/** Free-form extra context (e.g. plan info, quote id). */
|
|
24
42
|
readonly detail?: Record<string, unknown>;
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
43
|
+
/** Seconds to wait before retrying, from the `Retry-After` header. Set on a
|
|
44
|
+
* `429`; `null` when the header is absent or unparseable. Lets a caller
|
|
45
|
+
* implement a compliant back-off (`if (err.status === 429) sleep(err.retryAfterSeconds)`). */
|
|
46
|
+
readonly retryAfterSeconds: number | null;
|
|
47
|
+
/** Rate-limit snapshot from `X-RateLimit-*` headers, when the response carried them. */
|
|
48
|
+
readonly rateLimit?: RateLimit;
|
|
49
|
+
constructor(status: number, code: string, message?: string, extra?: ApiErrorExtra);
|
|
29
50
|
}
|
|
30
51
|
/**
|
|
31
52
|
* Raised on a `422 DRIFT_ACTIVE` from `POST /v1/underwriting/policy/bind`:
|
|
@@ -39,10 +60,7 @@ export declare class DriftActiveError extends GoableApiError {
|
|
|
39
60
|
/** The blocking cells, from the server's `detail.openDriftEvents`. Shape is
|
|
40
61
|
* per-cell and best-effort (documented, not part of the typed contract). */
|
|
41
62
|
readonly openDriftEvents: Array<Record<string, unknown>>;
|
|
42
|
-
constructor(status: number, code: string, message?: string, extra?:
|
|
43
|
-
issues?: ZodIssueLike[];
|
|
44
|
-
detail?: Record<string, unknown>;
|
|
45
|
-
});
|
|
63
|
+
constructor(status: number, code: string, message?: string, extra?: ApiErrorExtra);
|
|
46
64
|
}
|
|
47
65
|
export declare class GoableNetworkError extends Error {
|
|
48
66
|
readonly name = "GoableNetworkError";
|
|
@@ -51,7 +69,13 @@ export declare class GoableNetworkError extends Error {
|
|
|
51
69
|
readonly cause?: unknown;
|
|
52
70
|
constructor(message: string, kind: "timeout" | "network" | "parse", cause?: unknown);
|
|
53
71
|
}
|
|
72
|
+
/** A minimal read-only header bag (the `headers` of a fetch Response). */
|
|
73
|
+
export interface HeaderBag {
|
|
74
|
+
get(name: string): string | null;
|
|
75
|
+
}
|
|
54
76
|
/** Map a parsed error body + status into a GoableApiError. Tolerant of a
|
|
55
|
-
* non-conforming body (falls back to the status code as the error code).
|
|
56
|
-
|
|
77
|
+
* non-conforming body (falls back to the status code as the error code).
|
|
78
|
+
* When `headers` are supplied, surfaces `Retry-After` (as `retryAfterSeconds`)
|
|
79
|
+
* and the `X-RateLimit-*` snapshot on the resulting error. */
|
|
80
|
+
export declare function toApiError(status: number, body: unknown, headers?: HeaderBag): GoableApiError;
|
|
57
81
|
//# 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":"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;
|
|
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;;oDAEoD;AACpD,MAAM,WAAW,SAAS;IACxB,uEAAuE;IACvE,KAAK,EAAE,MAAM,CAAA;IACb,qEAAqE;IACrE,SAAS,EAAE,MAAM,CAAA;IACjB,6EAA6E;IAC7E,KAAK,EAAE,MAAM,CAAA;CACd;AAED,8DAA8D;AAC9D,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,YAAY,EAAE,CAAA;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAChC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB;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;IACzC;;mGAE+F;IAC/F,QAAQ,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAA;IACzC,wFAAwF;IACxF,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAA;gBAElB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,aAAa;CAWlF;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;gBAE5C,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,aAAa;CAMlF;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,0EAA0E;AAC1E,MAAM,WAAW,SAAS;IACxB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;CACjC;AAUD;;;+DAG+D;AAC/D,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,SAAS,GAAG,cAAc,CAkB7F"}
|
package/dist/errors.js
CHANGED
|
@@ -18,6 +18,12 @@ export class GoableApiError extends Error {
|
|
|
18
18
|
issues;
|
|
19
19
|
/** Free-form extra context (e.g. plan info, quote id). */
|
|
20
20
|
detail;
|
|
21
|
+
/** Seconds to wait before retrying, from the `Retry-After` header. Set on a
|
|
22
|
+
* `429`; `null` when the header is absent or unparseable. Lets a caller
|
|
23
|
+
* implement a compliant back-off (`if (err.status === 429) sleep(err.retryAfterSeconds)`). */
|
|
24
|
+
retryAfterSeconds;
|
|
25
|
+
/** Rate-limit snapshot from `X-RateLimit-*` headers, when the response carried them. */
|
|
26
|
+
rateLimit;
|
|
21
27
|
constructor(status, code, message, extra) {
|
|
22
28
|
super(message ?? code);
|
|
23
29
|
this.status = status;
|
|
@@ -26,6 +32,9 @@ export class GoableApiError extends Error {
|
|
|
26
32
|
this.issues = extra.issues;
|
|
27
33
|
if (extra?.detail)
|
|
28
34
|
this.detail = extra.detail;
|
|
35
|
+
this.retryAfterSeconds = extra?.retryAfterSeconds ?? null;
|
|
36
|
+
if (extra?.rateLimit)
|
|
37
|
+
this.rateLimit = extra.rateLimit;
|
|
29
38
|
// Restore prototype chain for `instanceof` across transpilation targets.
|
|
30
39
|
Object.setPrototypeOf(this, GoableApiError.prototype);
|
|
31
40
|
}
|
|
@@ -62,9 +71,19 @@ export class GoableNetworkError extends Error {
|
|
|
62
71
|
Object.setPrototypeOf(this, GoableNetworkError.prototype);
|
|
63
72
|
}
|
|
64
73
|
}
|
|
74
|
+
/** Parse an integer header, returning null when absent or non-numeric. */
|
|
75
|
+
function intHeader(headers, name) {
|
|
76
|
+
const v = headers?.get(name);
|
|
77
|
+
if (v == null)
|
|
78
|
+
return null;
|
|
79
|
+
const n = Number(v);
|
|
80
|
+
return Number.isFinite(n) ? n : null;
|
|
81
|
+
}
|
|
65
82
|
/** Map a parsed error body + status into a GoableApiError. Tolerant of a
|
|
66
|
-
* non-conforming body (falls back to the status code as the error code).
|
|
67
|
-
|
|
83
|
+
* non-conforming body (falls back to the status code as the error code).
|
|
84
|
+
* When `headers` are supplied, surfaces `Retry-After` (as `retryAfterSeconds`)
|
|
85
|
+
* and the `X-RateLimit-*` snapshot on the resulting error. */
|
|
86
|
+
export function toApiError(status, body, headers) {
|
|
68
87
|
const b = (body ?? {});
|
|
69
88
|
const code = typeof b.error === "string" ? b.error : `HTTP_${status}`;
|
|
70
89
|
const message = typeof b.message === "string" ? b.message : undefined;
|
|
@@ -73,6 +92,13 @@ export function toApiError(status, body) {
|
|
|
73
92
|
extra.issues = b.issues;
|
|
74
93
|
if (b.detail && typeof b.detail === "object")
|
|
75
94
|
extra.detail = b.detail;
|
|
95
|
+
extra.retryAfterSeconds = intHeader(headers, "Retry-After");
|
|
96
|
+
const limit = intHeader(headers, "X-RateLimit-Limit");
|
|
97
|
+
const remaining = intHeader(headers, "X-RateLimit-Remaining");
|
|
98
|
+
const reset = intHeader(headers, "X-RateLimit-Reset");
|
|
99
|
+
if (limit !== null && remaining !== null && reset !== null) {
|
|
100
|
+
extra.rateLimit = { limit, remaining, reset };
|
|
101
|
+
}
|
|
76
102
|
// Specialise the one error the SDK models with its own class. Stays a
|
|
77
103
|
// GoableApiError subclass, so generic catch sites are unaffected.
|
|
78
104
|
if (code === "DRIFT_ACTIVE")
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
|