@once-agent/sdk 0.1.4 → 0.1.5
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 +62 -3
- package/dist/cli.js +13 -3
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +245 -1
- package/dist/index.js.map +1 -1
- package/dist/runtime/decision.d.ts +39 -0
- package/dist/runtime/decision.d.ts.map +1 -0
- package/dist/runtime/decision.js +102 -0
- package/dist/runtime/decision.js.map +1 -0
- package/dist/runtime/fetch-interceptor.d.ts +66 -0
- package/dist/runtime/fetch-interceptor.d.ts.map +1 -0
- package/dist/runtime/fetch-interceptor.js +151 -0
- package/dist/runtime/fetch-interceptor.js.map +1 -0
- package/dist/runtime/identity.d.ts +23 -0
- package/dist/runtime/identity.d.ts.map +1 -0
- package/dist/runtime/identity.js +191 -0
- package/dist/runtime/identity.js.map +1 -0
- package/dist/runtime/pipeline.d.ts +25 -0
- package/dist/runtime/pipeline.d.ts.map +1 -0
- package/dist/runtime/pipeline.js +121 -0
- package/dist/runtime/pipeline.js.map +1 -0
- package/dist/setup.d.ts +2 -0
- package/dist/setup.d.ts.map +1 -1
- package/dist/setup.js +101 -8
- package/dist/setup.js.map +1 -1
- package/dist-cjs/index.js +255 -2
- package/dist-cjs/index.js.map +1 -1
- package/dist-cjs/runtime/decision.js +105 -0
- package/dist-cjs/runtime/decision.js.map +1 -0
- package/dist-cjs/runtime/fetch-interceptor.js +157 -0
- package/dist-cjs/runtime/fetch-interceptor.js.map +1 -0
- package/dist-cjs/runtime/identity.js +194 -0
- package/dist-cjs/runtime/identity.js.map +1 -0
- package/dist-cjs/runtime/pipeline.js +124 -0
- package/dist-cjs/runtime/pipeline.js.map +1 -0
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
# @once-agent/sdk
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
<!-- ONCE_STRIPE_SANDBOX_NOTICE -->
|
|
@@ -62,6 +62,49 @@ Do not commit API keys to source control.
|
|
|
62
62
|
|
|
63
63
|
## 60-second quick start
|
|
64
64
|
|
|
65
|
+
### Runtime HTTP protection
|
|
66
|
+
|
|
67
|
+
For supported POST + JSON HTTP writes, configure the exact protected HTTPS target:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
npx once setup . --runtime-http=https://api.example.com/v1/action
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
This setup pins that exact target in the provider allowlist and opts the immutable provider version into durable HTTP response replay.
|
|
74
|
+
|
|
75
|
+
```ts
|
|
76
|
+
import { createOnceRuntimeFetch } from "@once-agent/sdk";
|
|
77
|
+
|
|
78
|
+
const onceFetch = createOnceRuntimeFetch({
|
|
79
|
+
provider: "my-provider"
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
async function main() {
|
|
83
|
+
const response = await onceFetch(
|
|
84
|
+
"https://api.example.com/v1/action",
|
|
85
|
+
{
|
|
86
|
+
method: "POST",
|
|
87
|
+
headers: {
|
|
88
|
+
"content-type": "application/json",
|
|
89
|
+
"idempotency-key": "order_123"
|
|
90
|
+
},
|
|
91
|
+
body: JSON.stringify({ example: true })
|
|
92
|
+
}
|
|
93
|
+
);
|
|
94
|
+
|
|
95
|
+
console.log(response.status);
|
|
96
|
+
console.log(await response.text());
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
main().catch(console.error);
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Retry the same logical real-world action with the same stable identity. In this Runtime HTTP example, that identity is carried by the `idempotency-key`.
|
|
103
|
+
|
|
104
|
+
The Runtime fails closed rather than silently falling back to a direct target write when an operation cannot be safely protected.
|
|
105
|
+
|
|
106
|
+
### Direct SDK execution
|
|
107
|
+
|
|
65
108
|
First configure a provider with `once setup .`, or use a provider alias already registered with your Once account.
|
|
66
109
|
|
|
67
110
|
```ts
|
|
@@ -235,6 +278,18 @@ npx once setup .
|
|
|
235
278
|
|
|
236
279
|
Setup can install/configure the SDK, verify your API key, register a supported provider, and prepare local Once configuration.
|
|
237
280
|
|
|
281
|
+
For Runtime HTTP protection, provide the exact target URL:
|
|
282
|
+
|
|
283
|
+
```bash
|
|
284
|
+
npx once setup . --runtime-http=https://api.example.com/v1/action
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
Runtime HTTP setup registers that exact URL in `allowed_urls` and requests `response_replay="required"` for that immutable provider version.
|
|
288
|
+
|
|
289
|
+
Only non-secret provider metadata is written to `.once/config.json`; the provider bearer token is not stored there.
|
|
290
|
+
|
|
291
|
+
Plain `npx once setup .` preserves the existing provider-registration behavior and does not opt that provider version into HTTP response replay.
|
|
292
|
+
|
|
238
293
|
Preview setup without making changes:
|
|
239
294
|
|
|
240
295
|
```bash
|
|
@@ -335,12 +390,16 @@ Its safety properties depend on:
|
|
|
335
390
|
- sufficiently authoritative provider truth
|
|
336
391
|
- the failure mode being within that provider integration's supported model
|
|
337
392
|
|
|
338
|
-
For supported provider integrations, Once is designed to
|
|
393
|
+
For supported provider integrations, Once is designed to suppress duplicate execution across retries and ambiguous transport failures by reconciling provider truth before permitting re-execution.
|
|
394
|
+
|
|
395
|
+
For Runtime HTTP providers registered with `response_replay="required"`, Once also requires a durable, sanitized application-visible HTTP response replay before the local operation can become `CONFIRMED`. Confirmed retries can return that stored response without executing the provider again.
|
|
339
396
|
|
|
340
|
-
When Once cannot determine whether an external side effect occurred,
|
|
397
|
+
When Once cannot determine whether an external side effect occurred, or when required replay evidence is missing after an effect may have happened, it preserves the operation as uncertain rather than assume another execution is safe.
|
|
341
398
|
|
|
342
399
|
This means Once may sacrifice availability temporarily in order to avoid an unsafe duplicate side effect.
|
|
343
400
|
|
|
401
|
+
The external effect itself is not atomically committed with Once's local ledger. The supported claim is duplicate suppression on confirmed/replay paths plus fail-closed handling of ambiguous outcomes, not generic exactly-once execution.
|
|
402
|
+
|
|
344
403
|
## Provider truth
|
|
345
404
|
|
|
346
405
|
Once is strongest when the external system can answer a question equivalent to:
|
package/dist/cli.js
CHANGED
|
@@ -66,9 +66,9 @@ function printHelp() {
|
|
|
66
66
|
console.log(" Use --snippets to generate per-callsite integration guidance.");
|
|
67
67
|
console.log(" Use --apply to transactionally apply exactly one PATCHABLE candidate.");
|
|
68
68
|
console.log("");
|
|
69
|
-
console.log(" once setup [directory]");
|
|
69
|
+
console.log(" once setup [directory] [--runtime-http=<target-url>]");
|
|
70
70
|
console.log(" Detect, configure and install Once.");
|
|
71
|
-
console.log(" Use --plan to preview
|
|
71
|
+
console.log(" Use --plan to preview; --runtime-http=<https-url> enables Runtime HTTP replay protection.");
|
|
72
72
|
console.log("");
|
|
73
73
|
console.log(" once scan [directory]");
|
|
74
74
|
console.log(" Find likely consequential operations locally.");
|
|
@@ -155,11 +155,21 @@ async function main() {
|
|
|
155
155
|
const autoConfirm = args.includes("--yes");
|
|
156
156
|
const planOnly = args.includes("--plan");
|
|
157
157
|
const skipInstall = args.includes("--skip-install");
|
|
158
|
+
const runtimeHttpArgument = args.find(value => value.startsWith("--runtime-http="));
|
|
159
|
+
const runtimeHttp = args.includes("--runtime-http") ||
|
|
160
|
+
Boolean(runtimeHttpArgument);
|
|
161
|
+
const runtimeHttpTargetUrl = runtimeHttpArgument
|
|
162
|
+
? runtimeHttpArgument
|
|
163
|
+
.substring("--runtime-http=".length)
|
|
164
|
+
.trim()
|
|
165
|
+
: undefined;
|
|
158
166
|
const requestedPath = args.find(value => !value.startsWith("--")) ?? ".";
|
|
159
167
|
await runSetup(requestedPath, {
|
|
160
168
|
autoConfirm,
|
|
161
169
|
planOnly,
|
|
162
|
-
skipInstall
|
|
170
|
+
skipInstall,
|
|
171
|
+
runtimeHttp,
|
|
172
|
+
runtimeHttpTargetUrl
|
|
163
173
|
});
|
|
164
174
|
return;
|
|
165
175
|
}
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
import { type OnceFetchInstallation, type OnceFetchInterceptorOptions } from "./runtime/fetch-interceptor.js";
|
|
1
2
|
export type OnceProvider = "blind_test" | "http_v1" | "stripe_v1" | (string & {});
|
|
2
3
|
export interface OnceOptions {
|
|
3
4
|
apiKey?: string;
|
|
4
5
|
baseUrl?: string;
|
|
5
6
|
timeoutMs?: number;
|
|
6
7
|
networkRetries?: number;
|
|
8
|
+
fetchImpl?: typeof fetch;
|
|
7
9
|
}
|
|
8
10
|
export interface ExecuteInput {
|
|
9
11
|
operationId: string;
|
|
@@ -21,6 +23,13 @@ export interface ExecuteResponse {
|
|
|
21
23
|
provider_executed_at?: string | null;
|
|
22
24
|
[key: string]: unknown;
|
|
23
25
|
}
|
|
26
|
+
export interface OnceRuntimeHttpReplay {
|
|
27
|
+
status: number;
|
|
28
|
+
body_text: string;
|
|
29
|
+
headers: Record<string, string>;
|
|
30
|
+
recorded_at?: string;
|
|
31
|
+
}
|
|
32
|
+
export type OnceRuntimeFetchOptions = Omit<OnceFetchInterceptorOptions, "protect" | "fetchImpl"> & OnceOptions;
|
|
24
33
|
export interface TruthResponse {
|
|
25
34
|
operation_id: string;
|
|
26
35
|
attempts?: number;
|
|
@@ -46,6 +55,9 @@ export declare class OnceError extends Error {
|
|
|
46
55
|
cause?: unknown;
|
|
47
56
|
});
|
|
48
57
|
}
|
|
58
|
+
export declare class OnceRuntimeHttpShapeError extends OnceError {
|
|
59
|
+
constructor(message: string, code?: string);
|
|
60
|
+
}
|
|
49
61
|
export declare class OnceTimeoutError extends OnceError {
|
|
50
62
|
constructor(message?: string, cause?: unknown);
|
|
51
63
|
}
|
|
@@ -57,6 +69,7 @@ export declare class Once {
|
|
|
57
69
|
readonly baseUrl: string;
|
|
58
70
|
readonly timeoutMs: number;
|
|
59
71
|
readonly networkRetries: number;
|
|
72
|
+
readonly fetchImpl: typeof fetch;
|
|
60
73
|
constructor(options?: OnceOptions);
|
|
61
74
|
/**
|
|
62
75
|
* Generate a deterministic Once operation ID.
|
|
@@ -72,5 +85,21 @@ export declare class Once {
|
|
|
72
85
|
truth(operationId: string): Promise<TruthResponse>;
|
|
73
86
|
private request;
|
|
74
87
|
}
|
|
88
|
+
/**
|
|
89
|
+
* Create a fetch-compatible Once Runtime.
|
|
90
|
+
*
|
|
91
|
+
* v0.1 proven protected execution shape:
|
|
92
|
+
* POST + application/json + stable identity.
|
|
93
|
+
*/
|
|
94
|
+
export declare function createOnceRuntimeFetch(options?: OnceRuntimeFetchOptions): typeof fetch;
|
|
95
|
+
/**
|
|
96
|
+
* Explicit reversible global fetch installation.
|
|
97
|
+
*/
|
|
98
|
+
export declare function installOnceRuntimeFetch(options?: OnceRuntimeFetchOptions): OnceFetchInstallation;
|
|
99
|
+
export { createOnceFetchInterceptor, installOnceFetchInterceptor, OnceRuntimeBlockedError } from "./runtime/fetch-interceptor.js";
|
|
100
|
+
export type { OnceFetchInstallation, OnceFetchInterceptorOptions, OnceProtectedFetchContext, OnceProtectedFetchHandler } from "./runtime/fetch-interceptor.js";
|
|
101
|
+
export { prepareHttpExecution } from "./runtime/pipeline.js";
|
|
102
|
+
export { decideHttpExecution } from "./runtime/decision.js";
|
|
103
|
+
export { resolveHttpOperationIdentity } from "./runtime/identity.js";
|
|
75
104
|
export default Once;
|
|
76
105
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Buffer } from "node:buffer";
|
|
2
2
|
import { createHash } from "node:crypto";
|
|
3
|
+
import { createOnceFetchInterceptor } from "./runtime/fetch-interceptor.js";
|
|
3
4
|
const DEFAULT_BASE_URL = "https://once-q18-cloud.pennywatch.workers.dev";
|
|
4
5
|
export class OnceError extends Error {
|
|
5
6
|
status;
|
|
@@ -17,6 +18,15 @@ export class OnceError extends Error {
|
|
|
17
18
|
this.retryAfter = options.retryAfter;
|
|
18
19
|
}
|
|
19
20
|
}
|
|
21
|
+
export class OnceRuntimeHttpShapeError extends OnceError {
|
|
22
|
+
constructor(message, code = "unsupported_runtime_http_shape") {
|
|
23
|
+
super(message, {
|
|
24
|
+
code
|
|
25
|
+
});
|
|
26
|
+
this.name =
|
|
27
|
+
"OnceRuntimeHttpShapeError";
|
|
28
|
+
}
|
|
29
|
+
}
|
|
20
30
|
export class OnceTimeoutError extends OnceError {
|
|
21
31
|
constructor(message = "Once request timed out", cause) {
|
|
22
32
|
super(message, {
|
|
@@ -40,6 +50,7 @@ export class Once {
|
|
|
40
50
|
baseUrl;
|
|
41
51
|
timeoutMs;
|
|
42
52
|
networkRetries;
|
|
53
|
+
fetchImpl;
|
|
43
54
|
constructor(options = {}) {
|
|
44
55
|
const apiKey = options.apiKey ??
|
|
45
56
|
process.env.ONCE_API_KEY;
|
|
@@ -56,6 +67,9 @@ export class Once {
|
|
|
56
67
|
options.timeoutMs ?? 10_000;
|
|
57
68
|
this.networkRetries =
|
|
58
69
|
options.networkRetries ?? 2;
|
|
70
|
+
this.fetchImpl =
|
|
71
|
+
options.fetchImpl ??
|
|
72
|
+
globalThis.fetch;
|
|
59
73
|
}
|
|
60
74
|
/**
|
|
61
75
|
* Generate a deterministic Once operation ID.
|
|
@@ -164,7 +178,7 @@ export class Once {
|
|
|
164
178
|
const controller = new AbortController();
|
|
165
179
|
const timeout = setTimeout(() => controller.abort(), this.timeoutMs);
|
|
166
180
|
try {
|
|
167
|
-
const response = await
|
|
181
|
+
const response = await this.fetchImpl(`${this.baseUrl}${path}`, {
|
|
168
182
|
...init,
|
|
169
183
|
signal: controller.signal,
|
|
170
184
|
headers: {
|
|
@@ -233,8 +247,238 @@ export class Once {
|
|
|
233
247
|
throw new OnceNetworkError("Could not reach Once", lastError);
|
|
234
248
|
}
|
|
235
249
|
}
|
|
250
|
+
function runtimeJsonContentType(request) {
|
|
251
|
+
const contentType = request.headers
|
|
252
|
+
.get("content-type")
|
|
253
|
+
?.toLowerCase() ??
|
|
254
|
+
"";
|
|
255
|
+
return contentType.includes("application/json");
|
|
256
|
+
}
|
|
257
|
+
function assertRuntimeHeaderShape(request) {
|
|
258
|
+
const allowed = new Set([
|
|
259
|
+
"content-type",
|
|
260
|
+
"idempotency-key",
|
|
261
|
+
"x-idempotency-key"
|
|
262
|
+
]);
|
|
263
|
+
for (const [name] of request.headers) {
|
|
264
|
+
if (!allowed.has(name.toLowerCase())) {
|
|
265
|
+
throw new OnceRuntimeHttpShapeError(`Once Runtime HTTP v0.1 cannot safely preserve target header "${name}".`);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
function parseRuntimeReplay(value) {
|
|
270
|
+
if (value === null ||
|
|
271
|
+
typeof value !== "object" ||
|
|
272
|
+
Array.isArray(value)) {
|
|
273
|
+
throw new OnceError("Once confirmed the operation but did not return a replayable HTTP response.", {
|
|
274
|
+
code: "runtime_http_response_missing",
|
|
275
|
+
body: value
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
const candidate = value;
|
|
279
|
+
const status = Number(candidate.status);
|
|
280
|
+
/*
|
|
281
|
+
* Fetch Response constructors cannot represent
|
|
282
|
+
* informational 1xx responses.
|
|
283
|
+
*/
|
|
284
|
+
if (!Number.isInteger(status) ||
|
|
285
|
+
status < 200 ||
|
|
286
|
+
status > 599) {
|
|
287
|
+
throw new OnceError("Once returned an HTTP replay with an unsupported status.", {
|
|
288
|
+
code: "runtime_http_response_invalid_status",
|
|
289
|
+
body: value
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
if (typeof candidate.body_text !==
|
|
293
|
+
"string") {
|
|
294
|
+
throw new OnceError("Once returned an HTTP replay without a valid text body.", {
|
|
295
|
+
code: "runtime_http_response_invalid_body",
|
|
296
|
+
body: value
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
if (candidate.headers === null ||
|
|
300
|
+
typeof candidate.headers !==
|
|
301
|
+
"object" ||
|
|
302
|
+
Array.isArray(candidate.headers)) {
|
|
303
|
+
throw new OnceError("Once returned an HTTP replay without valid headers.", {
|
|
304
|
+
code: "runtime_http_response_invalid_headers",
|
|
305
|
+
body: value
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
const headers = {};
|
|
309
|
+
for (const [name, headerValue] of Object.entries(candidate.headers)) {
|
|
310
|
+
if (typeof headerValue !==
|
|
311
|
+
"string") {
|
|
312
|
+
throw new OnceError("Once returned a non-string HTTP replay header.", {
|
|
313
|
+
code: "runtime_http_response_invalid_headers",
|
|
314
|
+
body: value
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
headers[name] =
|
|
318
|
+
headerValue;
|
|
319
|
+
}
|
|
320
|
+
const nullBody = status === 204 ||
|
|
321
|
+
status === 205 ||
|
|
322
|
+
status === 304;
|
|
323
|
+
if (nullBody &&
|
|
324
|
+
candidate.body_text.length > 0) {
|
|
325
|
+
throw new OnceError("Once returned a body for an HTTP status that cannot carry one.", {
|
|
326
|
+
code: "runtime_http_response_invalid_body",
|
|
327
|
+
body: value
|
|
328
|
+
});
|
|
329
|
+
}
|
|
330
|
+
return {
|
|
331
|
+
status,
|
|
332
|
+
body_text: candidate.body_text,
|
|
333
|
+
headers,
|
|
334
|
+
...(typeof candidate.recorded_at ===
|
|
335
|
+
"string"
|
|
336
|
+
? {
|
|
337
|
+
recorded_at: candidate.recorded_at
|
|
338
|
+
}
|
|
339
|
+
: {})
|
|
340
|
+
};
|
|
341
|
+
}
|
|
342
|
+
function createRuntimeCloudProtector(once) {
|
|
343
|
+
return async ({ request, decision, provider }) => {
|
|
344
|
+
if (decision.decision !==
|
|
345
|
+
"PROTECT") {
|
|
346
|
+
throw new OnceError("Runtime protector received a non-protected operation.", {
|
|
347
|
+
code: "runtime_invalid_protect_state"
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
if (!decision.operationId) {
|
|
351
|
+
throw new OnceError("Runtime protected operation is missing its resolved operation ID.", {
|
|
352
|
+
code: "runtime_operation_id_missing"
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
if (typeof provider !==
|
|
356
|
+
"string" ||
|
|
357
|
+
provider.trim().length ===
|
|
358
|
+
0) {
|
|
359
|
+
throw new OnceError("Runtime protected operation is missing its resolved provider.", {
|
|
360
|
+
code: "runtime_provider_missing"
|
|
361
|
+
});
|
|
362
|
+
}
|
|
363
|
+
const method = request.method
|
|
364
|
+
.trim()
|
|
365
|
+
.toUpperCase();
|
|
366
|
+
/*
|
|
367
|
+
* Classification recognizes POST/PUT/PATCH/DELETE as
|
|
368
|
+
* consequential. Execution v0.1 intentionally proves
|
|
369
|
+
* only POST + JSON.
|
|
370
|
+
*/
|
|
371
|
+
if (method !== "POST") {
|
|
372
|
+
throw new OnceRuntimeHttpShapeError(`Once Runtime HTTP v0.1 only has a proven protected execution contract for POST, not ${method || "(empty)"}.`);
|
|
373
|
+
}
|
|
374
|
+
if (!runtimeJsonContentType(request)) {
|
|
375
|
+
throw new OnceRuntimeHttpShapeError("Once Runtime HTTP v0.1 only protects application/json POST bodies.");
|
|
376
|
+
}
|
|
377
|
+
assertRuntimeHeaderShape(request);
|
|
378
|
+
const bodyText = await request
|
|
379
|
+
.clone()
|
|
380
|
+
.text();
|
|
381
|
+
if (bodyText.trim().length ===
|
|
382
|
+
0) {
|
|
383
|
+
throw new OnceRuntimeHttpShapeError("Once Runtime HTTP v0.1 requires a non-empty JSON body.");
|
|
384
|
+
}
|
|
385
|
+
try {
|
|
386
|
+
JSON.parse(bodyText);
|
|
387
|
+
}
|
|
388
|
+
catch {
|
|
389
|
+
throw new OnceRuntimeHttpShapeError("Once Runtime HTTP v0.1 requires a valid JSON body.");
|
|
390
|
+
}
|
|
391
|
+
const result = await once.execute({
|
|
392
|
+
operationId: decision.operationId,
|
|
393
|
+
provider: provider.trim(),
|
|
394
|
+
action: {
|
|
395
|
+
type: "http_write_v1",
|
|
396
|
+
method: "POST",
|
|
397
|
+
url: request.url,
|
|
398
|
+
body_json: bodyText
|
|
399
|
+
}
|
|
400
|
+
});
|
|
401
|
+
const replay = parseRuntimeReplay(result.http_response);
|
|
402
|
+
const nullBody = replay.status === 204 ||
|
|
403
|
+
replay.status === 205 ||
|
|
404
|
+
replay.status === 304;
|
|
405
|
+
return new Response(nullBody
|
|
406
|
+
? null
|
|
407
|
+
: replay.body_text, {
|
|
408
|
+
status: replay.status,
|
|
409
|
+
headers: replay.headers
|
|
410
|
+
});
|
|
411
|
+
};
|
|
412
|
+
}
|
|
413
|
+
/**
|
|
414
|
+
* Create a fetch-compatible Once Runtime.
|
|
415
|
+
*
|
|
416
|
+
* v0.1 proven protected execution shape:
|
|
417
|
+
* POST + application/json + stable identity.
|
|
418
|
+
*/
|
|
419
|
+
export function createOnceRuntimeFetch(options = {}) {
|
|
420
|
+
const originalFetch = options.fetchImpl ??
|
|
421
|
+
globalThis.fetch;
|
|
422
|
+
if (typeof originalFetch !==
|
|
423
|
+
"function") {
|
|
424
|
+
throw new OnceError("Once Runtime requires a native fetch implementation.", {
|
|
425
|
+
code: "runtime_fetch_missing"
|
|
426
|
+
});
|
|
427
|
+
}
|
|
428
|
+
/*
|
|
429
|
+
* Once Cloud requests use the captured native fetch.
|
|
430
|
+
* They cannot recursively enter this interceptor.
|
|
431
|
+
*/
|
|
432
|
+
const once = new Once({
|
|
433
|
+
apiKey: options.apiKey,
|
|
434
|
+
baseUrl: options.baseUrl,
|
|
435
|
+
timeoutMs: options.timeoutMs,
|
|
436
|
+
networkRetries: options.networkRetries,
|
|
437
|
+
fetchImpl: originalFetch
|
|
438
|
+
});
|
|
439
|
+
return createOnceFetchInterceptor({
|
|
440
|
+
provider: options.provider,
|
|
441
|
+
resolveProvider: options.resolveProvider,
|
|
442
|
+
resolveOperationId: options.resolveOperationId,
|
|
443
|
+
fetchImpl: originalFetch,
|
|
444
|
+
protect: createRuntimeCloudProtector(once)
|
|
445
|
+
});
|
|
446
|
+
}
|
|
447
|
+
/**
|
|
448
|
+
* Explicit reversible global fetch installation.
|
|
449
|
+
*/
|
|
450
|
+
export function installOnceRuntimeFetch(options = {}) {
|
|
451
|
+
const previous = globalThis.fetch;
|
|
452
|
+
const intercepted = createOnceRuntimeFetch({
|
|
453
|
+
...options,
|
|
454
|
+
fetchImpl: options.fetchImpl ??
|
|
455
|
+
previous
|
|
456
|
+
});
|
|
457
|
+
globalThis.fetch =
|
|
458
|
+
intercepted;
|
|
459
|
+
let restored = false;
|
|
460
|
+
return {
|
|
461
|
+
fetch: intercepted,
|
|
462
|
+
restore: () => {
|
|
463
|
+
if (restored) {
|
|
464
|
+
return;
|
|
465
|
+
}
|
|
466
|
+
if (globalThis.fetch ===
|
|
467
|
+
intercepted) {
|
|
468
|
+
globalThis.fetch =
|
|
469
|
+
previous;
|
|
470
|
+
}
|
|
471
|
+
restored =
|
|
472
|
+
true;
|
|
473
|
+
}
|
|
474
|
+
};
|
|
475
|
+
}
|
|
236
476
|
function sleep(ms) {
|
|
237
477
|
return new Promise(resolve => setTimeout(resolve, ms));
|
|
238
478
|
}
|
|
479
|
+
export { createOnceFetchInterceptor, installOnceFetchInterceptor, OnceRuntimeBlockedError } from "./runtime/fetch-interceptor.js";
|
|
480
|
+
export { prepareHttpExecution } from "./runtime/pipeline.js";
|
|
481
|
+
export { decideHttpExecution } from "./runtime/decision.js";
|
|
482
|
+
export { resolveHttpOperationIdentity } from "./runtime/identity.js";
|
|
239
483
|
export default Once;
|
|
240
484
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export type OnceRuntimeDecision = "PASS" | "PROTECT" | "BLOCK";
|
|
2
|
+
export type OnceRuntimeDecisionCode = "SAFE_HTTP_METHOD" | "CONSEQUENTIAL_HTTP_WRITE" | "INVALID_URL" | "UNSUPPORTED_PROTOCOL" | "UNSUPPORTED_HTTP_METHOD" | "MISSING_PROVIDER" | "MISSING_OPERATION_ID";
|
|
3
|
+
export type OnceRuntimeHttpCall = {
|
|
4
|
+
surface: "http";
|
|
5
|
+
method: string;
|
|
6
|
+
url: string;
|
|
7
|
+
/**
|
|
8
|
+
* Stable identity for one real-world action.
|
|
9
|
+
*
|
|
10
|
+
* Retries of that same action MUST reuse
|
|
11
|
+
* the same value.
|
|
12
|
+
*/
|
|
13
|
+
operationId?: string;
|
|
14
|
+
/**
|
|
15
|
+
* Once provider configured to perform /
|
|
16
|
+
* reconcile this external side effect.
|
|
17
|
+
*/
|
|
18
|
+
provider?: string;
|
|
19
|
+
};
|
|
20
|
+
export type OnceRuntimeDecisionResult = {
|
|
21
|
+
decision: OnceRuntimeDecision;
|
|
22
|
+
code: OnceRuntimeDecisionCode;
|
|
23
|
+
consequential: boolean;
|
|
24
|
+
method: string;
|
|
25
|
+
reason: string;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Decide whether an outbound HTTP operation may
|
|
29
|
+
* pass normally, must be protected by Once, or
|
|
30
|
+
* must fail closed.
|
|
31
|
+
*
|
|
32
|
+
* v0.1 intentionally does NOT guess identity.
|
|
33
|
+
*
|
|
34
|
+
* A consequential operation without a stable
|
|
35
|
+
* operationId is blocked rather than executed
|
|
36
|
+
* unsafely.
|
|
37
|
+
*/
|
|
38
|
+
export declare function decideHttpExecution(call: OnceRuntimeHttpCall): OnceRuntimeDecisionResult;
|
|
39
|
+
//# sourceMappingURL=decision.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decision.d.ts","sourceRoot":"","sources":["../../src/runtime/decision.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,GAC3B,MAAM,GACN,SAAS,GACT,OAAO,CAAC;AAEZ,MAAM,MAAM,uBAAuB,GAC/B,kBAAkB,GAClB,0BAA0B,GAC1B,aAAa,GACb,sBAAsB,GACtB,yBAAyB,GACzB,kBAAkB,GAClB,sBAAsB,CAAC;AAE3B,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IAEZ;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,IAAI,EAAE,uBAAuB,CAAC;IAC9B,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAsCF;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,mBAAmB,GACxB,yBAAyB,CAoK3B"}
|