@attestry/sdk 0.6.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 +190 -0
- package/README.md +1269 -0
- package/dist/client.d.ts +58 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +74 -0
- package/dist/client.js.map +1 -0
- package/dist/constants.d.ts +7 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +43 -0
- package/dist/constants.js.map +1 -0
- package/dist/errors.d.ts +16 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +41 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/lines-parser.d.ts +50 -0
- package/dist/lines-parser.d.ts.map +1 -0
- package/dist/lines-parser.js +211 -0
- package/dist/lines-parser.js.map +1 -0
- package/dist/ndjson-parser.d.ts +57 -0
- package/dist/ndjson-parser.d.ts.map +1 -0
- package/dist/ndjson-parser.js +245 -0
- package/dist/ndjson-parser.js.map +1 -0
- package/dist/resources/abac-policies.d.ts +1034 -0
- package/dist/resources/abac-policies.d.ts.map +1 -0
- package/dist/resources/abac-policies.js +1519 -0
- package/dist/resources/abac-policies.js.map +1 -0
- package/dist/resources/audit-log.d.ts +588 -0
- package/dist/resources/audit-log.d.ts.map +1 -0
- package/dist/resources/audit-log.js +629 -0
- package/dist/resources/audit-log.js.map +1 -0
- package/dist/resources/batch.d.ts +845 -0
- package/dist/resources/batch.d.ts.map +1 -0
- package/dist/resources/batch.js +1074 -0
- package/dist/resources/batch.js.map +1 -0
- package/dist/resources/chat.d.ts +151 -0
- package/dist/resources/chat.d.ts.map +1 -0
- package/dist/resources/chat.js +124 -0
- package/dist/resources/chat.js.map +1 -0
- package/dist/resources/check.d.ts +348 -0
- package/dist/resources/check.d.ts.map +1 -0
- package/dist/resources/check.js +543 -0
- package/dist/resources/check.js.map +1 -0
- package/dist/resources/compliance-check.d.ts +330 -0
- package/dist/resources/compliance-check.d.ts.map +1 -0
- package/dist/resources/compliance-check.js +402 -0
- package/dist/resources/compliance-check.js.map +1 -0
- package/dist/resources/decisions.d.ts +1208 -0
- package/dist/resources/decisions.d.ts.map +1 -0
- package/dist/resources/decisions.js +1362 -0
- package/dist/resources/decisions.js.map +1 -0
- package/dist/resources/evidence-pack.d.ts +1080 -0
- package/dist/resources/evidence-pack.d.ts.map +1 -0
- package/dist/resources/evidence-pack.js +1789 -0
- package/dist/resources/evidence-pack.js.map +1 -0
- package/dist/resources/gate.d.ts +613 -0
- package/dist/resources/gate.d.ts.map +1 -0
- package/dist/resources/gate.js +737 -0
- package/dist/resources/gate.js.map +1 -0
- package/dist/resources/incidents.d.ts +136 -0
- package/dist/resources/incidents.d.ts.map +1 -0
- package/dist/resources/incidents.js +229 -0
- package/dist/resources/incidents.js.map +1 -0
- package/dist/resources/regulatory-changes.d.ts +307 -0
- package/dist/resources/regulatory-changes.d.ts.map +1 -0
- package/dist/resources/regulatory-changes.js +365 -0
- package/dist/resources/regulatory-changes.js.map +1 -0
- package/dist/resources/safe-input-read.d.ts +21 -0
- package/dist/resources/safe-input-read.d.ts.map +1 -0
- package/dist/resources/safe-input-read.js +57 -0
- package/dist/resources/safe-input-read.js.map +1 -0
- package/dist/resources/ship-gate.d.ts +475 -0
- package/dist/resources/ship-gate.d.ts.map +1 -0
- package/dist/resources/ship-gate.js +727 -0
- package/dist/resources/ship-gate.js.map +1 -0
- package/dist/resources/vision.d.ts +540 -0
- package/dist/resources/vision.d.ts.map +1 -0
- package/dist/resources/vision.js +1036 -0
- package/dist/resources/vision.js.map +1 -0
- package/dist/retry.d.ts +103 -0
- package/dist/retry.d.ts.map +1 -0
- package/dist/retry.js +224 -0
- package/dist/retry.js.map +1 -0
- package/dist/sse-parser.d.ts +64 -0
- package/dist/sse-parser.d.ts.map +1 -0
- package/dist/sse-parser.js +271 -0
- package/dist/sse-parser.js.map +1 -0
- package/dist/transport.d.ts +142 -0
- package/dist/transport.d.ts.map +1 -0
- package/dist/transport.js +455 -0
- package/dist/transport.js.map +1 -0
- package/dist/types.d.ts +61 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +44 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vision.js","sourceRoot":"","sources":["../../src/resources/vision.ts"],"names":[],"mappings":"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"}
|
package/dist/retry.d.ts
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { AttestryAPIError } from "./errors.js";
|
|
2
|
+
/**
|
|
3
|
+
* Tunable retry behavior. Pass to `AttestryClient` for client-wide config
|
|
4
|
+
* or per-call via `RequestOptions.retry`. Per-call overrides client-level;
|
|
5
|
+
* client-level overrides defaults.
|
|
6
|
+
*/
|
|
7
|
+
export interface RetryOptions {
|
|
8
|
+
/**
|
|
9
|
+
* Maximum number of retry attempts on 429. The initial request is NOT
|
|
10
|
+
* counted — `maxRetries: 3` means up to 4 total attempts.
|
|
11
|
+
* Set to `0` to disable retries entirely.
|
|
12
|
+
* Default: `3`.
|
|
13
|
+
*/
|
|
14
|
+
maxRetries: number;
|
|
15
|
+
/**
|
|
16
|
+
* Initial backoff delay in milliseconds. Doubled on each retry, then
|
|
17
|
+
* full-jittered. Default: `1000`.
|
|
18
|
+
*/
|
|
19
|
+
initialDelayMs: number;
|
|
20
|
+
/**
|
|
21
|
+
* Maximum backoff delay (cap). Both the exponential schedule and the
|
|
22
|
+
* server-supplied `Retry-After` are capped at this value. Default: `30_000`.
|
|
23
|
+
*/
|
|
24
|
+
maxDelayMs: number;
|
|
25
|
+
/**
|
|
26
|
+
* If true, an HTTP `Retry-After` header on the 429 response takes
|
|
27
|
+
* precedence over the exponential schedule (still capped at `maxDelayMs`).
|
|
28
|
+
* Both delta-seconds (`Retry-After: 60`) and HTTP-date forms are
|
|
29
|
+
* supported. Default: `true`.
|
|
30
|
+
*/
|
|
31
|
+
honorRetryAfter: boolean;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Defaults. Conservative — retry-on by default with a small cap, honoring
|
|
35
|
+
* server hints. Three retries (4 attempts total) with 1s base, 30s cap is
|
|
36
|
+
* the industry norm (Stripe, Anthropic SDK, AWS SDK all sit in that range).
|
|
37
|
+
*/
|
|
38
|
+
export declare const DEFAULT_RETRY_OPTIONS: RetryOptions;
|
|
39
|
+
/**
|
|
40
|
+
* Merge per-call > client > defaults. Returns a fully-resolved
|
|
41
|
+
* `RetryOptions` with no undefined fields. Validates the merged values
|
|
42
|
+
* — negative numbers, non-finite, or non-integer `maxRetries` throw
|
|
43
|
+
* `AttestryError` so a bad config is caught at first call.
|
|
44
|
+
*/
|
|
45
|
+
export declare function resolveRetryOptions(clientLevel: Partial<RetryOptions> | undefined, perCall: Partial<RetryOptions> | undefined): RetryOptions;
|
|
46
|
+
/**
|
|
47
|
+
* Parse an HTTP `Retry-After` header value into a delay in milliseconds.
|
|
48
|
+
* Supports both forms per RFC 7231 § 7.1.3:
|
|
49
|
+
*
|
|
50
|
+
* - delta-seconds: `Retry-After: 120` → 120_000ms
|
|
51
|
+
* - HTTP-date: `Retry-After: Mon, 04 May 2026 14:30:00 GMT` → (date - now)
|
|
52
|
+
*
|
|
53
|
+
* Returns `null` for missing / unparseable / negative-or-zero / NaN input.
|
|
54
|
+
* Caller decides what to do with `null` (typically: fall back to the
|
|
55
|
+
* exponential schedule). Defensive against hostile servers — a value
|
|
56
|
+
* returning a real positive number can still be `Infinity` if the header
|
|
57
|
+
* is huge; that's the caller's `maxDelayMs` cap to enforce.
|
|
58
|
+
*/
|
|
59
|
+
export declare function parseRetryAfter(headerValue: string | null): number | null;
|
|
60
|
+
/**
|
|
61
|
+
* Compute the next backoff delay in milliseconds.
|
|
62
|
+
*
|
|
63
|
+
* Order of precedence:
|
|
64
|
+
* 1. If `honorRetryAfter` and the 429 response carried a parseable
|
|
65
|
+
* `Retry-After` header, use that value (capped at `maxDelayMs`).
|
|
66
|
+
* 2. Otherwise: exponential `initialDelayMs * 2^attempt`, full-jittered
|
|
67
|
+
* to `random_between(0, exponential_value)`, capped at `maxDelayMs`.
|
|
68
|
+
*
|
|
69
|
+
* `attempt` is the zero-indexed retry number (0 = first retry).
|
|
70
|
+
*
|
|
71
|
+
* Full jitter is the AWS-recommended pattern for client-side throttling:
|
|
72
|
+
* https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/.
|
|
73
|
+
* Prevents thundering herd when many clients all 429 at the same instant.
|
|
74
|
+
*/
|
|
75
|
+
export declare function computeRetryDelay(err: AttestryAPIError, attempt: number, options: RetryOptions, rng?: () => number): number;
|
|
76
|
+
/**
|
|
77
|
+
* Sleep for `ms` milliseconds, but reject early with `AttestryError` if
|
|
78
|
+
* the caller's signal aborts. Without the signal hook, `await new Promise
|
|
79
|
+
* (r => setTimeout(r, ms))` would block the abort path until the timer
|
|
80
|
+
* fires — defeating the purpose of cancellation.
|
|
81
|
+
*
|
|
82
|
+
* Pre-aborted signal rejects synchronously (well, after one microtask)
|
|
83
|
+
* — symmetric to transport.request's pre-abort guard.
|
|
84
|
+
*
|
|
85
|
+
* Cleanup invariant: the abort listener is removed in BOTH paths
|
|
86
|
+
* (timer-fires-first AND abort-fires-first). Without removal on the
|
|
87
|
+
* timer path, a long-lived caller signal would accumulate listeners
|
|
88
|
+
* across many retries — small leak per call but real, and EventTarget
|
|
89
|
+
* has no built-in cap.
|
|
90
|
+
*/
|
|
91
|
+
export declare function sleepWithSignal(ms: number, signal: AbortSignal | undefined): Promise<void>;
|
|
92
|
+
/**
|
|
93
|
+
* Internal — attach a `Retry-After` header value to an AttestryAPIError
|
|
94
|
+
* for retry-delay computation. Set as a non-enumerable property so it
|
|
95
|
+
* doesn't show up in JSON.stringify or in user-facing console.log.
|
|
96
|
+
*/
|
|
97
|
+
export declare function attachRetryAfter(err: AttestryAPIError, headerValue: string | null): void;
|
|
98
|
+
/**
|
|
99
|
+
* True iff the error is a retryable HTTP status. Today: 429 only. See
|
|
100
|
+
* file header for rationale.
|
|
101
|
+
*/
|
|
102
|
+
export declare function isRetryableError(err: unknown): err is AttestryAPIError;
|
|
103
|
+
//# sourceMappingURL=retry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../src/retry.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAE,gBAAgB,EAAiB,MAAM,aAAa,CAAC;AAE9D;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;;OAKG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,EAAE,YAKnC,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,SAAS,EAC9C,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,SAAS,GACzC,YAAY,CA+Bd;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAkBzE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,gBAAgB,EACrB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,YAAY,EACrB,GAAG,GAAE,MAAM,MAAoB,GAC9B,MAAM,CAmBR;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,eAAe,CACnC,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,WAAW,GAAG,SAAS,GAC9B,OAAO,CAAC,IAAI,CAAC,CAoCf;AAoBD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,gBAAgB,EACrB,WAAW,EAAE,MAAM,GAAG,IAAI,GACzB,IAAI,CAQN;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,gBAAgB,CAEtE"}
|
package/dist/retry.js
ADDED
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
// ─── Retry middleware ───────────────────────────────────────────────────────
|
|
2
|
+
//
|
|
3
|
+
// Automatic retry on HTTP 429 (Too Many Requests). Applied transparently
|
|
4
|
+
// to every JSON request and to the initial fetch of every SSE stream.
|
|
5
|
+
// Mid-iteration retries on streams are deliberately NOT supported — events
|
|
6
|
+
// would be lost or duplicated without idempotency design surface.
|
|
7
|
+
//
|
|
8
|
+
// Why only 429 in v0:
|
|
9
|
+
// - 429 means "rejected before processing" — by definition safe to retry,
|
|
10
|
+
// even for non-idempotent POSTs (the server didn't run anything).
|
|
11
|
+
// - 5xx errors might indicate persistent bugs; auto-retrying could mask
|
|
12
|
+
// them. Caller can retry manually after inspecting `err.status`.
|
|
13
|
+
// - 408 (Request Timeout) is rare at the API layer and ambiguous.
|
|
14
|
+
// - 503 in our kernel can mean "permanent config issue" (chat without
|
|
15
|
+
// Anthropic key) — auto-retry would loop forever.
|
|
16
|
+
// Future expansion to 503/502/504 with idempotency-key support is forward-
|
|
17
|
+
// compat — see spec-diff round.
|
|
18
|
+
//
|
|
19
|
+
// Backoff strategy: exponential with full jitter. Default base 1000ms,
|
|
20
|
+
// multiplier 2x, cap 30s. Server-supplied `Retry-After` header (RFC 7231)
|
|
21
|
+
// takes precedence when present and is capped at maxDelayMs (a hostile
|
|
22
|
+
// server can't park the client for an hour).
|
|
23
|
+
import { AttestryAPIError, AttestryError } from "./errors.js";
|
|
24
|
+
/**
|
|
25
|
+
* Defaults. Conservative — retry-on by default with a small cap, honoring
|
|
26
|
+
* server hints. Three retries (4 attempts total) with 1s base, 30s cap is
|
|
27
|
+
* the industry norm (Stripe, Anthropic SDK, AWS SDK all sit in that range).
|
|
28
|
+
*/
|
|
29
|
+
export const DEFAULT_RETRY_OPTIONS = {
|
|
30
|
+
maxRetries: 3,
|
|
31
|
+
initialDelayMs: 1_000,
|
|
32
|
+
maxDelayMs: 30_000,
|
|
33
|
+
honorRetryAfter: true,
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Merge per-call > client > defaults. Returns a fully-resolved
|
|
37
|
+
* `RetryOptions` with no undefined fields. Validates the merged values
|
|
38
|
+
* — negative numbers, non-finite, or non-integer `maxRetries` throw
|
|
39
|
+
* `AttestryError` so a bad config is caught at first call.
|
|
40
|
+
*/
|
|
41
|
+
export function resolveRetryOptions(clientLevel, perCall) {
|
|
42
|
+
const merged = {
|
|
43
|
+
...DEFAULT_RETRY_OPTIONS,
|
|
44
|
+
...clientLevel,
|
|
45
|
+
...perCall,
|
|
46
|
+
};
|
|
47
|
+
if (!Number.isInteger(merged.maxRetries) ||
|
|
48
|
+
merged.maxRetries < 0 ||
|
|
49
|
+
merged.maxRetries > 100) {
|
|
50
|
+
throw new AttestryError("retry: `maxRetries` must be a non-negative integer ≤ 100");
|
|
51
|
+
}
|
|
52
|
+
if (!Number.isFinite(merged.initialDelayMs) || merged.initialDelayMs < 0) {
|
|
53
|
+
throw new AttestryError("retry: `initialDelayMs` must be a non-negative finite number");
|
|
54
|
+
}
|
|
55
|
+
if (!Number.isFinite(merged.maxDelayMs) || merged.maxDelayMs < 0) {
|
|
56
|
+
throw new AttestryError("retry: `maxDelayMs` must be a non-negative finite number");
|
|
57
|
+
}
|
|
58
|
+
if (typeof merged.honorRetryAfter !== "boolean") {
|
|
59
|
+
throw new AttestryError("retry: `honorRetryAfter` must be a boolean");
|
|
60
|
+
}
|
|
61
|
+
return merged;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Parse an HTTP `Retry-After` header value into a delay in milliseconds.
|
|
65
|
+
* Supports both forms per RFC 7231 § 7.1.3:
|
|
66
|
+
*
|
|
67
|
+
* - delta-seconds: `Retry-After: 120` → 120_000ms
|
|
68
|
+
* - HTTP-date: `Retry-After: Mon, 04 May 2026 14:30:00 GMT` → (date - now)
|
|
69
|
+
*
|
|
70
|
+
* Returns `null` for missing / unparseable / negative-or-zero / NaN input.
|
|
71
|
+
* Caller decides what to do with `null` (typically: fall back to the
|
|
72
|
+
* exponential schedule). Defensive against hostile servers — a value
|
|
73
|
+
* returning a real positive number can still be `Infinity` if the header
|
|
74
|
+
* is huge; that's the caller's `maxDelayMs` cap to enforce.
|
|
75
|
+
*/
|
|
76
|
+
export function parseRetryAfter(headerValue) {
|
|
77
|
+
if (headerValue === null)
|
|
78
|
+
return null;
|
|
79
|
+
const trimmed = headerValue.trim();
|
|
80
|
+
if (trimmed.length === 0)
|
|
81
|
+
return null;
|
|
82
|
+
// Try delta-seconds first. RFC 7231 specifies the value is a non-negative
|
|
83
|
+
// decimal integer, but be slightly permissive: leading/trailing whitespace
|
|
84
|
+
// is trimmed; pure-numeric strings parse via Number.
|
|
85
|
+
if (/^\d+(\.\d+)?$/.test(trimmed)) {
|
|
86
|
+
const seconds = Number(trimmed);
|
|
87
|
+
if (!Number.isFinite(seconds) || seconds <= 0)
|
|
88
|
+
return null;
|
|
89
|
+
return Math.floor(seconds * 1_000);
|
|
90
|
+
}
|
|
91
|
+
// Otherwise: HTTP-date. `Date.parse` handles RFC 5322 / RFC 7231 forms.
|
|
92
|
+
const t = Date.parse(trimmed);
|
|
93
|
+
if (Number.isNaN(t))
|
|
94
|
+
return null;
|
|
95
|
+
const delayMs = t - Date.now();
|
|
96
|
+
if (delayMs <= 0)
|
|
97
|
+
return null;
|
|
98
|
+
return delayMs;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Compute the next backoff delay in milliseconds.
|
|
102
|
+
*
|
|
103
|
+
* Order of precedence:
|
|
104
|
+
* 1. If `honorRetryAfter` and the 429 response carried a parseable
|
|
105
|
+
* `Retry-After` header, use that value (capped at `maxDelayMs`).
|
|
106
|
+
* 2. Otherwise: exponential `initialDelayMs * 2^attempt`, full-jittered
|
|
107
|
+
* to `random_between(0, exponential_value)`, capped at `maxDelayMs`.
|
|
108
|
+
*
|
|
109
|
+
* `attempt` is the zero-indexed retry number (0 = first retry).
|
|
110
|
+
*
|
|
111
|
+
* Full jitter is the AWS-recommended pattern for client-side throttling:
|
|
112
|
+
* https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/.
|
|
113
|
+
* Prevents thundering herd when many clients all 429 at the same instant.
|
|
114
|
+
*/
|
|
115
|
+
export function computeRetryDelay(err, attempt, options, rng = Math.random) {
|
|
116
|
+
if (options.honorRetryAfter) {
|
|
117
|
+
const headerValue = extractRetryAfter(err);
|
|
118
|
+
const parsed = parseRetryAfter(headerValue);
|
|
119
|
+
if (parsed !== null) {
|
|
120
|
+
return Math.min(parsed, options.maxDelayMs);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// Exponential. Cap the exponent at 30 to avoid Math.pow overflow on
|
|
124
|
+
// pathological maxRetries values; the caller's resolveRetryOptions
|
|
125
|
+
// already caps maxRetries at 100, but full jitter's input is computed
|
|
126
|
+
// pre-cap and could otherwise overflow.
|
|
127
|
+
const safeExponent = Math.min(attempt, 30);
|
|
128
|
+
const exponential = options.initialDelayMs * Math.pow(2, safeExponent);
|
|
129
|
+
const cappedExp = Math.min(exponential, options.maxDelayMs);
|
|
130
|
+
// Full jitter: `random_between(0, cappedExp)`. The lower bound 0 is
|
|
131
|
+
// intentional — over many clients, the average delay across a cohort
|
|
132
|
+
// is cappedExp/2 with low cross-correlation.
|
|
133
|
+
return Math.floor(rng() * cappedExp);
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Sleep for `ms` milliseconds, but reject early with `AttestryError` if
|
|
137
|
+
* the caller's signal aborts. Without the signal hook, `await new Promise
|
|
138
|
+
* (r => setTimeout(r, ms))` would block the abort path until the timer
|
|
139
|
+
* fires — defeating the purpose of cancellation.
|
|
140
|
+
*
|
|
141
|
+
* Pre-aborted signal rejects synchronously (well, after one microtask)
|
|
142
|
+
* — symmetric to transport.request's pre-abort guard.
|
|
143
|
+
*
|
|
144
|
+
* Cleanup invariant: the abort listener is removed in BOTH paths
|
|
145
|
+
* (timer-fires-first AND abort-fires-first). Without removal on the
|
|
146
|
+
* timer path, a long-lived caller signal would accumulate listeners
|
|
147
|
+
* across many retries — small leak per call but real, and EventTarget
|
|
148
|
+
* has no built-in cap.
|
|
149
|
+
*/
|
|
150
|
+
export async function sleepWithSignal(ms, signal) {
|
|
151
|
+
if (signal?.aborted) {
|
|
152
|
+
throw new AttestryError("request aborted by caller", {
|
|
153
|
+
cause: signal.reason,
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
// Zero / negative delay: resolve immediately on next microtask so callers
|
|
157
|
+
// don't synchronously starve the event loop. (Hostile rng can produce
|
|
158
|
+
// negative — the cap also handles NaN by failing the comparison and
|
|
159
|
+
// falling to setTimeout, where Node's setTimeout(NaN) coerces to 1ms.)
|
|
160
|
+
if (ms <= 0) {
|
|
161
|
+
await Promise.resolve();
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
await new Promise((resolve, reject) => {
|
|
165
|
+
let timer;
|
|
166
|
+
const onAbort = () => {
|
|
167
|
+
clearTimeout(timer);
|
|
168
|
+
reject(new AttestryError("request aborted by caller", {
|
|
169
|
+
cause: signal.reason,
|
|
170
|
+
}));
|
|
171
|
+
};
|
|
172
|
+
timer = setTimeout(() => {
|
|
173
|
+
// Remove the listener BEFORE resolving — symmetric cleanup with
|
|
174
|
+
// the abort path's clearTimeout. Hostile-round H1 fix.
|
|
175
|
+
if (signal !== undefined) {
|
|
176
|
+
signal.removeEventListener("abort", onAbort);
|
|
177
|
+
}
|
|
178
|
+
resolve();
|
|
179
|
+
}, ms);
|
|
180
|
+
if (signal !== undefined) {
|
|
181
|
+
signal.addEventListener("abort", onAbort, { once: true });
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Internal — extract the `Retry-After` header from an AttestryAPIError's
|
|
187
|
+
* details, when present. The transport's error path stores the response
|
|
188
|
+
* body in `details`; the response headers aren't currently captured. We
|
|
189
|
+
* special-case Retry-After by stashing it under a private key when the
|
|
190
|
+
* request fires.
|
|
191
|
+
*
|
|
192
|
+
* For the build round, we extract from a "_retryAfter" property on the
|
|
193
|
+
* AttestryAPIError instance set by the transport. Tracked in the build
|
|
194
|
+
* doc as a deliberate departure from the existing AttestryAPIError
|
|
195
|
+
* shape — we add ONE non-enumerable property rather than restructuring
|
|
196
|
+
* the public details.
|
|
197
|
+
*/
|
|
198
|
+
function extractRetryAfter(err) {
|
|
199
|
+
const value = err._retryAfter;
|
|
200
|
+
return typeof value === "string" ? value : null;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Internal — attach a `Retry-After` header value to an AttestryAPIError
|
|
204
|
+
* for retry-delay computation. Set as a non-enumerable property so it
|
|
205
|
+
* doesn't show up in JSON.stringify or in user-facing console.log.
|
|
206
|
+
*/
|
|
207
|
+
export function attachRetryAfter(err, headerValue) {
|
|
208
|
+
if (headerValue === null)
|
|
209
|
+
return;
|
|
210
|
+
Object.defineProperty(err, "_retryAfter", {
|
|
211
|
+
value: headerValue,
|
|
212
|
+
enumerable: false,
|
|
213
|
+
writable: false,
|
|
214
|
+
configurable: false,
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* True iff the error is a retryable HTTP status. Today: 429 only. See
|
|
219
|
+
* file header for rationale.
|
|
220
|
+
*/
|
|
221
|
+
export function isRetryableError(err) {
|
|
222
|
+
return err instanceof AttestryAPIError && err.status === 429;
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=retry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../src/retry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One parsed SSE frame. `data` is a string (consumer parses JSON if
|
|
3
|
+
* applicable). `id` and `event` are present iff the frame had those
|
|
4
|
+
* fields. Empty frames (only whitespace, or only comments) are NOT
|
|
5
|
+
* yielded — comments / heartbeats are filtered at the parser level.
|
|
6
|
+
*/
|
|
7
|
+
export interface SSEFrame {
|
|
8
|
+
/** Value of the `id:` field if present; else undefined. */
|
|
9
|
+
id?: string;
|
|
10
|
+
/** Value of the `event:` field if present; else undefined. */
|
|
11
|
+
event?: string;
|
|
12
|
+
/** Concatenated `data:` lines, joined by `\n`. May be empty string. */
|
|
13
|
+
data: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Async generator: reads from a stream of UTF-8-encoded SSE bytes and
|
|
17
|
+
* yields each complete frame. Ends when the underlying reader signals
|
|
18
|
+
* `done`. Defensive: a caller that breaks early out of the for-await
|
|
19
|
+
* loop leaves the reader open — call `reader.cancel()` from your finally
|
|
20
|
+
* block (or use the `parseSSEResponse` wrapper below which handles it).
|
|
21
|
+
*
|
|
22
|
+
* @throws AttestryError if a frame line is malformed past recovery (no
|
|
23
|
+
* such case in the kernel's emitter today; future-proofing); OR
|
|
24
|
+
* if the buffer exceeds `maxBufferBytes` (defense against
|
|
25
|
+
* unbounded-frame DoS — hostile-review H3).
|
|
26
|
+
*/
|
|
27
|
+
export declare function parseSSE(reader: ReadableStreamDefaultReader<Uint8Array>, options?: {
|
|
28
|
+
maxBufferBytes?: number;
|
|
29
|
+
}): AsyncGenerator<SSEFrame, void, unknown>;
|
|
30
|
+
/**
|
|
31
|
+
* Convenience wrapper around `parseSSE` that accepts a `Response`,
|
|
32
|
+
* derives the reader, and ALWAYS calls `reader.cancel()` in a `finally`
|
|
33
|
+
* block — including when a caller breaks out of the for-await loop
|
|
34
|
+
* early. Without this, an early `break` leaks the underlying connection.
|
|
35
|
+
*
|
|
36
|
+
* Resources should call this rather than `parseSSE` directly.
|
|
37
|
+
*/
|
|
38
|
+
export declare function parseSSEResponse(response: Response, options?: {
|
|
39
|
+
maxBufferBytes?: number;
|
|
40
|
+
}): AsyncGenerator<SSEFrame, void, unknown>;
|
|
41
|
+
/**
|
|
42
|
+
* One block of SSE text (delimited by blank line) → a parsed frame, or
|
|
43
|
+
* `null` if the block was nothing but comments / whitespace.
|
|
44
|
+
*
|
|
45
|
+
* Per spec:
|
|
46
|
+
* - Lines beginning with `:` are comments, ignored.
|
|
47
|
+
* - Otherwise split on first `:` into `field` + `value`.
|
|
48
|
+
* - If `value` starts with U+0020 SPACE, remove ONE leading space.
|
|
49
|
+
* - Multiple `data:` lines accumulate, joined by `\n`.
|
|
50
|
+
* - Field names other than `id`, `event`, `data`, `retry` are ignored.
|
|
51
|
+
*/
|
|
52
|
+
declare function parseFrameBlock(block: string): SSEFrame | null;
|
|
53
|
+
/**
|
|
54
|
+
* Parse a `data:` payload as JSON. Throws `AttestryError` (with the
|
|
55
|
+
* underlying error as `cause`) if the payload isn't valid JSON. Resources
|
|
56
|
+
* call this when the wire shape is documented as JSON-encoded.
|
|
57
|
+
*/
|
|
58
|
+
export declare function parseSSEData<T>(data: string): T;
|
|
59
|
+
export declare const __test__: {
|
|
60
|
+
FRAME_BOUNDARY: RegExp;
|
|
61
|
+
parseFrameBlock: typeof parseFrameBlock;
|
|
62
|
+
};
|
|
63
|
+
export {};
|
|
64
|
+
//# sourceMappingURL=sse-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sse-parser.d.ts","sourceRoot":"","sources":["../src/sse-parser.ts"],"names":[],"mappings":"AA2BA;;;;;GAKG;AACH,MAAM,WAAW,QAAQ;IACvB,2DAA2D;IAC3D,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;CACd;AAeD;;;;;;;;;;;GAWG;AACH,wBAAuB,QAAQ,CAC7B,MAAM,EAAE,2BAA2B,CAAC,UAAU,CAAC,EAC/C,OAAO,GAAE;IAAE,cAAc,CAAC,EAAE,MAAM,CAAA;CAAO,GACxC,cAAc,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CA6EzC;AAED;;;;;;;GAOG;AACH,wBAAuB,gBAAgB,CACrC,QAAQ,EAAE,QAAQ,EAClB,OAAO,GAAE;IAAE,cAAc,CAAC,EAAE,MAAM,CAAA;CAAO,GACxC,cAAc,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAmBzC;AAID;;;;;;;;;;GAUG;AACH,iBAAS,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAsEvD;AAQD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,CAc/C;AAGD,eAAO,MAAM,QAAQ;;;CAGpB,CAAC"}
|