@trigger.dev/core 3.0.0-beta.23 → 3.0.0-beta.25
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/catalog-XNyNDUOF.d.ts +2496 -0
- package/dist/catalog-g2Qc0Ukb.d.mts +2496 -0
- package/dist/{catalog-KJXg8k3W.d.ts → messages-vq7Bk4Ap.d.mts} +6725 -554
- package/dist/{catalog-PA64uhhi.d.mts → messages-vq7Bk4Ap.d.ts} +6725 -554
- package/dist/v3/dev/index.d.mts +1 -1
- package/dist/v3/dev/index.d.ts +1 -1
- package/dist/v3/dev/index.js.map +1 -1
- package/dist/v3/dev/index.mjs.map +1 -1
- package/dist/v3/index.d.mts +32 -29
- package/dist/v3/index.d.ts +32 -29
- package/dist/v3/index.js +356 -301
- package/dist/v3/index.js.map +1 -1
- package/dist/v3/index.mjs +356 -302
- package/dist/v3/index.mjs.map +1 -1
- package/dist/v3/otel/index.js +14 -3
- package/dist/v3/otel/index.js.map +1 -1
- package/dist/v3/otel/index.mjs +14 -3
- package/dist/v3/otel/index.mjs.map +1 -1
- package/dist/v3/prod/index.d.mts +5 -5
- package/dist/v3/prod/index.d.ts +5 -5
- package/dist/v3/prod/index.js +36 -12
- package/dist/v3/prod/index.js.map +1 -1
- package/dist/v3/prod/index.mjs +37 -13
- package/dist/v3/prod/index.mjs.map +1 -1
- package/dist/v3/workers/index.d.mts +5 -5
- package/dist/v3/workers/index.d.ts +5 -5
- package/dist/v3/workers/index.js +59 -236
- package/dist/v3/workers/index.js.map +1 -1
- package/dist/v3/workers/index.mjs +59 -236
- package/dist/v3/workers/index.mjs.map +1 -1
- package/dist/v3/zodMessageHandler.d.mts +1 -1
- package/dist/v3/zodMessageHandler.d.ts +1 -1
- package/package.json +1 -1
- package/dist/messages-AriaDDm0.d.mts +0 -8696
- package/dist/messages-AriaDDm0.d.ts +0 -8696
- package/dist/{manager-M9GLDnhJ.d.mts → manager-WNMVbgHf.d.mts} +40 -40
- package/dist/{manager-M9GLDnhJ.d.ts → manager-WNMVbgHf.d.ts} +40 -40
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/v3/utils/platform.ts","../../../src/v3/utils/globals.ts","../../../src/v3/clock/simpleClock.ts","../../../src/v3/clock/index.ts","../../../src/v3/clock-api.ts","../../../src/v3/utils/timers.ts","../../../src/v3/runtime/prodRuntimeManager.ts"],"names":["_globalThis","globalThis","global","GLOBAL_TRIGGER_DOT_DEV_KEY","Symbol","for","_global","registerGlobal","type","instance","allowOverride","api","err","Error","getGlobal","PreciseDate","SimpleClock","preciseNow","now","nowStruct","toStruct","seconds","nanos","reset","API_NAME","SIMPLE_CLOCK","ClockAPI","getInstance","_instance","setGlobalClock","clock","setTimeout","unboundedTimeout","delay","value","options","maxDelay","fullTimeouts","Math","floor","remainingDelay","lastTimeoutResult","i","ProdRuntimeManager","constructor","ipc","_taskWaits","Map","_batchWaits","disable","waitForDuration","ms","Date","resolveAfterDuration","waitThresholdInMs","waitForRestore","Promise","resolve","reject","_waitForRestore","willCheckpointAndRestore","sendWithAck","send","race","resumeAfterRestore","undefined","waitUntil","date","getTime","waitForTask","params","promise","set","id","friendlyId","result","waitForBatch","runs","length","items","all","map","runId","batchFriendlyId","runFriendlyIds","results","resumeTask","completion","execution","wait","get","run","delete"],"mappings":";;;;;;;;;;;;;;;;;AAAO,IAAMA,cAAc,OAAOC,eAAe,WAAWA,aAAaC;;;ACMzE,IAAMC,6BAA6BC,OAAOC,IAAI,oBAAoB;AAElE,IAAMC,UAAUN;AAET,SAASO,eACdC,MACAC,UACAC,gBAAgB,OACP;AACT,QAAMC,MAAOL,QAAQH,0BAAAA,IAA8BG,QAAQH,0BAAAA,KAA+B,CAAC;AAE3F,MAAI,CAACO,iBAAiBC,IAAIH,IAAAA,GAAO;AAE/B,UAAMI,MAAM,IAAIC,MAAM,yDAAyDL,IAAAA,EAAM;AACrF,WAAO;EACT;AAEAG,MAAIH,IAAAA,IAAQC;AAEZ,SAAO;AACT;AAhBgBF;AAkBT,SAASO,UACdN,MAC0C;AAC1C,SAAOF,QAAQH,0BAAAA,IAA8BK,IAAAA;AAC/C;AAJgBM;;;AC5BhB,SAASC,mBAAmB;AAGrB,IAAMC,eAAN,MAAMA,aAAAA;EACXC,aAA+B;AAC7B,UAAMC,MAAM,IAAIH,YAAAA;AAChB,UAAMI,YAAYD,IAAIE,SAAQ;AAE9B,WAAO;MAACD,UAAUE;MAASF,UAAUG;;EACvC;EAEAC,QAAQ;EAER;AACF;AAXaP;AAAN,IAAMA,cAAN;;;ACHP,IAAMQ,WAAW;AAMjB,IAAMC,eAAe,IAAIT,YAAAA;AANzB;AAQO,IAAMU,YAAN,MAAMA,UAAAA;EAGX,cAAsB;AAsBtB;EAtBuB;EAEvB,OAAcC,cAAwB;AACpC,QAAI,CAAC,KAAKC,WAAW;AACnB,WAAKA,YAAY,IAAIF,UAAAA;IACvB;AAEA,WAAO,KAAKE;EACd;EAEOC,eAAeC,QAAuB;AAC3C,WAAOvB,eAAeiB,UAAUM,MAAAA;EAClC;EAEOb,aAAwB;AAC7B,WAAO,sBAAK,wBAAL,WAAiBA,WAAU;EACpC;EAEOM,QAAc;AACnB,0BAAK,wBAAL,WAAiBA,MAAK;EACxB;AAKF;AAHE;cAAS,kCAAU;AACjB,SAAOT,UAAUU,QAAAA,KAAaC;AAChC,GAFS;AAzBEC;AAAN,IAAMA,WAAN;;;ACJA,IAAMI,QAAQJ,SAASC,YAAW;;;ACHzC,SAASI,kBAAkB;AAE3B,eAAsBC,iBACpBC,QAAgB,GAChBC,OACAC,SACY;AACZ,QAAMC,WAAW;AAEjB,QAAMC,eAAeC,KAAKC,MAAMN,QAAQG,QAAAA;AACxC,QAAMI,iBAAiBP,QAAQG;AAE/B,MAAIK,oBAAoB,MAAMV,WAAWS,gBAAgBN,OAAOC,OAAAA;AAEhE,WAASO,IAAI,GAAGA,IAAIL,cAAcK,KAAK;AACrCD,wBAAoB,MAAMV,WAAWK,UAAUF,OAAOC,OAAAA;EACxD;AAEA,SAAOM;AACT;AAjBsBT;;;ACcf,IAAMW,sBAAN,MAAMA,oBAAAA;EAUXC,YACUC,KAIAV,UAAqC,CAAC,GAC9C;eALQU;mBAIAV;SAdVW,aAAgF,oBAAIC,IAAAA;SAEpFC,cAGI,oBAAID,IAAAA;EAUL;EAEHE,UAAgB;EAEhB;EAEA,MAAMC,gBAAgBC,IAA2B;AAC/C,UAAMjC,MAAMkC,KAAKlC,IAAG;AAEpB,UAAMmC,uBAAuBrB,iBAAiBmB,IAAI,UAAA;AAElD,QAAIA,MAAM,KAAKG,mBAAmB;AAChC,YAAMD;AACN;IACF;AAEA,UAAME,iBAAiB,IAAIC,QAAmB,CAACC,SAASC,WAAW;AACjE,WAAKC,kBAAkB;QAAEF;QAASC;MAAO;IAC3C,CAAA;AAEA,UAAM,EAAEE,yBAAwB,IAAK,MAAM,KAAKf,IAAIgB,YAAY,qBAAqB;MACnFV;MACAjC;IACF,CAAA;AAEA,QAAI,CAAC0C,0BAA0B;AAC7B,YAAMP;AACN;IACF;AAEA,SAAKR,IAAIiB,KAAK,wBAAwB,CAAC,CAAA;AAGvC,UAAMN,QAAQO,KAAK;MAACR;MAAgBF;KAAqB;AAGzD,SAAKR,IAAIiB,KAAK,qBAAqB,CAAC,CAAA;EACtC;EAEAE,qBAA2B;AACzB,QAAI,CAAC,KAAKL,iBAAiB;AACzB;IACF;AAGA7B,UAAMP,MAAK;AAEX,SAAKoC,gBAAgBF,QAAQ,SAAA;AAC7B,SAAKE,kBAAkBM;EACzB;EAEA,MAAMC,UAAUC,MAA2B;AACzC,WAAO,KAAKjB,gBAAgBiB,KAAKC,QAAO,IAAKhB,KAAKlC,IAAG,CAAA;EACvD;EAEA,MAAMmD,YAAYC,QAA8E;AAC9F,UAAMC,UAAU,IAAIf,QAAgC,CAACC,YAAY;AAC/D,WAAKX,WAAW0B,IAAIF,OAAOG,IAAI;QAAEhB;MAAQ,CAAA;IAC3C,CAAA;AAEA,UAAM,KAAKZ,IAAIiB,KAAK,iBAAiB;MACnCY,YAAYJ,OAAOG;IACrB,CAAA;AAEA,UAAME,SAAS,MAAMJ;AAErBzC,UAAMP,MAAK;AAEX,WAAOoD;EACT;EAEA,MAAMC,aAAaN,QAIsB;AACvC,QAAI,CAACA,OAAOO,KAAKC,QAAQ;AACvB,aAAOtB,QAAQC,QAAQ;QAAEgB,IAAIH,OAAOG;QAAIM,OAAO,CAAA;MAAG,CAAA;IACpD;AAEA,UAAMR,UAAUf,QAAQwB,IACtBV,OAAOO,KAAKI,IAAI,CAACC,UAAU;AACzB,aAAO,IAAI1B,QAAgC,CAACC,SAASC,WAAW;AAC9D,aAAKZ,WAAW0B,IAAIU,OAAO;UAAEzB;QAAQ,CAAA;MACvC,CAAA;IACF,CAAA,CAAA;AAGF,UAAM,KAAKZ,IAAIiB,KAAK,kBAAkB;MACpCqB,iBAAiBb,OAAOG;MACxBW,gBAAgBd,OAAOO;IACzB,CAAA;AAEA,UAAMQ,UAAU,MAAMd;AAEtBzC,UAAMP,MAAK;AAEX,WAAO;MACLkD,IAAIH,OAAOG;MACXM,OAAOM;IACT;EACF;EAEAC,WAAWC,YAAoCC,WAAmC;AAChF,UAAMC,OAAO,KAAK3C,WAAW4C,IAAIF,UAAUG,IAAIlB,EAAE;AAEjD,QAAI,CAACgB,MAAM;AACT;IACF;AAEAA,SAAKhC,QAAQ8B,UAAAA;AAEb,SAAKzC,WAAW8C,OAAOJ,UAAUG,IAAIlB,EAAE;EACzC;EAEA,IAAYnB,oBAA4B;AACtC,WAAO,KAAKnB,QAAQmB,qBAAqB;EAC3C;AACF;AAtIaX;AAAN,IAAMA,qBAAN","sourcesContent":["export const _globalThis = typeof globalThis === \"object\" ? globalThis : global;\n","import { Clock } from \"../clock/clock\";\nimport type { RuntimeManager } from \"../runtime/manager\";\nimport { TaskCatalog } from \"../task-catalog/catalog\";\nimport { TaskContext } from \"../taskContext/types\";\nimport { _globalThis } from \"./platform\";\n\nconst GLOBAL_TRIGGER_DOT_DEV_KEY = Symbol.for(`dev.trigger.ts.api`);\n\nconst _global = _globalThis as TriggerDotDevGlobal;\n\nexport function registerGlobal<Type extends keyof TriggerDotDevGlobalAPI>(\n type: Type,\n instance: TriggerDotDevGlobalAPI[Type],\n allowOverride = false\n): boolean {\n const api = (_global[GLOBAL_TRIGGER_DOT_DEV_KEY] = _global[GLOBAL_TRIGGER_DOT_DEV_KEY] ?? {});\n\n if (!allowOverride && api[type]) {\n // already registered an API of this type\n const err = new Error(`trigger.dev: Attempted duplicate registration of API: ${type}`);\n return false;\n }\n\n api[type] = instance;\n\n return true;\n}\n\nexport function getGlobal<Type extends keyof TriggerDotDevGlobalAPI>(\n type: Type\n): TriggerDotDevGlobalAPI[Type] | undefined {\n return _global[GLOBAL_TRIGGER_DOT_DEV_KEY]?.[type];\n}\n\nexport function unregisterGlobal(type: keyof TriggerDotDevGlobalAPI) {\n const api = _global[GLOBAL_TRIGGER_DOT_DEV_KEY];\n\n if (api) {\n delete api[type];\n }\n}\n\ntype TriggerDotDevGlobal = {\n [GLOBAL_TRIGGER_DOT_DEV_KEY]?: TriggerDotDevGlobalAPI;\n};\n\ntype TriggerDotDevGlobalAPI = {\n runtime?: RuntimeManager;\n logger?: any;\n clock?: Clock;\n [\"task-catalog\"]?: TaskCatalog;\n [\"task-context\"]?: TaskContext;\n};\n","import { PreciseDate } from \"@google-cloud/precise-date\";\nimport { Clock } from \"./clock\";\n\nexport class SimpleClock implements Clock {\n preciseNow(): [number, number] {\n const now = new PreciseDate();\n const nowStruct = now.toStruct();\n\n return [nowStruct.seconds, nowStruct.nanos];\n }\n\n reset() {\n // do nothing\n }\n}\n","const API_NAME = \"clock\";\n\nimport { getGlobal, registerGlobal } from \"../utils/globals\";\nimport type { Clock, ClockTime } from \"./clock\";\nimport { SimpleClock } from \"./simpleClock\";\n\nconst SIMPLE_CLOCK = new SimpleClock();\n\nexport class ClockAPI {\n private static _instance?: ClockAPI;\n\n private constructor() {}\n\n public static getInstance(): ClockAPI {\n if (!this._instance) {\n this._instance = new ClockAPI();\n }\n\n return this._instance;\n }\n\n public setGlobalClock(clock: Clock): boolean {\n return registerGlobal(API_NAME, clock);\n }\n\n public preciseNow(): ClockTime {\n return this.#getClock().preciseNow();\n }\n\n public reset(): void {\n this.#getClock().reset();\n }\n\n #getClock(): Clock {\n return getGlobal(API_NAME) ?? SIMPLE_CLOCK;\n }\n}\n","// Split module-level variable definition into separate files to allow\n// tree-shaking on each api instance.\nimport { ClockAPI } from \"./clock\";\n/** Entrypoint for clock API */\nexport const clock = ClockAPI.getInstance();\n","import { TimerOptions } from \"node:timers\";\nimport { setTimeout } from \"node:timers/promises\";\n\nexport async function unboundedTimeout<T = void>(\n delay: number = 0,\n value?: T,\n options?: TimerOptions\n): Promise<T> {\n const maxDelay = 2147483647; // Highest value that will fit in a 32-bit signed integer\n\n const fullTimeouts = Math.floor(delay / maxDelay);\n const remainingDelay = delay % maxDelay;\n\n let lastTimeoutResult = await setTimeout(remainingDelay, value, options);\n\n for (let i = 0; i < fullTimeouts; i++) {\n lastTimeoutResult = await setTimeout(maxDelay, value, options);\n }\n\n return lastTimeoutResult;\n}\n","import { clock } from \"../clock-api\";\nimport {\n BatchTaskRunExecutionResult,\n ProdChildToWorkerMessages,\n ProdWorkerToChildMessages,\n TaskRunContext,\n TaskRunExecution,\n TaskRunExecutionResult,\n} from \"../schemas\";\nimport { unboundedTimeout } from \"../utils/timers\";\nimport { ZodIpcConnection } from \"../zodIpc\";\nimport { RuntimeManager } from \"./manager\";\n\nexport type ProdRuntimeManagerOptions = {\n waitThresholdInMs?: number;\n};\n\nexport class ProdRuntimeManager implements RuntimeManager {\n _taskWaits: Map<string, { resolve: (value: TaskRunExecutionResult) => void }> = new Map();\n\n _batchWaits: Map<\n string,\n { resolve: (value: BatchTaskRunExecutionResult) => void; reject: (err?: any) => void }\n > = new Map();\n\n _waitForRestore: { resolve: (value: \"restore\") => void; reject: (err?: any) => void } | undefined;\n\n constructor(\n private ipc: ZodIpcConnection<\n typeof ProdWorkerToChildMessages,\n typeof ProdChildToWorkerMessages\n >,\n private options: ProdRuntimeManagerOptions = {}\n ) {}\n\n disable(): void {\n // do nothing\n }\n\n async waitForDuration(ms: number): Promise<void> {\n const now = Date.now();\n\n const resolveAfterDuration = unboundedTimeout(ms, \"duration\" as const);\n\n if (ms <= this.waitThresholdInMs) {\n await resolveAfterDuration;\n return;\n }\n\n const waitForRestore = new Promise<\"restore\">((resolve, reject) => {\n this._waitForRestore = { resolve, reject };\n });\n\n const { willCheckpointAndRestore } = await this.ipc.sendWithAck(\"WAIT_FOR_DURATION\", {\n ms,\n now,\n });\n\n if (!willCheckpointAndRestore) {\n await resolveAfterDuration;\n return;\n }\n\n this.ipc.send(\"READY_FOR_CHECKPOINT\", {});\n\n // Don't wait for checkpoint beyond the requested wait duration\n await Promise.race([waitForRestore, resolveAfterDuration]);\n\n // The coordinator can then cancel any in-progress checkpoints\n this.ipc.send(\"CANCEL_CHECKPOINT\", {});\n }\n\n resumeAfterRestore(): void {\n if (!this._waitForRestore) {\n return;\n }\n\n // Resets the clock to the current time\n clock.reset();\n\n this._waitForRestore.resolve(\"restore\");\n this._waitForRestore = undefined;\n }\n\n async waitUntil(date: Date): Promise<void> {\n return this.waitForDuration(date.getTime() - Date.now());\n }\n\n async waitForTask(params: { id: string; ctx: TaskRunContext }): Promise<TaskRunExecutionResult> {\n const promise = new Promise<TaskRunExecutionResult>((resolve) => {\n this._taskWaits.set(params.id, { resolve });\n });\n\n await this.ipc.send(\"WAIT_FOR_TASK\", {\n friendlyId: params.id,\n });\n\n const result = await promise;\n\n clock.reset();\n\n return result;\n }\n\n async waitForBatch(params: {\n id: string;\n runs: string[];\n ctx: TaskRunContext;\n }): Promise<BatchTaskRunExecutionResult> {\n if (!params.runs.length) {\n return Promise.resolve({ id: params.id, items: [] });\n }\n\n const promise = Promise.all(\n params.runs.map((runId) => {\n return new Promise<TaskRunExecutionResult>((resolve, reject) => {\n this._taskWaits.set(runId, { resolve });\n });\n })\n );\n\n await this.ipc.send(\"WAIT_FOR_BATCH\", {\n batchFriendlyId: params.id,\n runFriendlyIds: params.runs,\n });\n\n const results = await promise;\n\n clock.reset();\n\n return {\n id: params.id,\n items: results,\n };\n }\n\n resumeTask(completion: TaskRunExecutionResult, execution: TaskRunExecution): void {\n const wait = this._taskWaits.get(execution.run.id);\n\n if (!wait) {\n return;\n }\n\n wait.resolve(completion);\n\n this._taskWaits.delete(execution.run.id);\n }\n\n private get waitThresholdInMs(): number {\n return this.options.waitThresholdInMs ?? 30_000;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/v3/utils/platform.ts","../../../src/v3/utils/globals.ts","../../../src/v3/clock/simpleClock.ts","../../../src/v3/clock/index.ts","../../../src/v3/clock-api.ts","../../../src/v3/utils/timers.ts","../../../src/v3/runtime/prodRuntimeManager.ts"],"names":["_globalThis","globalThis","global","GLOBAL_TRIGGER_DOT_DEV_KEY","Symbol","for","_global","registerGlobal","type","instance","allowOverride","api","err","Error","getGlobal","PreciseDate","SimpleClock","preciseNow","now","nowStruct","toStruct","seconds","nanos","reset","API_NAME","SIMPLE_CLOCK","ClockAPI","getInstance","_instance","setGlobalClock","clock","setInterval","setTimeout","unboundedTimeout","delay","value","options","maxDelay","fullTimeouts","Math","floor","remainingDelay","lastTimeoutResult","i","checkpointSafeTimeout","scanIntervalMs","start","Date","ProdRuntimeManager","constructor","ipc","_taskWaits","Map","_batchWaits","disable","waitForDuration","ms","internalTimeout","checkpointSafeInternalTimeout","waitThresholdInMs","externalResume","Promise","resolve","reject","_waitForDuration","willCheckpointAndRestore","sendWithAck","send","race","checkpointCanceled","version","reason","resumeAfterDuration","process","stdout","write","JSON","stringify","console","log","undefined","waitUntil","date","getTime","waitForTask","params","promise","set","id","friendlyId","result","waitForBatch","runs","length","items","all","map","runId","batchFriendlyId","runFriendlyIds","results","resumeTask","completion","execution","wait","get","run","delete"],"mappings":";;;;;;;;;;;;;;;;;AAAO,IAAMA,cAAc,OAAOC,eAAe,WAAWA,aAAaC;;;ACMzE,IAAMC,6BAA6BC,OAAOC,IAAI,oBAAoB;AAElE,IAAMC,UAAUN;AAET,SAASO,eACdC,MACAC,UACAC,gBAAgB,OACP;AACT,QAAMC,MAAOL,QAAQH,0BAAAA,IAA8BG,QAAQH,0BAAAA,KAA+B,CAAC;AAE3F,MAAI,CAACO,iBAAiBC,IAAIH,IAAAA,GAAO;AAE/B,UAAMI,MAAM,IAAIC,MAAM,yDAAyDL,IAAAA,EAAM;AACrF,WAAO;EACT;AAEAG,MAAIH,IAAAA,IAAQC;AAEZ,SAAO;AACT;AAhBgBF;AAkBT,SAASO,UACdN,MAC0C;AAC1C,SAAOF,QAAQH,0BAAAA,IAA8BK,IAAAA;AAC/C;AAJgBM;;;AC5BhB,SAASC,mBAAmB;AAGrB,IAAMC,eAAN,MAAMA,aAAAA;EACXC,aAA+B;AAC7B,UAAMC,MAAM,IAAIH,YAAAA;AAChB,UAAMI,YAAYD,IAAIE,SAAQ;AAE9B,WAAO;MAACD,UAAUE;MAASF,UAAUG;;EACvC;EAEAC,QAAQ;EAER;AACF;AAXaP;AAAN,IAAMA,cAAN;;;ACHP,IAAMQ,WAAW;AAMjB,IAAMC,eAAe,IAAIT,YAAAA;AANzB;AAQO,IAAMU,YAAN,MAAMA,UAAAA;EAGX,cAAsB;AAsBtB;EAtBuB;EAEvB,OAAcC,cAAwB;AACpC,QAAI,CAAC,KAAKC,WAAW;AACnB,WAAKA,YAAY,IAAIF,UAAAA;IACvB;AAEA,WAAO,KAAKE;EACd;EAEOC,eAAeC,QAAuB;AAC3C,WAAOvB,eAAeiB,UAAUM,MAAAA;EAClC;EAEOb,aAAwB;AAC7B,WAAO,sBAAK,wBAAL,WAAiBA,WAAU;EACpC;EAEOM,QAAc;AACnB,0BAAK,wBAAL,WAAiBA,MAAK;EACxB;AAKF;AAHE;cAAS,kCAAU;AACjB,SAAOT,UAAUU,QAAAA,KAAaC;AAChC,GAFS;AAzBEC;AAAN,IAAMA,WAAN;;;ACJA,IAAMI,QAAQJ,SAASC,YAAW;;;ACHzC,SAASI,aAAaC,kBAAkB;AAExC,eAAsBC,iBACpBC,QAAgB,GAChBC,OACAC,SACY;AACZ,QAAMC,WAAW;AAEjB,QAAMC,eAAeC,KAAKC,MAAMN,QAAQG,QAAAA;AACxC,QAAMI,iBAAiBP,QAAQG;AAE/B,MAAIK,oBAAoB,MAAMV,WAAWS,gBAAgBN,OAAOC,OAAAA;AAEhE,WAASO,IAAI,GAAGA,IAAIL,cAAcK,KAAK;AACrCD,wBAAoB,MAAMV,WAAWK,UAAUF,OAAOC,OAAAA;EACxD;AAEA,SAAOM;AACT;AAjBsBT;AAmBtB,eAAsBW,sBAAsBV,QAAgB,GAAkB;AAC5E,QAAMW,iBAAiB;AAGvB,mBAAiBC,SAASf,YAAYc,gBAAgBE,KAAK7B,IAAG,CAAA,GAAK;AACjE,QAAI6B,KAAK7B,IAAG,IAAK4B,QAAQZ,OAAO;AAC9B;IACF;EACF;AACF;AATsBU;;;ACJf,IAAMI,sBAAN,MAAMA,oBAAAA;EAYXC,YACUC,KAIAd,UAAqC,CAAC,GAC9C;eALQc;mBAIAd;SAhBVe,aAAgF,oBAAIC,IAAAA;SAEpFC,cAGI,oBAAID,IAAAA;EAYL;EAEHE,UAAgB;EAEhB;EAEA,MAAMC,gBAAgBC,IAA2B;AAC/C,UAAMtC,MAAM6B,KAAK7B,IAAG;AAEpB,UAAMuC,kBAAkBxB,iBAAiBuB,IAAI,UAAA;AAC7C,UAAME,gCAAgCd,sBAAsBY,EAAAA;AAE5D,QAAIA,MAAM,KAAKG,mBAAmB;AAChC,YAAMF;AACN;IACF;AAEA,UAAMG,iBAAiB,IAAIC,QAAoB,CAACC,SAASC,WAAW;AAClE,WAAKC,mBAAmB;QAAEF;QAASC;MAAO;IAC5C,CAAA;AAEA,UAAM,EAAEE,yBAAwB,IAAK,MAAM,KAAKf,IAAIgB,YAAY,qBAAqB;MACnFV;MACAtC;IACF,CAAA;AAEA,QAAI,CAAC+C,0BAA0B;AAC7B,YAAMR;AACN;IACF;AAEA,SAAKP,IAAIiB,KAAK,wBAAwB,CAAC,CAAA;AAIvC,UAAMN,QAAQO,KAAK;MAACX;MAAiBC;KAA8B;AAGnE5B,UAAMP,MAAK;AAGX,UAAM,EAAE8C,oBAAoBC,QAAO,IAAK,MAAM,KAAKpB,IAAIgB,YAAY,qBAAqB;MACtFI,SAAS;MACTC,QAAQ;IACV,CAAA;AAEA,QAAIF,oBAAoB;AAEtB;IACF;AAGA,UAAMT;EACR;EAEAY,sBAA4B;AAC1B,QAAI,CAAC,KAAKR,kBAAkB;AAC1B;IACF;AAEAS,YAAQC,OAAOC,MAAM,KAAA;AACrBF,YAAQC,OAAOC,MAAMC,KAAKC,UAAU/C,MAAMb,WAAU,CAAA,CAAA;AAEpD6D,YAAQC,IAAI,OAAOjD,MAAMb,WAAU,CAAA;AAGnCa,UAAMP,MAAK;AAEXuD,YAAQC,IAAI,QAAQjD,MAAMb,WAAU,CAAA;AAEpCwD,YAAQC,OAAOC,MAAM,MAAA;AACrBF,YAAQC,OAAOC,MAAMC,KAAKC,UAAU/C,MAAMb,WAAU,CAAA,CAAA;AAEpD,SAAK+C,iBAAiBF,QAAQ,UAAA;AAC9B,SAAKE,mBAAmBgB;EAC1B;EAEA,MAAMC,UAAUC,MAA2B;AACzC,WAAO,KAAK3B,gBAAgB2B,KAAKC,QAAO,IAAKpC,KAAK7B,IAAG,CAAA;EACvD;EAEA,MAAMkE,YAAYC,QAA8E;AAC9F,UAAMC,UAAU,IAAIzB,QAAgC,CAACC,YAAY;AAC/D,WAAKX,WAAWoC,IAAIF,OAAOG,IAAI;QAAE1B;MAAQ,CAAA;IAC3C,CAAA;AAEA,UAAM,KAAKZ,IAAIiB,KAAK,iBAAiB;MACnCsB,YAAYJ,OAAOG;IACrB,CAAA;AAEA,UAAME,SAAS,MAAMJ;AAErBxD,UAAMP,MAAK;AAEX,WAAOmE;EACT;EAEA,MAAMC,aAAaN,QAIsB;AACvC,QAAI,CAACA,OAAOO,KAAKC,QAAQ;AACvB,aAAOhC,QAAQC,QAAQ;QAAE0B,IAAIH,OAAOG;QAAIM,OAAO,CAAA;MAAG,CAAA;IACpD;AAEA,UAAMR,UAAUzB,QAAQkC,IACtBV,OAAOO,KAAKI,IAAI,CAACC,UAAU;AACzB,aAAO,IAAIpC,QAAgC,CAACC,SAASC,WAAW;AAC9D,aAAKZ,WAAWoC,IAAIU,OAAO;UAAEnC;QAAQ,CAAA;MACvC,CAAA;IACF,CAAA,CAAA;AAGF,UAAM,KAAKZ,IAAIiB,KAAK,kBAAkB;MACpC+B,iBAAiBb,OAAOG;MACxBW,gBAAgBd,OAAOO;IACzB,CAAA;AAEA,UAAMQ,UAAU,MAAMd;AAEtBxD,UAAMP,MAAK;AAEX,WAAO;MACLiE,IAAIH,OAAOG;MACXM,OAAOM;IACT;EACF;EAEAC,WAAWC,YAAoCC,WAAmC;AAChF,UAAMC,OAAO,KAAKrD,WAAWsD,IAAIF,UAAUG,IAAIlB,EAAE;AAEjD,QAAI,CAACgB,MAAM;AACT;IACF;AAEAA,SAAK1C,QAAQwC,UAAAA;AAEb,SAAKnD,WAAWwD,OAAOJ,UAAUG,IAAIlB,EAAE;EACzC;EAEA,IAAY7B,oBAA4B;AACtC,WAAO,KAAKvB,QAAQuB,qBAAqB;EAC3C;AACF;AAlKaX;AAAN,IAAMA,qBAAN","sourcesContent":["export const _globalThis = typeof globalThis === \"object\" ? globalThis : global;\n","import { Clock } from \"../clock/clock\";\nimport type { RuntimeManager } from \"../runtime/manager\";\nimport { TaskCatalog } from \"../task-catalog/catalog\";\nimport { TaskContext } from \"../taskContext/types\";\nimport { _globalThis } from \"./platform\";\n\nconst GLOBAL_TRIGGER_DOT_DEV_KEY = Symbol.for(`dev.trigger.ts.api`);\n\nconst _global = _globalThis as TriggerDotDevGlobal;\n\nexport function registerGlobal<Type extends keyof TriggerDotDevGlobalAPI>(\n type: Type,\n instance: TriggerDotDevGlobalAPI[Type],\n allowOverride = false\n): boolean {\n const api = (_global[GLOBAL_TRIGGER_DOT_DEV_KEY] = _global[GLOBAL_TRIGGER_DOT_DEV_KEY] ?? {});\n\n if (!allowOverride && api[type]) {\n // already registered an API of this type\n const err = new Error(`trigger.dev: Attempted duplicate registration of API: ${type}`);\n return false;\n }\n\n api[type] = instance;\n\n return true;\n}\n\nexport function getGlobal<Type extends keyof TriggerDotDevGlobalAPI>(\n type: Type\n): TriggerDotDevGlobalAPI[Type] | undefined {\n return _global[GLOBAL_TRIGGER_DOT_DEV_KEY]?.[type];\n}\n\nexport function unregisterGlobal(type: keyof TriggerDotDevGlobalAPI) {\n const api = _global[GLOBAL_TRIGGER_DOT_DEV_KEY];\n\n if (api) {\n delete api[type];\n }\n}\n\ntype TriggerDotDevGlobal = {\n [GLOBAL_TRIGGER_DOT_DEV_KEY]?: TriggerDotDevGlobalAPI;\n};\n\ntype TriggerDotDevGlobalAPI = {\n runtime?: RuntimeManager;\n logger?: any;\n clock?: Clock;\n [\"task-catalog\"]?: TaskCatalog;\n [\"task-context\"]?: TaskContext;\n};\n","import { PreciseDate } from \"@google-cloud/precise-date\";\nimport { Clock } from \"./clock\";\n\nexport class SimpleClock implements Clock {\n preciseNow(): [number, number] {\n const now = new PreciseDate();\n const nowStruct = now.toStruct();\n\n return [nowStruct.seconds, nowStruct.nanos];\n }\n\n reset() {\n // do nothing\n }\n}\n","const API_NAME = \"clock\";\n\nimport { getGlobal, registerGlobal } from \"../utils/globals\";\nimport type { Clock, ClockTime } from \"./clock\";\nimport { SimpleClock } from \"./simpleClock\";\n\nconst SIMPLE_CLOCK = new SimpleClock();\n\nexport class ClockAPI {\n private static _instance?: ClockAPI;\n\n private constructor() {}\n\n public static getInstance(): ClockAPI {\n if (!this._instance) {\n this._instance = new ClockAPI();\n }\n\n return this._instance;\n }\n\n public setGlobalClock(clock: Clock): boolean {\n return registerGlobal(API_NAME, clock);\n }\n\n public preciseNow(): ClockTime {\n return this.#getClock().preciseNow();\n }\n\n public reset(): void {\n this.#getClock().reset();\n }\n\n #getClock(): Clock {\n return getGlobal(API_NAME) ?? SIMPLE_CLOCK;\n }\n}\n","// Split module-level variable definition into separate files to allow\n// tree-shaking on each api instance.\nimport { ClockAPI } from \"./clock\";\n/** Entrypoint for clock API */\nexport const clock = ClockAPI.getInstance();\n","import { TimerOptions } from \"node:timers\";\nimport { setInterval, setTimeout } from \"node:timers/promises\";\n\nexport async function unboundedTimeout<T = void>(\n delay: number = 0,\n value?: T,\n options?: TimerOptions\n): Promise<T> {\n const maxDelay = 2147483647; // Highest value that will fit in a 32-bit signed integer\n\n const fullTimeouts = Math.floor(delay / maxDelay);\n const remainingDelay = delay % maxDelay;\n\n let lastTimeoutResult = await setTimeout(remainingDelay, value, options);\n\n for (let i = 0; i < fullTimeouts; i++) {\n lastTimeoutResult = await setTimeout(maxDelay, value, options);\n }\n\n return lastTimeoutResult;\n}\n\nexport async function checkpointSafeTimeout(delay: number = 0): Promise<void> {\n const scanIntervalMs = 1000;\n\n // Every scanIntervalMs, check if delay has elapsed\n for await (const start of setInterval(scanIntervalMs, Date.now())) {\n if (Date.now() - start > delay) {\n break;\n }\n }\n}\n","import { clock } from \"../clock-api\";\nimport { logger } from \"../logger-api\";\nimport {\n BatchTaskRunExecutionResult,\n ProdChildToWorkerMessages,\n ProdWorkerToChildMessages,\n TaskRunContext,\n TaskRunExecution,\n TaskRunExecutionResult,\n} from \"../schemas\";\nimport { checkpointSafeTimeout, unboundedTimeout } from \"../utils/timers\";\nimport { ZodIpcConnection } from \"../zodIpc\";\nimport { RuntimeManager } from \"./manager\";\n\nexport type ProdRuntimeManagerOptions = {\n waitThresholdInMs?: number;\n};\n\nexport class ProdRuntimeManager implements RuntimeManager {\n _taskWaits: Map<string, { resolve: (value: TaskRunExecutionResult) => void }> = new Map();\n\n _batchWaits: Map<\n string,\n { resolve: (value: BatchTaskRunExecutionResult) => void; reject: (err?: any) => void }\n > = new Map();\n\n _waitForDuration:\n | { resolve: (value: \"external\") => void; reject: (err?: any) => void }\n | undefined;\n\n constructor(\n private ipc: ZodIpcConnection<\n typeof ProdWorkerToChildMessages,\n typeof ProdChildToWorkerMessages\n >,\n private options: ProdRuntimeManagerOptions = {}\n ) {}\n\n disable(): void {\n // do nothing\n }\n\n async waitForDuration(ms: number): Promise<void> {\n const now = Date.now();\n\n const internalTimeout = unboundedTimeout(ms, \"internal\" as const);\n const checkpointSafeInternalTimeout = checkpointSafeTimeout(ms);\n\n if (ms <= this.waitThresholdInMs) {\n await internalTimeout;\n return;\n }\n\n const externalResume = new Promise<\"external\">((resolve, reject) => {\n this._waitForDuration = { resolve, reject };\n });\n\n const { willCheckpointAndRestore } = await this.ipc.sendWithAck(\"WAIT_FOR_DURATION\", {\n ms,\n now,\n });\n\n if (!willCheckpointAndRestore) {\n await internalTimeout;\n return;\n }\n\n this.ipc.send(\"READY_FOR_CHECKPOINT\", {});\n\n // internalTimeout acts as a backup and will be accurate if the checkpoint never happens\n // checkpointSafeInternalTimeout is accurate even after non-simulated restores\n await Promise.race([internalTimeout, checkpointSafeInternalTimeout]);\n\n // Resets the clock to the current time\n clock.reset();\n\n // The coordinator should cancel any in-progress checkpoints\n const { checkpointCanceled, version } = await this.ipc.sendWithAck(\"CANCEL_CHECKPOINT\", {\n version: \"v2\",\n reason: \"WAIT_FOR_DURATION\",\n });\n\n if (checkpointCanceled) {\n // There won't be a checkpoint or external resume and we've already completed our internal timeout\n return;\n }\n\n // No checkpoint was canceled, so we were checkpointed. We need to wait for the external resume message.\n await externalResume;\n }\n\n resumeAfterDuration(): void {\n if (!this._waitForDuration) {\n return;\n }\n\n process.stdout.write(\"pre\");\n process.stdout.write(JSON.stringify(clock.preciseNow()));\n\n console.log(\"pre\", clock.preciseNow());\n\n // Resets the clock to the current time\n clock.reset();\n\n console.log(\"post\", clock.preciseNow());\n\n process.stdout.write(\"post\");\n process.stdout.write(JSON.stringify(clock.preciseNow()));\n\n this._waitForDuration.resolve(\"external\");\n this._waitForDuration = undefined;\n }\n\n async waitUntil(date: Date): Promise<void> {\n return this.waitForDuration(date.getTime() - Date.now());\n }\n\n async waitForTask(params: { id: string; ctx: TaskRunContext }): Promise<TaskRunExecutionResult> {\n const promise = new Promise<TaskRunExecutionResult>((resolve) => {\n this._taskWaits.set(params.id, { resolve });\n });\n\n await this.ipc.send(\"WAIT_FOR_TASK\", {\n friendlyId: params.id,\n });\n\n const result = await promise;\n\n clock.reset();\n\n return result;\n }\n\n async waitForBatch(params: {\n id: string;\n runs: string[];\n ctx: TaskRunContext;\n }): Promise<BatchTaskRunExecutionResult> {\n if (!params.runs.length) {\n return Promise.resolve({ id: params.id, items: [] });\n }\n\n const promise = Promise.all(\n params.runs.map((runId) => {\n return new Promise<TaskRunExecutionResult>((resolve, reject) => {\n this._taskWaits.set(runId, { resolve });\n });\n })\n );\n\n await this.ipc.send(\"WAIT_FOR_BATCH\", {\n batchFriendlyId: params.id,\n runFriendlyIds: params.runs,\n });\n\n const results = await promise;\n\n clock.reset();\n\n return {\n id: params.id,\n items: results,\n };\n }\n\n resumeTask(completion: TaskRunExecutionResult, execution: TaskRunExecution): void {\n const wait = this._taskWaits.get(execution.run.id);\n\n if (!wait) {\n return;\n }\n\n wait.resolve(completion);\n\n this._taskWaits.delete(execution.run.id);\n }\n\n private get waitThresholdInMs(): number {\n return this.options.waitThresholdInMs ?? 30_000;\n }\n}\n"]}
|
package/dist/v3/prod/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { PreciseDate } from '@google-cloud/precise-date';
|
|
2
|
-
import { setTimeout } from 'node:timers/promises';
|
|
2
|
+
import { setTimeout, setInterval } from 'node:timers/promises';
|
|
3
3
|
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
5
5
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
@@ -95,6 +95,15 @@ async function unboundedTimeout(delay = 0, value, options) {
|
|
|
95
95
|
return lastTimeoutResult;
|
|
96
96
|
}
|
|
97
97
|
__name(unboundedTimeout, "unboundedTimeout");
|
|
98
|
+
async function checkpointSafeTimeout(delay = 0) {
|
|
99
|
+
const scanIntervalMs = 1e3;
|
|
100
|
+
for await (const start of setInterval(scanIntervalMs, Date.now())) {
|
|
101
|
+
if (Date.now() - start > delay) {
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
__name(checkpointSafeTimeout, "checkpointSafeTimeout");
|
|
98
107
|
|
|
99
108
|
// src/v3/runtime/prodRuntimeManager.ts
|
|
100
109
|
var _ProdRuntimeManager = class _ProdRuntimeManager {
|
|
@@ -108,13 +117,14 @@ var _ProdRuntimeManager = class _ProdRuntimeManager {
|
|
|
108
117
|
}
|
|
109
118
|
async waitForDuration(ms) {
|
|
110
119
|
const now = Date.now();
|
|
111
|
-
const
|
|
120
|
+
const internalTimeout = unboundedTimeout(ms, "internal");
|
|
121
|
+
const checkpointSafeInternalTimeout = checkpointSafeTimeout(ms);
|
|
112
122
|
if (ms <= this.waitThresholdInMs) {
|
|
113
|
-
await
|
|
123
|
+
await internalTimeout;
|
|
114
124
|
return;
|
|
115
125
|
}
|
|
116
|
-
const
|
|
117
|
-
this.
|
|
126
|
+
const externalResume = new Promise((resolve, reject) => {
|
|
127
|
+
this._waitForDuration = {
|
|
118
128
|
resolve,
|
|
119
129
|
reject
|
|
120
130
|
};
|
|
@@ -124,23 +134,37 @@ var _ProdRuntimeManager = class _ProdRuntimeManager {
|
|
|
124
134
|
now
|
|
125
135
|
});
|
|
126
136
|
if (!willCheckpointAndRestore) {
|
|
127
|
-
await
|
|
137
|
+
await internalTimeout;
|
|
128
138
|
return;
|
|
129
139
|
}
|
|
130
140
|
this.ipc.send("READY_FOR_CHECKPOINT", {});
|
|
131
141
|
await Promise.race([
|
|
132
|
-
|
|
133
|
-
|
|
142
|
+
internalTimeout,
|
|
143
|
+
checkpointSafeInternalTimeout
|
|
134
144
|
]);
|
|
135
|
-
|
|
145
|
+
clock.reset();
|
|
146
|
+
const { checkpointCanceled, version } = await this.ipc.sendWithAck("CANCEL_CHECKPOINT", {
|
|
147
|
+
version: "v2",
|
|
148
|
+
reason: "WAIT_FOR_DURATION"
|
|
149
|
+
});
|
|
150
|
+
if (checkpointCanceled) {
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
await externalResume;
|
|
136
154
|
}
|
|
137
|
-
|
|
138
|
-
if (!this.
|
|
155
|
+
resumeAfterDuration() {
|
|
156
|
+
if (!this._waitForDuration) {
|
|
139
157
|
return;
|
|
140
158
|
}
|
|
159
|
+
process.stdout.write("pre");
|
|
160
|
+
process.stdout.write(JSON.stringify(clock.preciseNow()));
|
|
161
|
+
console.log("pre", clock.preciseNow());
|
|
141
162
|
clock.reset();
|
|
142
|
-
|
|
143
|
-
|
|
163
|
+
console.log("post", clock.preciseNow());
|
|
164
|
+
process.stdout.write("post");
|
|
165
|
+
process.stdout.write(JSON.stringify(clock.preciseNow()));
|
|
166
|
+
this._waitForDuration.resolve("external");
|
|
167
|
+
this._waitForDuration = void 0;
|
|
144
168
|
}
|
|
145
169
|
async waitUntil(date) {
|
|
146
170
|
return this.waitForDuration(date.getTime() - Date.now());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/v3/utils/platform.ts","../../../src/v3/utils/globals.ts","../../../src/v3/clock/simpleClock.ts","../../../src/v3/clock/index.ts","../../../src/v3/clock-api.ts","../../../src/v3/utils/timers.ts","../../../src/v3/runtime/prodRuntimeManager.ts"],"names":["_globalThis","globalThis","global","GLOBAL_TRIGGER_DOT_DEV_KEY","Symbol","for","_global","registerGlobal","type","instance","allowOverride","api","err","Error","getGlobal","PreciseDate","SimpleClock","preciseNow","now","nowStruct","toStruct","seconds","nanos","reset","API_NAME","SIMPLE_CLOCK","ClockAPI","getInstance","_instance","setGlobalClock","clock","setTimeout","unboundedTimeout","delay","value","options","maxDelay","fullTimeouts","Math","floor","remainingDelay","lastTimeoutResult","i","ProdRuntimeManager","constructor","ipc","_taskWaits","Map","_batchWaits","disable","waitForDuration","ms","Date","resolveAfterDuration","waitThresholdInMs","waitForRestore","Promise","resolve","reject","_waitForRestore","willCheckpointAndRestore","sendWithAck","send","race","resumeAfterRestore","undefined","waitUntil","date","getTime","waitForTask","params","promise","set","id","friendlyId","result","waitForBatch","runs","length","items","all","map","runId","batchFriendlyId","runFriendlyIds","results","resumeTask","completion","execution","wait","get","run","delete"],"mappings":"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","sourcesContent":["export const _globalThis = typeof globalThis === \"object\" ? globalThis : global;\n","import { Clock } from \"../clock/clock\";\nimport type { RuntimeManager } from \"../runtime/manager\";\nimport { TaskCatalog } from \"../task-catalog/catalog\";\nimport { TaskContext } from \"../taskContext/types\";\nimport { _globalThis } from \"./platform\";\n\nconst GLOBAL_TRIGGER_DOT_DEV_KEY = Symbol.for(`dev.trigger.ts.api`);\n\nconst _global = _globalThis as TriggerDotDevGlobal;\n\nexport function registerGlobal<Type extends keyof TriggerDotDevGlobalAPI>(\n type: Type,\n instance: TriggerDotDevGlobalAPI[Type],\n allowOverride = false\n): boolean {\n const api = (_global[GLOBAL_TRIGGER_DOT_DEV_KEY] = _global[GLOBAL_TRIGGER_DOT_DEV_KEY] ?? {});\n\n if (!allowOverride && api[type]) {\n // already registered an API of this type\n const err = new Error(`trigger.dev: Attempted duplicate registration of API: ${type}`);\n return false;\n }\n\n api[type] = instance;\n\n return true;\n}\n\nexport function getGlobal<Type extends keyof TriggerDotDevGlobalAPI>(\n type: Type\n): TriggerDotDevGlobalAPI[Type] | undefined {\n return _global[GLOBAL_TRIGGER_DOT_DEV_KEY]?.[type];\n}\n\nexport function unregisterGlobal(type: keyof TriggerDotDevGlobalAPI) {\n const api = _global[GLOBAL_TRIGGER_DOT_DEV_KEY];\n\n if (api) {\n delete api[type];\n }\n}\n\ntype TriggerDotDevGlobal = {\n [GLOBAL_TRIGGER_DOT_DEV_KEY]?: TriggerDotDevGlobalAPI;\n};\n\ntype TriggerDotDevGlobalAPI = {\n runtime?: RuntimeManager;\n logger?: any;\n clock?: Clock;\n [\"task-catalog\"]?: TaskCatalog;\n [\"task-context\"]?: TaskContext;\n};\n","import { PreciseDate } from \"@google-cloud/precise-date\";\nimport { Clock } from \"./clock\";\n\nexport class SimpleClock implements Clock {\n preciseNow(): [number, number] {\n const now = new PreciseDate();\n const nowStruct = now.toStruct();\n\n return [nowStruct.seconds, nowStruct.nanos];\n }\n\n reset() {\n // do nothing\n }\n}\n","const API_NAME = \"clock\";\n\nimport { getGlobal, registerGlobal } from \"../utils/globals\";\nimport type { Clock, ClockTime } from \"./clock\";\nimport { SimpleClock } from \"./simpleClock\";\n\nconst SIMPLE_CLOCK = new SimpleClock();\n\nexport class ClockAPI {\n private static _instance?: ClockAPI;\n\n private constructor() {}\n\n public static getInstance(): ClockAPI {\n if (!this._instance) {\n this._instance = new ClockAPI();\n }\n\n return this._instance;\n }\n\n public setGlobalClock(clock: Clock): boolean {\n return registerGlobal(API_NAME, clock);\n }\n\n public preciseNow(): ClockTime {\n return this.#getClock().preciseNow();\n }\n\n public reset(): void {\n this.#getClock().reset();\n }\n\n #getClock(): Clock {\n return getGlobal(API_NAME) ?? SIMPLE_CLOCK;\n }\n}\n","// Split module-level variable definition into separate files to allow\n// tree-shaking on each api instance.\nimport { ClockAPI } from \"./clock\";\n/** Entrypoint for clock API */\nexport const clock = ClockAPI.getInstance();\n","import { TimerOptions } from \"node:timers\";\nimport { setTimeout } from \"node:timers/promises\";\n\nexport async function unboundedTimeout<T = void>(\n delay: number = 0,\n value?: T,\n options?: TimerOptions\n): Promise<T> {\n const maxDelay = 2147483647; // Highest value that will fit in a 32-bit signed integer\n\n const fullTimeouts = Math.floor(delay / maxDelay);\n const remainingDelay = delay % maxDelay;\n\n let lastTimeoutResult = await setTimeout(remainingDelay, value, options);\n\n for (let i = 0; i < fullTimeouts; i++) {\n lastTimeoutResult = await setTimeout(maxDelay, value, options);\n }\n\n return lastTimeoutResult;\n}\n","import { clock } from \"../clock-api\";\nimport {\n BatchTaskRunExecutionResult,\n ProdChildToWorkerMessages,\n ProdWorkerToChildMessages,\n TaskRunContext,\n TaskRunExecution,\n TaskRunExecutionResult,\n} from \"../schemas\";\nimport { unboundedTimeout } from \"../utils/timers\";\nimport { ZodIpcConnection } from \"../zodIpc\";\nimport { RuntimeManager } from \"./manager\";\n\nexport type ProdRuntimeManagerOptions = {\n waitThresholdInMs?: number;\n};\n\nexport class ProdRuntimeManager implements RuntimeManager {\n _taskWaits: Map<string, { resolve: (value: TaskRunExecutionResult) => void }> = new Map();\n\n _batchWaits: Map<\n string,\n { resolve: (value: BatchTaskRunExecutionResult) => void; reject: (err?: any) => void }\n > = new Map();\n\n _waitForRestore: { resolve: (value: \"restore\") => void; reject: (err?: any) => void } | undefined;\n\n constructor(\n private ipc: ZodIpcConnection<\n typeof ProdWorkerToChildMessages,\n typeof ProdChildToWorkerMessages\n >,\n private options: ProdRuntimeManagerOptions = {}\n ) {}\n\n disable(): void {\n // do nothing\n }\n\n async waitForDuration(ms: number): Promise<void> {\n const now = Date.now();\n\n const resolveAfterDuration = unboundedTimeout(ms, \"duration\" as const);\n\n if (ms <= this.waitThresholdInMs) {\n await resolveAfterDuration;\n return;\n }\n\n const waitForRestore = new Promise<\"restore\">((resolve, reject) => {\n this._waitForRestore = { resolve, reject };\n });\n\n const { willCheckpointAndRestore } = await this.ipc.sendWithAck(\"WAIT_FOR_DURATION\", {\n ms,\n now,\n });\n\n if (!willCheckpointAndRestore) {\n await resolveAfterDuration;\n return;\n }\n\n this.ipc.send(\"READY_FOR_CHECKPOINT\", {});\n\n // Don't wait for checkpoint beyond the requested wait duration\n await Promise.race([waitForRestore, resolveAfterDuration]);\n\n // The coordinator can then cancel any in-progress checkpoints\n this.ipc.send(\"CANCEL_CHECKPOINT\", {});\n }\n\n resumeAfterRestore(): void {\n if (!this._waitForRestore) {\n return;\n }\n\n // Resets the clock to the current time\n clock.reset();\n\n this._waitForRestore.resolve(\"restore\");\n this._waitForRestore = undefined;\n }\n\n async waitUntil(date: Date): Promise<void> {\n return this.waitForDuration(date.getTime() - Date.now());\n }\n\n async waitForTask(params: { id: string; ctx: TaskRunContext }): Promise<TaskRunExecutionResult> {\n const promise = new Promise<TaskRunExecutionResult>((resolve) => {\n this._taskWaits.set(params.id, { resolve });\n });\n\n await this.ipc.send(\"WAIT_FOR_TASK\", {\n friendlyId: params.id,\n });\n\n const result = await promise;\n\n clock.reset();\n\n return result;\n }\n\n async waitForBatch(params: {\n id: string;\n runs: string[];\n ctx: TaskRunContext;\n }): Promise<BatchTaskRunExecutionResult> {\n if (!params.runs.length) {\n return Promise.resolve({ id: params.id, items: [] });\n }\n\n const promise = Promise.all(\n params.runs.map((runId) => {\n return new Promise<TaskRunExecutionResult>((resolve, reject) => {\n this._taskWaits.set(runId, { resolve });\n });\n })\n );\n\n await this.ipc.send(\"WAIT_FOR_BATCH\", {\n batchFriendlyId: params.id,\n runFriendlyIds: params.runs,\n });\n\n const results = await promise;\n\n clock.reset();\n\n return {\n id: params.id,\n items: results,\n };\n }\n\n resumeTask(completion: TaskRunExecutionResult, execution: TaskRunExecution): void {\n const wait = this._taskWaits.get(execution.run.id);\n\n if (!wait) {\n return;\n }\n\n wait.resolve(completion);\n\n this._taskWaits.delete(execution.run.id);\n }\n\n private get waitThresholdInMs(): number {\n return this.options.waitThresholdInMs ?? 30_000;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/v3/utils/platform.ts","../../../src/v3/utils/globals.ts","../../../src/v3/clock/simpleClock.ts","../../../src/v3/clock/index.ts","../../../src/v3/clock-api.ts","../../../src/v3/utils/timers.ts","../../../src/v3/runtime/prodRuntimeManager.ts"],"names":["_globalThis","globalThis","global","GLOBAL_TRIGGER_DOT_DEV_KEY","Symbol","for","_global","registerGlobal","type","instance","allowOverride","api","err","Error","getGlobal","PreciseDate","SimpleClock","preciseNow","now","nowStruct","toStruct","seconds","nanos","reset","API_NAME","SIMPLE_CLOCK","ClockAPI","getInstance","_instance","setGlobalClock","clock","setInterval","setTimeout","unboundedTimeout","delay","value","options","maxDelay","fullTimeouts","Math","floor","remainingDelay","lastTimeoutResult","i","checkpointSafeTimeout","scanIntervalMs","start","Date","ProdRuntimeManager","constructor","ipc","_taskWaits","Map","_batchWaits","disable","waitForDuration","ms","internalTimeout","checkpointSafeInternalTimeout","waitThresholdInMs","externalResume","Promise","resolve","reject","_waitForDuration","willCheckpointAndRestore","sendWithAck","send","race","checkpointCanceled","version","reason","resumeAfterDuration","process","stdout","write","JSON","stringify","console","log","undefined","waitUntil","date","getTime","waitForTask","params","promise","set","id","friendlyId","result","waitForBatch","runs","length","items","all","map","runId","batchFriendlyId","runFriendlyIds","results","resumeTask","completion","execution","wait","get","run","delete"],"mappings":";;;;;;;;;;;;;;;;;AAAO,IAAMA,cAAc,OAAOC,eAAe,WAAWA,aAAaC;;;ACMzE,IAAMC,6BAA6BC,OAAOC,IAAI,oBAAoB;AAElE,IAAMC,UAAUN;AAET,SAASO,eACdC,MACAC,UACAC,gBAAgB,OACP;AACT,QAAMC,MAAOL,QAAQH,0BAAAA,IAA8BG,QAAQH,0BAAAA,KAA+B,CAAC;AAE3F,MAAI,CAACO,iBAAiBC,IAAIH,IAAAA,GAAO;AAE/B,UAAMI,MAAM,IAAIC,MAAM,yDAAyDL,IAAAA,EAAM;AACrF,WAAO;EACT;AAEAG,MAAIH,IAAAA,IAAQC;AAEZ,SAAO;AACT;AAhBgBF;AAkBT,SAASO,UACdN,MAC0C;AAC1C,SAAOF,QAAQH,0BAAAA,IAA8BK,IAAAA;AAC/C;AAJgBM;;;AC5BhB,SAASC,mBAAmB;AAGrB,IAAMC,eAAN,MAAMA,aAAAA;EACXC,aAA+B;AAC7B,UAAMC,MAAM,IAAIH,YAAAA;AAChB,UAAMI,YAAYD,IAAIE,SAAQ;AAE9B,WAAO;MAACD,UAAUE;MAASF,UAAUG;;EACvC;EAEAC,QAAQ;EAER;AACF;AAXaP;AAAN,IAAMA,cAAN;;;ACHP,IAAMQ,WAAW;AAMjB,IAAMC,eAAe,IAAIT,YAAAA;AANzB;AAQO,IAAMU,YAAN,MAAMA,UAAAA;EAGX,cAAsB;AAsBtB;EAtBuB;EAEvB,OAAcC,cAAwB;AACpC,QAAI,CAAC,KAAKC,WAAW;AACnB,WAAKA,YAAY,IAAIF,UAAAA;IACvB;AAEA,WAAO,KAAKE;EACd;EAEOC,eAAeC,QAAuB;AAC3C,WAAOvB,eAAeiB,UAAUM,MAAAA;EAClC;EAEOb,aAAwB;AAC7B,WAAO,sBAAK,wBAAL,WAAiBA,WAAU;EACpC;EAEOM,QAAc;AACnB,0BAAK,wBAAL,WAAiBA,MAAK;EACxB;AAKF;AAHE;cAAS,kCAAU;AACjB,SAAOT,UAAUU,QAAAA,KAAaC;AAChC,GAFS;AAzBEC;AAAN,IAAMA,WAAN;;;ACJA,IAAMI,QAAQJ,SAASC,YAAW;;;ACHzC,SAASI,aAAaC,kBAAkB;AAExC,eAAsBC,iBACpBC,QAAgB,GAChBC,OACAC,SACY;AACZ,QAAMC,WAAW;AAEjB,QAAMC,eAAeC,KAAKC,MAAMN,QAAQG,QAAAA;AACxC,QAAMI,iBAAiBP,QAAQG;AAE/B,MAAIK,oBAAoB,MAAMV,WAAWS,gBAAgBN,OAAOC,OAAAA;AAEhE,WAASO,IAAI,GAAGA,IAAIL,cAAcK,KAAK;AACrCD,wBAAoB,MAAMV,WAAWK,UAAUF,OAAOC,OAAAA;EACxD;AAEA,SAAOM;AACT;AAjBsBT;AAmBtB,eAAsBW,sBAAsBV,QAAgB,GAAkB;AAC5E,QAAMW,iBAAiB;AAGvB,mBAAiBC,SAASf,YAAYc,gBAAgBE,KAAK7B,IAAG,CAAA,GAAK;AACjE,QAAI6B,KAAK7B,IAAG,IAAK4B,QAAQZ,OAAO;AAC9B;IACF;EACF;AACF;AATsBU;;;ACJf,IAAMI,sBAAN,MAAMA,oBAAAA;EAYXC,YACUC,KAIAd,UAAqC,CAAC,GAC9C;eALQc;mBAIAd;SAhBVe,aAAgF,oBAAIC,IAAAA;SAEpFC,cAGI,oBAAID,IAAAA;EAYL;EAEHE,UAAgB;EAEhB;EAEA,MAAMC,gBAAgBC,IAA2B;AAC/C,UAAMtC,MAAM6B,KAAK7B,IAAG;AAEpB,UAAMuC,kBAAkBxB,iBAAiBuB,IAAI,UAAA;AAC7C,UAAME,gCAAgCd,sBAAsBY,EAAAA;AAE5D,QAAIA,MAAM,KAAKG,mBAAmB;AAChC,YAAMF;AACN;IACF;AAEA,UAAMG,iBAAiB,IAAIC,QAAoB,CAACC,SAASC,WAAW;AAClE,WAAKC,mBAAmB;QAAEF;QAASC;MAAO;IAC5C,CAAA;AAEA,UAAM,EAAEE,yBAAwB,IAAK,MAAM,KAAKf,IAAIgB,YAAY,qBAAqB;MACnFV;MACAtC;IACF,CAAA;AAEA,QAAI,CAAC+C,0BAA0B;AAC7B,YAAMR;AACN;IACF;AAEA,SAAKP,IAAIiB,KAAK,wBAAwB,CAAC,CAAA;AAIvC,UAAMN,QAAQO,KAAK;MAACX;MAAiBC;KAA8B;AAGnE5B,UAAMP,MAAK;AAGX,UAAM,EAAE8C,oBAAoBC,QAAO,IAAK,MAAM,KAAKpB,IAAIgB,YAAY,qBAAqB;MACtFI,SAAS;MACTC,QAAQ;IACV,CAAA;AAEA,QAAIF,oBAAoB;AAEtB;IACF;AAGA,UAAMT;EACR;EAEAY,sBAA4B;AAC1B,QAAI,CAAC,KAAKR,kBAAkB;AAC1B;IACF;AAEAS,YAAQC,OAAOC,MAAM,KAAA;AACrBF,YAAQC,OAAOC,MAAMC,KAAKC,UAAU/C,MAAMb,WAAU,CAAA,CAAA;AAEpD6D,YAAQC,IAAI,OAAOjD,MAAMb,WAAU,CAAA;AAGnCa,UAAMP,MAAK;AAEXuD,YAAQC,IAAI,QAAQjD,MAAMb,WAAU,CAAA;AAEpCwD,YAAQC,OAAOC,MAAM,MAAA;AACrBF,YAAQC,OAAOC,MAAMC,KAAKC,UAAU/C,MAAMb,WAAU,CAAA,CAAA;AAEpD,SAAK+C,iBAAiBF,QAAQ,UAAA;AAC9B,SAAKE,mBAAmBgB;EAC1B;EAEA,MAAMC,UAAUC,MAA2B;AACzC,WAAO,KAAK3B,gBAAgB2B,KAAKC,QAAO,IAAKpC,KAAK7B,IAAG,CAAA;EACvD;EAEA,MAAMkE,YAAYC,QAA8E;AAC9F,UAAMC,UAAU,IAAIzB,QAAgC,CAACC,YAAY;AAC/D,WAAKX,WAAWoC,IAAIF,OAAOG,IAAI;QAAE1B;MAAQ,CAAA;IAC3C,CAAA;AAEA,UAAM,KAAKZ,IAAIiB,KAAK,iBAAiB;MACnCsB,YAAYJ,OAAOG;IACrB,CAAA;AAEA,UAAME,SAAS,MAAMJ;AAErBxD,UAAMP,MAAK;AAEX,WAAOmE;EACT;EAEA,MAAMC,aAAaN,QAIsB;AACvC,QAAI,CAACA,OAAOO,KAAKC,QAAQ;AACvB,aAAOhC,QAAQC,QAAQ;QAAE0B,IAAIH,OAAOG;QAAIM,OAAO,CAAA;MAAG,CAAA;IACpD;AAEA,UAAMR,UAAUzB,QAAQkC,IACtBV,OAAOO,KAAKI,IAAI,CAACC,UAAU;AACzB,aAAO,IAAIpC,QAAgC,CAACC,SAASC,WAAW;AAC9D,aAAKZ,WAAWoC,IAAIU,OAAO;UAAEnC;QAAQ,CAAA;MACvC,CAAA;IACF,CAAA,CAAA;AAGF,UAAM,KAAKZ,IAAIiB,KAAK,kBAAkB;MACpC+B,iBAAiBb,OAAOG;MACxBW,gBAAgBd,OAAOO;IACzB,CAAA;AAEA,UAAMQ,UAAU,MAAMd;AAEtBxD,UAAMP,MAAK;AAEX,WAAO;MACLiE,IAAIH,OAAOG;MACXM,OAAOM;IACT;EACF;EAEAC,WAAWC,YAAoCC,WAAmC;AAChF,UAAMC,OAAO,KAAKrD,WAAWsD,IAAIF,UAAUG,IAAIlB,EAAE;AAEjD,QAAI,CAACgB,MAAM;AACT;IACF;AAEAA,SAAK1C,QAAQwC,UAAAA;AAEb,SAAKnD,WAAWwD,OAAOJ,UAAUG,IAAIlB,EAAE;EACzC;EAEA,IAAY7B,oBAA4B;AACtC,WAAO,KAAKvB,QAAQuB,qBAAqB;EAC3C;AACF;AAlKaX;AAAN,IAAMA,qBAAN","sourcesContent":["export const _globalThis = typeof globalThis === \"object\" ? globalThis : global;\n","import { Clock } from \"../clock/clock\";\nimport type { RuntimeManager } from \"../runtime/manager\";\nimport { TaskCatalog } from \"../task-catalog/catalog\";\nimport { TaskContext } from \"../taskContext/types\";\nimport { _globalThis } from \"./platform\";\n\nconst GLOBAL_TRIGGER_DOT_DEV_KEY = Symbol.for(`dev.trigger.ts.api`);\n\nconst _global = _globalThis as TriggerDotDevGlobal;\n\nexport function registerGlobal<Type extends keyof TriggerDotDevGlobalAPI>(\n type: Type,\n instance: TriggerDotDevGlobalAPI[Type],\n allowOverride = false\n): boolean {\n const api = (_global[GLOBAL_TRIGGER_DOT_DEV_KEY] = _global[GLOBAL_TRIGGER_DOT_DEV_KEY] ?? {});\n\n if (!allowOverride && api[type]) {\n // already registered an API of this type\n const err = new Error(`trigger.dev: Attempted duplicate registration of API: ${type}`);\n return false;\n }\n\n api[type] = instance;\n\n return true;\n}\n\nexport function getGlobal<Type extends keyof TriggerDotDevGlobalAPI>(\n type: Type\n): TriggerDotDevGlobalAPI[Type] | undefined {\n return _global[GLOBAL_TRIGGER_DOT_DEV_KEY]?.[type];\n}\n\nexport function unregisterGlobal(type: keyof TriggerDotDevGlobalAPI) {\n const api = _global[GLOBAL_TRIGGER_DOT_DEV_KEY];\n\n if (api) {\n delete api[type];\n }\n}\n\ntype TriggerDotDevGlobal = {\n [GLOBAL_TRIGGER_DOT_DEV_KEY]?: TriggerDotDevGlobalAPI;\n};\n\ntype TriggerDotDevGlobalAPI = {\n runtime?: RuntimeManager;\n logger?: any;\n clock?: Clock;\n [\"task-catalog\"]?: TaskCatalog;\n [\"task-context\"]?: TaskContext;\n};\n","import { PreciseDate } from \"@google-cloud/precise-date\";\nimport { Clock } from \"./clock\";\n\nexport class SimpleClock implements Clock {\n preciseNow(): [number, number] {\n const now = new PreciseDate();\n const nowStruct = now.toStruct();\n\n return [nowStruct.seconds, nowStruct.nanos];\n }\n\n reset() {\n // do nothing\n }\n}\n","const API_NAME = \"clock\";\n\nimport { getGlobal, registerGlobal } from \"../utils/globals\";\nimport type { Clock, ClockTime } from \"./clock\";\nimport { SimpleClock } from \"./simpleClock\";\n\nconst SIMPLE_CLOCK = new SimpleClock();\n\nexport class ClockAPI {\n private static _instance?: ClockAPI;\n\n private constructor() {}\n\n public static getInstance(): ClockAPI {\n if (!this._instance) {\n this._instance = new ClockAPI();\n }\n\n return this._instance;\n }\n\n public setGlobalClock(clock: Clock): boolean {\n return registerGlobal(API_NAME, clock);\n }\n\n public preciseNow(): ClockTime {\n return this.#getClock().preciseNow();\n }\n\n public reset(): void {\n this.#getClock().reset();\n }\n\n #getClock(): Clock {\n return getGlobal(API_NAME) ?? SIMPLE_CLOCK;\n }\n}\n","// Split module-level variable definition into separate files to allow\n// tree-shaking on each api instance.\nimport { ClockAPI } from \"./clock\";\n/** Entrypoint for clock API */\nexport const clock = ClockAPI.getInstance();\n","import { TimerOptions } from \"node:timers\";\nimport { setInterval, setTimeout } from \"node:timers/promises\";\n\nexport async function unboundedTimeout<T = void>(\n delay: number = 0,\n value?: T,\n options?: TimerOptions\n): Promise<T> {\n const maxDelay = 2147483647; // Highest value that will fit in a 32-bit signed integer\n\n const fullTimeouts = Math.floor(delay / maxDelay);\n const remainingDelay = delay % maxDelay;\n\n let lastTimeoutResult = await setTimeout(remainingDelay, value, options);\n\n for (let i = 0; i < fullTimeouts; i++) {\n lastTimeoutResult = await setTimeout(maxDelay, value, options);\n }\n\n return lastTimeoutResult;\n}\n\nexport async function checkpointSafeTimeout(delay: number = 0): Promise<void> {\n const scanIntervalMs = 1000;\n\n // Every scanIntervalMs, check if delay has elapsed\n for await (const start of setInterval(scanIntervalMs, Date.now())) {\n if (Date.now() - start > delay) {\n break;\n }\n }\n}\n","import { clock } from \"../clock-api\";\nimport { logger } from \"../logger-api\";\nimport {\n BatchTaskRunExecutionResult,\n ProdChildToWorkerMessages,\n ProdWorkerToChildMessages,\n TaskRunContext,\n TaskRunExecution,\n TaskRunExecutionResult,\n} from \"../schemas\";\nimport { checkpointSafeTimeout, unboundedTimeout } from \"../utils/timers\";\nimport { ZodIpcConnection } from \"../zodIpc\";\nimport { RuntimeManager } from \"./manager\";\n\nexport type ProdRuntimeManagerOptions = {\n waitThresholdInMs?: number;\n};\n\nexport class ProdRuntimeManager implements RuntimeManager {\n _taskWaits: Map<string, { resolve: (value: TaskRunExecutionResult) => void }> = new Map();\n\n _batchWaits: Map<\n string,\n { resolve: (value: BatchTaskRunExecutionResult) => void; reject: (err?: any) => void }\n > = new Map();\n\n _waitForDuration:\n | { resolve: (value: \"external\") => void; reject: (err?: any) => void }\n | undefined;\n\n constructor(\n private ipc: ZodIpcConnection<\n typeof ProdWorkerToChildMessages,\n typeof ProdChildToWorkerMessages\n >,\n private options: ProdRuntimeManagerOptions = {}\n ) {}\n\n disable(): void {\n // do nothing\n }\n\n async waitForDuration(ms: number): Promise<void> {\n const now = Date.now();\n\n const internalTimeout = unboundedTimeout(ms, \"internal\" as const);\n const checkpointSafeInternalTimeout = checkpointSafeTimeout(ms);\n\n if (ms <= this.waitThresholdInMs) {\n await internalTimeout;\n return;\n }\n\n const externalResume = new Promise<\"external\">((resolve, reject) => {\n this._waitForDuration = { resolve, reject };\n });\n\n const { willCheckpointAndRestore } = await this.ipc.sendWithAck(\"WAIT_FOR_DURATION\", {\n ms,\n now,\n });\n\n if (!willCheckpointAndRestore) {\n await internalTimeout;\n return;\n }\n\n this.ipc.send(\"READY_FOR_CHECKPOINT\", {});\n\n // internalTimeout acts as a backup and will be accurate if the checkpoint never happens\n // checkpointSafeInternalTimeout is accurate even after non-simulated restores\n await Promise.race([internalTimeout, checkpointSafeInternalTimeout]);\n\n // Resets the clock to the current time\n clock.reset();\n\n // The coordinator should cancel any in-progress checkpoints\n const { checkpointCanceled, version } = await this.ipc.sendWithAck(\"CANCEL_CHECKPOINT\", {\n version: \"v2\",\n reason: \"WAIT_FOR_DURATION\",\n });\n\n if (checkpointCanceled) {\n // There won't be a checkpoint or external resume and we've already completed our internal timeout\n return;\n }\n\n // No checkpoint was canceled, so we were checkpointed. We need to wait for the external resume message.\n await externalResume;\n }\n\n resumeAfterDuration(): void {\n if (!this._waitForDuration) {\n return;\n }\n\n process.stdout.write(\"pre\");\n process.stdout.write(JSON.stringify(clock.preciseNow()));\n\n console.log(\"pre\", clock.preciseNow());\n\n // Resets the clock to the current time\n clock.reset();\n\n console.log(\"post\", clock.preciseNow());\n\n process.stdout.write(\"post\");\n process.stdout.write(JSON.stringify(clock.preciseNow()));\n\n this._waitForDuration.resolve(\"external\");\n this._waitForDuration = undefined;\n }\n\n async waitUntil(date: Date): Promise<void> {\n return this.waitForDuration(date.getTime() - Date.now());\n }\n\n async waitForTask(params: { id: string; ctx: TaskRunContext }): Promise<TaskRunExecutionResult> {\n const promise = new Promise<TaskRunExecutionResult>((resolve) => {\n this._taskWaits.set(params.id, { resolve });\n });\n\n await this.ipc.send(\"WAIT_FOR_TASK\", {\n friendlyId: params.id,\n });\n\n const result = await promise;\n\n clock.reset();\n\n return result;\n }\n\n async waitForBatch(params: {\n id: string;\n runs: string[];\n ctx: TaskRunContext;\n }): Promise<BatchTaskRunExecutionResult> {\n if (!params.runs.length) {\n return Promise.resolve({ id: params.id, items: [] });\n }\n\n const promise = Promise.all(\n params.runs.map((runId) => {\n return new Promise<TaskRunExecutionResult>((resolve, reject) => {\n this._taskWaits.set(runId, { resolve });\n });\n })\n );\n\n await this.ipc.send(\"WAIT_FOR_BATCH\", {\n batchFriendlyId: params.id,\n runFriendlyIds: params.runs,\n });\n\n const results = await promise;\n\n clock.reset();\n\n return {\n id: params.id,\n items: results,\n };\n }\n\n resumeTask(completion: TaskRunExecutionResult, execution: TaskRunExecution): void {\n const wait = this._taskWaits.get(execution.run.id);\n\n if (!wait) {\n return;\n }\n\n wait.resolve(completion);\n\n this._taskWaits.delete(execution.run.id);\n }\n\n private get waitThresholdInMs(): number {\n return this.options.waitThresholdInMs ?? 30_000;\n }\n}\n"]}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import * as logsAPI from '@opentelemetry/api-logs';
|
|
2
2
|
import { TracingSDK } from '../otel/index.mjs';
|
|
3
3
|
export { TracingDiagnosticLogLevel, recordSpanException } from '../otel/index.mjs';
|
|
4
|
-
import { p as TaskRunExecution, T as TaskRunExecutionResult } from '../../manager-
|
|
5
|
-
export { R as RuntimeManager } from '../../manager-
|
|
6
|
-
import { B as BackgroundWorkerProperties
|
|
7
|
-
import {
|
|
8
|
-
export { O as OtelTaskLogger,
|
|
4
|
+
import { p as TaskRunExecution, T as TaskRunExecutionResult } from '../../manager-WNMVbgHf.mjs';
|
|
5
|
+
export { R as RuntimeManager } from '../../manager-WNMVbgHf.mjs';
|
|
6
|
+
import { B as BackgroundWorkerProperties } from '../../messages-vq7Bk4Ap.mjs';
|
|
7
|
+
import { f as TriggerTracer, p as Config, G as ProjectConfig, B as HandleErrorFunction, c as TaskMetadataWithFunctions, C as Clock, a as ClockTime, b as TaskCatalog, d as TaskFileMetadata, e as TaskMetadataWithFilePath } from '../../catalog-g2Qc0Ukb.mjs';
|
|
8
|
+
export { O as OtelTaskLogger, J as logLevels } from '../../catalog-g2Qc0Ukb.mjs';
|
|
9
9
|
import { PreciseDate } from '@google-cloud/precise-date';
|
|
10
10
|
import { LogRecordProcessor, LogRecord } from '@opentelemetry/sdk-logs';
|
|
11
11
|
import { SpanProcessor, Span } from '@opentelemetry/sdk-trace-base';
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import * as logsAPI from '@opentelemetry/api-logs';
|
|
2
2
|
import { TracingSDK } from '../otel/index.js';
|
|
3
3
|
export { TracingDiagnosticLogLevel, recordSpanException } from '../otel/index.js';
|
|
4
|
-
import { p as TaskRunExecution, T as TaskRunExecutionResult } from '../../manager-
|
|
5
|
-
export { R as RuntimeManager } from '../../manager-
|
|
6
|
-
import { B as BackgroundWorkerProperties
|
|
7
|
-
import {
|
|
8
|
-
export { O as OtelTaskLogger,
|
|
4
|
+
import { p as TaskRunExecution, T as TaskRunExecutionResult } from '../../manager-WNMVbgHf.js';
|
|
5
|
+
export { R as RuntimeManager } from '../../manager-WNMVbgHf.js';
|
|
6
|
+
import { B as BackgroundWorkerProperties } from '../../messages-vq7Bk4Ap.js';
|
|
7
|
+
import { f as TriggerTracer, p as Config, G as ProjectConfig, B as HandleErrorFunction, c as TaskMetadataWithFunctions, C as Clock, a as ClockTime, b as TaskCatalog, d as TaskFileMetadata, e as TaskMetadataWithFilePath } from '../../catalog-XNyNDUOF.js';
|
|
8
|
+
export { O as OtelTaskLogger, J as logLevels } from '../../catalog-XNyNDUOF.js';
|
|
9
9
|
import { PreciseDate } from '@google-cloud/precise-date';
|
|
10
10
|
import { LogRecordProcessor, LogRecord } from '@opentelemetry/sdk-logs';
|
|
11
11
|
import { SpanProcessor, Span } from '@opentelemetry/sdk-trace-base';
|
package/dist/v3/workers/index.js
CHANGED
|
@@ -133,9 +133,14 @@ var SemanticInternalAttributes = {
|
|
|
133
133
|
};
|
|
134
134
|
|
|
135
135
|
// src/v3/utils/flattenAttributes.ts
|
|
136
|
+
var NULL_SENTINEL = "$@null((";
|
|
136
137
|
function flattenAttributes(obj, prefix) {
|
|
137
138
|
const result = {};
|
|
138
|
-
if (
|
|
139
|
+
if (obj === void 0) {
|
|
140
|
+
return result;
|
|
141
|
+
}
|
|
142
|
+
if (obj === null) {
|
|
143
|
+
result[prefix || ""] = NULL_SENTINEL;
|
|
139
144
|
return result;
|
|
140
145
|
}
|
|
141
146
|
if (typeof obj === "string") {
|
|
@@ -151,13 +156,17 @@ function flattenAttributes(obj, prefix) {
|
|
|
151
156
|
return result;
|
|
152
157
|
}
|
|
153
158
|
for (const [key, value] of Object.entries(obj)) {
|
|
154
|
-
const newPrefix = `${prefix ? `${prefix}.` : ""}${key}`;
|
|
159
|
+
const newPrefix = `${prefix ? `${prefix}.` : ""}${Array.isArray(obj) ? `[${key}]` : key}`;
|
|
155
160
|
if (Array.isArray(value)) {
|
|
156
161
|
for (let i = 0; i < value.length; i++) {
|
|
157
162
|
if (typeof value[i] === "object" && value[i] !== null) {
|
|
158
163
|
Object.assign(result, flattenAttributes(value[i], `${newPrefix}.[${i}]`));
|
|
159
164
|
} else {
|
|
160
|
-
|
|
165
|
+
if (value[i] === null) {
|
|
166
|
+
result[`${newPrefix}.[${i}]`] = NULL_SENTINEL;
|
|
167
|
+
} else {
|
|
168
|
+
result[`${newPrefix}.[${i}]`] = value[i];
|
|
169
|
+
}
|
|
161
170
|
}
|
|
162
171
|
}
|
|
163
172
|
} else if (isRecord(value)) {
|
|
@@ -165,6 +174,8 @@ function flattenAttributes(obj, prefix) {
|
|
|
165
174
|
} else {
|
|
166
175
|
if (typeof value === "number" || typeof value === "string" || typeof value === "boolean") {
|
|
167
176
|
result[newPrefix] = value;
|
|
177
|
+
} else if (value === null) {
|
|
178
|
+
result[newPrefix] = NULL_SENTINEL;
|
|
168
179
|
}
|
|
169
180
|
}
|
|
170
181
|
}
|
|
@@ -644,8 +655,8 @@ var BatchTaskRunExecutionResult = zod.z.object({
|
|
|
644
655
|
items: TaskRunExecutionResult.array()
|
|
645
656
|
});
|
|
646
657
|
|
|
647
|
-
// src/v3/schemas/
|
|
648
|
-
|
|
658
|
+
// src/v3/schemas/schemas.ts
|
|
659
|
+
zod.z.enum([
|
|
649
660
|
"PRODUCTION",
|
|
650
661
|
"STAGING",
|
|
651
662
|
"DEVELOPMENT",
|
|
@@ -671,7 +682,7 @@ var Machine = zod.z.object({
|
|
|
671
682
|
cpu: MachineCpu,
|
|
672
683
|
memory: MachineMemory
|
|
673
684
|
});
|
|
674
|
-
|
|
685
|
+
zod.z.object({
|
|
675
686
|
execution: TaskRunExecution,
|
|
676
687
|
traceContext: zod.z.record(zod.z.unknown()),
|
|
677
688
|
environment: zod.z.record(zod.z.string()).optional()
|
|
@@ -688,92 +699,6 @@ zod.z.object({
|
|
|
688
699
|
traceContext: zod.z.record(zod.z.unknown()),
|
|
689
700
|
environment: zod.z.record(zod.z.string()).optional()
|
|
690
701
|
});
|
|
691
|
-
var BackgroundWorkerServerMessages = zod.z.discriminatedUnion("type", [
|
|
692
|
-
zod.z.object({
|
|
693
|
-
type: zod.z.literal("EXECUTE_RUNS"),
|
|
694
|
-
payloads: zod.z.array(TaskRunExecutionPayload)
|
|
695
|
-
}),
|
|
696
|
-
zod.z.object({
|
|
697
|
-
type: zod.z.literal("CANCEL_ATTEMPT"),
|
|
698
|
-
taskAttemptId: zod.z.string(),
|
|
699
|
-
taskRunId: zod.z.string()
|
|
700
|
-
}),
|
|
701
|
-
zod.z.object({
|
|
702
|
-
type: zod.z.literal("SCHEDULE_ATTEMPT"),
|
|
703
|
-
image: zod.z.string(),
|
|
704
|
-
version: zod.z.string(),
|
|
705
|
-
machine: Machine,
|
|
706
|
-
// identifiers
|
|
707
|
-
id: zod.z.string(),
|
|
708
|
-
envId: zod.z.string(),
|
|
709
|
-
envType: EnvironmentType,
|
|
710
|
-
orgId: zod.z.string(),
|
|
711
|
-
projectId: zod.z.string(),
|
|
712
|
-
runId: zod.z.string()
|
|
713
|
-
})
|
|
714
|
-
]);
|
|
715
|
-
({
|
|
716
|
-
SERVER_READY: zod.z.object({
|
|
717
|
-
version: zod.z.literal("v1").default("v1"),
|
|
718
|
-
id: zod.z.string()
|
|
719
|
-
}),
|
|
720
|
-
BACKGROUND_WORKER_MESSAGE: zod.z.object({
|
|
721
|
-
version: zod.z.literal("v1").default("v1"),
|
|
722
|
-
backgroundWorkerId: zod.z.string(),
|
|
723
|
-
data: BackgroundWorkerServerMessages
|
|
724
|
-
})
|
|
725
|
-
});
|
|
726
|
-
var BackgroundWorkerClientMessages = zod.z.discriminatedUnion("type", [
|
|
727
|
-
zod.z.object({
|
|
728
|
-
version: zod.z.literal("v1").default("v1"),
|
|
729
|
-
type: zod.z.literal("TASK_RUN_COMPLETED"),
|
|
730
|
-
completion: TaskRunExecutionResult,
|
|
731
|
-
execution: TaskRunExecution
|
|
732
|
-
}),
|
|
733
|
-
zod.z.object({
|
|
734
|
-
version: zod.z.literal("v1").default("v1"),
|
|
735
|
-
type: zod.z.literal("TASK_HEARTBEAT"),
|
|
736
|
-
id: zod.z.string()
|
|
737
|
-
})
|
|
738
|
-
]);
|
|
739
|
-
var BackgroundWorkerProperties = zod.z.object({
|
|
740
|
-
id: zod.z.string(),
|
|
741
|
-
version: zod.z.string(),
|
|
742
|
-
contentHash: zod.z.string()
|
|
743
|
-
});
|
|
744
|
-
({
|
|
745
|
-
READY_FOR_TASKS: zod.z.object({
|
|
746
|
-
version: zod.z.literal("v1").default("v1"),
|
|
747
|
-
backgroundWorkerId: zod.z.string()
|
|
748
|
-
}),
|
|
749
|
-
BACKGROUND_WORKER_DEPRECATED: zod.z.object({
|
|
750
|
-
version: zod.z.literal("v1").default("v1"),
|
|
751
|
-
backgroundWorkerId: zod.z.string()
|
|
752
|
-
}),
|
|
753
|
-
BACKGROUND_WORKER_MESSAGE: zod.z.object({
|
|
754
|
-
version: zod.z.literal("v1").default("v1"),
|
|
755
|
-
backgroundWorkerId: zod.z.string(),
|
|
756
|
-
data: BackgroundWorkerClientMessages
|
|
757
|
-
})
|
|
758
|
-
});
|
|
759
|
-
({
|
|
760
|
-
EXECUTE_TASK_RUN: zod.z.object({
|
|
761
|
-
version: zod.z.literal("v1").default("v1"),
|
|
762
|
-
execution: TaskRunExecution,
|
|
763
|
-
traceContext: zod.z.record(zod.z.unknown()),
|
|
764
|
-
metadata: BackgroundWorkerProperties
|
|
765
|
-
}),
|
|
766
|
-
TASK_RUN_COMPLETED_NOTIFICATION: zod.z.object({
|
|
767
|
-
version: zod.z.literal("v1").default("v1"),
|
|
768
|
-
completion: TaskRunExecutionResult,
|
|
769
|
-
execution: TaskRunExecution
|
|
770
|
-
}),
|
|
771
|
-
CLEANUP: zod.z.object({
|
|
772
|
-
version: zod.z.literal("v1").default("v1"),
|
|
773
|
-
flush: zod.z.boolean().default(false),
|
|
774
|
-
kill: zod.z.boolean().default(true)
|
|
775
|
-
})
|
|
776
|
-
});
|
|
777
702
|
var FixedWindowRateLimit = zod.z.object({
|
|
778
703
|
type: zod.z.literal("fixed-window"),
|
|
779
704
|
limit: zod.z.number(),
|
|
@@ -878,150 +803,47 @@ var TaskFileMetadata = zod.z.object({
|
|
|
878
803
|
filePath: zod.z.string(),
|
|
879
804
|
exportName: zod.z.string()
|
|
880
805
|
});
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
}
|
|
894
|
-
|
|
895
|
-
version: zod.z.literal("v1").default("v1"),
|
|
896
|
-
tasks: zod.z.unknown(),
|
|
897
|
-
zodIssues: zod.z.custom((v) => {
|
|
898
|
-
return Array.isArray(v) && v.every((issue) => typeof issue === "object" && "message" in issue);
|
|
899
|
-
})
|
|
900
|
-
});
|
|
901
|
-
({
|
|
902
|
-
TASK_RUN_COMPLETED: zod.z.object({
|
|
903
|
-
version: zod.z.literal("v1").default("v1"),
|
|
904
|
-
execution: TaskRunExecution,
|
|
905
|
-
result: TaskRunExecutionResult
|
|
906
|
-
}),
|
|
907
|
-
TASKS_READY: zod.z.object({
|
|
908
|
-
version: zod.z.literal("v1").default("v1"),
|
|
909
|
-
tasks: TaskMetadataWithFilePath.array()
|
|
910
|
-
}),
|
|
911
|
-
TASKS_FAILED_TO_PARSE: TaskMetadataFailedToParseData,
|
|
912
|
-
TASK_HEARTBEAT: zod.z.object({
|
|
913
|
-
version: zod.z.literal("v1").default("v1"),
|
|
914
|
-
id: zod.z.string()
|
|
915
|
-
}),
|
|
916
|
-
READY_TO_DISPOSE: zod.z.undefined(),
|
|
917
|
-
WAIT_FOR_DURATION: zod.z.object({
|
|
918
|
-
version: zod.z.literal("v1").default("v1"),
|
|
919
|
-
ms: zod.z.number()
|
|
920
|
-
}),
|
|
921
|
-
WAIT_FOR_TASK: zod.z.object({
|
|
922
|
-
version: zod.z.literal("v1").default("v1"),
|
|
923
|
-
id: zod.z.string()
|
|
924
|
-
}),
|
|
925
|
-
WAIT_FOR_BATCH: zod.z.object({
|
|
926
|
-
version: zod.z.literal("v1").default("v1"),
|
|
927
|
-
id: zod.z.string(),
|
|
928
|
-
runs: zod.z.string().array()
|
|
929
|
-
}),
|
|
930
|
-
UNCAUGHT_EXCEPTION: UncaughtExceptionMessage
|
|
931
|
-
});
|
|
932
|
-
({
|
|
933
|
-
TASK_RUN_COMPLETED: {
|
|
934
|
-
message: zod.z.object({
|
|
935
|
-
version: zod.z.literal("v1").default("v1"),
|
|
936
|
-
execution: TaskRunExecution,
|
|
937
|
-
result: TaskRunExecutionResult
|
|
938
|
-
})
|
|
939
|
-
},
|
|
940
|
-
TASKS_READY: {
|
|
941
|
-
message: zod.z.object({
|
|
942
|
-
version: zod.z.literal("v1").default("v1"),
|
|
943
|
-
tasks: TaskMetadataWithFilePath.array()
|
|
944
|
-
})
|
|
945
|
-
},
|
|
946
|
-
TASKS_FAILED_TO_PARSE: {
|
|
947
|
-
message: TaskMetadataFailedToParseData
|
|
948
|
-
},
|
|
949
|
-
TASK_HEARTBEAT: {
|
|
950
|
-
message: zod.z.object({
|
|
951
|
-
version: zod.z.literal("v1").default("v1"),
|
|
952
|
-
id: zod.z.string()
|
|
953
|
-
})
|
|
954
|
-
},
|
|
955
|
-
READY_TO_DISPOSE: {
|
|
956
|
-
message: zod.z.undefined()
|
|
957
|
-
},
|
|
958
|
-
READY_FOR_CHECKPOINT: {
|
|
959
|
-
message: zod.z.object({
|
|
960
|
-
version: zod.z.literal("v1").default("v1")
|
|
961
|
-
})
|
|
962
|
-
},
|
|
963
|
-
CANCEL_CHECKPOINT: {
|
|
964
|
-
message: zod.z.object({
|
|
965
|
-
version: zod.z.literal("v1").default("v1")
|
|
966
|
-
})
|
|
967
|
-
},
|
|
968
|
-
WAIT_FOR_DURATION: {
|
|
969
|
-
message: zod.z.object({
|
|
970
|
-
version: zod.z.literal("v1").default("v1"),
|
|
971
|
-
ms: zod.z.number(),
|
|
972
|
-
now: zod.z.number()
|
|
973
|
-
}),
|
|
974
|
-
callback: zod.z.object({
|
|
975
|
-
willCheckpointAndRestore: zod.z.boolean()
|
|
976
|
-
})
|
|
977
|
-
},
|
|
978
|
-
WAIT_FOR_TASK: {
|
|
979
|
-
message: zod.z.object({
|
|
980
|
-
version: zod.z.literal("v1").default("v1"),
|
|
981
|
-
friendlyId: zod.z.string()
|
|
982
|
-
})
|
|
983
|
-
},
|
|
984
|
-
WAIT_FOR_BATCH: {
|
|
985
|
-
message: zod.z.object({
|
|
986
|
-
version: zod.z.literal("v1").default("v1"),
|
|
987
|
-
batchFriendlyId: zod.z.string(),
|
|
988
|
-
runFriendlyIds: zod.z.string().array()
|
|
989
|
-
})
|
|
990
|
-
},
|
|
991
|
-
UNCAUGHT_EXCEPTION: {
|
|
992
|
-
message: UncaughtExceptionMessage
|
|
993
|
-
}
|
|
994
|
-
});
|
|
995
|
-
({
|
|
996
|
-
EXECUTE_TASK_RUN: {
|
|
997
|
-
message: zod.z.object({
|
|
998
|
-
version: zod.z.literal("v1").default("v1"),
|
|
999
|
-
execution: TaskRunExecution,
|
|
1000
|
-
traceContext: zod.z.record(zod.z.unknown()),
|
|
1001
|
-
metadata: BackgroundWorkerProperties
|
|
1002
|
-
})
|
|
1003
|
-
},
|
|
1004
|
-
TASK_RUN_COMPLETED_NOTIFICATION: {
|
|
1005
|
-
message: zod.z.object({
|
|
1006
|
-
version: zod.z.literal("v1").default("v1"),
|
|
1007
|
-
completion: TaskRunExecutionResult,
|
|
1008
|
-
execution: TaskRunExecution
|
|
1009
|
-
})
|
|
1010
|
-
},
|
|
1011
|
-
CLEANUP: {
|
|
1012
|
-
message: zod.z.object({
|
|
1013
|
-
version: zod.z.literal("v1").default("v1"),
|
|
1014
|
-
flush: zod.z.boolean().default(false),
|
|
1015
|
-
kill: zod.z.boolean().default(true)
|
|
1016
|
-
}),
|
|
1017
|
-
callback: zod.z.void()
|
|
1018
|
-
},
|
|
1019
|
-
WAIT_COMPLETED_NOTIFICATION: {
|
|
1020
|
-
message: zod.z.object({
|
|
1021
|
-
version: zod.z.literal("v1").default("v1")
|
|
1022
|
-
})
|
|
806
|
+
TaskMetadata.merge(TaskFileMetadata);
|
|
807
|
+
zod.z.enum([
|
|
808
|
+
"index",
|
|
809
|
+
"create",
|
|
810
|
+
"restore"
|
|
811
|
+
]);
|
|
812
|
+
zod.z.enum([
|
|
813
|
+
"terminate"
|
|
814
|
+
]);
|
|
815
|
+
var RegexSchema = zod.z.custom((val) => {
|
|
816
|
+
try {
|
|
817
|
+
return typeof val.test === "function";
|
|
818
|
+
} catch {
|
|
819
|
+
return false;
|
|
1023
820
|
}
|
|
1024
821
|
});
|
|
822
|
+
zod.z.object({
|
|
823
|
+
project: zod.z.string(),
|
|
824
|
+
triggerDirectories: zod.z.string().array().optional(),
|
|
825
|
+
triggerUrl: zod.z.string().optional(),
|
|
826
|
+
projectDir: zod.z.string().optional(),
|
|
827
|
+
tsconfigPath: zod.z.string().optional(),
|
|
828
|
+
retries: zod.z.object({
|
|
829
|
+
enabledInDev: zod.z.boolean().default(true),
|
|
830
|
+
default: RetryOptions.optional()
|
|
831
|
+
}).optional(),
|
|
832
|
+
additionalPackages: zod.z.string().array().optional(),
|
|
833
|
+
additionalFiles: zod.z.string().array().optional(),
|
|
834
|
+
dependenciesToBundle: zod.z.array(zod.z.union([
|
|
835
|
+
zod.z.string(),
|
|
836
|
+
RegexSchema
|
|
837
|
+
])).optional(),
|
|
838
|
+
logLevel: zod.z.string().optional(),
|
|
839
|
+
enableConsoleLogging: zod.z.boolean().optional(),
|
|
840
|
+
postInstall: zod.z.string().optional()
|
|
841
|
+
});
|
|
842
|
+
zod.z.enum([
|
|
843
|
+
"WAIT_FOR_DURATION",
|
|
844
|
+
"WAIT_FOR_TASK",
|
|
845
|
+
"WAIT_FOR_BATCH"
|
|
846
|
+
]);
|
|
1025
847
|
|
|
1026
848
|
// src/v3/schemas/resources.ts
|
|
1027
849
|
var TaskResource = zod.z.object({
|
|
@@ -1908,11 +1730,12 @@ async function createPacketAttributes(packet, dataKey, dataTypeKey) {
|
|
|
1908
1730
|
try {
|
|
1909
1731
|
const parsed = parse(packet.data);
|
|
1910
1732
|
const jsonified = JSON.parse(JSON.stringify(parsed, safeReplacer));
|
|
1911
|
-
|
|
1733
|
+
const result = {
|
|
1912
1734
|
...flattenAttributes(jsonified, dataKey),
|
|
1913
1735
|
[dataTypeKey]: "application/json"
|
|
1914
1736
|
};
|
|
1915
|
-
|
|
1737
|
+
return result;
|
|
1738
|
+
} catch (e) {
|
|
1916
1739
|
return;
|
|
1917
1740
|
}
|
|
1918
1741
|
case "application/store":
|