inngest 4.23.0 → 4.25.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/CHANGELOG.md +210 -0
- package/components/Inngest.cjs.map +1 -1
- package/components/Inngest.d.cts +5 -1
- package/components/Inngest.d.cts.map +1 -1
- package/components/Inngest.d.ts +5 -1
- package/components/Inngest.d.ts.map +1 -1
- package/components/Inngest.js.map +1 -1
- package/components/InngestStepTools.cjs +22 -1
- package/components/InngestStepTools.cjs.map +1 -1
- package/components/InngestStepTools.d.cts.map +1 -1
- package/components/InngestStepTools.d.ts.map +1 -1
- package/components/InngestStepTools.js +22 -2
- package/components/InngestStepTools.js.map +1 -1
- package/components/execution/als.cjs.map +1 -1
- package/components/execution/als.d.cts +6 -0
- package/components/execution/als.d.cts.map +1 -1
- package/components/execution/als.d.ts +6 -0
- package/components/execution/als.d.ts.map +1 -1
- package/components/execution/als.js.map +1 -1
- package/components/execution/engine.cjs +36 -16
- package/components/execution/engine.cjs.map +1 -1
- package/components/execution/engine.d.cts.map +1 -1
- package/components/execution/engine.d.ts.map +1 -1
- package/components/execution/engine.js +36 -16
- package/components/execution/engine.js.map +1 -1
- package/components/execution/otel/middleware.d.cts +7 -7
- package/components/execution/otel/middleware.d.ts +7 -7
- package/components/sandbox/durable.cjs +132 -26
- package/components/sandbox/durable.cjs.map +1 -1
- package/components/sandbox/durable.js +130 -26
- package/components/sandbox/durable.js.map +1 -1
- package/components/sandbox/group.cjs +90 -0
- package/components/sandbox/group.cjs.map +1 -0
- package/components/sandbox/group.d.cts +16 -0
- package/components/sandbox/group.d.cts.map +1 -0
- package/components/sandbox/group.d.ts +16 -0
- package/components/sandbox/group.d.ts.map +1 -0
- package/components/sandbox/group.js +87 -0
- package/components/sandbox/group.js.map +1 -0
- package/components/sandbox/image.cjs +25 -0
- package/components/sandbox/image.cjs.map +1 -0
- package/components/sandbox/image.d.cts +32 -0
- package/components/sandbox/image.d.cts.map +1 -0
- package/components/sandbox/image.d.ts +32 -0
- package/components/sandbox/image.d.ts.map +1 -0
- package/components/sandbox/image.js +23 -0
- package/components/sandbox/image.js.map +1 -0
- package/components/sandbox/middleware.cjs +95 -35
- package/components/sandbox/middleware.cjs.map +1 -1
- package/components/sandbox/middleware.d.cts +10 -1
- package/components/sandbox/middleware.d.cts.map +1 -1
- package/components/sandbox/middleware.d.ts +10 -1
- package/components/sandbox/middleware.d.ts.map +1 -1
- package/components/sandbox/middleware.js +96 -36
- package/components/sandbox/middleware.js.map +1 -1
- package/components/sandbox/protocol.cjs +27 -0
- package/components/sandbox/protocol.cjs.map +1 -1
- package/components/sandbox/protocol.d.cts.map +1 -1
- package/components/sandbox/protocol.d.ts.map +1 -1
- package/components/sandbox/protocol.js +28 -1
- package/components/sandbox/protocol.js.map +1 -1
- package/components/sandbox/runnerScripts.cjs +214 -0
- package/components/sandbox/runnerScripts.cjs.map +1 -0
- package/components/sandbox/runnerScripts.js +213 -0
- package/components/sandbox/runnerScripts.js.map +1 -0
- package/components/sandbox/runners.cjs +113 -0
- package/components/sandbox/runners.cjs.map +1 -0
- package/components/sandbox/runners.d.cts +45 -0
- package/components/sandbox/runners.d.cts.map +1 -0
- package/components/sandbox/runners.d.ts +45 -0
- package/components/sandbox/runners.d.ts.map +1 -0
- package/components/sandbox/runners.js +113 -0
- package/components/sandbox/runners.js.map +1 -0
- package/components/sandbox/toolRunner.cjs +321 -0
- package/components/sandbox/toolRunner.cjs.map +1 -0
- package/components/sandbox/toolRunner.js +319 -0
- package/components/sandbox/toolRunner.js.map +1 -0
- package/components/sandbox/toolStubs.cjs +187 -0
- package/components/sandbox/toolStubs.cjs.map +1 -0
- package/components/sandbox/toolStubs.js +185 -0
- package/components/sandbox/toolStubs.js.map +1 -0
- package/components/sandbox/tools.cjs +173 -0
- package/components/sandbox/tools.cjs.map +1 -0
- package/components/sandbox/tools.d.cts +142 -0
- package/components/sandbox/tools.d.cts.map +1 -0
- package/components/sandbox/tools.d.ts +142 -0
- package/components/sandbox/tools.d.ts.map +1 -0
- package/components/sandbox/tools.js +166 -0
- package/components/sandbox/tools.js.map +1 -0
- package/components/sandbox/trace.cjs +7 -0
- package/components/sandbox/trace.cjs.map +1 -1
- package/components/sandbox/trace.js +7 -1
- package/components/sandbox/trace.js.map +1 -1
- package/components/sandbox/types.cjs.map +1 -1
- package/components/sandbox/types.d.cts +45 -3
- package/components/sandbox/types.d.cts.map +1 -1
- package/components/sandbox/types.d.ts +45 -3
- package/components/sandbox/types.d.ts.map +1 -1
- package/components/sandbox/types.js.map +1 -1
- package/components/sandbox/validation.cjs +26 -10
- package/components/sandbox/validation.cjs.map +1 -1
- package/components/sandbox/validation.js +24 -10
- package/components/sandbox/validation.js.map +1 -1
- package/experimental.cjs +5 -1
- package/experimental.d.cts +5 -1
- package/experimental.d.ts +5 -1
- package/experimental.js +3 -1
- package/helpers/duration.cjs +46 -0
- package/helpers/duration.cjs.map +1 -0
- package/helpers/duration.d.cts +25 -0
- package/helpers/duration.d.cts.map +1 -0
- package/helpers/duration.d.ts +25 -0
- package/helpers/duration.d.ts.map +1 -0
- package/helpers/duration.js +44 -0
- package/helpers/duration.js.map +1 -0
- package/index.cjs +2 -0
- package/index.d.cts +2 -1
- package/index.d.ts +2 -1
- package/index.js +2 -1
- package/package.json +2 -1
- package/types.cjs.map +1 -1
- package/types.d.cts +16 -13
- package/types.d.cts.map +1 -1
- package/types.d.ts +16 -13
- package/types.d.ts.map +1 -1
- package/types.js.map +1 -1
- package/version.cjs +1 -1
- package/version.cjs.map +1 -1
- package/version.d.cts +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
- package/version.js.map +1 -1
|
@@ -78,6 +78,13 @@ declare const extendedTracesMiddleware: ({
|
|
|
78
78
|
ctx: {
|
|
79
79
|
tracer: _opentelemetry_api0.Tracer;
|
|
80
80
|
event: Simplify<EventPayload>;
|
|
81
|
+
group: ReturnType<typeof createGroupTools>;
|
|
82
|
+
defer: DeferFn;
|
|
83
|
+
events: AsTuple<Simplify<EventPayload>>;
|
|
84
|
+
sessions?: Record<string, string> | undefined;
|
|
85
|
+
runId: string;
|
|
86
|
+
requestId?: string | undefined;
|
|
87
|
+
jobId?: string | undefined;
|
|
81
88
|
step: {
|
|
82
89
|
sendEvent: (idOrOptions: StepOptionsOrId, payload: SendEventPayload) => Promise<SendEventOutput<ClientOptions>>;
|
|
83
90
|
waitForSignal: <TData>(idOrOptions: StepOptionsOrId, opts: {
|
|
@@ -164,13 +171,6 @@ declare const extendedTracesMiddleware: ({
|
|
|
164
171
|
}) => InvocationResult<Jsonify<GetFunctionOutputRaw<TFunction>>>;
|
|
165
172
|
fetch: StepFetch;
|
|
166
173
|
};
|
|
167
|
-
defer: DeferFn;
|
|
168
|
-
events: AsTuple<Simplify<EventPayload>>;
|
|
169
|
-
sessions?: Record<string, string> | undefined;
|
|
170
|
-
runId: string;
|
|
171
|
-
requestId?: string | undefined;
|
|
172
|
-
jobId?: string | undefined;
|
|
173
|
-
group: ReturnType<typeof createGroupTools>;
|
|
174
174
|
attempt: number;
|
|
175
175
|
maxAttempts?: number | undefined;
|
|
176
176
|
};
|
|
@@ -78,6 +78,13 @@ declare const extendedTracesMiddleware: ({
|
|
|
78
78
|
ctx: {
|
|
79
79
|
tracer: _opentelemetry_api0.Tracer;
|
|
80
80
|
event: Simplify<EventPayload>;
|
|
81
|
+
group: ReturnType<typeof createGroupTools>;
|
|
82
|
+
defer: DeferFn;
|
|
83
|
+
events: AsTuple<Simplify<EventPayload>>;
|
|
84
|
+
sessions?: Record<string, string> | undefined;
|
|
85
|
+
runId: string;
|
|
86
|
+
requestId?: string | undefined;
|
|
87
|
+
jobId?: string | undefined;
|
|
81
88
|
step: {
|
|
82
89
|
sendEvent: (idOrOptions: StepOptionsOrId, payload: SendEventPayload) => Promise<SendEventOutput<ClientOptions>>;
|
|
83
90
|
waitForSignal: <TData>(idOrOptions: StepOptionsOrId, opts: {
|
|
@@ -164,13 +171,6 @@ declare const extendedTracesMiddleware: ({
|
|
|
164
171
|
}) => InvocationResult<Jsonify<GetFunctionOutputRaw<TFunction>>>;
|
|
165
172
|
fetch: StepFetch;
|
|
166
173
|
};
|
|
167
|
-
defer: DeferFn;
|
|
168
|
-
events: AsTuple<Simplify<EventPayload>>;
|
|
169
|
-
sessions?: Record<string, string> | undefined;
|
|
170
|
-
runId: string;
|
|
171
|
-
requestId?: string | undefined;
|
|
172
|
-
jobId?: string | undefined;
|
|
173
|
-
group: ReturnType<typeof createGroupTools>;
|
|
174
174
|
attempt: number;
|
|
175
175
|
maxAttempts?: number | undefined;
|
|
176
176
|
};
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
const require_version = require('../../version.cjs');
|
|
2
1
|
const require_types = require('./types.cjs');
|
|
3
2
|
const require_validation = require('./validation.cjs');
|
|
4
3
|
const require_client = require('./client.cjs');
|
|
5
4
|
const require_InngestStepTools = require('../InngestStepTools.cjs');
|
|
6
5
|
const require_StepError = require('../StepError.cjs');
|
|
6
|
+
const require_group = require('./group.cjs');
|
|
7
7
|
const require_protocol = require('./protocol.cjs');
|
|
8
|
+
const require_trace = require('./trace.cjs');
|
|
8
9
|
|
|
9
10
|
//#region src/components/sandbox/durable.ts
|
|
10
11
|
const fitDurableSandboxExecOutput = (stdout, stderr) => {
|
|
@@ -54,6 +55,7 @@ const sandboxRefForWire = (sandbox) => ({
|
|
|
54
55
|
status: sandbox.status,
|
|
55
56
|
vpcId: sandbox.vpcId,
|
|
56
57
|
imageRef: sandbox.imageRef,
|
|
58
|
+
...sandbox.imageDigest !== void 0 && { imageDigest: sandbox.imageDigest },
|
|
57
59
|
resources: { ...sandbox.resources },
|
|
58
60
|
createdAt: sandbox.createdAt,
|
|
59
61
|
...sandbox.startedAt !== void 0 && { startedAt: sandbox.startedAt },
|
|
@@ -78,6 +80,24 @@ const snapshotRefForWire = (snapshot) => ({
|
|
|
78
80
|
resources: { ...snapshot.resources }
|
|
79
81
|
});
|
|
80
82
|
/**
|
|
83
|
+
* The wire result of an `exec` operation, with its output fitted to the
|
|
84
|
+
* durable step's size budget.
|
|
85
|
+
*/
|
|
86
|
+
const execOperationResult = (result) => {
|
|
87
|
+
const output = fitDurableSandboxExecOutput(result.stdout, result.stderr);
|
|
88
|
+
return {
|
|
89
|
+
protocolVersion: require_types.sandboxProtocolVersion,
|
|
90
|
+
action: "exec",
|
|
91
|
+
result: {
|
|
92
|
+
stdout: require_validation.encodeBase64(output.stdout),
|
|
93
|
+
stderr: require_validation.encodeBase64(output.stderr),
|
|
94
|
+
encoding: "base64",
|
|
95
|
+
exitCode: result.exitCode,
|
|
96
|
+
output: output.output
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
};
|
|
100
|
+
/**
|
|
81
101
|
* Execute a durable sandbox operation through the public REST client and
|
|
82
102
|
* reduce its result to JSON-safe data suitable for normal step memoization.
|
|
83
103
|
*/
|
|
@@ -124,25 +144,41 @@ const executeSandboxOperation = async (client, rawOperation) => {
|
|
|
124
144
|
}
|
|
125
145
|
case "exec": {
|
|
126
146
|
const { command, timeoutMs, ...options } = operation.input[0];
|
|
127
|
-
|
|
147
|
+
return execOperationResult(await require_client.runSandboxCommandForOperation(require_client.sandboxForOperation(client, operation.target.sandbox), command, {
|
|
128
148
|
...options,
|
|
129
149
|
timeout: timeoutMs
|
|
150
|
+
}));
|
|
151
|
+
}
|
|
152
|
+
case "file.upload": {
|
|
153
|
+
const { path, data } = operation.input[0];
|
|
154
|
+
await require_client.sandboxForOperation(client, operation.target.sandbox).files.upload({
|
|
155
|
+
path,
|
|
156
|
+
data: new Uint8Array(require_validation.decodeBase64(data, "sandbox file data"))
|
|
130
157
|
});
|
|
131
|
-
const output = fitDurableSandboxExecOutput(result.stdout, result.stderr);
|
|
132
158
|
return {
|
|
133
159
|
protocolVersion: require_types.sandboxProtocolVersion,
|
|
134
160
|
action: operation.action,
|
|
135
|
-
result:
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
161
|
+
result: null
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
case "file.download": {
|
|
165
|
+
const response = await require_client.sandboxForOperation(client, operation.target.sandbox).files.download(operation.input[0]);
|
|
166
|
+
const bytes = new Uint8Array(await response.arrayBuffer());
|
|
167
|
+
if (bytes.byteLength > require_protocol.maxDurableSandboxExecOutputBytes) throw new require_types.SandboxValidationError(`${operation.input[0].path} is ${bytes.byteLength} bytes, over the ${require_protocol.maxDurableSandboxExecOutputBytes} bytes a step can return`);
|
|
168
|
+
return {
|
|
169
|
+
protocolVersion: require_types.sandboxProtocolVersion,
|
|
170
|
+
action: operation.action,
|
|
171
|
+
result: { data: require_validation.encodeBase64(bytes) }
|
|
142
172
|
};
|
|
143
173
|
}
|
|
144
174
|
case "destroy": {
|
|
145
|
-
const result = await require_client.sandboxForOperation(client, operation.target.sandbox).destroy()
|
|
175
|
+
const result = await require_client.sandboxForOperation(client, operation.target.sandbox).destroy().catch((error) => {
|
|
176
|
+
if (error instanceof require_types.SandboxError && error.code === "sandbox_not_found") return {
|
|
177
|
+
status: "TERMINATED",
|
|
178
|
+
sandbox: null
|
|
179
|
+
};
|
|
180
|
+
throw error;
|
|
181
|
+
});
|
|
146
182
|
return {
|
|
147
183
|
protocolVersion: require_types.sandboxProtocolVersion,
|
|
148
184
|
action: operation.action,
|
|
@@ -258,9 +294,18 @@ const executeSandboxOperation = async (client, rawOperation) => {
|
|
|
258
294
|
};
|
|
259
295
|
}
|
|
260
296
|
};
|
|
261
|
-
|
|
297
|
+
/**
|
|
298
|
+
* Run an operation as a step. With `finish`, the step also does that work and
|
|
299
|
+
* its output is what `finish` returns, so a replay returns it unchanged.
|
|
300
|
+
*/
|
|
301
|
+
const callRawTool = async (rawToolResolver, idOrOptions, operation, finish, tools) => {
|
|
262
302
|
try {
|
|
263
|
-
|
|
303
|
+
const rawTool = await rawToolResolver();
|
|
304
|
+
if (tools) return require_protocol.validateSandboxResult(operation, await rawTool(idOrOptions, operation, void 0, tools));
|
|
305
|
+
if (finish) return await rawTool(idOrOptions, operation, (result) => {
|
|
306
|
+
return finish(require_protocol.validateSandboxResult(operation, result));
|
|
307
|
+
});
|
|
308
|
+
return require_protocol.validateSandboxResult(operation, await rawTool(idOrOptions, operation));
|
|
264
309
|
} catch (error) {
|
|
265
310
|
if (error instanceof require_types.SandboxValidationError) throw error;
|
|
266
311
|
const options = require_protocol.findSandboxErrorOptions(error);
|
|
@@ -275,12 +320,21 @@ const callRawTool = async (rawToolResolver, idOrOptions, operation) => {
|
|
|
275
320
|
throw error;
|
|
276
321
|
}
|
|
277
322
|
};
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
323
|
+
const fileParsers = /* @__PURE__ */ new WeakMap();
|
|
324
|
+
const fileParserOf = (sandbox) => {
|
|
325
|
+
const parser = fileParsers.get(sandbox);
|
|
326
|
+
if (!parser) throw new Error("Cannot parse a file of a sandbox the SDK did not create");
|
|
327
|
+
return parser;
|
|
328
|
+
};
|
|
283
329
|
const sandboxTarget = (ref) => ({ sandbox: ref });
|
|
330
|
+
const downloadOperation = (ref, path) => {
|
|
331
|
+
return require_protocol.parseSandboxOperationForAction("file.download", {
|
|
332
|
+
protocolVersion: require_types.sandboxProtocolVersion,
|
|
333
|
+
action: "file.download",
|
|
334
|
+
target: sandboxTarget(ref),
|
|
335
|
+
input: [{ path }]
|
|
336
|
+
});
|
|
337
|
+
};
|
|
284
338
|
const processTarget = (sandbox, process) => ({
|
|
285
339
|
sandbox,
|
|
286
340
|
process
|
|
@@ -379,7 +433,7 @@ const createDurableSandboxFacade = (rawRef, rawToolResolver) => {
|
|
|
379
433
|
target: snapshotTarget((await callRawTool(rawToolResolver, {
|
|
380
434
|
...stepOptions,
|
|
381
435
|
name: "Create snapshot",
|
|
382
|
-
"~origin": sdkOrigin
|
|
436
|
+
"~origin": require_trace.sdkOrigin
|
|
383
437
|
}, createOperation)).snapshot),
|
|
384
438
|
input: [wait]
|
|
385
439
|
});
|
|
@@ -387,27 +441,38 @@ const createDurableSandboxFacade = (rawRef, rawToolResolver) => {
|
|
|
387
441
|
...stepOptions,
|
|
388
442
|
id: `${stepOptions.id}:wait-until-ready`,
|
|
389
443
|
name: "Wait for snapshot",
|
|
390
|
-
"~origin": sdkOrigin
|
|
444
|
+
"~origin": require_trace.sdkOrigin
|
|
391
445
|
}, waitOperation)).snapshot, rawToolResolver);
|
|
392
446
|
};
|
|
393
447
|
const snapshot = (idOrOptions, ...args) => {
|
|
394
|
-
const { id, name } = require_InngestStepTools.getStepOptions(idOrOptions);
|
|
448
|
+
const { id, name, "~span": callerSpan } = require_InngestStepTools.getStepOptions(idOrOptions);
|
|
449
|
+
if (callerSpan) return createSnapshot(idOrOptions, ...args);
|
|
395
450
|
return require_InngestStepTools.withSpan({
|
|
396
451
|
id,
|
|
397
|
-
name
|
|
398
|
-
|
|
452
|
+
name,
|
|
453
|
+
kind: "snapshot"
|
|
454
|
+
}, () => {
|
|
455
|
+
return createSnapshot(idOrOptions, ...args);
|
|
456
|
+
});
|
|
399
457
|
};
|
|
400
458
|
const facade = {
|
|
401
459
|
...ref,
|
|
402
460
|
resources: Object.freeze({ ...ref.resources }),
|
|
403
461
|
commands: Object.freeze({ run: async (idOrOptions, command, options) => {
|
|
404
|
-
const {
|
|
462
|
+
const { tools, toolOptions, ...commandOptions } = options ?? {};
|
|
463
|
+
const { timeout: _timeout, ...input } = require_validation.normalizeSandboxCommandOptions(command, {
|
|
464
|
+
...commandOptions,
|
|
465
|
+
...tools && { timeout: commandOptions.timeout ?? require_validation.maxSandboxProcessTimeoutMs }
|
|
466
|
+
});
|
|
405
467
|
const result = await callRawTool(rawToolResolver, idOrOptions, require_protocol.parseSandboxOperationForAction("exec", {
|
|
406
468
|
protocolVersion: require_types.sandboxProtocolVersion,
|
|
407
469
|
action: "exec",
|
|
408
470
|
target: sandboxTarget(ref),
|
|
409
471
|
input: [input]
|
|
410
|
-
})
|
|
472
|
+
}), void 0, tools && {
|
|
473
|
+
tools,
|
|
474
|
+
toolOptions
|
|
475
|
+
});
|
|
411
476
|
return {
|
|
412
477
|
stdout: require_validation.decodeUtf8(require_validation.decodeBase64(result.result.stdout, "sandbox exec stdout")),
|
|
413
478
|
stderr: require_validation.decodeUtf8(require_validation.decodeBase64(result.result.stderr, "sandbox exec stderr")),
|
|
@@ -415,6 +480,22 @@ const createDurableSandboxFacade = (rawRef, rawToolResolver) => {
|
|
|
415
480
|
output: result.result.output
|
|
416
481
|
};
|
|
417
482
|
} }),
|
|
483
|
+
files: Object.freeze({
|
|
484
|
+
write: async (idOrOptions, { path, data }) => {
|
|
485
|
+
await callRawTool(rawToolResolver, idOrOptions, require_protocol.parseSandboxOperationForAction("file.upload", {
|
|
486
|
+
protocolVersion: require_types.sandboxProtocolVersion,
|
|
487
|
+
action: "file.upload",
|
|
488
|
+
target: sandboxTarget(ref),
|
|
489
|
+
input: [{
|
|
490
|
+
path,
|
|
491
|
+
data: require_validation.encodeBase64(typeof data === "string" ? new TextEncoder().encode(data) : data)
|
|
492
|
+
}]
|
|
493
|
+
}));
|
|
494
|
+
},
|
|
495
|
+
read: async (idOrOptions, path) => {
|
|
496
|
+
return require_validation.decodeBase64((await callRawTool(rawToolResolver, idOrOptions, downloadOperation(ref, path))).result.data, "sandbox file data");
|
|
497
|
+
}
|
|
498
|
+
}),
|
|
418
499
|
processes: Object.freeze({
|
|
419
500
|
start: async (idOrOptions, options) => {
|
|
420
501
|
return createDurableSandboxProcessFacade((await callRawTool(rawToolResolver, idOrOptions, require_protocol.parseSandboxOperationForAction("process.start", {
|
|
@@ -487,15 +568,38 @@ const createDurableSandboxFacade = (rawRef, rawToolResolver) => {
|
|
|
487
568
|
}))).result;
|
|
488
569
|
}
|
|
489
570
|
};
|
|
571
|
+
fileParsers.set(facade, (idOrOptions, path, parse) => {
|
|
572
|
+
return callRawTool(rawToolResolver, idOrOptions, downloadOperation(ref, path), (result) => {
|
|
573
|
+
return parse(require_validation.decodeBase64(result.result.data, "sandbox file data"));
|
|
574
|
+
});
|
|
575
|
+
});
|
|
490
576
|
return Object.freeze(facade);
|
|
491
577
|
};
|
|
578
|
+
/**
|
|
579
|
+
* Read a file in the sandbox and parse it inside the same step, so the step's
|
|
580
|
+
* output is what `parse` returns instead of the file. Internal: the public
|
|
581
|
+
* `files.read` always returns the bytes.
|
|
582
|
+
*/
|
|
583
|
+
const readParsedFile = (sandbox, idOrOptions, path, parse) => {
|
|
584
|
+
return fileParserOf(sandbox)(idOrOptions, path, parse);
|
|
585
|
+
};
|
|
586
|
+
Symbol.asyncDispose ??= Symbol.for("Symbol.asyncDispose");
|
|
492
587
|
const createSandboxTools = (rawToolResolver) => ({
|
|
493
588
|
create: async (idOrOptions, options) => {
|
|
494
|
-
|
|
589
|
+
const sandbox = createDurableSandboxFacade((await callRawTool(rawToolResolver, idOrOptions, require_protocol.parseSandboxOperationForAction("create", {
|
|
495
590
|
protocolVersion: require_types.sandboxProtocolVersion,
|
|
496
591
|
action: "create",
|
|
497
592
|
input: [require_validation.normalizeSandboxCreateOptions(options)]
|
|
498
593
|
}))).sandbox, rawToolResolver);
|
|
594
|
+
const { id } = require_InngestStepTools.getStepOptions(idOrOptions);
|
|
595
|
+
const disposable = Object.freeze({
|
|
596
|
+
...sandbox,
|
|
597
|
+
[Symbol.asyncDispose]: async () => {
|
|
598
|
+
await require_group.destroyQuietly(sandbox, `${id}:destroy`);
|
|
599
|
+
}
|
|
600
|
+
});
|
|
601
|
+
fileParsers.set(disposable, fileParserOf(sandbox));
|
|
602
|
+
return disposable;
|
|
499
603
|
},
|
|
500
604
|
list: async (idOrOptions, options) => {
|
|
501
605
|
const result = await callRawTool(rawToolResolver, idOrOptions, require_protocol.parseSandboxOperationForAction("list", {
|
|
@@ -544,5 +648,7 @@ const createSandboxTools = (rawToolResolver) => ({
|
|
|
544
648
|
|
|
545
649
|
//#endregion
|
|
546
650
|
exports.createSandboxTools = createSandboxTools;
|
|
651
|
+
exports.execOperationResult = execOperationResult;
|
|
547
652
|
exports.executeSandboxOperation = executeSandboxOperation;
|
|
653
|
+
exports.readParsedFile = readParsedFile;
|
|
548
654
|
//# sourceMappingURL=durable.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"durable.cjs","names":["maxDurableSandboxExecOutputBytes","encodeBase64","parseSandboxOperation","createSandboxForOperation","sandboxProtocolVersion","sandboxForOperation","runSandboxCommandForOperation","sandboxProcessForOperation","createSandboxSnapshotForOperation","listSandboxSnapshotsForOperation","getSandboxSnapshotForOperation","waitUntilSandboxSnapshotReadyForOperation","deleteSandboxSnapshotForOperation","validateSandboxResult","SandboxValidationError","findSandboxErrorOptions","StepError","SandboxError","findSandboxValidationError","version","parseWithSchema","sandboxSnapshotRefSchema","facade: DurableSandboxSnapshot","parseSandboxOperationForAction","normalizeSandboxSnapshotWaitOptions","normalizeSandboxCreateOptions","sandboxProcessRefSchema","facade: DurableSandboxProcess","normalizeSandboxProcessSignalOptions","normalizeSandboxProcessWaitOptions","normalizeSandboxProcessOutputOptions","decodeOutputChunk","sandboxRefSchema","createSnapshot: DurableSandbox[\"snapshot\"]","normalizeSandboxSnapshotCreateOptions","getStepOptions","snapshot: DurableSandbox[\"snapshot\"]","withSpan","facade: DurableSandbox","normalizeSandboxCommandOptions","decodeUtf8","decodeBase64","normalizeSandboxProcessStartOptions","normalizeSandboxProcessListOptions","canonicalUuidSchema","normalizeSandboxWaitUntilRunningOptions","normalizeSandboxListOptions","normalizeSandboxSnapshotListOptions"],"sources":["../../../src/components/sandbox/durable.ts"],"sourcesContent":["import type { StepOptionsOrId } from \"../../types.ts\";\nimport { version } from \"../../version.ts\";\nimport { getStepOptions, withSpan } from \"../InngestStepTools.ts\";\nimport { StepError } from \"../StepError.ts\";\nimport {\n createSandboxForOperation,\n createSandboxSnapshotForOperation,\n deleteSandboxSnapshotForOperation,\n getSandboxSnapshotForOperation,\n listSandboxSnapshotsForOperation,\n runSandboxCommandForOperation,\n sandboxForOperation,\n sandboxProcessForOperation,\n waitUntilSandboxSnapshotReadyForOperation,\n} from \"./client.ts\";\nimport {\n findSandboxErrorOptions,\n findSandboxValidationError,\n maxDurableSandboxExecOutputBytes,\n parseSandboxOperation,\n parseSandboxOperationForAction,\n type SandboxOperationForAction,\n type SandboxOperationResultV1,\n type SandboxOperationV1,\n type SandboxRawToolResolver,\n type SandboxResultForAction,\n validateSandboxResult,\n} from \"./protocol.ts\";\nimport {\n type DurableSandbox,\n type DurableSandboxProcess,\n type DurableSandboxSnapshot,\n type DurableSandboxTools,\n type Sandbox,\n type SandboxAction,\n type SandboxClient,\n type SandboxCommandOutputMetadata,\n type SandboxDestroyResult,\n SandboxError,\n type SandboxOutputChunk,\n type SandboxProcess,\n type SandboxProcessRef,\n type SandboxRef,\n type SandboxSnapshotRef,\n SandboxValidationError,\n sandboxProtocolVersion,\n} from \"./types.ts\";\nimport {\n canonicalUuidSchema,\n decodeBase64,\n decodeOutputChunk,\n decodeUtf8,\n encodeBase64,\n normalizeSandboxCommandOptions,\n normalizeSandboxCreateOptions,\n normalizeSandboxListOptions,\n normalizeSandboxProcessListOptions,\n normalizeSandboxProcessOutputOptions,\n normalizeSandboxProcessSignalOptions,\n normalizeSandboxProcessStartOptions,\n normalizeSandboxProcessWaitOptions,\n normalizeSandboxSnapshotCreateOptions,\n normalizeSandboxSnapshotListOptions,\n normalizeSandboxSnapshotWaitOptions,\n normalizeSandboxWaitUntilRunningOptions,\n parseWithSchema,\n sandboxProcessRefSchema,\n sandboxRefSchema,\n sandboxSnapshotRefSchema,\n} from \"./validation.ts\";\n\nconst fitDurableSandboxExecOutput = (\n stdout: Uint8Array,\n stderr: Uint8Array,\n): {\n stdout: Uint8Array;\n stderr: Uint8Array;\n output: SandboxCommandOutputMetadata;\n} => {\n const originalBytes = {\n stdout: stdout.byteLength,\n stderr: stderr.byteLength,\n };\n if (\n originalBytes.stdout + originalBytes.stderr <=\n maxDurableSandboxExecOutputBytes\n ) {\n return { stdout, stderr, output: { truncated: false } };\n }\n\n // This bound intentionally lives in the `step.sandbox.exec` wrapper rather\n // than the direct client. `step.run` persists at most 4 MiB of serialized\n // output, and base64 expands captured bytes. Reserve half of the safe raw\n // budget for each stream, donate unused capacity to the other stream, and\n // retain tails because command failures generally appear at the end.\n const streamShare = Math.floor(maxDurableSandboxExecOutputBytes / 2);\n let retainedStdoutBytes = Math.min(originalBytes.stdout, streamShare);\n let retainedStderrBytes = Math.min(originalBytes.stderr, streamShare);\n let remainingBytes =\n maxDurableSandboxExecOutputBytes -\n retainedStdoutBytes -\n retainedStderrBytes;\n\n const extraStdoutBytes = Math.min(\n originalBytes.stdout - retainedStdoutBytes,\n remainingBytes,\n );\n retainedStdoutBytes += extraStdoutBytes;\n remainingBytes -= extraStdoutBytes;\n retainedStderrBytes += Math.min(\n originalBytes.stderr - retainedStderrBytes,\n remainingBytes,\n );\n\n const retainedBytes = {\n stdout: retainedStdoutBytes,\n stderr: retainedStderrBytes,\n };\n return {\n stdout: stdout.subarray(originalBytes.stdout - retainedBytes.stdout),\n stderr: stderr.subarray(originalBytes.stderr - retainedBytes.stderr),\n output: {\n truncated: true,\n strategy: \"tail\",\n originalBytes,\n retainedBytes,\n },\n };\n};\n\nconst encodeOutputChunk = (\n chunk: SandboxOutputChunk,\n): {\n stream: \"STDOUT\" | \"STDERR\";\n data: string;\n encoding: \"base64\";\n at?: string;\n} => ({\n stream: chunk.stream,\n data: encodeBase64(chunk.data),\n encoding: \"base64\",\n ...(chunk.at !== undefined && { at: chunk.at }),\n});\n\nconst sandboxRefForWire = (sandbox: Sandbox): SandboxRef => ({\n kind: sandbox.kind,\n version: sandbox.version,\n id: sandbox.id,\n name: sandbox.name,\n status: sandbox.status,\n vpcId: sandbox.vpcId,\n imageRef: sandbox.imageRef,\n resources: { ...sandbox.resources },\n createdAt: sandbox.createdAt,\n ...(sandbox.startedAt !== undefined && { startedAt: sandbox.startedAt }),\n ...(sandbox.endedAt !== undefined && { endedAt: sandbox.endedAt }),\n ...(sandbox.error !== undefined && { error: sandbox.error }),\n});\n\nconst processRefForWire = (process: SandboxProcess) => ({\n kind: process.kind,\n version: process.version,\n sandboxId: process.sandboxId,\n id: process.id,\n command: [...process.command],\n ...(process.pid !== undefined && { pid: process.pid }),\n state: process.state,\n ...(process.exitCode !== undefined && { exitCode: process.exitCode }),\n ...(process.terminationSignal !== undefined && {\n terminationSignal: process.terminationSignal,\n }),\n ...(process.startedAt !== undefined && { startedAt: process.startedAt }),\n ...(process.endedAt !== undefined && { endedAt: process.endedAt }),\n});\n\nconst snapshotRefForWire = (snapshot: SandboxSnapshotRef) => ({\n ...snapshot,\n resources: { ...snapshot.resources },\n});\n\n/**\n * Execute a durable sandbox operation through the public REST client and\n * reduce its result to JSON-safe data suitable for normal step memoization.\n */\nexport const executeSandboxOperation = async (\n client: SandboxClient,\n rawOperation: unknown,\n): Promise<SandboxOperationResultV1> => {\n const operation = parseSandboxOperation(rawOperation);\n\n switch (operation.action) {\n case \"create\": {\n const { runningTimeoutMs, ...options } = operation.input[0];\n const sandbox = await createSandboxForOperation(client, {\n ...options,\n ...(runningTimeoutMs !== undefined && {\n runningTimeout: runningTimeoutMs,\n }),\n });\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n sandbox: sandboxRefForWire(sandbox),\n };\n }\n case \"list\": {\n const result = await client.list(operation.input[0]);\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n sandboxes: result.items.map(sandboxRefForWire),\n page: result.page,\n fetchedAt: result.fetchedAt,\n };\n }\n case \"get\": {\n const sandbox = await client.get(operation.input[0].sandboxId);\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n sandbox: sandbox ? sandboxRefForWire(sandbox) : null,\n };\n }\n case \"waitUntilRunning\": {\n const sandbox = await sandboxForOperation(\n client,\n operation.target.sandbox,\n ).waitUntilRunning({\n timeout: operation.input[0].timeoutMs,\n });\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n sandbox: sandboxRefForWire(sandbox),\n };\n }\n case \"exec\": {\n const { command, timeoutMs, ...options } = operation.input[0];\n const sandbox = sandboxForOperation(client, operation.target.sandbox);\n const result = await runSandboxCommandForOperation(sandbox, command, {\n ...options,\n timeout: timeoutMs,\n });\n const output = fitDurableSandboxExecOutput(result.stdout, result.stderr);\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n result: {\n stdout: encodeBase64(output.stdout),\n stderr: encodeBase64(output.stderr),\n encoding: \"base64\",\n exitCode: result.exitCode,\n output: output.output,\n },\n };\n }\n case \"destroy\": {\n const result = await sandboxForOperation(\n client,\n operation.target.sandbox,\n ).destroy();\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n result,\n };\n }\n case \"pause\":\n case \"resume\": {\n const sandbox = await sandboxForOperation(\n client,\n operation.target.sandbox,\n )[operation.action]({ timeout: operation.input[0].timeoutMs });\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n sandbox: sandboxRefForWire(sandbox),\n };\n }\n case \"process.start\": {\n const sandbox = sandboxForOperation(client, operation.target.sandbox);\n const process = await sandbox.processes.start(operation.input[0]);\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n process: processRefForWire(process),\n };\n }\n case \"process.list\": {\n const result = await sandboxForOperation(\n client,\n operation.target.sandbox,\n ).processes.list(operation.input[0]);\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n processes: result.items.map(processRefForWire),\n page: { ...result.page },\n fetchedAt: result.fetchedAt,\n };\n }\n case \"process.get\": {\n const sandbox = sandboxForOperation(client, operation.target.sandbox);\n const process = await sandbox.processes.get(operation.target.processId);\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n process: process ? processRefForWire(process) : null,\n };\n }\n case \"process.signal\": {\n await sandboxProcessForOperation(client, operation.target.process).signal(\n operation.input[0],\n );\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n result: null,\n };\n }\n case \"process.wait\": {\n const process = await sandboxProcessForOperation(\n client,\n operation.target.process,\n ).wait({ timeout: operation.input[0].timeoutMs });\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n process: {\n kind: process.kind,\n version: process.version,\n sandboxId: process.sandboxId,\n id: process.id,\n state: process.state as \"EXITED\" | \"KILLED\" | \"FAILED\" | \"LOST\",\n ...(process.exitCode !== undefined && {\n exitCode: process.exitCode,\n }),\n ...(process.terminationSignal !== undefined && {\n terminationSignal: process.terminationSignal,\n }),\n },\n };\n }\n case \"process.output\": {\n const result = await sandboxProcessForOperation(\n client,\n operation.target.process,\n ).getOutput(operation.input[0]);\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n result: { chunks: result.chunks.map(encodeOutputChunk) },\n };\n }\n case \"snapshot.create\": {\n const snapshot = await createSandboxSnapshotForOperation(\n client,\n operation.target.sandbox.id,\n operation.input[0],\n );\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n snapshot: snapshotRefForWire(snapshot),\n };\n }\n case \"snapshot.list\": {\n const result = await listSandboxSnapshotsForOperation(\n client,\n operation.input[0],\n );\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n snapshots: result.items.map(snapshotRefForWire),\n page: { ...result.page },\n fetchedAt: result.fetchedAt,\n };\n }\n case \"snapshot.get\": {\n const snapshot = await getSandboxSnapshotForOperation(\n client,\n operation.target.snapshotId,\n );\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n snapshot: snapshot ? snapshotRefForWire(snapshot) : null,\n };\n }\n case \"snapshot.waitUntilReady\": {\n const snapshot = await waitUntilSandboxSnapshotReadyForOperation(\n client,\n operation.target.snapshot,\n operation.input[0].timeoutMs,\n );\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n snapshot: snapshotRefForWire(snapshot),\n };\n }\n case \"snapshot.delete\": {\n await deleteSandboxSnapshotForOperation(\n client,\n operation.target.snapshot.id,\n );\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n result: null,\n };\n }\n }\n};\n\nconst callRawTool = async <A extends SandboxAction>(\n rawToolResolver: SandboxRawToolResolver,\n idOrOptions: StepOptionsOrId,\n operation: SandboxOperationForAction<A>,\n): Promise<SandboxResultForAction<A>> => {\n try {\n const rawTool = await rawToolResolver();\n return validateSandboxResult(\n operation,\n await rawTool(idOrOptions, operation),\n );\n } catch (error) {\n if (error instanceof SandboxValidationError) {\n throw error;\n }\n const options = findSandboxErrorOptions(error);\n if (options) {\n if (options.action !== operation.action) {\n throw new SandboxValidationError(\n `Sandbox operation returned a ${options.action} error for ${operation.action}`,\n );\n }\n // A failed step rejects with the engine's own StepError. Rethrow that\n // exact error so it behaves like any other step: left uncaught, it fails\n // the function without retrying it.\n if (error instanceof StepError) {\n throw error;\n }\n throw new SandboxError(options);\n }\n if (error instanceof StepError) {\n throw error;\n }\n const validationError = findSandboxValidationError(error);\n if (validationError) {\n throw new SandboxValidationError(validationError.message, {\n cause: error,\n });\n }\n throw error;\n }\n};\n\n/**\n * Marks the steps the SDK runs on the user's behalf, such as the create and\n * wait inside `snapshot()`. See `StepOptions[\"~origin\"]`.\n */\nconst sdkOrigin = `inngest@${version}`;\n\nconst sandboxTarget = (ref: SandboxRef) => ({ sandbox: ref });\nconst processTarget = (sandbox: SandboxRef, process: SandboxProcessRef) => ({\n sandbox,\n process,\n});\nconst snapshotTarget = (snapshot: SandboxSnapshotRef) => ({ snapshot });\n\nexport const createDurableSandboxSnapshotFacade = (\n rawRef: unknown,\n rawToolResolver: SandboxRawToolResolver,\n): DurableSandboxSnapshot => {\n const ref = parseWithSchema(\n sandboxSnapshotRefSchema,\n rawRef,\n \"sandbox snapshot reference\",\n );\n const facade: DurableSandboxSnapshot = {\n ...ref,\n resources: Object.freeze({ ...ref.resources }),\n waitUntilReady: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\n \"snapshot.waitUntilReady\",\n {\n protocolVersion: sandboxProtocolVersion,\n action: \"snapshot.waitUntilReady\",\n target: snapshotTarget(ref),\n input: [normalizeSandboxSnapshotWaitOptions(options)],\n },\n );\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return createDurableSandboxSnapshotFacade(\n result.snapshot,\n rawToolResolver,\n );\n },\n delete: async (idOrOptions) => {\n const operation = parseSandboxOperationForAction(\"snapshot.delete\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"snapshot.delete\",\n target: snapshotTarget(ref),\n input: [],\n });\n await callRawTool(rawToolResolver, idOrOptions, operation);\n },\n clone: async (idOrOptions, options, waitOptions) => {\n const operation = parseSandboxOperationForAction(\"create\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"create\",\n input: [\n normalizeSandboxCreateOptions({\n name: options.name,\n snapshotId: ref.id,\n runningTimeout: options.runningTimeout ?? waitOptions?.timeout,\n }),\n ],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return createDurableSandboxFacade(result.sandbox, rawToolResolver);\n },\n };\n return Object.freeze(facade);\n};\n\nexport const createDurableSandboxProcessFacade = (\n rawRef: unknown,\n sandboxRef: SandboxRef,\n rawToolResolver: SandboxRawToolResolver,\n): DurableSandboxProcess => {\n const ref = parseWithSchema(\n sandboxProcessRefSchema,\n rawRef,\n \"sandbox process reference\",\n );\n if (ref.sandboxId !== sandboxRef.id) {\n throw new SandboxValidationError(\n \"Sandbox process reference belongs to another sandbox\",\n );\n }\n const facade: DurableSandboxProcess = {\n ...ref,\n command: Object.freeze([...ref.command]),\n signal: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"process.signal\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"process.signal\",\n target: processTarget(sandboxRef, ref),\n input: [normalizeSandboxProcessSignalOptions(options)],\n });\n await callRawTool(rawToolResolver, idOrOptions, operation);\n },\n wait: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"process.wait\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"process.wait\",\n target: processTarget(sandboxRef, ref),\n input: [normalizeSandboxProcessWaitOptions(options)],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n const {\n exitCode: _previousExitCode,\n terminationSignal: _previousTerminationSignal,\n ...baseRef\n } = ref;\n return createDurableSandboxProcessFacade(\n parseWithSchema(\n sandboxProcessRefSchema,\n {\n ...baseRef,\n state: result.process.state,\n ...(result.process.exitCode !== undefined && {\n exitCode: result.process.exitCode,\n }),\n ...(result.process.terminationSignal !== undefined && {\n terminationSignal: result.process.terminationSignal,\n }),\n },\n \"sandbox process reference\",\n ),\n sandboxRef,\n rawToolResolver,\n );\n },\n getOutput: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"process.output\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"process.output\",\n target: processTarget(sandboxRef, ref),\n input: [normalizeSandboxProcessOutputOptions(options)],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return {\n chunks: result.result.chunks.map(decodeOutputChunk),\n };\n },\n };\n return Object.freeze(facade);\n};\n\nexport const createDurableSandboxFacade = (\n rawRef: unknown,\n rawToolResolver: SandboxRawToolResolver,\n): DurableSandbox => {\n const ref = parseWithSchema(sandboxRefSchema, rawRef, \"sandbox reference\");\n const createSnapshot: DurableSandbox[\"snapshot\"] = async (\n idOrOptions,\n options,\n waitOptions,\n ) => {\n const createOptions = normalizeSandboxSnapshotCreateOptions(options);\n const wait = normalizeSandboxSnapshotWaitOptions({\n timeout: waitOptions?.timeout ?? 5 * 60_000,\n });\n const createOperation = parseSandboxOperationForAction(\"snapshot.create\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"snapshot.create\",\n target: sandboxTarget(ref),\n input: [createOptions],\n });\n // The caller's name labels the span around both steps, so each step is\n // named for what it does and marked as the SDK's own work. Step IDs never\n // change, for replay.\n const stepOptions = getStepOptions(idOrOptions);\n const created = await callRawTool(\n rawToolResolver,\n { ...stepOptions, name: \"Create snapshot\", \"~origin\": sdkOrigin },\n createOperation,\n );\n const waitOperation = parseSandboxOperationForAction(\n \"snapshot.waitUntilReady\",\n {\n protocolVersion: sandboxProtocolVersion,\n action: \"snapshot.waitUntilReady\",\n target: snapshotTarget(created.snapshot),\n input: [wait],\n },\n );\n const ready = await callRawTool(\n rawToolResolver,\n {\n ...stepOptions,\n id: `${stepOptions.id}:wait-until-ready`,\n name: \"Wait for snapshot\",\n \"~origin\": sdkOrigin,\n },\n waitOperation,\n );\n return createDurableSandboxSnapshotFacade(ready.snapshot, rawToolResolver);\n };\n // The create and readiness wait are one call, so they share one span.\n const snapshot: DurableSandbox[\"snapshot\"] = (idOrOptions, ...args) => {\n const { id, name } = getStepOptions(idOrOptions);\n return withSpan({ id, name }, () => createSnapshot(idOrOptions, ...args));\n };\n const facade: DurableSandbox = {\n ...ref,\n resources: Object.freeze({ ...ref.resources }),\n commands: Object.freeze({\n run: async (idOrOptions, command, options) => {\n const normalized = normalizeSandboxCommandOptions(command, options);\n const { timeout: _timeout, ...input } = normalized;\n const operation = parseSandboxOperationForAction(\"exec\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"exec\",\n target: sandboxTarget(ref),\n input: [input],\n });\n const result = await callRawTool(\n rawToolResolver,\n idOrOptions,\n operation,\n );\n return {\n stdout: decodeUtf8(\n decodeBase64(result.result.stdout, \"sandbox exec stdout\"),\n ),\n stderr: decodeUtf8(\n decodeBase64(result.result.stderr, \"sandbox exec stderr\"),\n ),\n exitCode: result.result.exitCode,\n output: result.result.output,\n };\n },\n }),\n processes: Object.freeze({\n start: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"process.start\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"process.start\",\n target: sandboxTarget(ref),\n input: [normalizeSandboxProcessStartOptions(options)],\n });\n const result = await callRawTool(\n rawToolResolver,\n idOrOptions,\n operation,\n );\n return createDurableSandboxProcessFacade(\n result.process,\n ref,\n rawToolResolver,\n );\n },\n list: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"process.list\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"process.list\",\n target: sandboxTarget(ref),\n input: [normalizeSandboxProcessListOptions(options)],\n });\n const result = await callRawTool(\n rawToolResolver,\n idOrOptions,\n operation,\n );\n return {\n items: result.processes.map((process) =>\n createDurableSandboxProcessFacade(process, ref, rawToolResolver),\n ),\n page: { ...result.page },\n fetchedAt: result.fetchedAt,\n };\n },\n get: async (idOrOptions, processId) => {\n const parsedProcessId = parseWithSchema(\n canonicalUuidSchema,\n processId,\n \"sandbox process ID\",\n );\n const operation = parseSandboxOperationForAction(\"process.get\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"process.get\",\n target: { sandbox: ref, processId: parsedProcessId },\n input: [],\n });\n const result = await callRawTool(\n rawToolResolver,\n idOrOptions,\n operation,\n );\n return result.process\n ? createDurableSandboxProcessFacade(\n result.process,\n ref,\n rawToolResolver,\n )\n : null;\n },\n }),\n snapshots: Object.freeze({\n create: snapshot,\n }),\n snapshot,\n waitUntilRunning: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"waitUntilRunning\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"waitUntilRunning\",\n target: sandboxTarget(ref),\n input: [normalizeSandboxWaitUntilRunningOptions(options)],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return createDurableSandboxFacade(result.sandbox, rawToolResolver);\n },\n pause: async (idOrOptions, options) => {\n const input = normalizeSandboxWaitUntilRunningOptions({\n timeout: options?.timeout ?? 5 * 60_000,\n });\n const operation = parseSandboxOperationForAction(\"pause\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"pause\",\n target: sandboxTarget(ref),\n input: [input],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return createDurableSandboxFacade(result.sandbox, rawToolResolver);\n },\n resume: async (idOrOptions, options) => {\n const input = normalizeSandboxWaitUntilRunningOptions({\n timeout: options?.timeout ?? 5 * 60_000,\n });\n const operation = parseSandboxOperationForAction(\"resume\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"resume\",\n target: sandboxTarget(ref),\n input: [input],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return createDurableSandboxFacade(result.sandbox, rawToolResolver);\n },\n destroy: async (idOrOptions): Promise<SandboxDestroyResult> => {\n const operation = parseSandboxOperationForAction(\"destroy\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"destroy\",\n target: sandboxTarget(ref),\n input: [],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return result.result;\n },\n };\n return Object.freeze(facade);\n};\n\nexport const createSandboxTools = (\n rawToolResolver: SandboxRawToolResolver,\n): DurableSandboxTools => ({\n create: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"create\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"create\",\n input: [normalizeSandboxCreateOptions(options)],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return createDurableSandboxFacade(result.sandbox, rawToolResolver);\n },\n list: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"list\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"list\",\n input: [normalizeSandboxListOptions(options)],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return {\n items: result.sandboxes.map((sandbox) =>\n createDurableSandboxFacade(sandbox, rawToolResolver),\n ),\n page: { ...result.page },\n fetchedAt: result.fetchedAt,\n };\n },\n get: async (idOrOptions, sandboxId) => {\n const parsedSandboxId = parseWithSchema(\n canonicalUuidSchema,\n sandboxId,\n \"sandbox ID\",\n );\n const operation = parseSandboxOperationForAction(\"get\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"get\",\n input: [{ sandboxId: parsedSandboxId }],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return result.sandbox\n ? createDurableSandboxFacade(result.sandbox, rawToolResolver)\n : null;\n },\n snapshots: {\n list: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"snapshot.list\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"snapshot.list\",\n input: [normalizeSandboxSnapshotListOptions(options)],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return {\n items: result.snapshots.map((snapshot) =>\n createDurableSandboxSnapshotFacade(snapshot, rawToolResolver),\n ),\n page: { ...result.page },\n fetchedAt: result.fetchedAt,\n };\n },\n get: async (idOrOptions, snapshotId) => {\n const parsedSnapshotId = parseWithSchema(\n canonicalUuidSchema,\n snapshotId,\n \"sandbox snapshot ID\",\n );\n const operation = parseSandboxOperationForAction(\"snapshot.get\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"snapshot.get\",\n target: { snapshotId: parsedSnapshotId },\n input: [],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return result.snapshot\n ? createDurableSandboxSnapshotFacade(result.snapshot, rawToolResolver)\n : null;\n },\n },\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"durable.cjs","names":["maxDurableSandboxExecOutputBytes","encodeBase64","sandboxProtocolVersion","parseSandboxOperation","createSandboxForOperation","sandboxForOperation","runSandboxCommandForOperation","decodeBase64","SandboxValidationError","SandboxError","sandboxProcessForOperation","createSandboxSnapshotForOperation","listSandboxSnapshotsForOperation","getSandboxSnapshotForOperation","waitUntilSandboxSnapshotReadyForOperation","deleteSandboxSnapshotForOperation","validateSandboxResult","findSandboxErrorOptions","StepError","findSandboxValidationError","parseSandboxOperationForAction","parseWithSchema","sandboxSnapshotRefSchema","facade: DurableSandboxSnapshot","normalizeSandboxSnapshotWaitOptions","normalizeSandboxCreateOptions","sandboxProcessRefSchema","facade: DurableSandboxProcess","normalizeSandboxProcessSignalOptions","normalizeSandboxProcessWaitOptions","normalizeSandboxProcessOutputOptions","decodeOutputChunk","sandboxRefSchema","createSnapshot: DurableSandbox[\"snapshot\"]","normalizeSandboxSnapshotCreateOptions","getStepOptions","sdkOrigin","snapshot: DurableSandbox[\"snapshot\"]","withSpan","facade: DurableSandbox","normalizeSandboxCommandOptions","maxSandboxProcessTimeoutMs","decodeUtf8","normalizeSandboxProcessStartOptions","normalizeSandboxProcessListOptions","canonicalUuidSchema","normalizeSandboxWaitUntilRunningOptions","destroyQuietly","normalizeSandboxListOptions","normalizeSandboxSnapshotListOptions"],"sources":["../../../src/components/sandbox/durable.ts"],"sourcesContent":["import type { StepOptionsOrId } from \"../../types.ts\";\nimport { getStepOptions, withSpan } from \"../InngestStepTools.ts\";\nimport { StepError } from \"../StepError.ts\";\nimport {\n createSandboxForOperation,\n createSandboxSnapshotForOperation,\n deleteSandboxSnapshotForOperation,\n getSandboxSnapshotForOperation,\n listSandboxSnapshotsForOperation,\n runSandboxCommandForOperation,\n sandboxForOperation,\n sandboxProcessForOperation,\n waitUntilSandboxSnapshotReadyForOperation,\n} from \"./client.ts\";\nimport { destroyQuietly } from \"./group.ts\";\nimport {\n findSandboxErrorOptions,\n findSandboxValidationError,\n maxDurableSandboxExecOutputBytes,\n parseSandboxOperation,\n parseSandboxOperationForAction,\n type SandboxOperationForAction,\n type SandboxOperationResultV1,\n type SandboxOperationV1,\n type SandboxRawToolResolver,\n type SandboxResultForAction,\n validateSandboxResult,\n} from \"./protocol.ts\";\nimport type { SandboxToolsRequest } from \"./tools.ts\";\nimport { sdkOrigin } from \"./trace.ts\";\nimport {\n type DurableSandbox,\n type DurableSandboxProcess,\n type DurableSandboxSnapshot,\n type DurableSandboxTools,\n type Sandbox,\n type SandboxAction,\n type SandboxClient,\n type SandboxCommandOutputMetadata,\n type SandboxDestroyResult,\n SandboxError,\n type SandboxOutputChunk,\n type SandboxProcess,\n type SandboxProcessRef,\n type SandboxRef,\n type SandboxSnapshotRef,\n SandboxValidationError,\n sandboxProtocolVersion,\n} from \"./types.ts\";\nimport {\n canonicalUuidSchema,\n decodeBase64,\n decodeOutputChunk,\n decodeUtf8,\n encodeBase64,\n maxSandboxProcessTimeoutMs,\n normalizeSandboxCommandOptions,\n normalizeSandboxCreateOptions,\n normalizeSandboxListOptions,\n normalizeSandboxProcessListOptions,\n normalizeSandboxProcessOutputOptions,\n normalizeSandboxProcessSignalOptions,\n normalizeSandboxProcessStartOptions,\n normalizeSandboxProcessWaitOptions,\n normalizeSandboxSnapshotCreateOptions,\n normalizeSandboxSnapshotListOptions,\n normalizeSandboxSnapshotWaitOptions,\n normalizeSandboxWaitUntilRunningOptions,\n parseWithSchema,\n sandboxProcessRefSchema,\n sandboxRefSchema,\n sandboxSnapshotRefSchema,\n} from \"./validation.ts\";\n\nconst fitDurableSandboxExecOutput = (\n stdout: Uint8Array,\n stderr: Uint8Array,\n): {\n stdout: Uint8Array;\n stderr: Uint8Array;\n output: SandboxCommandOutputMetadata;\n} => {\n const originalBytes = {\n stdout: stdout.byteLength,\n stderr: stderr.byteLength,\n };\n if (\n originalBytes.stdout + originalBytes.stderr <=\n maxDurableSandboxExecOutputBytes\n ) {\n return { stdout, stderr, output: { truncated: false } };\n }\n\n // This bound intentionally lives in the `step.sandbox.exec` wrapper rather\n // than the direct client. `step.run` persists at most 4 MiB of serialized\n // output, and base64 expands captured bytes. Reserve half of the safe raw\n // budget for each stream, donate unused capacity to the other stream, and\n // retain tails because command failures generally appear at the end.\n const streamShare = Math.floor(maxDurableSandboxExecOutputBytes / 2);\n let retainedStdoutBytes = Math.min(originalBytes.stdout, streamShare);\n let retainedStderrBytes = Math.min(originalBytes.stderr, streamShare);\n let remainingBytes =\n maxDurableSandboxExecOutputBytes -\n retainedStdoutBytes -\n retainedStderrBytes;\n\n const extraStdoutBytes = Math.min(\n originalBytes.stdout - retainedStdoutBytes,\n remainingBytes,\n );\n retainedStdoutBytes += extraStdoutBytes;\n remainingBytes -= extraStdoutBytes;\n retainedStderrBytes += Math.min(\n originalBytes.stderr - retainedStderrBytes,\n remainingBytes,\n );\n\n const retainedBytes = {\n stdout: retainedStdoutBytes,\n stderr: retainedStderrBytes,\n };\n return {\n stdout: stdout.subarray(originalBytes.stdout - retainedBytes.stdout),\n stderr: stderr.subarray(originalBytes.stderr - retainedBytes.stderr),\n output: {\n truncated: true,\n strategy: \"tail\",\n originalBytes,\n retainedBytes,\n },\n };\n};\n\nconst encodeOutputChunk = (\n chunk: SandboxOutputChunk,\n): {\n stream: \"STDOUT\" | \"STDERR\";\n data: string;\n encoding: \"base64\";\n at?: string;\n} => ({\n stream: chunk.stream,\n data: encodeBase64(chunk.data),\n encoding: \"base64\",\n ...(chunk.at !== undefined && { at: chunk.at }),\n});\n\nconst sandboxRefForWire = (sandbox: Sandbox): SandboxRef => ({\n kind: sandbox.kind,\n version: sandbox.version,\n id: sandbox.id,\n name: sandbox.name,\n status: sandbox.status,\n vpcId: sandbox.vpcId,\n imageRef: sandbox.imageRef,\n ...(sandbox.imageDigest !== undefined && {\n imageDigest: sandbox.imageDigest,\n }),\n resources: { ...sandbox.resources },\n createdAt: sandbox.createdAt,\n ...(sandbox.startedAt !== undefined && { startedAt: sandbox.startedAt }),\n ...(sandbox.endedAt !== undefined && { endedAt: sandbox.endedAt }),\n ...(sandbox.error !== undefined && { error: sandbox.error }),\n});\n\nconst processRefForWire = (process: SandboxProcess) => ({\n kind: process.kind,\n version: process.version,\n sandboxId: process.sandboxId,\n id: process.id,\n command: [...process.command],\n ...(process.pid !== undefined && { pid: process.pid }),\n state: process.state,\n ...(process.exitCode !== undefined && { exitCode: process.exitCode }),\n ...(process.terminationSignal !== undefined && {\n terminationSignal: process.terminationSignal,\n }),\n ...(process.startedAt !== undefined && { startedAt: process.startedAt }),\n ...(process.endedAt !== undefined && { endedAt: process.endedAt }),\n});\n\nconst snapshotRefForWire = (snapshot: SandboxSnapshotRef) => ({\n ...snapshot,\n resources: { ...snapshot.resources },\n});\n\n/**\n * The wire result of an `exec` operation, with its output fitted to the\n * durable step's size budget.\n */\nexport const execOperationResult = (result: {\n stdout: Uint8Array;\n stderr: Uint8Array;\n exitCode: number;\n}): SandboxOperationResultV1 => {\n const output = fitDurableSandboxExecOutput(result.stdout, result.stderr);\n\n return {\n protocolVersion: sandboxProtocolVersion,\n action: \"exec\",\n result: {\n stdout: encodeBase64(output.stdout),\n stderr: encodeBase64(output.stderr),\n encoding: \"base64\",\n exitCode: result.exitCode,\n output: output.output,\n },\n };\n};\n\n/**\n * Execute a durable sandbox operation through the public REST client and\n * reduce its result to JSON-safe data suitable for normal step memoization.\n */\nexport const executeSandboxOperation = async (\n client: SandboxClient,\n rawOperation: unknown,\n): Promise<SandboxOperationResultV1> => {\n const operation = parseSandboxOperation(rawOperation);\n\n switch (operation.action) {\n case \"create\": {\n const { runningTimeoutMs, ...options } = operation.input[0];\n const sandbox = await createSandboxForOperation(client, {\n ...options,\n ...(runningTimeoutMs !== undefined && {\n runningTimeout: runningTimeoutMs,\n }),\n });\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n sandbox: sandboxRefForWire(sandbox),\n };\n }\n case \"list\": {\n const result = await client.list(operation.input[0]);\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n sandboxes: result.items.map(sandboxRefForWire),\n page: result.page,\n fetchedAt: result.fetchedAt,\n };\n }\n case \"get\": {\n const sandbox = await client.get(operation.input[0].sandboxId);\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n sandbox: sandbox ? sandboxRefForWire(sandbox) : null,\n };\n }\n case \"waitUntilRunning\": {\n const sandbox = await sandboxForOperation(\n client,\n operation.target.sandbox,\n ).waitUntilRunning({\n timeout: operation.input[0].timeoutMs,\n });\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n sandbox: sandboxRefForWire(sandbox),\n };\n }\n case \"exec\": {\n const { command, timeoutMs, ...options } = operation.input[0];\n const sandbox = sandboxForOperation(client, operation.target.sandbox);\n const result = await runSandboxCommandForOperation(sandbox, command, {\n ...options,\n timeout: timeoutMs,\n });\n return execOperationResult(result);\n }\n case \"file.upload\": {\n const { path, data } = operation.input[0];\n await sandboxForOperation(client, operation.target.sandbox).files.upload({\n path,\n data: new Uint8Array(decodeBase64(data, \"sandbox file data\")),\n });\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n result: null,\n };\n }\n case \"file.download\": {\n const response = await sandboxForOperation(\n client,\n operation.target.sandbox,\n ).files.download(operation.input[0]);\n const bytes = new Uint8Array(await response.arrayBuffer());\n if (bytes.byteLength > maxDurableSandboxExecOutputBytes) {\n throw new SandboxValidationError(\n `${operation.input[0].path} is ${bytes.byteLength} bytes, over the ${maxDurableSandboxExecOutputBytes} bytes a step can return`,\n );\n }\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n result: { data: encodeBase64(bytes) },\n };\n }\n case \"destroy\": {\n // A destroy that already happened, such as one retried after a lost\n // response, has the outcome the caller wanted.\n const result = await sandboxForOperation(client, operation.target.sandbox)\n .destroy()\n .catch((error: unknown): SandboxDestroyResult => {\n if (\n error instanceof SandboxError &&\n error.code === \"sandbox_not_found\"\n ) {\n return { status: \"TERMINATED\", sandbox: null };\n }\n\n throw error;\n });\n\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n result,\n };\n }\n case \"pause\":\n case \"resume\": {\n const sandbox = await sandboxForOperation(\n client,\n operation.target.sandbox,\n )[operation.action]({ timeout: operation.input[0].timeoutMs });\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n sandbox: sandboxRefForWire(sandbox),\n };\n }\n case \"process.start\": {\n const sandbox = sandboxForOperation(client, operation.target.sandbox);\n const process = await sandbox.processes.start(operation.input[0]);\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n process: processRefForWire(process),\n };\n }\n case \"process.list\": {\n const result = await sandboxForOperation(\n client,\n operation.target.sandbox,\n ).processes.list(operation.input[0]);\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n processes: result.items.map(processRefForWire),\n page: { ...result.page },\n fetchedAt: result.fetchedAt,\n };\n }\n case \"process.get\": {\n const sandbox = sandboxForOperation(client, operation.target.sandbox);\n const process = await sandbox.processes.get(operation.target.processId);\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n process: process ? processRefForWire(process) : null,\n };\n }\n case \"process.signal\": {\n await sandboxProcessForOperation(client, operation.target.process).signal(\n operation.input[0],\n );\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n result: null,\n };\n }\n case \"process.wait\": {\n const process = await sandboxProcessForOperation(\n client,\n operation.target.process,\n ).wait({ timeout: operation.input[0].timeoutMs });\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n process: {\n kind: process.kind,\n version: process.version,\n sandboxId: process.sandboxId,\n id: process.id,\n state: process.state as \"EXITED\" | \"KILLED\" | \"FAILED\" | \"LOST\",\n ...(process.exitCode !== undefined && {\n exitCode: process.exitCode,\n }),\n ...(process.terminationSignal !== undefined && {\n terminationSignal: process.terminationSignal,\n }),\n },\n };\n }\n case \"process.output\": {\n const result = await sandboxProcessForOperation(\n client,\n operation.target.process,\n ).getOutput(operation.input[0]);\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n result: { chunks: result.chunks.map(encodeOutputChunk) },\n };\n }\n case \"snapshot.create\": {\n const snapshot = await createSandboxSnapshotForOperation(\n client,\n operation.target.sandbox.id,\n operation.input[0],\n );\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n snapshot: snapshotRefForWire(snapshot),\n };\n }\n case \"snapshot.list\": {\n const result = await listSandboxSnapshotsForOperation(\n client,\n operation.input[0],\n );\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n snapshots: result.items.map(snapshotRefForWire),\n page: { ...result.page },\n fetchedAt: result.fetchedAt,\n };\n }\n case \"snapshot.get\": {\n const snapshot = await getSandboxSnapshotForOperation(\n client,\n operation.target.snapshotId,\n );\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n snapshot: snapshot ? snapshotRefForWire(snapshot) : null,\n };\n }\n case \"snapshot.waitUntilReady\": {\n const snapshot = await waitUntilSandboxSnapshotReadyForOperation(\n client,\n operation.target.snapshot,\n operation.input[0].timeoutMs,\n );\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n snapshot: snapshotRefForWire(snapshot),\n };\n }\n case \"snapshot.delete\": {\n await deleteSandboxSnapshotForOperation(\n client,\n operation.target.snapshot.id,\n );\n return {\n protocolVersion: sandboxProtocolVersion,\n action: operation.action,\n result: null,\n };\n }\n }\n};\n\n/**\n * Run an operation as a step. With `finish`, the step also does that work and\n * its output is what `finish` returns, so a replay returns it unchanged.\n */\nconst callRawTool = async <\n A extends SandboxAction,\n T = SandboxResultForAction<A>,\n>(\n rawToolResolver: SandboxRawToolResolver,\n idOrOptions: StepOptionsOrId,\n operation: SandboxOperationForAction<A>,\n finish?: (result: SandboxResultForAction<A>) => T | Promise<T>,\n tools?: SandboxToolsRequest,\n): Promise<T> => {\n try {\n const rawTool = await rawToolResolver();\n if (tools) {\n return validateSandboxResult(\n operation,\n await rawTool(idOrOptions, operation, undefined, tools),\n ) as T;\n }\n\n if (finish) {\n return (await rawTool(idOrOptions, operation, (result) => {\n return finish(validateSandboxResult(operation, result));\n })) as T;\n }\n\n return validateSandboxResult(\n operation,\n await rawTool(idOrOptions, operation),\n ) as T;\n } catch (error) {\n if (error instanceof SandboxValidationError) {\n throw error;\n }\n const options = findSandboxErrorOptions(error);\n if (options) {\n if (options.action !== operation.action) {\n throw new SandboxValidationError(\n `Sandbox operation returned a ${options.action} error for ${operation.action}`,\n );\n }\n // A failed step rejects with the engine's own StepError. Rethrow that\n // exact error so it behaves like any other step: left uncaught, it fails\n // the function without retrying it.\n if (error instanceof StepError) {\n throw error;\n }\n throw new SandboxError(options);\n }\n if (error instanceof StepError) {\n throw error;\n }\n const validationError = findSandboxValidationError(error);\n if (validationError) {\n throw new SandboxValidationError(validationError.message, {\n cause: error,\n });\n }\n throw error;\n }\n};\n\ntype FileParser = (\n idOrOptions: StepOptionsOrId,\n path: string,\n parse: (bytes: Uint8Array) => unknown,\n) => Promise<unknown>;\nconst fileParsers = new WeakMap<DurableSandbox, FileParser>();\nconst fileParserOf = (sandbox: DurableSandbox): FileParser => {\n const parser = fileParsers.get(sandbox);\n if (!parser) {\n throw new Error(\"Cannot parse a file of a sandbox the SDK did not create\");\n }\n\n return parser;\n};\nconst sandboxTarget = (ref: SandboxRef) => ({ sandbox: ref });\nconst downloadOperation = (ref: SandboxRef, path: string) => {\n return parseSandboxOperationForAction(\"file.download\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"file.download\",\n target: sandboxTarget(ref),\n input: [{ path }],\n });\n};\nconst processTarget = (sandbox: SandboxRef, process: SandboxProcessRef) => ({\n sandbox,\n process,\n});\nconst snapshotTarget = (snapshot: SandboxSnapshotRef) => ({ snapshot });\n\nexport const createDurableSandboxSnapshotFacade = (\n rawRef: unknown,\n rawToolResolver: SandboxRawToolResolver,\n): DurableSandboxSnapshot => {\n const ref = parseWithSchema(\n sandboxSnapshotRefSchema,\n rawRef,\n \"sandbox snapshot reference\",\n );\n const facade: DurableSandboxSnapshot = {\n ...ref,\n resources: Object.freeze({ ...ref.resources }),\n waitUntilReady: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\n \"snapshot.waitUntilReady\",\n {\n protocolVersion: sandboxProtocolVersion,\n action: \"snapshot.waitUntilReady\",\n target: snapshotTarget(ref),\n input: [normalizeSandboxSnapshotWaitOptions(options)],\n },\n );\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return createDurableSandboxSnapshotFacade(\n result.snapshot,\n rawToolResolver,\n );\n },\n delete: async (idOrOptions) => {\n const operation = parseSandboxOperationForAction(\"snapshot.delete\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"snapshot.delete\",\n target: snapshotTarget(ref),\n input: [],\n });\n await callRawTool(rawToolResolver, idOrOptions, operation);\n },\n clone: async (idOrOptions, options, waitOptions) => {\n const operation = parseSandboxOperationForAction(\"create\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"create\",\n input: [\n normalizeSandboxCreateOptions({\n name: options.name,\n snapshotId: ref.id,\n runningTimeout: options.runningTimeout ?? waitOptions?.timeout,\n }),\n ],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return createDurableSandboxFacade(result.sandbox, rawToolResolver);\n },\n };\n return Object.freeze(facade);\n};\n\nexport const createDurableSandboxProcessFacade = (\n rawRef: unknown,\n sandboxRef: SandboxRef,\n rawToolResolver: SandboxRawToolResolver,\n): DurableSandboxProcess => {\n const ref = parseWithSchema(\n sandboxProcessRefSchema,\n rawRef,\n \"sandbox process reference\",\n );\n if (ref.sandboxId !== sandboxRef.id) {\n throw new SandboxValidationError(\n \"Sandbox process reference belongs to another sandbox\",\n );\n }\n const facade: DurableSandboxProcess = {\n ...ref,\n command: Object.freeze([...ref.command]),\n signal: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"process.signal\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"process.signal\",\n target: processTarget(sandboxRef, ref),\n input: [normalizeSandboxProcessSignalOptions(options)],\n });\n await callRawTool(rawToolResolver, idOrOptions, operation);\n },\n wait: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"process.wait\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"process.wait\",\n target: processTarget(sandboxRef, ref),\n input: [normalizeSandboxProcessWaitOptions(options)],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n const {\n exitCode: _previousExitCode,\n terminationSignal: _previousTerminationSignal,\n ...baseRef\n } = ref;\n return createDurableSandboxProcessFacade(\n parseWithSchema(\n sandboxProcessRefSchema,\n {\n ...baseRef,\n state: result.process.state,\n ...(result.process.exitCode !== undefined && {\n exitCode: result.process.exitCode,\n }),\n ...(result.process.terminationSignal !== undefined && {\n terminationSignal: result.process.terminationSignal,\n }),\n },\n \"sandbox process reference\",\n ),\n sandboxRef,\n rawToolResolver,\n );\n },\n getOutput: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"process.output\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"process.output\",\n target: processTarget(sandboxRef, ref),\n input: [normalizeSandboxProcessOutputOptions(options)],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return {\n chunks: result.result.chunks.map(decodeOutputChunk),\n };\n },\n };\n return Object.freeze(facade);\n};\n\nexport const createDurableSandboxFacade = (\n rawRef: unknown,\n rawToolResolver: SandboxRawToolResolver,\n): DurableSandbox => {\n const ref = parseWithSchema(sandboxRefSchema, rawRef, \"sandbox reference\");\n const createSnapshot: DurableSandbox[\"snapshot\"] = async (\n idOrOptions,\n options,\n waitOptions,\n ) => {\n const createOptions = normalizeSandboxSnapshotCreateOptions(options);\n const wait = normalizeSandboxSnapshotWaitOptions({\n timeout: waitOptions?.timeout ?? 5 * 60_000,\n });\n const createOperation = parseSandboxOperationForAction(\"snapshot.create\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"snapshot.create\",\n target: sandboxTarget(ref),\n input: [createOptions],\n });\n // The caller's name labels the span around both steps, so each step is\n // named for what it does and marked as the SDK's own work. Step IDs never\n // change, for replay.\n const stepOptions = getStepOptions(idOrOptions);\n const created = await callRawTool(\n rawToolResolver,\n { ...stepOptions, name: \"Create snapshot\", \"~origin\": sdkOrigin },\n createOperation,\n );\n const waitOperation = parseSandboxOperationForAction(\n \"snapshot.waitUntilReady\",\n {\n protocolVersion: sandboxProtocolVersion,\n action: \"snapshot.waitUntilReady\",\n target: snapshotTarget(created.snapshot),\n input: [wait],\n },\n );\n const ready = await callRawTool(\n rawToolResolver,\n {\n ...stepOptions,\n id: `${stepOptions.id}:wait-until-ready`,\n name: \"Wait for snapshot\",\n \"~origin\": sdkOrigin,\n },\n waitOperation,\n );\n return createDurableSandboxSnapshotFacade(ready.snapshot, rawToolResolver);\n };\n // The create and readiness wait are one statement, so they share one span\n // of kind `snapshot`. A caller that already groups the statement (such as\n // `@inngest/ci`) passes its own `\"~span\"`, which both steps carry, so the\n // statement is never grouped twice.\n const snapshot: DurableSandbox[\"snapshot\"] = (idOrOptions, ...args) => {\n const { id, name, \"~span\": callerSpan } = getStepOptions(idOrOptions);\n\n if (callerSpan) {\n return createSnapshot(idOrOptions, ...args);\n }\n\n return withSpan({ id, name, kind: \"snapshot\" }, () => {\n return createSnapshot(idOrOptions, ...args);\n });\n };\n const facade: DurableSandbox = {\n ...ref,\n resources: Object.freeze({ ...ref.resources }),\n commands: Object.freeze({\n run: async (idOrOptions, command, options) => {\n const { tools, toolOptions, ...commandOptions } = options ?? {};\n const normalized = normalizeSandboxCommandOptions(command, {\n ...commandOptions,\n ...(tools && {\n timeout: commandOptions.timeout ?? maxSandboxProcessTimeoutMs,\n }),\n });\n const { timeout: _timeout, ...input } = normalized;\n const operation = parseSandboxOperationForAction(\"exec\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"exec\",\n target: sandboxTarget(ref),\n input: [input],\n });\n const result = await callRawTool(\n rawToolResolver,\n idOrOptions,\n operation,\n undefined,\n tools && { tools, toolOptions },\n );\n return {\n stdout: decodeUtf8(\n decodeBase64(result.result.stdout, \"sandbox exec stdout\"),\n ),\n stderr: decodeUtf8(\n decodeBase64(result.result.stderr, \"sandbox exec stderr\"),\n ),\n exitCode: result.result.exitCode,\n output: result.result.output,\n };\n },\n }),\n files: Object.freeze({\n write: async (idOrOptions, { path, data }) => {\n const operation = parseSandboxOperationForAction(\"file.upload\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"file.upload\",\n target: sandboxTarget(ref),\n input: [\n {\n path,\n data: encodeBase64(\n typeof data === \"string\"\n ? new TextEncoder().encode(data)\n : data,\n ),\n },\n ],\n });\n await callRawTool(rawToolResolver, idOrOptions, operation);\n },\n read: async (idOrOptions, path) => {\n const result = await callRawTool(\n rawToolResolver,\n idOrOptions,\n downloadOperation(ref, path),\n );\n return decodeBase64(result.result.data, \"sandbox file data\");\n },\n }),\n processes: Object.freeze({\n start: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"process.start\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"process.start\",\n target: sandboxTarget(ref),\n input: [normalizeSandboxProcessStartOptions(options)],\n });\n const result = await callRawTool(\n rawToolResolver,\n idOrOptions,\n operation,\n );\n return createDurableSandboxProcessFacade(\n result.process,\n ref,\n rawToolResolver,\n );\n },\n list: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"process.list\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"process.list\",\n target: sandboxTarget(ref),\n input: [normalizeSandboxProcessListOptions(options)],\n });\n const result = await callRawTool(\n rawToolResolver,\n idOrOptions,\n operation,\n );\n return {\n items: result.processes.map((process) =>\n createDurableSandboxProcessFacade(process, ref, rawToolResolver),\n ),\n page: { ...result.page },\n fetchedAt: result.fetchedAt,\n };\n },\n get: async (idOrOptions, processId) => {\n const parsedProcessId = parseWithSchema(\n canonicalUuidSchema,\n processId,\n \"sandbox process ID\",\n );\n const operation = parseSandboxOperationForAction(\"process.get\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"process.get\",\n target: { sandbox: ref, processId: parsedProcessId },\n input: [],\n });\n const result = await callRawTool(\n rawToolResolver,\n idOrOptions,\n operation,\n );\n return result.process\n ? createDurableSandboxProcessFacade(\n result.process,\n ref,\n rawToolResolver,\n )\n : null;\n },\n }),\n snapshots: Object.freeze({\n create: snapshot,\n }),\n snapshot,\n waitUntilRunning: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"waitUntilRunning\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"waitUntilRunning\",\n target: sandboxTarget(ref),\n input: [normalizeSandboxWaitUntilRunningOptions(options)],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return createDurableSandboxFacade(result.sandbox, rawToolResolver);\n },\n pause: async (idOrOptions, options) => {\n const input = normalizeSandboxWaitUntilRunningOptions({\n timeout: options?.timeout ?? 5 * 60_000,\n });\n const operation = parseSandboxOperationForAction(\"pause\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"pause\",\n target: sandboxTarget(ref),\n input: [input],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return createDurableSandboxFacade(result.sandbox, rawToolResolver);\n },\n resume: async (idOrOptions, options) => {\n const input = normalizeSandboxWaitUntilRunningOptions({\n timeout: options?.timeout ?? 5 * 60_000,\n });\n const operation = parseSandboxOperationForAction(\"resume\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"resume\",\n target: sandboxTarget(ref),\n input: [input],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return createDurableSandboxFacade(result.sandbox, rawToolResolver);\n },\n destroy: async (idOrOptions): Promise<SandboxDestroyResult> => {\n const operation = parseSandboxOperationForAction(\"destroy\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"destroy\",\n target: sandboxTarget(ref),\n input: [],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return result.result;\n },\n };\n fileParsers.set(facade, (idOrOptions, path, parse) => {\n return callRawTool(\n rawToolResolver,\n idOrOptions,\n downloadOperation(ref, path),\n (result) => {\n return parse(decodeBase64(result.result.data, \"sandbox file data\"));\n },\n );\n });\n\n return Object.freeze(facade);\n};\n\n/**\n * Read a file in the sandbox and parse it inside the same step, so the step's\n * output is what `parse` returns instead of the file. Internal: the public\n * `files.read` always returns the bytes.\n */\nexport const readParsedFile = <T>(\n sandbox: DurableSandbox,\n idOrOptions: StepOptionsOrId,\n path: string,\n parse: (bytes: Uint8Array) => T | Promise<T>,\n): Promise<T> => {\n return fileParserOf(sandbox)(idOrOptions, path, parse) as Promise<T>;\n};\n\n// Node before 20.5 lacks the symbol that `await using` looks up.\n(Symbol as { asyncDispose?: symbol }).asyncDispose ??= Symbol.for(\n \"Symbol.asyncDispose\",\n);\n\nexport const createSandboxTools = (\n rawToolResolver: SandboxRawToolResolver,\n): DurableSandboxTools => ({\n create: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"create\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"create\",\n input: [normalizeSandboxCreateOptions(options)],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n const sandbox = createDurableSandboxFacade(result.sandbox, rawToolResolver);\n const { id } = getStepOptions(idOrOptions);\n\n const disposable = Object.freeze({\n ...sandbox,\n [Symbol.asyncDispose]: async () => {\n await destroyQuietly(sandbox, `${id}:destroy`);\n },\n });\n fileParsers.set(disposable, fileParserOf(sandbox));\n\n return disposable;\n },\n list: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"list\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"list\",\n input: [normalizeSandboxListOptions(options)],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return {\n items: result.sandboxes.map((sandbox) =>\n createDurableSandboxFacade(sandbox, rawToolResolver),\n ),\n page: { ...result.page },\n fetchedAt: result.fetchedAt,\n };\n },\n get: async (idOrOptions, sandboxId) => {\n const parsedSandboxId = parseWithSchema(\n canonicalUuidSchema,\n sandboxId,\n \"sandbox ID\",\n );\n const operation = parseSandboxOperationForAction(\"get\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"get\",\n input: [{ sandboxId: parsedSandboxId }],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return result.sandbox\n ? createDurableSandboxFacade(result.sandbox, rawToolResolver)\n : null;\n },\n snapshots: {\n list: async (idOrOptions, options) => {\n const operation = parseSandboxOperationForAction(\"snapshot.list\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"snapshot.list\",\n input: [normalizeSandboxSnapshotListOptions(options)],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return {\n items: result.snapshots.map((snapshot) =>\n createDurableSandboxSnapshotFacade(snapshot, rawToolResolver),\n ),\n page: { ...result.page },\n fetchedAt: result.fetchedAt,\n };\n },\n get: async (idOrOptions, snapshotId) => {\n const parsedSnapshotId = parseWithSchema(\n canonicalUuidSchema,\n snapshotId,\n \"sandbox snapshot ID\",\n );\n const operation = parseSandboxOperationForAction(\"snapshot.get\", {\n protocolVersion: sandboxProtocolVersion,\n action: \"snapshot.get\",\n target: { snapshotId: parsedSnapshotId },\n input: [],\n });\n const result = await callRawTool(rawToolResolver, idOrOptions, operation);\n return result.snapshot\n ? createDurableSandboxSnapshotFacade(result.snapshot, rawToolResolver)\n : null;\n },\n },\n});\n"],"mappings":";;;;;;;;;;AA0EA,MAAM,+BACJ,QACA,WAKG;CACH,MAAM,gBAAgB;EACpB,QAAQ,OAAO;EACf,QAAQ,OAAO;EAChB;AACD,KACE,cAAc,SAAS,cAAc,UACrCA,kDAEA,QAAO;EAAE;EAAQ;EAAQ,QAAQ,EAAE,WAAW,OAAO;EAAE;CAQzD,MAAM,cAAc,KAAK,MAAMA,oDAAmC,EAAE;CACpE,IAAI,sBAAsB,KAAK,IAAI,cAAc,QAAQ,YAAY;CACrE,IAAI,sBAAsB,KAAK,IAAI,cAAc,QAAQ,YAAY;CACrE,IAAI,iBACFA,oDACA,sBACA;CAEF,MAAM,mBAAmB,KAAK,IAC5B,cAAc,SAAS,qBACvB,eACD;AACD,wBAAuB;AACvB,mBAAkB;AAClB,wBAAuB,KAAK,IAC1B,cAAc,SAAS,qBACvB,eACD;CAED,MAAM,gBAAgB;EACpB,QAAQ;EACR,QAAQ;EACT;AACD,QAAO;EACL,QAAQ,OAAO,SAAS,cAAc,SAAS,cAAc,OAAO;EACpE,QAAQ,OAAO,SAAS,cAAc,SAAS,cAAc,OAAO;EACpE,QAAQ;GACN,WAAW;GACX,UAAU;GACV;GACA;GACD;EACF;;AAGH,MAAM,qBACJ,WAMI;CACJ,QAAQ,MAAM;CACd,MAAMC,gCAAa,MAAM,KAAK;CAC9B,UAAU;CACV,GAAI,MAAM,OAAO,UAAa,EAAE,IAAI,MAAM,IAAI;CAC/C;AAED,MAAM,qBAAqB,aAAkC;CAC3D,MAAM,QAAQ;CACd,SAAS,QAAQ;CACjB,IAAI,QAAQ;CACZ,MAAM,QAAQ;CACd,QAAQ,QAAQ;CAChB,OAAO,QAAQ;CACf,UAAU,QAAQ;CAClB,GAAI,QAAQ,gBAAgB,UAAa,EACvC,aAAa,QAAQ,aACtB;CACD,WAAW,EAAE,GAAG,QAAQ,WAAW;CACnC,WAAW,QAAQ;CACnB,GAAI,QAAQ,cAAc,UAAa,EAAE,WAAW,QAAQ,WAAW;CACvE,GAAI,QAAQ,YAAY,UAAa,EAAE,SAAS,QAAQ,SAAS;CACjE,GAAI,QAAQ,UAAU,UAAa,EAAE,OAAO,QAAQ,OAAO;CAC5D;AAED,MAAM,qBAAqB,aAA6B;CACtD,MAAM,QAAQ;CACd,SAAS,QAAQ;CACjB,WAAW,QAAQ;CACnB,IAAI,QAAQ;CACZ,SAAS,CAAC,GAAG,QAAQ,QAAQ;CAC7B,GAAI,QAAQ,QAAQ,UAAa,EAAE,KAAK,QAAQ,KAAK;CACrD,OAAO,QAAQ;CACf,GAAI,QAAQ,aAAa,UAAa,EAAE,UAAU,QAAQ,UAAU;CACpE,GAAI,QAAQ,sBAAsB,UAAa,EAC7C,mBAAmB,QAAQ,mBAC5B;CACD,GAAI,QAAQ,cAAc,UAAa,EAAE,WAAW,QAAQ,WAAW;CACvE,GAAI,QAAQ,YAAY,UAAa,EAAE,SAAS,QAAQ,SAAS;CAClE;AAED,MAAM,sBAAsB,cAAkC;CAC5D,GAAG;CACH,WAAW,EAAE,GAAG,SAAS,WAAW;CACrC;;;;;AAMD,MAAa,uBAAuB,WAIJ;CAC9B,MAAM,SAAS,4BAA4B,OAAO,QAAQ,OAAO,OAAO;AAExE,QAAO;EACL,iBAAiBC;EACjB,QAAQ;EACR,QAAQ;GACN,QAAQD,gCAAa,OAAO,OAAO;GACnC,QAAQA,gCAAa,OAAO,OAAO;GACnC,UAAU;GACV,UAAU,OAAO;GACjB,QAAQ,OAAO;GAChB;EACF;;;;;;AAOH,MAAa,0BAA0B,OACrC,QACA,iBACsC;CACtC,MAAM,YAAYE,uCAAsB,aAAa;AAErD,SAAQ,UAAU,QAAlB;EACE,KAAK,UAAU;GACb,MAAM,EAAE,kBAAkB,GAAG,YAAY,UAAU,MAAM;GACzD,MAAM,UAAU,MAAMC,yCAA0B,QAAQ;IACtD,GAAG;IACH,GAAI,qBAAqB,UAAa,EACpC,gBAAgB,kBACjB;IACF,CAAC;AACF,UAAO;IACL,iBAAiBF;IACjB,QAAQ,UAAU;IAClB,SAAS,kBAAkB,QAAQ;IACpC;;EAEH,KAAK,QAAQ;GACX,MAAM,SAAS,MAAM,OAAO,KAAK,UAAU,MAAM,GAAG;AACpD,UAAO;IACL,iBAAiBA;IACjB,QAAQ,UAAU;IAClB,WAAW,OAAO,MAAM,IAAI,kBAAkB;IAC9C,MAAM,OAAO;IACb,WAAW,OAAO;IACnB;;EAEH,KAAK,OAAO;GACV,MAAM,UAAU,MAAM,OAAO,IAAI,UAAU,MAAM,GAAG,UAAU;AAC9D,UAAO;IACL,iBAAiBA;IACjB,QAAQ,UAAU;IAClB,SAAS,UAAU,kBAAkB,QAAQ,GAAG;IACjD;;EAEH,KAAK,oBAAoB;GACvB,MAAM,UAAU,MAAMG,mCACpB,QACA,UAAU,OAAO,QAClB,CAAC,iBAAiB,EACjB,SAAS,UAAU,MAAM,GAAG,WAC7B,CAAC;AACF,UAAO;IACL,iBAAiBH;IACjB,QAAQ,UAAU;IAClB,SAAS,kBAAkB,QAAQ;IACpC;;EAEH,KAAK,QAAQ;GACX,MAAM,EAAE,SAAS,WAAW,GAAG,YAAY,UAAU,MAAM;AAM3D,UAAO,oBAJQ,MAAMI,6CADLD,mCAAoB,QAAQ,UAAU,OAAO,QAAQ,EACT,SAAS;IACnE,GAAG;IACH,SAAS;IACV,CAAC,CACgC;;EAEpC,KAAK,eAAe;GAClB,MAAM,EAAE,MAAM,SAAS,UAAU,MAAM;AACvC,SAAMA,mCAAoB,QAAQ,UAAU,OAAO,QAAQ,CAAC,MAAM,OAAO;IACvE;IACA,MAAM,IAAI,WAAWE,gCAAa,MAAM,oBAAoB,CAAC;IAC9D,CAAC;AACF,UAAO;IACL,iBAAiBL;IACjB,QAAQ,UAAU;IAClB,QAAQ;IACT;;EAEH,KAAK,iBAAiB;GACpB,MAAM,WAAW,MAAMG,mCACrB,QACA,UAAU,OAAO,QAClB,CAAC,MAAM,SAAS,UAAU,MAAM,GAAG;GACpC,MAAM,QAAQ,IAAI,WAAW,MAAM,SAAS,aAAa,CAAC;AAC1D,OAAI,MAAM,aAAaL,kDACrB,OAAM,IAAIQ,qCACR,GAAG,UAAU,MAAM,GAAG,KAAK,MAAM,MAAM,WAAW,mBAAmBR,kDAAiC,0BACvG;AAEH,UAAO;IACL,iBAAiBE;IACjB,QAAQ,UAAU;IAClB,QAAQ,EAAE,MAAMD,gCAAa,MAAM,EAAE;IACtC;;EAEH,KAAK,WAAW;GAGd,MAAM,SAAS,MAAMI,mCAAoB,QAAQ,UAAU,OAAO,QAAQ,CACvE,SAAS,CACT,OAAO,UAAyC;AAC/C,QACE,iBAAiBI,8BACjB,MAAM,SAAS,oBAEf,QAAO;KAAE,QAAQ;KAAc,SAAS;KAAM;AAGhD,UAAM;KACN;AAEJ,UAAO;IACL,iBAAiBP;IACjB,QAAQ,UAAU;IAClB;IACD;;EAEH,KAAK;EACL,KAAK,UAAU;GACb,MAAM,UAAU,MAAMG,mCACpB,QACA,UAAU,OAAO,QAClB,CAAC,UAAU,QAAQ,EAAE,SAAS,UAAU,MAAM,GAAG,WAAW,CAAC;AAC9D,UAAO;IACL,iBAAiBH;IACjB,QAAQ,UAAU;IAClB,SAAS,kBAAkB,QAAQ;IACpC;;EAEH,KAAK,iBAAiB;GAEpB,MAAM,UAAU,MADAG,mCAAoB,QAAQ,UAAU,OAAO,QAAQ,CACvC,UAAU,MAAM,UAAU,MAAM,GAAG;AACjE,UAAO;IACL,iBAAiBH;IACjB,QAAQ,UAAU;IAClB,SAAS,kBAAkB,QAAQ;IACpC;;EAEH,KAAK,gBAAgB;GACnB,MAAM,SAAS,MAAMG,mCACnB,QACA,UAAU,OAAO,QAClB,CAAC,UAAU,KAAK,UAAU,MAAM,GAAG;AACpC,UAAO;IACL,iBAAiBH;IACjB,QAAQ,UAAU;IAClB,WAAW,OAAO,MAAM,IAAI,kBAAkB;IAC9C,MAAM,EAAE,GAAG,OAAO,MAAM;IACxB,WAAW,OAAO;IACnB;;EAEH,KAAK,eAAe;GAElB,MAAM,UAAU,MADAG,mCAAoB,QAAQ,UAAU,OAAO,QAAQ,CACvC,UAAU,IAAI,UAAU,OAAO,UAAU;AACvE,UAAO;IACL,iBAAiBH;IACjB,QAAQ,UAAU;IAClB,SAAS,UAAU,kBAAkB,QAAQ,GAAG;IACjD;;EAEH,KAAK;AACH,SAAMQ,0CAA2B,QAAQ,UAAU,OAAO,QAAQ,CAAC,OACjE,UAAU,MAAM,GACjB;AACD,UAAO;IACL,iBAAiBR;IACjB,QAAQ,UAAU;IAClB,QAAQ;IACT;EAEH,KAAK,gBAAgB;GACnB,MAAM,UAAU,MAAMQ,0CACpB,QACA,UAAU,OAAO,QAClB,CAAC,KAAK,EAAE,SAAS,UAAU,MAAM,GAAG,WAAW,CAAC;AACjD,UAAO;IACL,iBAAiBR;IACjB,QAAQ,UAAU;IAClB,SAAS;KACP,MAAM,QAAQ;KACd,SAAS,QAAQ;KACjB,WAAW,QAAQ;KACnB,IAAI,QAAQ;KACZ,OAAO,QAAQ;KACf,GAAI,QAAQ,aAAa,UAAa,EACpC,UAAU,QAAQ,UACnB;KACD,GAAI,QAAQ,sBAAsB,UAAa,EAC7C,mBAAmB,QAAQ,mBAC5B;KACF;IACF;;EAEH,KAAK,kBAAkB;GACrB,MAAM,SAAS,MAAMQ,0CACnB,QACA,UAAU,OAAO,QAClB,CAAC,UAAU,UAAU,MAAM,GAAG;AAC/B,UAAO;IACL,iBAAiBR;IACjB,QAAQ,UAAU;IAClB,QAAQ,EAAE,QAAQ,OAAO,OAAO,IAAI,kBAAkB,EAAE;IACzD;;EAEH,KAAK,mBAAmB;GACtB,MAAM,WAAW,MAAMS,iDACrB,QACA,UAAU,OAAO,QAAQ,IACzB,UAAU,MAAM,GACjB;AACD,UAAO;IACL,iBAAiBT;IACjB,QAAQ,UAAU;IAClB,UAAU,mBAAmB,SAAS;IACvC;;EAEH,KAAK,iBAAiB;GACpB,MAAM,SAAS,MAAMU,gDACnB,QACA,UAAU,MAAM,GACjB;AACD,UAAO;IACL,iBAAiBV;IACjB,QAAQ,UAAU;IAClB,WAAW,OAAO,MAAM,IAAI,mBAAmB;IAC/C,MAAM,EAAE,GAAG,OAAO,MAAM;IACxB,WAAW,OAAO;IACnB;;EAEH,KAAK,gBAAgB;GACnB,MAAM,WAAW,MAAMW,8CACrB,QACA,UAAU,OAAO,WAClB;AACD,UAAO;IACL,iBAAiBX;IACjB,QAAQ,UAAU;IAClB,UAAU,WAAW,mBAAmB,SAAS,GAAG;IACrD;;EAEH,KAAK,2BAA2B;GAC9B,MAAM,WAAW,MAAMY,yDACrB,QACA,UAAU,OAAO,UACjB,UAAU,MAAM,GAAG,UACpB;AACD,UAAO;IACL,iBAAiBZ;IACjB,QAAQ,UAAU;IAClB,UAAU,mBAAmB,SAAS;IACvC;;EAEH,KAAK;AACH,SAAMa,iDACJ,QACA,UAAU,OAAO,SAAS,GAC3B;AACD,UAAO;IACL,iBAAiBb;IACjB,QAAQ,UAAU;IAClB,QAAQ;IACT;;;;;;;AASP,MAAM,cAAc,OAIlB,iBACA,aACA,WACA,QACA,UACe;AACf,KAAI;EACF,MAAM,UAAU,MAAM,iBAAiB;AACvC,MAAI,MACF,QAAOc,uCACL,WACA,MAAM,QAAQ,aAAa,WAAW,QAAW,MAAM,CACxD;AAGH,MAAI,OACF,QAAQ,MAAM,QAAQ,aAAa,YAAY,WAAW;AACxD,UAAO,OAAOA,uCAAsB,WAAW,OAAO,CAAC;IACvD;AAGJ,SAAOA,uCACL,WACA,MAAM,QAAQ,aAAa,UAAU,CACtC;UACM,OAAO;AACd,MAAI,iBAAiBR,qCACnB,OAAM;EAER,MAAM,UAAUS,yCAAwB,MAAM;AAC9C,MAAI,SAAS;AACX,OAAI,QAAQ,WAAW,UAAU,OAC/B,OAAM,IAAIT,qCACR,gCAAgC,QAAQ,OAAO,aAAa,UAAU,SACvE;AAKH,OAAI,iBAAiBU,4BACnB,OAAM;AAER,SAAM,IAAIT,2BAAa,QAAQ;;AAEjC,MAAI,iBAAiBS,4BACnB,OAAM;EAER,MAAM,kBAAkBC,4CAA2B,MAAM;AACzD,MAAI,gBACF,OAAM,IAAIX,qCAAuB,gBAAgB,SAAS,EACxD,OAAO,OACR,CAAC;AAEJ,QAAM;;;AASV,MAAM,8BAAc,IAAI,SAAqC;AAC7D,MAAM,gBAAgB,YAAwC;CAC5D,MAAM,SAAS,YAAY,IAAI,QAAQ;AACvC,KAAI,CAAC,OACH,OAAM,IAAI,MAAM,0DAA0D;AAG5E,QAAO;;AAET,MAAM,iBAAiB,SAAqB,EAAE,SAAS,KAAK;AAC5D,MAAM,qBAAqB,KAAiB,SAAiB;AAC3D,QAAOY,gDAA+B,iBAAiB;EACrD,iBAAiBlB;EACjB,QAAQ;EACR,QAAQ,cAAc,IAAI;EAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;EAClB,CAAC;;AAEJ,MAAM,iBAAiB,SAAqB,aAAgC;CAC1E;CACA;CACD;AACD,MAAM,kBAAkB,cAAkC,EAAE,UAAU;AAEtE,MAAa,sCACX,QACA,oBAC2B;CAC3B,MAAM,MAAMmB,mCACVC,6CACA,QACA,6BACD;CACD,MAAMC,SAAiC;EACrC,GAAG;EACH,WAAW,OAAO,OAAO,EAAE,GAAG,IAAI,WAAW,CAAC;EAC9C,gBAAgB,OAAO,aAAa,YAAY;AAW9C,UAAO,oCADQ,MAAM,YAAY,iBAAiB,aAThCH,gDAChB,2BACA;IACE,iBAAiBlB;IACjB,QAAQ;IACR,QAAQ,eAAe,IAAI;IAC3B,OAAO,CAACsB,uDAAoC,QAAQ,CAAC;IACtD,CACF,CACwE,EAEhE,UACP,gBACD;;EAEH,QAAQ,OAAO,gBAAgB;AAO7B,SAAM,YAAY,iBAAiB,aANjBJ,gDAA+B,mBAAmB;IAClE,iBAAiBlB;IACjB,QAAQ;IACR,QAAQ,eAAe,IAAI;IAC3B,OAAO,EAAE;IACV,CAAC,CACwD;;EAE5D,OAAO,OAAO,aAAa,SAAS,gBAAgB;AAalD,UAAO,4BADQ,MAAM,YAAY,iBAAiB,aAXhCkB,gDAA+B,UAAU;IACzD,iBAAiBlB;IACjB,QAAQ;IACR,OAAO,CACLuB,iDAA8B;KAC5B,MAAM,QAAQ;KACd,YAAY,IAAI;KAChB,gBAAgB,QAAQ,kBAAkB,aAAa;KACxD,CAAC,CACH;IACF,CAAC,CACuE,EAChC,SAAS,gBAAgB;;EAErE;AACD,QAAO,OAAO,OAAO,OAAO;;AAG9B,MAAa,qCACX,QACA,YACA,oBAC0B;CAC1B,MAAM,MAAMJ,mCACVK,4CACA,QACA,4BACD;AACD,KAAI,IAAI,cAAc,WAAW,GAC/B,OAAM,IAAIlB,qCACR,uDACD;CAEH,MAAMmB,SAAgC;EACpC,GAAG;EACH,SAAS,OAAO,OAAO,CAAC,GAAG,IAAI,QAAQ,CAAC;EACxC,QAAQ,OAAO,aAAa,YAAY;AAOtC,SAAM,YAAY,iBAAiB,aANjBP,gDAA+B,kBAAkB;IACjE,iBAAiBlB;IACjB,QAAQ;IACR,QAAQ,cAAc,YAAY,IAAI;IACtC,OAAO,CAAC0B,wDAAqC,QAAQ,CAAC;IACvD,CAAC,CACwD;;EAE5D,MAAM,OAAO,aAAa,YAAY;GAOpC,MAAM,SAAS,MAAM,YAAY,iBAAiB,aANhCR,gDAA+B,gBAAgB;IAC/D,iBAAiBlB;IACjB,QAAQ;IACR,QAAQ,cAAc,YAAY,IAAI;IACtC,OAAO,CAAC2B,sDAAmC,QAAQ,CAAC;IACrD,CAAC,CACuE;GACzE,MAAM,EACJ,UAAU,mBACV,mBAAmB,4BACnB,GAAG,YACD;AACJ,UAAO,kCACLR,mCACEK,4CACA;IACE,GAAG;IACH,OAAO,OAAO,QAAQ;IACtB,GAAI,OAAO,QAAQ,aAAa,UAAa,EAC3C,UAAU,OAAO,QAAQ,UAC1B;IACD,GAAI,OAAO,QAAQ,sBAAsB,UAAa,EACpD,mBAAmB,OAAO,QAAQ,mBACnC;IACF,EACD,4BACD,EACD,YACA,gBACD;;EAEH,WAAW,OAAO,aAAa,YAAY;AAQzC,UAAO,EACL,SAFa,MAAM,YAAY,iBAAiB,aANhCN,gDAA+B,kBAAkB;IACjE,iBAAiBlB;IACjB,QAAQ;IACR,QAAQ,cAAc,YAAY,IAAI;IACtC,OAAO,CAAC4B,wDAAqC,QAAQ,CAAC;IACvD,CAAC,CACuE,EAExD,OAAO,OAAO,IAAIC,qCAAkB,EACpD;;EAEJ;AACD,QAAO,OAAO,OAAO,OAAO;;AAG9B,MAAa,8BACX,QACA,oBACmB;CACnB,MAAM,MAAMV,mCAAgBW,qCAAkB,QAAQ,oBAAoB;CAC1E,MAAMC,iBAA6C,OACjD,aACA,SACA,gBACG;EACH,MAAM,gBAAgBC,yDAAsC,QAAQ;EACpE,MAAM,OAAOV,uDAAoC,EAC/C,SAAS,aAAa,WAAW,IAAI,KACtC,CAAC;EACF,MAAM,kBAAkBJ,gDAA+B,mBAAmB;GACxE,iBAAiBlB;GACjB,QAAQ;GACR,QAAQ,cAAc,IAAI;GAC1B,OAAO,CAAC,cAAc;GACvB,CAAC;EAIF,MAAM,cAAciC,wCAAe,YAAY;EAM/C,MAAM,gBAAgBf,gDACpB,2BACA;GACE,iBAAiBlB;GACjB,QAAQ;GACR,QAAQ,gBAVI,MAAM,YACpB,iBACA;IAAE,GAAG;IAAa,MAAM;IAAmB,WAAWkC;IAAW,EACjE,gBACD,EAMkC,SAAS;GACxC,OAAO,CAAC,KAAK;GACd,CACF;AAWD,SAAO,oCAVO,MAAM,YAClB,iBACA;GACE,GAAG;GACH,IAAI,GAAG,YAAY,GAAG;GACtB,MAAM;GACN,WAAWA;GACZ,EACD,cACD,EAC+C,UAAU,gBAAgB;;CAM5E,MAAMC,YAAwC,aAAa,GAAG,SAAS;EACrE,MAAM,EAAE,IAAI,MAAM,SAAS,eAAeF,wCAAe,YAAY;AAErE,MAAI,WACF,QAAO,eAAe,aAAa,GAAG,KAAK;AAG7C,SAAOG,kCAAS;GAAE;GAAI;GAAM,MAAM;GAAY,QAAQ;AACpD,UAAO,eAAe,aAAa,GAAG,KAAK;IAC3C;;CAEJ,MAAMC,SAAyB;EAC7B,GAAG;EACH,WAAW,OAAO,OAAO,EAAE,GAAG,IAAI,WAAW,CAAC;EAC9C,UAAU,OAAO,OAAO,EACtB,KAAK,OAAO,aAAa,SAAS,YAAY;GAC5C,MAAM,EAAE,OAAO,aAAa,GAAG,mBAAmB,WAAW,EAAE;GAO/D,MAAM,EAAE,SAAS,UAAU,GAAG,UANXC,kDAA+B,SAAS;IACzD,GAAG;IACH,GAAI,SAAS,EACX,SAAS,eAAe,WAAWC,+CACpC;IACF,CAAC;GAQF,MAAM,SAAS,MAAM,YACnB,iBACA,aARgBrB,gDAA+B,QAAQ;IACvD,iBAAiBlB;IACjB,QAAQ;IACR,QAAQ,cAAc,IAAI;IAC1B,OAAO,CAAC,MAAM;IACf,CAAC,EAKA,QACA,SAAS;IAAE;IAAO;IAAa,CAChC;AACD,UAAO;IACL,QAAQwC,8BACNnC,gCAAa,OAAO,OAAO,QAAQ,sBAAsB,CAC1D;IACD,QAAQmC,8BACNnC,gCAAa,OAAO,OAAO,QAAQ,sBAAsB,CAC1D;IACD,UAAU,OAAO,OAAO;IACxB,QAAQ,OAAO,OAAO;IACvB;KAEJ,CAAC;EACF,OAAO,OAAO,OAAO;GACnB,OAAO,OAAO,aAAa,EAAE,MAAM,WAAW;AAgB5C,UAAM,YAAY,iBAAiB,aAfjBa,gDAA+B,eAAe;KAC9D,iBAAiBlB;KACjB,QAAQ;KACR,QAAQ,cAAc,IAAI;KAC1B,OAAO,CACL;MACE;MACA,MAAMD,gCACJ,OAAO,SAAS,WACZ,IAAI,aAAa,CAAC,OAAO,KAAK,GAC9B,KACL;MACF,CACF;KACF,CAAC,CACwD;;GAE5D,MAAM,OAAO,aAAa,SAAS;AAMjC,WAAOM,iCALQ,MAAM,YACnB,iBACA,aACA,kBAAkB,KAAK,KAAK,CAC7B,EAC0B,OAAO,MAAM,oBAAoB;;GAE/D,CAAC;EACF,WAAW,OAAO,OAAO;GACvB,OAAO,OAAO,aAAa,YAAY;AAYrC,WAAO,mCALQ,MAAM,YACnB,iBACA,aARgBa,gDAA+B,iBAAiB;KAChE,iBAAiBlB;KACjB,QAAQ;KACR,QAAQ,cAAc,IAAI;KAC1B,OAAO,CAACyC,uDAAoC,QAAQ,CAAC;KACtD,CAAC,CAKD,EAEQ,SACP,KACA,gBACD;;GAEH,MAAM,OAAO,aAAa,YAAY;IAOpC,MAAM,SAAS,MAAM,YACnB,iBACA,aARgBvB,gDAA+B,gBAAgB;KAC/D,iBAAiBlB;KACjB,QAAQ;KACR,QAAQ,cAAc,IAAI;KAC1B,OAAO,CAAC0C,sDAAmC,QAAQ,CAAC;KACrD,CAAC,CAKD;AACD,WAAO;KACL,OAAO,OAAO,UAAU,KAAK,YAC3B,kCAAkC,SAAS,KAAK,gBAAgB,CACjE;KACD,MAAM,EAAE,GAAG,OAAO,MAAM;KACxB,WAAW,OAAO;KACnB;;GAEH,KAAK,OAAO,aAAa,cAAc;IAYrC,MAAM,SAAS,MAAM,YACnB,iBACA,aARgBxB,gDAA+B,eAAe;KAC9D,iBAAiBlB;KACjB,QAAQ;KACR,QAAQ;MAAE,SAAS;MAAK,WARFmB,mCACtBwB,wCACA,WACA,qBACD;MAIqD;KACpD,OAAO,EAAE;KACV,CAAC,CAKD;AACD,WAAO,OAAO,UACV,kCACE,OAAO,SACP,KACA,gBACD,GACD;;GAEP,CAAC;EACF,WAAW,OAAO,OAAO,EACvB,QAAQ,UACT,CAAC;EACF;EACA,kBAAkB,OAAO,aAAa,YAAY;AAQhD,UAAO,4BADQ,MAAM,YAAY,iBAAiB,aANhCzB,gDAA+B,oBAAoB;IACnE,iBAAiBlB;IACjB,QAAQ;IACR,QAAQ,cAAc,IAAI;IAC1B,OAAO,CAAC4C,2DAAwC,QAAQ,CAAC;IAC1D,CAAC,CACuE,EAChC,SAAS,gBAAgB;;EAEpE,OAAO,OAAO,aAAa,YAAY;GACrC,MAAM,QAAQA,2DAAwC,EACpD,SAAS,SAAS,WAAW,IAAI,KAClC,CAAC;AAQF,UAAO,4BADQ,MAAM,YAAY,iBAAiB,aANhC1B,gDAA+B,SAAS;IACxD,iBAAiBlB;IACjB,QAAQ;IACR,QAAQ,cAAc,IAAI;IAC1B,OAAO,CAAC,MAAM;IACf,CAAC,CACuE,EAChC,SAAS,gBAAgB;;EAEpE,QAAQ,OAAO,aAAa,YAAY;GACtC,MAAM,QAAQ4C,2DAAwC,EACpD,SAAS,SAAS,WAAW,IAAI,KAClC,CAAC;AAQF,UAAO,4BADQ,MAAM,YAAY,iBAAiB,aANhC1B,gDAA+B,UAAU;IACzD,iBAAiBlB;IACjB,QAAQ;IACR,QAAQ,cAAc,IAAI;IAC1B,OAAO,CAAC,MAAM;IACf,CAAC,CACuE,EAChC,SAAS,gBAAgB;;EAEpE,SAAS,OAAO,gBAA+C;AAQ7D,WADe,MAAM,YAAY,iBAAiB,aANhCkB,gDAA+B,WAAW;IAC1D,iBAAiBlB;IACjB,QAAQ;IACR,QAAQ,cAAc,IAAI;IAC1B,OAAO,EAAE;IACV,CAAC,CACuE,EAC3D;;EAEjB;AACD,aAAY,IAAI,SAAS,aAAa,MAAM,UAAU;AACpD,SAAO,YACL,iBACA,aACA,kBAAkB,KAAK,KAAK,GAC3B,WAAW;AACV,UAAO,MAAMK,gCAAa,OAAO,OAAO,MAAM,oBAAoB,CAAC;IAEtE;GACD;AAEF,QAAO,OAAO,OAAO,OAAO;;;;;;;AAQ9B,MAAa,kBACX,SACA,aACA,MACA,UACe;AACf,QAAO,aAAa,QAAQ,CAAC,aAAa,MAAM,MAAM;;AAIxD,AAAC,OAAqC,iBAAiB,OAAO,IAC5D,sBACD;AAED,MAAa,sBACX,qBACyB;CACzB,QAAQ,OAAO,aAAa,YAAY;EAOtC,MAAM,UAAU,4BADD,MAAM,YAAY,iBAAiB,aALhCa,gDAA+B,UAAU;GACzD,iBAAiBlB;GACjB,QAAQ;GACR,OAAO,CAACuB,iDAA8B,QAAQ,CAAC;GAChD,CAAC,CACuE,EACvB,SAAS,gBAAgB;EAC3E,MAAM,EAAE,OAAOU,wCAAe,YAAY;EAE1C,MAAM,aAAa,OAAO,OAAO;GAC/B,GAAG;IACF,OAAO,eAAe,YAAY;AACjC,UAAMY,6BAAe,SAAS,GAAG,GAAG,UAAU;;GAEjD,CAAC;AACF,cAAY,IAAI,YAAY,aAAa,QAAQ,CAAC;AAElD,SAAO;;CAET,MAAM,OAAO,aAAa,YAAY;EAMpC,MAAM,SAAS,MAAM,YAAY,iBAAiB,aALhC3B,gDAA+B,QAAQ;GACvD,iBAAiBlB;GACjB,QAAQ;GACR,OAAO,CAAC8C,+CAA4B,QAAQ,CAAC;GAC9C,CAAC,CACuE;AACzE,SAAO;GACL,OAAO,OAAO,UAAU,KAAK,YAC3B,2BAA2B,SAAS,gBAAgB,CACrD;GACD,MAAM,EAAE,GAAG,OAAO,MAAM;GACxB,WAAW,OAAO;GACnB;;CAEH,KAAK,OAAO,aAAa,cAAc;EAWrC,MAAM,SAAS,MAAM,YAAY,iBAAiB,aALhC5B,gDAA+B,OAAO;GACtD,iBAAiBlB;GACjB,QAAQ;GACR,OAAO,CAAC,EAAE,WARYmB,mCACtBwB,wCACA,WACA,aACD,EAIuC,CAAC;GACxC,CAAC,CACuE;AACzE,SAAO,OAAO,UACV,2BAA2B,OAAO,SAAS,gBAAgB,GAC3D;;CAEN,WAAW;EACT,MAAM,OAAO,aAAa,YAAY;GAMpC,MAAM,SAAS,MAAM,YAAY,iBAAiB,aALhCzB,gDAA+B,iBAAiB;IAChE,iBAAiBlB;IACjB,QAAQ;IACR,OAAO,CAAC+C,uDAAoC,QAAQ,CAAC;IACtD,CAAC,CACuE;AACzE,UAAO;IACL,OAAO,OAAO,UAAU,KAAK,aAC3B,mCAAmC,UAAU,gBAAgB,CAC9D;IACD,MAAM,EAAE,GAAG,OAAO,MAAM;IACxB,WAAW,OAAO;IACnB;;EAEH,KAAK,OAAO,aAAa,eAAe;GAYtC,MAAM,SAAS,MAAM,YAAY,iBAAiB,aANhC7B,gDAA+B,gBAAgB;IAC/D,iBAAiBlB;IACjB,QAAQ;IACR,QAAQ,EAAE,YARamB,mCACvBwB,wCACA,YACA,sBACD,EAIyC;IACxC,OAAO,EAAE;IACV,CAAC,CACuE;AACzE,UAAO,OAAO,WACV,mCAAmC,OAAO,UAAU,gBAAgB,GACpE;;EAEP;CACF"}
|