@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.
Files changed (37) hide show
  1. package/dist/catalog-XNyNDUOF.d.ts +2496 -0
  2. package/dist/catalog-g2Qc0Ukb.d.mts +2496 -0
  3. package/dist/{catalog-KJXg8k3W.d.ts → messages-vq7Bk4Ap.d.mts} +6725 -554
  4. package/dist/{catalog-PA64uhhi.d.mts → messages-vq7Bk4Ap.d.ts} +6725 -554
  5. package/dist/v3/dev/index.d.mts +1 -1
  6. package/dist/v3/dev/index.d.ts +1 -1
  7. package/dist/v3/dev/index.js.map +1 -1
  8. package/dist/v3/dev/index.mjs.map +1 -1
  9. package/dist/v3/index.d.mts +32 -29
  10. package/dist/v3/index.d.ts +32 -29
  11. package/dist/v3/index.js +356 -301
  12. package/dist/v3/index.js.map +1 -1
  13. package/dist/v3/index.mjs +356 -302
  14. package/dist/v3/index.mjs.map +1 -1
  15. package/dist/v3/otel/index.js +14 -3
  16. package/dist/v3/otel/index.js.map +1 -1
  17. package/dist/v3/otel/index.mjs +14 -3
  18. package/dist/v3/otel/index.mjs.map +1 -1
  19. package/dist/v3/prod/index.d.mts +5 -5
  20. package/dist/v3/prod/index.d.ts +5 -5
  21. package/dist/v3/prod/index.js +36 -12
  22. package/dist/v3/prod/index.js.map +1 -1
  23. package/dist/v3/prod/index.mjs +37 -13
  24. package/dist/v3/prod/index.mjs.map +1 -1
  25. package/dist/v3/workers/index.d.mts +5 -5
  26. package/dist/v3/workers/index.d.ts +5 -5
  27. package/dist/v3/workers/index.js +59 -236
  28. package/dist/v3/workers/index.js.map +1 -1
  29. package/dist/v3/workers/index.mjs +59 -236
  30. package/dist/v3/workers/index.mjs.map +1 -1
  31. package/dist/v3/zodMessageHandler.d.mts +1 -1
  32. package/dist/v3/zodMessageHandler.d.ts +1 -1
  33. package/package.json +1 -1
  34. package/dist/messages-AriaDDm0.d.mts +0 -8696
  35. package/dist/messages-AriaDDm0.d.ts +0 -8696
  36. package/dist/{manager-M9GLDnhJ.d.mts → manager-WNMVbgHf.d.mts} +40 -40
  37. 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":"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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 { 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,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 resolveAfterDuration = unboundedTimeout(ms, "duration");
120
+ const internalTimeout = unboundedTimeout(ms, "internal");
121
+ const checkpointSafeInternalTimeout = checkpointSafeTimeout(ms);
112
122
  if (ms <= this.waitThresholdInMs) {
113
- await resolveAfterDuration;
123
+ await internalTimeout;
114
124
  return;
115
125
  }
116
- const waitForRestore = new Promise((resolve, reject) => {
117
- this._waitForRestore = {
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 resolveAfterDuration;
137
+ await internalTimeout;
128
138
  return;
129
139
  }
130
140
  this.ipc.send("READY_FOR_CHECKPOINT", {});
131
141
  await Promise.race([
132
- waitForRestore,
133
- resolveAfterDuration
142
+ internalTimeout,
143
+ checkpointSafeInternalTimeout
134
144
  ]);
135
- this.ipc.send("CANCEL_CHECKPOINT", {});
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
- resumeAfterRestore() {
138
- if (!this._waitForRestore) {
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
- this._waitForRestore.resolve("restore");
143
- this._waitForRestore = void 0;
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":"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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 { 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-M9GLDnhJ.mjs';
5
- export { R as RuntimeManager } from '../../manager-M9GLDnhJ.mjs';
6
- import { B as BackgroundWorkerProperties, T as TaskFileMetadata, a as TaskMetadataWithFilePath } from '../../messages-AriaDDm0.mjs';
7
- import { d as TriggerTracer, g as Config, z as ProjectConfig, x as HandleErrorFunction, c as TaskMetadataWithFunctions, C as Clock, a as ClockTime, b as TaskCatalog } from '../../catalog-PA64uhhi.mjs';
8
- export { O as OtelTaskLogger, A as logLevels } from '../../catalog-PA64uhhi.mjs';
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-M9GLDnhJ.js';
5
- export { R as RuntimeManager } from '../../manager-M9GLDnhJ.js';
6
- import { B as BackgroundWorkerProperties, T as TaskFileMetadata, a as TaskMetadataWithFilePath } from '../../messages-AriaDDm0.js';
7
- import { d as TriggerTracer, g as Config, z as ProjectConfig, x as HandleErrorFunction, c as TaskMetadataWithFunctions, C as Clock, a as ClockTime, b as TaskCatalog } from '../../catalog-KJXg8k3W.js';
8
- export { O as OtelTaskLogger, A as logLevels } from '../../catalog-KJXg8k3W.js';
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';
@@ -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 (!obj) {
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
- result[`${newPrefix}.[${i}]`] = value[i];
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/messages.ts
648
- var EnvironmentType = zod.z.enum([
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
- var TaskRunExecutionPayload = zod.z.object({
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
- var TaskMetadataWithFilePath = TaskMetadata.merge(TaskFileMetadata);
882
- var UncaughtExceptionMessage = zod.z.object({
883
- version: zod.z.literal("v1").default("v1"),
884
- error: zod.z.object({
885
- name: zod.z.string(),
886
- message: zod.z.string(),
887
- stack: zod.z.string().optional()
888
- }),
889
- origin: zod.z.enum([
890
- "uncaughtException",
891
- "unhandledRejection"
892
- ])
893
- });
894
- var TaskMetadataFailedToParseData = zod.z.object({
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
- return {
1733
+ const result = {
1912
1734
  ...flattenAttributes(jsonified, dataKey),
1913
1735
  [dataTypeKey]: "application/json"
1914
1736
  };
1915
- } catch {
1737
+ return result;
1738
+ } catch (e) {
1916
1739
  return;
1917
1740
  }
1918
1741
  case "application/store":