@workflow/world-testing 5.0.0-beta.35 → 5.0.0-beta.36
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/dist/.well-known/workflow/v1/flow.mjs +1863 -967
- package/dist/.well-known/workflow/v1/manifest.json +354 -292
- package/dist/.well-known/workflow/v1/step.mjs +234 -53
- package/dist/src/event-limit.d.mts +2 -0
- package/dist/src/event-limit.d.mts.map +1 -0
- package/dist/src/event-limit.mjs +29 -0
- package/package.json +6 -6
|
@@ -356,6 +356,8 @@ var init_error_codes = __esm({
|
|
|
356
356
|
REPLAY_DIVERGENCE: "REPLAY_DIVERGENCE",
|
|
357
357
|
/** Run exceeded the maximum number of queue deliveries */
|
|
358
358
|
MAX_DELIVERIES_EXCEEDED: "MAX_DELIVERIES_EXCEEDED",
|
|
359
|
+
/** Run exceeded the maximum number of events per run */
|
|
360
|
+
MAX_EVENTS_EXCEEDED: "MAX_EVENTS_EXCEEDED",
|
|
359
361
|
/** Workflow replay exceeded the maximum allowed duration */
|
|
360
362
|
REPLAY_TIMEOUT: "REPLAY_TIMEOUT",
|
|
361
363
|
/** World response violated the SDK contract and cannot be retried safely */
|
|
@@ -16713,6 +16715,7 @@ var init_events = __esm({
|
|
|
16713
16715
|
correlationId: external_exports.string(),
|
|
16714
16716
|
eventData: external_exports.object({
|
|
16715
16717
|
token: external_exports.string(),
|
|
16718
|
+
tokenRetentionUntil: external_exports.coerce.date().optional(),
|
|
16716
16719
|
metadata: SerializedDataSchema.optional(),
|
|
16717
16720
|
isWebhook: external_exports.boolean().optional(),
|
|
16718
16721
|
isSystem: external_exports.boolean().optional()
|
|
@@ -16882,6 +16885,9 @@ var init_events = __esm({
|
|
|
16882
16885
|
});
|
|
16883
16886
|
|
|
16884
16887
|
// ../world/dist/runs.js
|
|
16888
|
+
function isTerminalWorkflowRunStatus(status) {
|
|
16889
|
+
return TERMINAL_WORKFLOW_RUN_STATUSES.includes(status);
|
|
16890
|
+
}
|
|
16885
16891
|
var WorkflowRunStatusSchema, TerminalWorkflowRunStatusSchema, TERMINAL_WORKFLOW_RUN_STATUSES, WorkflowRunBaseSchema, WorkflowRunSchema;
|
|
16886
16892
|
var init_runs = __esm({
|
|
16887
16893
|
"../world/dist/runs.js"() {
|
|
@@ -16901,6 +16907,7 @@ var init_runs = __esm({
|
|
|
16901
16907
|
"cancelled"
|
|
16902
16908
|
]);
|
|
16903
16909
|
TERMINAL_WORKFLOW_RUN_STATUSES = TerminalWorkflowRunStatusSchema.options;
|
|
16910
|
+
__name(isTerminalWorkflowRunStatus, "isTerminalWorkflowRunStatus");
|
|
16904
16911
|
WorkflowRunBaseSchema = external_exports.object({
|
|
16905
16912
|
runId: external_exports.string(),
|
|
16906
16913
|
status: WorkflowRunStatusSchema,
|
|
@@ -18323,6 +18330,28 @@ var init_devalue = __esm({
|
|
|
18323
18330
|
}
|
|
18324
18331
|
});
|
|
18325
18332
|
|
|
18333
|
+
// ../core/dist/symbols.js
|
|
18334
|
+
var STABLE_ULID, STREAM_NAME_SYMBOL, STREAM_TYPE_SYMBOL, STREAM_FRAMING_SYMBOL, STREAM_SERVER_RUN_ID_SYMBOL, STREAM_SERVER_DEPLOYMENT_ID_SYMBOL, STREAM_WRITE_BATCH_SYMBOL, BODY_INIT_SYMBOL, WEBHOOK_RESPONSE_WRITABLE, WORKFLOW_CLASS_REGISTRY, ABORT_STREAM_NAME, ABORT_HOOK_TOKEN, ABORT_LISTENER_ATTACHED, ABORT_READER_CANCEL;
|
|
18335
|
+
var init_symbols = __esm({
|
|
18336
|
+
"../core/dist/symbols.js"() {
|
|
18337
|
+
"use strict";
|
|
18338
|
+
STABLE_ULID = /* @__PURE__ */ Symbol.for("WORKFLOW_STABLE_ULID");
|
|
18339
|
+
STREAM_NAME_SYMBOL = /* @__PURE__ */ Symbol.for("WORKFLOW_STREAM_NAME");
|
|
18340
|
+
STREAM_TYPE_SYMBOL = /* @__PURE__ */ Symbol.for("WORKFLOW_STREAM_TYPE");
|
|
18341
|
+
STREAM_FRAMING_SYMBOL = /* @__PURE__ */ Symbol.for("WORKFLOW_STREAM_FRAMING");
|
|
18342
|
+
STREAM_SERVER_RUN_ID_SYMBOL = /* @__PURE__ */ Symbol.for("WORKFLOW_STREAM_SERVER_RUN_ID");
|
|
18343
|
+
STREAM_SERVER_DEPLOYMENT_ID_SYMBOL = /* @__PURE__ */ Symbol.for("WORKFLOW_STREAM_SERVER_DEPLOYMENT_ID");
|
|
18344
|
+
STREAM_WRITE_BATCH_SYMBOL = /* @__PURE__ */ Symbol.for("WORKFLOW_STREAM_WRITE_BATCH");
|
|
18345
|
+
BODY_INIT_SYMBOL = /* @__PURE__ */ Symbol.for("BODY_INIT");
|
|
18346
|
+
WEBHOOK_RESPONSE_WRITABLE = /* @__PURE__ */ Symbol.for("WEBHOOK_RESPONSE_WRITABLE");
|
|
18347
|
+
WORKFLOW_CLASS_REGISTRY = /* @__PURE__ */ Symbol.for("workflow-class-registry");
|
|
18348
|
+
ABORT_STREAM_NAME = /* @__PURE__ */ Symbol.for("WORKFLOW_ABORT_STREAM_NAME");
|
|
18349
|
+
ABORT_HOOK_TOKEN = /* @__PURE__ */ Symbol.for("WORKFLOW_ABORT_HOOK_TOKEN");
|
|
18350
|
+
ABORT_LISTENER_ATTACHED = /* @__PURE__ */ Symbol.for("WORKFLOW_ABORT_LISTENER_ATTACHED");
|
|
18351
|
+
ABORT_READER_CANCEL = /* @__PURE__ */ Symbol.for("WORKFLOW_ABORT_READER_CANCEL");
|
|
18352
|
+
}
|
|
18353
|
+
});
|
|
18354
|
+
|
|
18326
18355
|
// ../core/dist/flushable-stream.js
|
|
18327
18356
|
function createFlushableState() {
|
|
18328
18357
|
const state = {
|
|
@@ -18403,7 +18432,11 @@ function pollReadableLock(readable, state) {
|
|
|
18403
18432
|
}, getLockPollIntervalMs());
|
|
18404
18433
|
state.readablePollingInterval = intervalId;
|
|
18405
18434
|
}
|
|
18406
|
-
|
|
18435
|
+
function flushablePipe(source, sink, state) {
|
|
18436
|
+
const batchWrite = sink[STREAM_WRITE_BATCH_SYMBOL];
|
|
18437
|
+
return typeof batchWrite === "function" ? flushablePipeCoalescing(source, sink, state, batchWrite) : flushablePipePerChunk(source, sink, state);
|
|
18438
|
+
}
|
|
18439
|
+
async function flushablePipePerChunk(source, sink, state) {
|
|
18407
18440
|
const reader = source.getReader();
|
|
18408
18441
|
const writer = sink.getWriter();
|
|
18409
18442
|
let cancelReason;
|
|
@@ -18452,13 +18485,142 @@ async function flushablePipe(source, sink, state) {
|
|
|
18452
18485
|
writer.releaseLock();
|
|
18453
18486
|
}
|
|
18454
18487
|
}
|
|
18455
|
-
|
|
18488
|
+
function wake(ctx, which) {
|
|
18489
|
+
const resolve = ctx[which];
|
|
18490
|
+
if (resolve) {
|
|
18491
|
+
ctx[which] = null;
|
|
18492
|
+
resolve();
|
|
18493
|
+
}
|
|
18494
|
+
}
|
|
18495
|
+
function nextBatchSize(ctx) {
|
|
18496
|
+
let count2 = 0;
|
|
18497
|
+
let bytes = 0;
|
|
18498
|
+
for (const chunk of ctx.queue) {
|
|
18499
|
+
if (count2 >= ctx.maxChunksPerBatch) break;
|
|
18500
|
+
if (count2 > 0 && bytes + chunk.byteLength > ctx.maxBytesPerBatch) break;
|
|
18501
|
+
count2++;
|
|
18502
|
+
bytes += chunk.byteLength;
|
|
18503
|
+
}
|
|
18504
|
+
return count2;
|
|
18505
|
+
}
|
|
18506
|
+
async function drainBatches(ctx) {
|
|
18507
|
+
while (true) {
|
|
18508
|
+
if (ctx.queue.length === 0) {
|
|
18509
|
+
if (ctx.sourceDone) return;
|
|
18510
|
+
await new Promise((resolve) => {
|
|
18511
|
+
ctx.wakeConsumer = resolve;
|
|
18512
|
+
});
|
|
18513
|
+
continue;
|
|
18514
|
+
}
|
|
18515
|
+
const count2 = nextBatchSize(ctx);
|
|
18516
|
+
const batch = ctx.queue.slice(0, count2);
|
|
18517
|
+
ctx.queue = ctx.queue.slice(count2);
|
|
18518
|
+
await ctx.batchWrite(batch);
|
|
18519
|
+
ctx.state.pendingOps -= batch.length;
|
|
18520
|
+
wake(ctx, "wakeProducer");
|
|
18521
|
+
}
|
|
18522
|
+
}
|
|
18523
|
+
function readNextChunk(reader, writer, consumer) {
|
|
18524
|
+
return Promise.race([
|
|
18525
|
+
reader.read(),
|
|
18526
|
+
writer.closed.then(() => {
|
|
18527
|
+
throw new WorkflowRuntimeError("Writable stream closed prematurely");
|
|
18528
|
+
}),
|
|
18529
|
+
consumer.then(() => {
|
|
18530
|
+
throw new WorkflowRuntimeError("Stream consumer ended prematurely");
|
|
18531
|
+
}, (err) => {
|
|
18532
|
+
throw err;
|
|
18533
|
+
})
|
|
18534
|
+
]);
|
|
18535
|
+
}
|
|
18536
|
+
async function awaitBackpressureRelief(ctx, consumer, maxInflight) {
|
|
18537
|
+
if (ctx.state.pendingOps < maxInflight) return;
|
|
18538
|
+
await Promise.race([
|
|
18539
|
+
new Promise((resolve) => {
|
|
18540
|
+
ctx.wakeProducer = resolve;
|
|
18541
|
+
}),
|
|
18542
|
+
consumer.then(() => void 0, () => void 0)
|
|
18543
|
+
]);
|
|
18544
|
+
}
|
|
18545
|
+
async function flushablePipeCoalescing(source, sink, state, batchWrite) {
|
|
18546
|
+
const reader = source.getReader();
|
|
18547
|
+
const writer = sink.getWriter();
|
|
18548
|
+
const maxInflight = getMaxInflightChunks();
|
|
18549
|
+
let cancelReason;
|
|
18550
|
+
const ctx = {
|
|
18551
|
+
state,
|
|
18552
|
+
batchWrite,
|
|
18553
|
+
queue: [],
|
|
18554
|
+
sourceDone: false,
|
|
18555
|
+
wakeConsumer: null,
|
|
18556
|
+
wakeProducer: null,
|
|
18557
|
+
maxChunksPerBatch: getMaxChunksPerBatch(),
|
|
18558
|
+
maxBytesPerBatch: getMaxBytesPerBatch()
|
|
18559
|
+
};
|
|
18560
|
+
const consumer = drainBatches(ctx);
|
|
18561
|
+
try {
|
|
18562
|
+
while (!state.streamEnded) {
|
|
18563
|
+
const readResult = await readNextChunk(reader, writer, consumer);
|
|
18564
|
+
if (state.streamEnded) return;
|
|
18565
|
+
if (readResult.done) {
|
|
18566
|
+
ctx.sourceDone = true;
|
|
18567
|
+
wake(ctx, "wakeConsumer");
|
|
18568
|
+
await consumer;
|
|
18569
|
+
state.streamEnded = true;
|
|
18570
|
+
await writer.close();
|
|
18571
|
+
if (!state.doneResolved) {
|
|
18572
|
+
state.doneResolved = true;
|
|
18573
|
+
state.resolve();
|
|
18574
|
+
}
|
|
18575
|
+
return;
|
|
18576
|
+
}
|
|
18577
|
+
ctx.queue.push(readResult.value);
|
|
18578
|
+
state.pendingOps++;
|
|
18579
|
+
wake(ctx, "wakeConsumer");
|
|
18580
|
+
await awaitBackpressureRelief(ctx, consumer, maxInflight);
|
|
18581
|
+
}
|
|
18582
|
+
} catch (err) {
|
|
18583
|
+
state.streamEnded = true;
|
|
18584
|
+
cancelReason = err;
|
|
18585
|
+
ctx.sourceDone = true;
|
|
18586
|
+
wake(ctx, "wakeConsumer");
|
|
18587
|
+
await consumer.catch(() => {
|
|
18588
|
+
});
|
|
18589
|
+
if (!state.doneResolved) {
|
|
18590
|
+
state.doneResolved = true;
|
|
18591
|
+
state.reject(err);
|
|
18592
|
+
}
|
|
18593
|
+
throw err;
|
|
18594
|
+
} finally {
|
|
18595
|
+
reader.cancel(cancelReason).catch(() => {
|
|
18596
|
+
});
|
|
18597
|
+
reader.releaseLock();
|
|
18598
|
+
writer.releaseLock();
|
|
18599
|
+
}
|
|
18600
|
+
}
|
|
18601
|
+
var MAX_INFLIGHT_CHUNKS, getMaxInflightChunks, MAX_CHUNKS_PER_BATCH, getMaxChunksPerBatch, MAX_BYTES_PER_BATCH, getMaxBytesPerBatch, LOCK_POLL_INTERVAL_MS, getLockPollIntervalMs;
|
|
18456
18602
|
var init_flushable_stream = __esm({
|
|
18457
18603
|
"../core/dist/flushable-stream.js"() {
|
|
18458
18604
|
"use strict";
|
|
18459
18605
|
init_dist2();
|
|
18460
18606
|
init_dist();
|
|
18461
18607
|
init_dist4();
|
|
18608
|
+
init_symbols();
|
|
18609
|
+
MAX_INFLIGHT_CHUNKS = 1e3;
|
|
18610
|
+
getMaxInflightChunks = /* @__PURE__ */ __name(() => envNumber("WORKFLOW_STREAM_MAX_INFLIGHT_CHUNKS", MAX_INFLIGHT_CHUNKS, {
|
|
18611
|
+
integer: true,
|
|
18612
|
+
min: 1
|
|
18613
|
+
}), "getMaxInflightChunks");
|
|
18614
|
+
MAX_CHUNKS_PER_BATCH = 1e3;
|
|
18615
|
+
getMaxChunksPerBatch = /* @__PURE__ */ __name(() => envNumber("WORKFLOW_STREAM_MAX_CHUNKS_PER_BATCH", MAX_CHUNKS_PER_BATCH, {
|
|
18616
|
+
integer: true,
|
|
18617
|
+
min: 1
|
|
18618
|
+
}), "getMaxChunksPerBatch");
|
|
18619
|
+
MAX_BYTES_PER_BATCH = 1024 * 1024;
|
|
18620
|
+
getMaxBytesPerBatch = /* @__PURE__ */ __name(() => envNumber("WORKFLOW_STREAM_MAX_BYTES_PER_BATCH", MAX_BYTES_PER_BATCH, {
|
|
18621
|
+
integer: true,
|
|
18622
|
+
min: 1
|
|
18623
|
+
}), "getMaxBytesPerBatch");
|
|
18462
18624
|
LOCK_POLL_INTERVAL_MS = 10;
|
|
18463
18625
|
getLockPollIntervalMs = /* @__PURE__ */ __name(() => envNumber("WORKFLOW_LOCK_POLL_INTERVAL_MS", LOCK_POLL_INTERVAL_MS, {
|
|
18464
18626
|
integer: true,
|
|
@@ -18470,6 +18632,13 @@ var init_flushable_stream = __esm({
|
|
|
18470
18632
|
__name(pollWritableLock, "pollWritableLock");
|
|
18471
18633
|
__name(pollReadableLock, "pollReadableLock");
|
|
18472
18634
|
__name(flushablePipe, "flushablePipe");
|
|
18635
|
+
__name(flushablePipePerChunk, "flushablePipePerChunk");
|
|
18636
|
+
__name(wake, "wake");
|
|
18637
|
+
__name(nextBatchSize, "nextBatchSize");
|
|
18638
|
+
__name(drainBatches, "drainBatches");
|
|
18639
|
+
__name(readNextChunk, "readNextChunk");
|
|
18640
|
+
__name(awaitBackpressureRelief, "awaitBackpressureRelief");
|
|
18641
|
+
__name(flushablePipeCoalescing, "flushablePipeCoalescing");
|
|
18473
18642
|
}
|
|
18474
18643
|
});
|
|
18475
18644
|
|
|
@@ -18598,27 +18767,6 @@ var init_get_world_lazy = __esm({
|
|
|
18598
18767
|
}
|
|
18599
18768
|
});
|
|
18600
18769
|
|
|
18601
|
-
// ../core/dist/symbols.js
|
|
18602
|
-
var STABLE_ULID, STREAM_NAME_SYMBOL, STREAM_TYPE_SYMBOL, STREAM_FRAMING_SYMBOL, STREAM_SERVER_RUN_ID_SYMBOL, STREAM_SERVER_DEPLOYMENT_ID_SYMBOL, BODY_INIT_SYMBOL, WEBHOOK_RESPONSE_WRITABLE, WORKFLOW_CLASS_REGISTRY, ABORT_STREAM_NAME, ABORT_HOOK_TOKEN, ABORT_LISTENER_ATTACHED, ABORT_READER_CANCEL;
|
|
18603
|
-
var init_symbols = __esm({
|
|
18604
|
-
"../core/dist/symbols.js"() {
|
|
18605
|
-
"use strict";
|
|
18606
|
-
STABLE_ULID = /* @__PURE__ */ Symbol.for("WORKFLOW_STABLE_ULID");
|
|
18607
|
-
STREAM_NAME_SYMBOL = /* @__PURE__ */ Symbol.for("WORKFLOW_STREAM_NAME");
|
|
18608
|
-
STREAM_TYPE_SYMBOL = /* @__PURE__ */ Symbol.for("WORKFLOW_STREAM_TYPE");
|
|
18609
|
-
STREAM_FRAMING_SYMBOL = /* @__PURE__ */ Symbol.for("WORKFLOW_STREAM_FRAMING");
|
|
18610
|
-
STREAM_SERVER_RUN_ID_SYMBOL = /* @__PURE__ */ Symbol.for("WORKFLOW_STREAM_SERVER_RUN_ID");
|
|
18611
|
-
STREAM_SERVER_DEPLOYMENT_ID_SYMBOL = /* @__PURE__ */ Symbol.for("WORKFLOW_STREAM_SERVER_DEPLOYMENT_ID");
|
|
18612
|
-
BODY_INIT_SYMBOL = /* @__PURE__ */ Symbol.for("BODY_INIT");
|
|
18613
|
-
WEBHOOK_RESPONSE_WRITABLE = /* @__PURE__ */ Symbol.for("WEBHOOK_RESPONSE_WRITABLE");
|
|
18614
|
-
WORKFLOW_CLASS_REGISTRY = /* @__PURE__ */ Symbol.for("workflow-class-registry");
|
|
18615
|
-
ABORT_STREAM_NAME = /* @__PURE__ */ Symbol.for("WORKFLOW_ABORT_STREAM_NAME");
|
|
18616
|
-
ABORT_HOOK_TOKEN = /* @__PURE__ */ Symbol.for("WORKFLOW_ABORT_HOOK_TOKEN");
|
|
18617
|
-
ABORT_LISTENER_ATTACHED = /* @__PURE__ */ Symbol.for("WORKFLOW_ABORT_LISTENER_ATTACHED");
|
|
18618
|
-
ABORT_READER_CANCEL = /* @__PURE__ */ Symbol.for("WORKFLOW_ABORT_READER_CANCEL");
|
|
18619
|
-
}
|
|
18620
|
-
});
|
|
18621
|
-
|
|
18622
18770
|
// ../core/dist/class-serialization.js
|
|
18623
18771
|
function getRegistry(global2 = globalThis) {
|
|
18624
18772
|
const g = global2;
|
|
@@ -24492,7 +24640,7 @@ var version2;
|
|
|
24492
24640
|
var init_version = __esm({
|
|
24493
24641
|
"../core/dist/version.js"() {
|
|
24494
24642
|
"use strict";
|
|
24495
|
-
version2 = "5.0.0-beta.
|
|
24643
|
+
version2 = "5.0.0-beta.36";
|
|
24496
24644
|
}
|
|
24497
24645
|
});
|
|
24498
24646
|
|
|
@@ -25833,18 +25981,24 @@ __export(resume_hook_exports, {
|
|
|
25833
25981
|
resumeHook: () => resumeHook,
|
|
25834
25982
|
resumeWebhook: () => resumeWebhook
|
|
25835
25983
|
});
|
|
25836
|
-
async function
|
|
25984
|
+
async function getHookAndRun(token) {
|
|
25837
25985
|
const world = await getWorldLazy();
|
|
25838
25986
|
const hook = await world.hooks.getByToken(token);
|
|
25839
25987
|
const run2 = await world.runs.get(hook.runId);
|
|
25840
|
-
|
|
25988
|
+
return {
|
|
25989
|
+
hook,
|
|
25990
|
+
run: run2
|
|
25991
|
+
};
|
|
25992
|
+
}
|
|
25993
|
+
async function getHookByTokenWithKey(token) {
|
|
25994
|
+
const { hook, run: run2 } = await getHookAndRun(token);
|
|
25995
|
+
const rawKey = await (await getWorldLazy()).getEncryptionKeyForRun?.(run2);
|
|
25841
25996
|
const encryptionKey = rawKey ? await importKey(rawKey) : void 0;
|
|
25842
25997
|
if (typeof hook.metadata !== "undefined") {
|
|
25843
25998
|
hook.metadata = await hydrateStepArguments(hook.metadata, hook.runId, encryptionKey);
|
|
25844
25999
|
}
|
|
25845
26000
|
return {
|
|
25846
26001
|
hook,
|
|
25847
|
-
run: run2,
|
|
25848
26002
|
encryptionKey
|
|
25849
26003
|
};
|
|
25850
26004
|
}
|
|
@@ -25859,27 +26013,27 @@ async function resumeHook(tokenOrHook, payload, encryptionKeyOverride) {
|
|
|
25859
26013
|
try {
|
|
25860
26014
|
let hook;
|
|
25861
26015
|
let workflowRun;
|
|
25862
|
-
let encryptionKey;
|
|
25863
26016
|
if (typeof tokenOrHook === "string") {
|
|
25864
|
-
const result = await
|
|
26017
|
+
const result = await getHookAndRun(tokenOrHook);
|
|
25865
26018
|
hook = result.hook;
|
|
25866
26019
|
workflowRun = result.run;
|
|
25867
|
-
encryptionKey = encryptionKeyOverride ?? result.encryptionKey;
|
|
25868
26020
|
} else {
|
|
25869
26021
|
hook = tokenOrHook;
|
|
25870
26022
|
workflowRun = await world.runs.get(hook.runId);
|
|
25871
|
-
if (encryptionKeyOverride) {
|
|
25872
|
-
encryptionKey = encryptionKeyOverride;
|
|
25873
|
-
} else {
|
|
25874
|
-
const rawKey = await world.getEncryptionKeyForRun?.(workflowRun);
|
|
25875
|
-
encryptionKey = rawKey ? await importKey(rawKey) : void 0;
|
|
25876
|
-
}
|
|
25877
26023
|
}
|
|
25878
26024
|
span?.setAttributes({
|
|
25879
26025
|
...HookToken(hook.token),
|
|
25880
26026
|
...HookId(hook.hookId),
|
|
25881
26027
|
...WorkflowRunId(hook.runId)
|
|
25882
26028
|
});
|
|
26029
|
+
if (isTerminalWorkflowRunStatus(workflowRun.status)) {
|
|
26030
|
+
throw new HookNotFoundError(hook.token);
|
|
26031
|
+
}
|
|
26032
|
+
let encryptionKey = encryptionKeyOverride;
|
|
26033
|
+
if (!encryptionKey) {
|
|
26034
|
+
const rawKey = await world.getEncryptionKeyForRun?.(workflowRun);
|
|
26035
|
+
encryptionKey = rawKey ? await importKey(rawKey) : void 0;
|
|
26036
|
+
}
|
|
25883
26037
|
const rawVersion = workflowRun.executionContext?.workflowCoreVersion;
|
|
25884
26038
|
const capabilities = getRunCapabilities(typeof rawVersion === "string" ? rawVersion : void 0);
|
|
25885
26039
|
if (!capabilities.supportedFormats.has(SerializationFormat.ENCRYPTED)) {
|
|
@@ -25991,6 +26145,7 @@ var init_resume_hook = __esm({
|
|
|
25991
26145
|
init_get_world_lazy();
|
|
25992
26146
|
init_helpers();
|
|
25993
26147
|
init_wait_until();
|
|
26148
|
+
__name(getHookAndRun, "getHookAndRun");
|
|
25994
26149
|
__name(getHookByTokenWithKey, "getHookByTokenWithKey");
|
|
25995
26150
|
__name(getHookByToken, "getHookByToken");
|
|
25996
26151
|
__name(resumeHook, "resumeHook");
|
|
@@ -27093,9 +27248,6 @@ function getStepRevivers(global2 = globalThis, ops, runId, cryptoKey, deployment
|
|
|
27093
27248
|
AbortSignal: /* @__PURE__ */ __name((value) => reviveAbortSignal(value, ops, runId), "AbortSignal")
|
|
27094
27249
|
};
|
|
27095
27250
|
}
|
|
27096
|
-
async function maybeDecrypt(data, key) {
|
|
27097
|
-
return decrypt2(data, key);
|
|
27098
|
-
}
|
|
27099
27251
|
async function dehydrateWorkflowArguments(value, runId, key, ops = [], global2 = globalThis, v1Compat = false, framedByteStreams = false, compression = false) {
|
|
27100
27252
|
if (v1Compat) {
|
|
27101
27253
|
const str = stringify(value, getExternalReducers(global2, ops, runId, key, framedByteStreams));
|
|
@@ -27196,7 +27348,7 @@ async function dehydrateStepReturnValue(value, runId, key, ops = [], global2 = g
|
|
|
27196
27348
|
}
|
|
27197
27349
|
async function hydrateRunError(value, runId, key, ops = [], global2 = globalThis, extraRevivers = {}) {
|
|
27198
27350
|
const compressionStats = {};
|
|
27199
|
-
const decrypted = await decompress(await
|
|
27351
|
+
const decrypted = await decompress(await decrypt2(value, key), compressionStats);
|
|
27200
27352
|
await recordCompression(compressionStats, "deserialize");
|
|
27201
27353
|
if (!(decrypted instanceof Uint8Array)) {
|
|
27202
27354
|
return unflatten(decrypted, {
|
|
@@ -27473,6 +27625,16 @@ var init_serialization2 = __esm({
|
|
|
27473
27625
|
for (const w of waiters) w.reject(abortError);
|
|
27474
27626
|
}
|
|
27475
27627
|
});
|
|
27628
|
+
Object.defineProperty(this, STREAM_WRITE_BATCH_SYMBOL, {
|
|
27629
|
+
value: /* @__PURE__ */ __name(async (chunks) => {
|
|
27630
|
+
if (chunks.length === 0) return;
|
|
27631
|
+
if (batchStartAt === void 0) batchStartAt = Date.now();
|
|
27632
|
+
for (const chunk of chunks) buffer2.push(chunk);
|
|
27633
|
+
await flush();
|
|
27634
|
+
}, "value"),
|
|
27635
|
+
enumerable: false,
|
|
27636
|
+
writable: false
|
|
27637
|
+
});
|
|
27476
27638
|
}
|
|
27477
27639
|
};
|
|
27478
27640
|
__name(getAllBaseReducers, "getAllBaseReducers");
|
|
@@ -27491,7 +27653,6 @@ var init_serialization2 = __esm({
|
|
|
27491
27653
|
__name(getForwardedWritableEncryptionKey, "getForwardedWritableEncryptionKey");
|
|
27492
27654
|
__name(getExternalRevivers, "getExternalRevivers");
|
|
27493
27655
|
__name(getStepRevivers, "getStepRevivers");
|
|
27494
|
-
__name(maybeDecrypt, "maybeDecrypt");
|
|
27495
27656
|
__name(dehydrateWorkflowArguments, "dehydrateWorkflowArguments");
|
|
27496
27657
|
__name(hydrateWorkflowReturnValue, "hydrateWorkflowReturnValue");
|
|
27497
27658
|
__name(dehydrateStepArguments, "dehydrateStepArguments");
|
|
@@ -27921,7 +28082,7 @@ __name(start, "start");
|
|
|
27921
28082
|
value: "start",
|
|
27922
28083
|
configurable: true
|
|
27923
28084
|
});
|
|
27924
|
-
})(start, "step//@workflow/core/runtime/start@5.0.0-beta.
|
|
28085
|
+
})(start, "step//@workflow/core/runtime/start@5.0.0-beta.36//start");
|
|
27925
28086
|
|
|
27926
28087
|
// ../core/dist/runtime/runs.js
|
|
27927
28088
|
async function wakeUpRun(world, runId, options) {
|
|
@@ -28257,7 +28418,7 @@ var Run = class _Run {
|
|
|
28257
28418
|
value: "wakeUp",
|
|
28258
28419
|
configurable: true
|
|
28259
28420
|
});
|
|
28260
|
-
})(Run.prototype["wakeUp"], "step//@workflow/core/runtime/run@5.0.0-beta.
|
|
28421
|
+
})(Run.prototype["wakeUp"], "step//@workflow/core/runtime/run@5.0.0-beta.36//Run#wakeUp");
|
|
28261
28422
|
(function(__wf_fn, __wf_id) {
|
|
28262
28423
|
var __wf_sym = /* @__PURE__ */ Symbol.for("@workflow/core//registeredSteps"), __wf_reg = globalThis[__wf_sym] || (globalThis[__wf_sym] = /* @__PURE__ */ new Map());
|
|
28263
28424
|
__wf_reg.set(__wf_id, __wf_fn);
|
|
@@ -28266,7 +28427,7 @@ var Run = class _Run {
|
|
|
28266
28427
|
value: "cancel",
|
|
28267
28428
|
configurable: true
|
|
28268
28429
|
});
|
|
28269
|
-
})(Run.prototype["cancel"], "step//@workflow/core/runtime/run@5.0.0-beta.
|
|
28430
|
+
})(Run.prototype["cancel"], "step//@workflow/core/runtime/run@5.0.0-beta.36//Run#cancel");
|
|
28270
28431
|
(function(__wf_fn, __wf_id) {
|
|
28271
28432
|
var __wf_sym = /* @__PURE__ */ Symbol.for("@workflow/core//registeredSteps"), __wf_reg = globalThis[__wf_sym] || (globalThis[__wf_sym] = /* @__PURE__ */ new Map());
|
|
28272
28433
|
__wf_reg.set(__wf_id, __wf_fn);
|
|
@@ -28275,7 +28436,7 @@ var Run = class _Run {
|
|
|
28275
28436
|
value: "getReadable",
|
|
28276
28437
|
configurable: true
|
|
28277
28438
|
});
|
|
28278
|
-
})(Run.prototype["getReadable"], "step//@workflow/core/runtime/run@5.0.0-beta.
|
|
28439
|
+
})(Run.prototype["getReadable"], "step//@workflow/core/runtime/run@5.0.0-beta.36//Run#getReadable");
|
|
28279
28440
|
(function(__wf_fn, __wf_id) {
|
|
28280
28441
|
var __wf_sym = /* @__PURE__ */ Symbol.for("@workflow/core//registeredSteps"), __wf_reg = globalThis[__wf_sym] || (globalThis[__wf_sym] = /* @__PURE__ */ new Map());
|
|
28281
28442
|
__wf_reg.set(__wf_id, __wf_fn);
|
|
@@ -28284,7 +28445,7 @@ var Run = class _Run {
|
|
|
28284
28445
|
value: "exists",
|
|
28285
28446
|
configurable: true
|
|
28286
28447
|
});
|
|
28287
|
-
})(Object.getOwnPropertyDescriptor(Run.prototype, "exists").get, "step//@workflow/core/runtime/run@5.0.0-beta.
|
|
28448
|
+
})(Object.getOwnPropertyDescriptor(Run.prototype, "exists").get, "step//@workflow/core/runtime/run@5.0.0-beta.36//Run#exists");
|
|
28288
28449
|
(function(__wf_fn, __wf_id) {
|
|
28289
28450
|
var __wf_sym = /* @__PURE__ */ Symbol.for("@workflow/core//registeredSteps"), __wf_reg = globalThis[__wf_sym] || (globalThis[__wf_sym] = /* @__PURE__ */ new Map());
|
|
28290
28451
|
__wf_reg.set(__wf_id, __wf_fn);
|
|
@@ -28293,7 +28454,7 @@ var Run = class _Run {
|
|
|
28293
28454
|
value: "status",
|
|
28294
28455
|
configurable: true
|
|
28295
28456
|
});
|
|
28296
|
-
})(Object.getOwnPropertyDescriptor(Run.prototype, "status").get, "step//@workflow/core/runtime/run@5.0.0-beta.
|
|
28457
|
+
})(Object.getOwnPropertyDescriptor(Run.prototype, "status").get, "step//@workflow/core/runtime/run@5.0.0-beta.36//Run#status");
|
|
28297
28458
|
(function(__wf_fn, __wf_id) {
|
|
28298
28459
|
var __wf_sym = /* @__PURE__ */ Symbol.for("@workflow/core//registeredSteps"), __wf_reg = globalThis[__wf_sym] || (globalThis[__wf_sym] = /* @__PURE__ */ new Map());
|
|
28299
28460
|
__wf_reg.set(__wf_id, __wf_fn);
|
|
@@ -28302,7 +28463,7 @@ var Run = class _Run {
|
|
|
28302
28463
|
value: "returnValue",
|
|
28303
28464
|
configurable: true
|
|
28304
28465
|
});
|
|
28305
|
-
})(Object.getOwnPropertyDescriptor(Run.prototype, "returnValue").get, "step//@workflow/core/runtime/run@5.0.0-beta.
|
|
28466
|
+
})(Object.getOwnPropertyDescriptor(Run.prototype, "returnValue").get, "step//@workflow/core/runtime/run@5.0.0-beta.36//Run#returnValue");
|
|
28306
28467
|
(function(__wf_fn, __wf_id) {
|
|
28307
28468
|
var __wf_sym = /* @__PURE__ */ Symbol.for("@workflow/core//registeredSteps"), __wf_reg = globalThis[__wf_sym] || (globalThis[__wf_sym] = /* @__PURE__ */ new Map());
|
|
28308
28469
|
__wf_reg.set(__wf_id, __wf_fn);
|
|
@@ -28311,7 +28472,7 @@ var Run = class _Run {
|
|
|
28311
28472
|
value: "workflowName",
|
|
28312
28473
|
configurable: true
|
|
28313
28474
|
});
|
|
28314
|
-
})(Object.getOwnPropertyDescriptor(Run.prototype, "workflowName").get, "step//@workflow/core/runtime/run@5.0.0-beta.
|
|
28475
|
+
})(Object.getOwnPropertyDescriptor(Run.prototype, "workflowName").get, "step//@workflow/core/runtime/run@5.0.0-beta.36//Run#workflowName");
|
|
28315
28476
|
(function(__wf_fn, __wf_id) {
|
|
28316
28477
|
var __wf_sym = /* @__PURE__ */ Symbol.for("@workflow/core//registeredSteps"), __wf_reg = globalThis[__wf_sym] || (globalThis[__wf_sym] = /* @__PURE__ */ new Map());
|
|
28317
28478
|
__wf_reg.set(__wf_id, __wf_fn);
|
|
@@ -28320,7 +28481,7 @@ var Run = class _Run {
|
|
|
28320
28481
|
value: "createdAt",
|
|
28321
28482
|
configurable: true
|
|
28322
28483
|
});
|
|
28323
|
-
})(Object.getOwnPropertyDescriptor(Run.prototype, "createdAt").get, "step//@workflow/core/runtime/run@5.0.0-beta.
|
|
28484
|
+
})(Object.getOwnPropertyDescriptor(Run.prototype, "createdAt").get, "step//@workflow/core/runtime/run@5.0.0-beta.36//Run#createdAt");
|
|
28324
28485
|
(function(__wf_fn, __wf_id) {
|
|
28325
28486
|
var __wf_sym = /* @__PURE__ */ Symbol.for("@workflow/core//registeredSteps"), __wf_reg = globalThis[__wf_sym] || (globalThis[__wf_sym] = /* @__PURE__ */ new Map());
|
|
28326
28487
|
__wf_reg.set(__wf_id, __wf_fn);
|
|
@@ -28329,7 +28490,7 @@ var Run = class _Run {
|
|
|
28329
28490
|
value: "startedAt",
|
|
28330
28491
|
configurable: true
|
|
28331
28492
|
});
|
|
28332
|
-
})(Object.getOwnPropertyDescriptor(Run.prototype, "startedAt").get, "step//@workflow/core/runtime/run@5.0.0-beta.
|
|
28493
|
+
})(Object.getOwnPropertyDescriptor(Run.prototype, "startedAt").get, "step//@workflow/core/runtime/run@5.0.0-beta.36//Run#startedAt");
|
|
28333
28494
|
(function(__wf_fn, __wf_id) {
|
|
28334
28495
|
var __wf_sym = /* @__PURE__ */ Symbol.for("@workflow/core//registeredSteps"), __wf_reg = globalThis[__wf_sym] || (globalThis[__wf_sym] = /* @__PURE__ */ new Map());
|
|
28335
28496
|
__wf_reg.set(__wf_id, __wf_fn);
|
|
@@ -28338,7 +28499,7 @@ var Run = class _Run {
|
|
|
28338
28499
|
value: "completedAt",
|
|
28339
28500
|
configurable: true
|
|
28340
28501
|
});
|
|
28341
|
-
})(Object.getOwnPropertyDescriptor(Run.prototype, "completedAt").get, "step//@workflow/core/runtime/run@5.0.0-beta.
|
|
28502
|
+
})(Object.getOwnPropertyDescriptor(Run.prototype, "completedAt").get, "step//@workflow/core/runtime/run@5.0.0-beta.36//Run#completedAt");
|
|
28342
28503
|
(function(__wf_cls, __wf_id) {
|
|
28343
28504
|
var __wf_sym = /* @__PURE__ */ Symbol.for("workflow-class-registry"), __wf_reg = globalThis[__wf_sym] || (globalThis[__wf_sym] = /* @__PURE__ */ new Map());
|
|
28344
28505
|
__wf_reg.set(__wf_id, __wf_cls);
|
|
@@ -28348,7 +28509,7 @@ var Run = class _Run {
|
|
|
28348
28509
|
enumerable: false,
|
|
28349
28510
|
configurable: false
|
|
28350
28511
|
});
|
|
28351
|
-
})(Run, "class//@workflow/core/runtime/run@5.0.0-beta.
|
|
28512
|
+
})(Run, "class//@workflow/core/runtime/run@5.0.0-beta.36//Run");
|
|
28352
28513
|
|
|
28353
28514
|
// ../workflow/dist/stdlib.js
|
|
28354
28515
|
async function fetch2(...args) {
|
|
@@ -28390,6 +28551,26 @@ async function addTenWorkflow(input) {
|
|
|
28390
28551
|
__name(addTenWorkflow, "addTenWorkflow");
|
|
28391
28552
|
addTenWorkflow.workflowId = "workflow//./workflows/addition//addTenWorkflow";
|
|
28392
28553
|
|
|
28554
|
+
// workflows/event-limit.ts
|
|
28555
|
+
async function tick(i) {
|
|
28556
|
+
return i;
|
|
28557
|
+
}
|
|
28558
|
+
__name(tick, "tick");
|
|
28559
|
+
(function(__wf_fn, __wf_id) {
|
|
28560
|
+
var __wf_sym = /* @__PURE__ */ Symbol.for("@workflow/core//registeredSteps"), __wf_reg = globalThis[__wf_sym] || (globalThis[__wf_sym] = /* @__PURE__ */ new Map());
|
|
28561
|
+
__wf_reg.set(__wf_id, __wf_fn);
|
|
28562
|
+
__wf_fn.stepId = __wf_id;
|
|
28563
|
+
Object.defineProperty(__wf_fn, "name", {
|
|
28564
|
+
value: "tick",
|
|
28565
|
+
configurable: true
|
|
28566
|
+
});
|
|
28567
|
+
})(tick, "step//./workflows/event-limit//tick");
|
|
28568
|
+
async function runawayWorkflow() {
|
|
28569
|
+
throw new Error("You attempted to execute workflow runawayWorkflow function directly. To start a workflow, use start(runawayWorkflow) from workflow/api");
|
|
28570
|
+
}
|
|
28571
|
+
__name(runawayWorkflow, "runawayWorkflow");
|
|
28572
|
+
runawayWorkflow.workflowId = "workflow//./workflows/event-limit//runawayWorkflow";
|
|
28573
|
+
|
|
28393
28574
|
// ../core/dist/index.js
|
|
28394
28575
|
init_dist2();
|
|
28395
28576
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-limit.d.mts","sourceRoot":"","sources":["../../src/event-limit.mts"],"names":[],"mappings":"AAGA,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,QAsCvC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { expect, test, vi } from 'vitest';
|
|
2
|
+
import { createFetcher, startServer } from './util.mjs';
|
|
3
|
+
export function eventLimit(world) {
|
|
4
|
+
// Cover enforcement end-to-end under both configs (turbo is the production
|
|
5
|
+
// default). Against the local world these don't isolate the turbo run_started
|
|
6
|
+
// threading — a non-turbo continuation backfills the ceiling regardless — but
|
|
7
|
+
// they guard that a runaway run fails under each.
|
|
8
|
+
for (const turbo of ['1', '0']) {
|
|
9
|
+
test(`fails a runaway run at the server-supplied event limit (turbo=${turbo})`, { timeout: 59_000 }, async () => {
|
|
10
|
+
// Low ceiling to trip it fast.
|
|
11
|
+
const server = await startServer({
|
|
12
|
+
world,
|
|
13
|
+
env: { WORKFLOW_MAX_EVENTS: '10', WORKFLOW_TURBO: turbo },
|
|
14
|
+
}).then(createFetcher);
|
|
15
|
+
const result = await server.invoke('workflows/event-limit.ts', 'runawayWorkflow', []);
|
|
16
|
+
expect(result.runId).toMatch(/^wrun_.+/);
|
|
17
|
+
const run = await vi.waitFor(async () => {
|
|
18
|
+
const run = await server.getRun(result.runId);
|
|
19
|
+
expect(run.status).toBe('failed');
|
|
20
|
+
return run;
|
|
21
|
+
}, {
|
|
22
|
+
interval: 200,
|
|
23
|
+
timeout: 50_000,
|
|
24
|
+
});
|
|
25
|
+
expect(run.errorCode).toBe('MAX_EVENTS_EXCEEDED');
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtbGltaXQubWpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2V2ZW50LWxpbWl0Lm10cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDMUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFeEQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxLQUFhO0lBQ3RDLDJFQUEyRTtJQUMzRSw4RUFBOEU7SUFDOUUsOEVBQThFO0lBQzlFLGtEQUFrRDtJQUNsRCxLQUFLLE1BQU0sS0FBSyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBVSxFQUFFLENBQUM7UUFDeEMsSUFBSSxDQUNGLGlFQUFpRSxLQUFLLEdBQUcsRUFDekUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQ25CLEtBQUssSUFBSSxFQUFFO1lBQ1QsK0JBQStCO1lBQy9CLE1BQU0sTUFBTSxHQUFHLE1BQU0sV0FBVyxDQUFDO2dCQUMvQixLQUFLO2dCQUNMLEdBQUcsRUFBRSxFQUFFLG1CQUFtQixFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFO2FBQzFELENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFFdkIsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUNoQywwQkFBMEIsRUFDMUIsaUJBQWlCLEVBQ2pCLEVBQUUsQ0FDSCxDQUFDO1lBQ0YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFekMsTUFBTSxHQUFHLEdBQUcsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUMxQixLQUFLLElBQUksRUFBRTtnQkFDVCxNQUFNLEdBQUcsR0FBRyxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM5QyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDbEMsT0FBTyxHQUFHLENBQUM7WUFDYixDQUFDLEVBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLEdBQUc7Z0JBQ2IsT0FBTyxFQUFFLE1BQU07YUFDaEIsQ0FDRixDQUFDO1lBQ0YsTUFBTSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUNwRCxDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhwZWN0LCB0ZXN0LCB2aSB9IGZyb20gJ3ZpdGVzdCc7XG5pbXBvcnQgeyBjcmVhdGVGZXRjaGVyLCBzdGFydFNlcnZlciB9IGZyb20gJy4vdXRpbC5tanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZXZlbnRMaW1pdCh3b3JsZDogc3RyaW5nKSB7XG4gIC8vIENvdmVyIGVuZm9yY2VtZW50IGVuZC10by1lbmQgdW5kZXIgYm90aCBjb25maWdzICh0dXJibyBpcyB0aGUgcHJvZHVjdGlvblxuICAvLyBkZWZhdWx0KS4gQWdhaW5zdCB0aGUgbG9jYWwgd29ybGQgdGhlc2UgZG9uJ3QgaXNvbGF0ZSB0aGUgdHVyYm8gcnVuX3N0YXJ0ZWRcbiAgLy8gdGhyZWFkaW5nIOKAlCBhIG5vbi10dXJibyBjb250aW51YXRpb24gYmFja2ZpbGxzIHRoZSBjZWlsaW5nIHJlZ2FyZGxlc3Mg4oCUIGJ1dFxuICAvLyB0aGV5IGd1YXJkIHRoYXQgYSBydW5hd2F5IHJ1biBmYWlscyB1bmRlciBlYWNoLlxuICBmb3IgKGNvbnN0IHR1cmJvIG9mIFsnMScsICcwJ10gYXMgY29uc3QpIHtcbiAgICB0ZXN0KFxuICAgICAgYGZhaWxzIGEgcnVuYXdheSBydW4gYXQgdGhlIHNlcnZlci1zdXBwbGllZCBldmVudCBsaW1pdCAodHVyYm89JHt0dXJib30pYCxcbiAgICAgIHsgdGltZW91dDogNTlfMDAwIH0sXG4gICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgIC8vIExvdyBjZWlsaW5nIHRvIHRyaXAgaXQgZmFzdC5cbiAgICAgICAgY29uc3Qgc2VydmVyID0gYXdhaXQgc3RhcnRTZXJ2ZXIoe1xuICAgICAgICAgIHdvcmxkLFxuICAgICAgICAgIGVudjogeyBXT1JLRkxPV19NQVhfRVZFTlRTOiAnMTAnLCBXT1JLRkxPV19UVVJCTzogdHVyYm8gfSxcbiAgICAgICAgfSkudGhlbihjcmVhdGVGZXRjaGVyKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzZXJ2ZXIuaW52b2tlKFxuICAgICAgICAgICd3b3JrZmxvd3MvZXZlbnQtbGltaXQudHMnLFxuICAgICAgICAgICdydW5hd2F5V29ya2Zsb3cnLFxuICAgICAgICAgIFtdXG4gICAgICAgICk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQucnVuSWQpLnRvTWF0Y2goL153cnVuXy4rLyk7XG5cbiAgICAgICAgY29uc3QgcnVuID0gYXdhaXQgdmkud2FpdEZvcihcbiAgICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBydW4gPSBhd2FpdCBzZXJ2ZXIuZ2V0UnVuKHJlc3VsdC5ydW5JZCk7XG4gICAgICAgICAgICBleHBlY3QocnVuLnN0YXR1cykudG9CZSgnZmFpbGVkJyk7XG4gICAgICAgICAgICByZXR1cm4gcnVuO1xuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgaW50ZXJ2YWw6IDIwMCxcbiAgICAgICAgICAgIHRpbWVvdXQ6IDUwXzAwMCxcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIGV4cGVjdChydW4uZXJyb3JDb2RlKS50b0JlKCdNQVhfRVZFTlRTX0VYQ0VFREVEJyk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxufVxuIl19
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@workflow/world-testing",
|
|
3
|
-
"version": "5.0.0-beta.
|
|
3
|
+
"version": "5.0.0-beta.36",
|
|
4
4
|
"description": "Testing utilities and World implementation for Workflow SDK",
|
|
5
5
|
"main": "dist/src/index.mjs",
|
|
6
6
|
"files": [
|
|
@@ -21,12 +21,12 @@
|
|
|
21
21
|
"hono": "4.12.25",
|
|
22
22
|
"jsonlines": "0.1.1",
|
|
23
23
|
"zod": "~4.3.6",
|
|
24
|
-
"@workflow/cli": "5.0.0-beta.
|
|
25
|
-
"@workflow/core": "5.0.0-beta.
|
|
24
|
+
"@workflow/cli": "5.0.0-beta.36",
|
|
25
|
+
"@workflow/core": "5.0.0-beta.36",
|
|
26
26
|
"@workflow/utils": "5.0.0-beta.6",
|
|
27
|
-
"@workflow/world": "5.0.0-beta.
|
|
28
|
-
"@workflow/world-local": "5.0.0-beta.
|
|
29
|
-
"workflow": "5.0.0-beta.
|
|
27
|
+
"@workflow/world": "5.0.0-beta.22",
|
|
28
|
+
"@workflow/world-local": "5.0.0-beta.30",
|
|
29
|
+
"workflow": "5.0.0-beta.36"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
32
|
"@types/jsonlines": "0.1.5",
|