@trigger.dev/core 3.0.0-beta.34 → 3.0.0-beta.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/catalog-XTlJQaMn.d.mts +202 -0
- package/dist/catalog-dRKTgwQ7.d.ts +202 -0
- package/dist/{manager-WNMVbgHf.d.mts → manager-JkbddlcO.d.mts} +43 -42
- package/dist/{manager-WNMVbgHf.d.ts → manager-JkbddlcO.d.ts} +43 -42
- package/dist/{messages-vq7Bk4Ap.d.mts → messages-6_-q72KG.d.mts} +5970 -2067
- package/dist/{messages-vq7Bk4Ap.d.ts → messages-6_-q72KG.d.ts} +5970 -2067
- package/dist/{catalog-tX1P4jZQ.d.ts → schemas-r4ZP9S-F.d.mts} +22 -201
- package/dist/{catalog-Y8FyPWvh.d.mts → schemas-r4ZP9S-F.d.ts} +22 -201
- package/dist/v3/dev/index.d.mts +2 -2
- package/dist/v3/dev/index.d.ts +2 -2
- package/dist/v3/dev/index.js +4 -4
- package/dist/v3/dev/index.js.map +1 -1
- package/dist/v3/dev/index.mjs +4 -4
- package/dist/v3/dev/index.mjs.map +1 -1
- package/dist/v3/index.d.mts +584 -152
- package/dist/v3/index.d.ts +584 -152
- package/dist/v3/index.js +962 -350
- package/dist/v3/index.js.map +1 -1
- package/dist/v3/index.mjs +953 -350
- package/dist/v3/index.mjs.map +1 -1
- package/dist/v3/otel/index.js +1 -1
- package/dist/v3/otel/index.js.map +1 -1
- package/dist/v3/otel/index.mjs +1 -1
- package/dist/v3/otel/index.mjs.map +1 -1
- package/dist/v3/prod/index.d.mts +3 -3
- package/dist/v3/prod/index.d.ts +3 -3
- package/dist/v3/prod/index.js +90 -15
- package/dist/v3/prod/index.js.map +1 -1
- package/dist/v3/prod/index.mjs +90 -15
- package/dist/v3/prod/index.mjs.map +1 -1
- package/dist/v3/workers/index.d.mts +6 -5
- package/dist/v3/workers/index.d.ts +6 -5
- package/dist/v3/workers/index.js +476 -53
- package/dist/v3/workers/index.js.map +1 -1
- package/dist/v3/workers/index.mjs +477 -54
- 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/dist/v3/zodNamespace.js +16 -6
- package/dist/v3/zodNamespace.js.map +1 -1
- package/dist/v3/zodNamespace.mjs +17 -7
- package/dist/v3/zodNamespace.mjs.map +1 -1
- package/dist/v3/zodSocket.js +16 -6
- package/dist/v3/zodSocket.js.map +1 -1
- package/dist/v3/zodSocket.mjs +17 -7
- package/dist/v3/zodSocket.mjs.map +1 -1
- package/dist/v3/zodfetch.d.mts +262 -0
- package/dist/v3/zodfetch.d.ts +262 -0
- package/dist/v3/zodfetch.js +744 -0
- package/dist/v3/zodfetch.js.map +1 -0
- package/dist/v3/zodfetch.mjs +716 -0
- package/dist/v3/zodfetch.mjs.map +1 -0
- package/package.json +9 -1
package/dist/v3/prod/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var preciseDate = require('@google-cloud/precise-date');
|
|
4
|
+
require('@opentelemetry/api-logs');
|
|
4
5
|
var promises = require('timers/promises');
|
|
5
6
|
|
|
6
7
|
var __defProp = Object.defineProperty;
|
|
@@ -38,6 +39,13 @@ function getGlobal(type) {
|
|
|
38
39
|
return _global[GLOBAL_TRIGGER_DOT_DEV_KEY]?.[type];
|
|
39
40
|
}
|
|
40
41
|
__name(getGlobal, "getGlobal");
|
|
42
|
+
function unregisterGlobal(type) {
|
|
43
|
+
const api = _global[GLOBAL_TRIGGER_DOT_DEV_KEY];
|
|
44
|
+
if (api) {
|
|
45
|
+
delete api[type];
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
__name(unregisterGlobal, "unregisterGlobal");
|
|
41
49
|
var _SimpleClock = class _SimpleClock {
|
|
42
50
|
preciseNow() {
|
|
43
51
|
const now = new preciseDate.PreciseDate();
|
|
@@ -86,6 +94,72 @@ var ClockAPI = _ClockAPI;
|
|
|
86
94
|
|
|
87
95
|
// src/v3/clock-api.ts
|
|
88
96
|
var clock = ClockAPI.getInstance();
|
|
97
|
+
var _NoopTaskLogger = class _NoopTaskLogger {
|
|
98
|
+
debug() {
|
|
99
|
+
}
|
|
100
|
+
log() {
|
|
101
|
+
}
|
|
102
|
+
info() {
|
|
103
|
+
}
|
|
104
|
+
warn() {
|
|
105
|
+
}
|
|
106
|
+
error() {
|
|
107
|
+
}
|
|
108
|
+
trace(name, fn) {
|
|
109
|
+
return fn({});
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
__name(_NoopTaskLogger, "NoopTaskLogger");
|
|
113
|
+
var NoopTaskLogger = _NoopTaskLogger;
|
|
114
|
+
|
|
115
|
+
// src/v3/logger/index.ts
|
|
116
|
+
var API_NAME2 = "logger";
|
|
117
|
+
var NOOP_TASK_LOGGER = new NoopTaskLogger();
|
|
118
|
+
var _getTaskLogger, getTaskLogger_fn;
|
|
119
|
+
var _LoggerAPI = class _LoggerAPI {
|
|
120
|
+
constructor() {
|
|
121
|
+
__privateAdd(this, _getTaskLogger);
|
|
122
|
+
}
|
|
123
|
+
static getInstance() {
|
|
124
|
+
if (!this._instance) {
|
|
125
|
+
this._instance = new _LoggerAPI();
|
|
126
|
+
}
|
|
127
|
+
return this._instance;
|
|
128
|
+
}
|
|
129
|
+
disable() {
|
|
130
|
+
unregisterGlobal(API_NAME2);
|
|
131
|
+
}
|
|
132
|
+
setGlobalTaskLogger(taskLogger) {
|
|
133
|
+
return registerGlobal(API_NAME2, taskLogger);
|
|
134
|
+
}
|
|
135
|
+
debug(message, metadata) {
|
|
136
|
+
__privateMethod(this, _getTaskLogger, getTaskLogger_fn).call(this).debug(message, metadata);
|
|
137
|
+
}
|
|
138
|
+
log(message, metadata) {
|
|
139
|
+
__privateMethod(this, _getTaskLogger, getTaskLogger_fn).call(this).log(message, metadata);
|
|
140
|
+
}
|
|
141
|
+
info(message, metadata) {
|
|
142
|
+
__privateMethod(this, _getTaskLogger, getTaskLogger_fn).call(this).info(message, metadata);
|
|
143
|
+
}
|
|
144
|
+
warn(message, metadata) {
|
|
145
|
+
__privateMethod(this, _getTaskLogger, getTaskLogger_fn).call(this).warn(message, metadata);
|
|
146
|
+
}
|
|
147
|
+
error(message, metadata) {
|
|
148
|
+
__privateMethod(this, _getTaskLogger, getTaskLogger_fn).call(this).error(message, metadata);
|
|
149
|
+
}
|
|
150
|
+
trace(name, fn) {
|
|
151
|
+
return __privateMethod(this, _getTaskLogger, getTaskLogger_fn).call(this).trace(name, fn);
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
_getTaskLogger = new WeakSet();
|
|
155
|
+
getTaskLogger_fn = /* @__PURE__ */ __name(function() {
|
|
156
|
+
return getGlobal(API_NAME2) ?? NOOP_TASK_LOGGER;
|
|
157
|
+
}, "#getTaskLogger");
|
|
158
|
+
__name(_LoggerAPI, "LoggerAPI");
|
|
159
|
+
var LoggerAPI = _LoggerAPI;
|
|
160
|
+
|
|
161
|
+
// src/v3/logger-api.ts
|
|
162
|
+
var logger = LoggerAPI.getInstance();
|
|
89
163
|
async function unboundedTimeout(delay = 0, value, options) {
|
|
90
164
|
const maxDelay = 2147483647;
|
|
91
165
|
const fullTimeouts = Math.floor(delay / maxDelay);
|
|
@@ -134,7 +208,7 @@ var _ProdRuntimeManager = class _ProdRuntimeManager {
|
|
|
134
208
|
const { willCheckpointAndRestore } = await this.ipc.sendWithAck("WAIT_FOR_DURATION", {
|
|
135
209
|
ms,
|
|
136
210
|
now
|
|
137
|
-
});
|
|
211
|
+
}, 31e3);
|
|
138
212
|
if (!willCheckpointAndRestore) {
|
|
139
213
|
await internalTimeout;
|
|
140
214
|
return;
|
|
@@ -145,11 +219,18 @@ var _ProdRuntimeManager = class _ProdRuntimeManager {
|
|
|
145
219
|
checkpointSafeInternalTimeout
|
|
146
220
|
]);
|
|
147
221
|
clock.reset();
|
|
148
|
-
|
|
149
|
-
version
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
222
|
+
try {
|
|
223
|
+
const { checkpointCanceled, version } = await this.ipc.sendWithAck("CANCEL_CHECKPOINT", {
|
|
224
|
+
version: "v2",
|
|
225
|
+
reason: "WAIT_FOR_DURATION"
|
|
226
|
+
}, 31e3);
|
|
227
|
+
if (checkpointCanceled) {
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
} catch (error) {
|
|
231
|
+
logger.debug("Checkpoint cancellation timed out", {
|
|
232
|
+
error
|
|
233
|
+
});
|
|
153
234
|
return;
|
|
154
235
|
}
|
|
155
236
|
await externalResume;
|
|
@@ -158,13 +239,7 @@ var _ProdRuntimeManager = class _ProdRuntimeManager {
|
|
|
158
239
|
if (!this._waitForDuration) {
|
|
159
240
|
return;
|
|
160
241
|
}
|
|
161
|
-
process.stdout.write("pre");
|
|
162
|
-
process.stdout.write(JSON.stringify(clock.preciseNow()));
|
|
163
|
-
console.log("pre", clock.preciseNow());
|
|
164
242
|
clock.reset();
|
|
165
|
-
console.log("post", clock.preciseNow());
|
|
166
|
-
process.stdout.write("post");
|
|
167
|
-
process.stdout.write(JSON.stringify(clock.preciseNow()));
|
|
168
243
|
this._waitForDuration.resolve("external");
|
|
169
244
|
this._waitForDuration = void 0;
|
|
170
245
|
}
|
|
@@ -209,13 +284,13 @@ var _ProdRuntimeManager = class _ProdRuntimeManager {
|
|
|
209
284
|
items: results
|
|
210
285
|
};
|
|
211
286
|
}
|
|
212
|
-
resumeTask(completion
|
|
213
|
-
const wait = this._taskWaits.get(
|
|
287
|
+
resumeTask(completion) {
|
|
288
|
+
const wait = this._taskWaits.get(completion.id);
|
|
214
289
|
if (!wait) {
|
|
215
290
|
return;
|
|
216
291
|
}
|
|
217
292
|
wait.resolve(completion);
|
|
218
|
-
this._taskWaits.delete(
|
|
293
|
+
this._taskWaits.delete(completion.id);
|
|
219
294
|
}
|
|
220
295
|
get waitThresholdInMs() {
|
|
221
296
|
return this.options.waitThresholdInMs ?? 3e4;
|
|
@@ -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","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 { ApiClientConfiguration } from \"../apiClientManager/types\";\nimport { 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 [\"api-client\"]?: ApiClientConfiguration;\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(\n \"CANCEL_CHECKPOINT\",\n {\n version: \"v2\",\n reason: \"WAIT_FOR_DURATION\",\n },\n 31_000\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
|
+
{"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/logger/taskLogger.ts","../../../src/v3/logger/index.ts","../../../src/v3/logger-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","unregisterGlobal","PreciseDate","SimpleClock","preciseNow","now","nowStruct","toStruct","seconds","nanos","reset","API_NAME","SIMPLE_CLOCK","ClockAPI","getInstance","_instance","setGlobalClock","clock","SeverityNumber","NoopTaskLogger","debug","log","info","warn","error","trace","name","fn","NOOP_TASK_LOGGER","LoggerAPI","disable","setGlobalTaskLogger","taskLogger","message","metadata","logger","setInterval","setTimeout","unboundedTimeout","delay","value","options","maxDelay","fullTimeouts","Math","floor","remainingDelay","lastTimeoutResult","i","checkpointSafeTimeout","scanIntervalMs","start","Date","ProdRuntimeManager","constructor","ipc","_taskWaits","Map","_batchWaits","waitForDuration","ms","internalTimeout","checkpointSafeInternalTimeout","waitThresholdInMs","externalResume","Promise","resolve","reject","_waitForDuration","willCheckpointAndRestore","sendWithAck","send","race","checkpointCanceled","version","reason","resumeAfterDuration","undefined","waitUntil","date","getTime","waitForTask","params","promise","set","id","friendlyId","result","waitForBatch","runs","length","items","all","map","runId","batchFriendlyId","runFriendlyIds","results","resumeTask","completion","wait","get","delete"],"mappings":"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","sourcesContent":["export const _globalThis = typeof globalThis === \"object\" ? globalThis : global;\n","import { ApiClientConfiguration } from \"../apiClientManager/types\";\nimport { 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 [\"api-client\"]?: ApiClientConfiguration;\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 { Attributes, Span, SpanOptions } from \"@opentelemetry/api\";\nimport { Logger, SeverityNumber } from \"@opentelemetry/api-logs\";\nimport { iconStringForSeverity } from \"../icons\";\nimport { SemanticInternalAttributes } from \"../semanticInternalAttributes\";\nimport { TriggerTracer } from \"../tracer\";\nimport { flattenAttributes } from \"../utils/flattenAttributes\";\nimport { ClockTime } from \"../clock/clock\";\nimport { clock } from \"../clock-api\";\n\nexport type LogLevel = \"none\" | \"error\" | \"warn\" | \"info\" | \"debug\" | \"log\";\n\nexport const logLevels: Array<LogLevel> = [\"none\", \"error\", \"warn\", \"info\", \"debug\"];\n\nexport type TaskLoggerConfig = {\n logger: Logger;\n tracer: TriggerTracer;\n level: LogLevel;\n};\n\nexport interface TaskLogger {\n debug(message: string, properties?: Record<string, unknown>): void;\n log(message: string, properties?: Record<string, unknown>): void;\n info(message: string, properties?: Record<string, unknown>): void;\n warn(message: string, properties?: Record<string, unknown>): void;\n error(message: string, properties?: Record<string, unknown>): void;\n trace<T>(name: string, fn: (span: Span) => Promise<T>, options?: SpanOptions): Promise<T>;\n}\n\nexport class OtelTaskLogger implements TaskLogger {\n private readonly _level: number;\n\n constructor(private readonly _config: TaskLoggerConfig) {\n this._level = logLevels.indexOf(_config.level);\n }\n\n debug(message: string, properties?: Record<string, unknown>) {\n if (this._level < 4) return; // [\"none\", \"error\", \"warn\", \"info\", \"debug\"];\n\n this.#emitLog(message, this.#getTimestampInHrTime(), \"debug\", SeverityNumber.DEBUG, properties);\n }\n\n log(message: string, properties?: Record<string, unknown>) {\n if (this._level < 3) return; // [\"none\", \"error\", \"warn\", \"info\", \"debug\"];\n\n this.#emitLog(message, this.#getTimestampInHrTime(), \"log\", SeverityNumber.INFO, properties);\n }\n\n info(message: string, properties?: Record<string, unknown>) {\n if (this._level < 3) return; // [\"none\", \"error\", \"warn\", \"info\", \"debug\"];\n\n this.#emitLog(message, this.#getTimestampInHrTime(), \"info\", SeverityNumber.INFO, properties);\n }\n\n warn(message: string, properties?: Record<string, unknown>) {\n if (this._level < 2) return; // [\"none\", \"error\", \"warn\", \"info\", \"debug\"];\n\n this.#emitLog(message, this.#getTimestampInHrTime(), \"warn\", SeverityNumber.WARN, properties);\n }\n\n error(message: string, properties?: Record<string, unknown>) {\n if (this._level < 1) return; // [\"none\", \"error\", \"warn\", \"info\", \"debug\"];\n\n this.#emitLog(message, this.#getTimestampInHrTime(), \"error\", SeverityNumber.ERROR, properties);\n }\n\n #emitLog(\n message: string,\n timestamp: ClockTime,\n severityText: string,\n severityNumber: SeverityNumber,\n properties?: Record<string, unknown>\n ) {\n let attributes: Attributes = { ...flattenAttributes(safeJsonProcess(properties)) };\n\n const icon = iconStringForSeverity(severityNumber);\n if (icon !== undefined) {\n attributes[SemanticInternalAttributes.STYLE_ICON] = icon;\n }\n\n this._config.logger.emit({\n severityNumber,\n severityText,\n body: message,\n attributes,\n timestamp,\n });\n }\n\n trace<T>(name: string, fn: (span: Span) => Promise<T>, options?: SpanOptions): Promise<T> {\n return this._config.tracer.startActiveSpan(name, fn, options);\n }\n\n #getTimestampInHrTime(): ClockTime {\n return clock.preciseNow();\n }\n}\n\nexport class NoopTaskLogger implements TaskLogger {\n debug() {}\n log() {}\n info() {}\n warn() {}\n error() {}\n trace<T>(name: string, fn: (span: Span) => Promise<T>): Promise<T> {\n return fn({} as Span);\n }\n}\n\nfunction safeJsonProcess(value?: Record<string, unknown>): Record<string, unknown> | undefined {\n try {\n return JSON.parse(JSON.stringify(value, jsonErrorReplacer));\n } catch {\n return value;\n }\n}\n\nfunction jsonErrorReplacer(key: string, value: unknown) {\n if (value instanceof Error) {\n return {\n name: value.name,\n message: value.message,\n stack: value.stack,\n };\n }\n\n return value;\n}\n","import { NoopTaskLogger, TaskLogger } from \"./taskLogger\";\nimport { getGlobal, registerGlobal, unregisterGlobal } from \"../utils/globals\";\nimport { Span } from \"@opentelemetry/api\";\n\nconst API_NAME = \"logger\";\n\nconst NOOP_TASK_LOGGER = new NoopTaskLogger();\n\nexport class LoggerAPI implements TaskLogger {\n private static _instance?: LoggerAPI;\n\n private constructor() {}\n\n public static getInstance(): LoggerAPI {\n if (!this._instance) {\n this._instance = new LoggerAPI();\n }\n\n return this._instance;\n }\n\n public disable() {\n unregisterGlobal(API_NAME);\n }\n\n public setGlobalTaskLogger(taskLogger: TaskLogger): boolean {\n return registerGlobal(API_NAME, taskLogger);\n }\n\n public debug(message: string, metadata?: Record<string, unknown>) {\n this.#getTaskLogger().debug(message, metadata);\n }\n\n public log(message: string, metadata?: Record<string, unknown>) {\n this.#getTaskLogger().log(message, metadata);\n }\n\n public info(message: string, metadata?: Record<string, unknown>) {\n this.#getTaskLogger().info(message, metadata);\n }\n\n public warn(message: string, metadata?: Record<string, unknown>) {\n this.#getTaskLogger().warn(message, metadata);\n }\n\n public error(message: string, metadata?: Record<string, unknown>) {\n this.#getTaskLogger().error(message, metadata);\n }\n\n public trace<T>(name: string, fn: (span: Span) => Promise<T>): Promise<T> {\n return this.#getTaskLogger().trace(name, fn);\n }\n\n #getTaskLogger(): TaskLogger {\n return getGlobal(API_NAME) ?? NOOP_TASK_LOGGER;\n }\n}\n","// Split module-level variable definition into separate files to allow\n// tree-shaking on each api instance.\nimport { LoggerAPI } from \"./logger\";\n/** Entrypoint for logger API */\nexport const logger = LoggerAPI.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(\n \"WAIT_FOR_DURATION\",\n {\n ms,\n now,\n },\n 31_000\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 try {\n // The coordinator should cancel any in-progress checkpoints\n const { checkpointCanceled, version } = await this.ipc.sendWithAck(\n \"CANCEL_CHECKPOINT\",\n {\n version: \"v2\",\n reason: \"WAIT_FOR_DURATION\",\n },\n 31_000\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 } catch (error) {\n // If the cancellation times out, we will proceed as if the checkpoint was canceled\n logger.debug(\"Checkpoint cancellation timed out\", { error });\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 // Resets the clock to the current time\n clock.reset();\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): void {\n const wait = this._taskWaits.get(completion.id);\n\n if (!wait) {\n return;\n }\n\n wait.resolve(completion);\n\n this._taskWaits.delete(completion.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,4 +1,5 @@
|
|
|
1
1
|
import { PreciseDate } from '@google-cloud/precise-date';
|
|
2
|
+
import '@opentelemetry/api-logs';
|
|
2
3
|
import { setTimeout, setInterval } from 'node:timers/promises';
|
|
3
4
|
|
|
4
5
|
var __defProp = Object.defineProperty;
|
|
@@ -36,6 +37,13 @@ function getGlobal(type) {
|
|
|
36
37
|
return _global[GLOBAL_TRIGGER_DOT_DEV_KEY]?.[type];
|
|
37
38
|
}
|
|
38
39
|
__name(getGlobal, "getGlobal");
|
|
40
|
+
function unregisterGlobal(type) {
|
|
41
|
+
const api = _global[GLOBAL_TRIGGER_DOT_DEV_KEY];
|
|
42
|
+
if (api) {
|
|
43
|
+
delete api[type];
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
__name(unregisterGlobal, "unregisterGlobal");
|
|
39
47
|
var _SimpleClock = class _SimpleClock {
|
|
40
48
|
preciseNow() {
|
|
41
49
|
const now = new PreciseDate();
|
|
@@ -84,6 +92,72 @@ var ClockAPI = _ClockAPI;
|
|
|
84
92
|
|
|
85
93
|
// src/v3/clock-api.ts
|
|
86
94
|
var clock = ClockAPI.getInstance();
|
|
95
|
+
var _NoopTaskLogger = class _NoopTaskLogger {
|
|
96
|
+
debug() {
|
|
97
|
+
}
|
|
98
|
+
log() {
|
|
99
|
+
}
|
|
100
|
+
info() {
|
|
101
|
+
}
|
|
102
|
+
warn() {
|
|
103
|
+
}
|
|
104
|
+
error() {
|
|
105
|
+
}
|
|
106
|
+
trace(name, fn) {
|
|
107
|
+
return fn({});
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
__name(_NoopTaskLogger, "NoopTaskLogger");
|
|
111
|
+
var NoopTaskLogger = _NoopTaskLogger;
|
|
112
|
+
|
|
113
|
+
// src/v3/logger/index.ts
|
|
114
|
+
var API_NAME2 = "logger";
|
|
115
|
+
var NOOP_TASK_LOGGER = new NoopTaskLogger();
|
|
116
|
+
var _getTaskLogger, getTaskLogger_fn;
|
|
117
|
+
var _LoggerAPI = class _LoggerAPI {
|
|
118
|
+
constructor() {
|
|
119
|
+
__privateAdd(this, _getTaskLogger);
|
|
120
|
+
}
|
|
121
|
+
static getInstance() {
|
|
122
|
+
if (!this._instance) {
|
|
123
|
+
this._instance = new _LoggerAPI();
|
|
124
|
+
}
|
|
125
|
+
return this._instance;
|
|
126
|
+
}
|
|
127
|
+
disable() {
|
|
128
|
+
unregisterGlobal(API_NAME2);
|
|
129
|
+
}
|
|
130
|
+
setGlobalTaskLogger(taskLogger) {
|
|
131
|
+
return registerGlobal(API_NAME2, taskLogger);
|
|
132
|
+
}
|
|
133
|
+
debug(message, metadata) {
|
|
134
|
+
__privateMethod(this, _getTaskLogger, getTaskLogger_fn).call(this).debug(message, metadata);
|
|
135
|
+
}
|
|
136
|
+
log(message, metadata) {
|
|
137
|
+
__privateMethod(this, _getTaskLogger, getTaskLogger_fn).call(this).log(message, metadata);
|
|
138
|
+
}
|
|
139
|
+
info(message, metadata) {
|
|
140
|
+
__privateMethod(this, _getTaskLogger, getTaskLogger_fn).call(this).info(message, metadata);
|
|
141
|
+
}
|
|
142
|
+
warn(message, metadata) {
|
|
143
|
+
__privateMethod(this, _getTaskLogger, getTaskLogger_fn).call(this).warn(message, metadata);
|
|
144
|
+
}
|
|
145
|
+
error(message, metadata) {
|
|
146
|
+
__privateMethod(this, _getTaskLogger, getTaskLogger_fn).call(this).error(message, metadata);
|
|
147
|
+
}
|
|
148
|
+
trace(name, fn) {
|
|
149
|
+
return __privateMethod(this, _getTaskLogger, getTaskLogger_fn).call(this).trace(name, fn);
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
_getTaskLogger = new WeakSet();
|
|
153
|
+
getTaskLogger_fn = /* @__PURE__ */ __name(function() {
|
|
154
|
+
return getGlobal(API_NAME2) ?? NOOP_TASK_LOGGER;
|
|
155
|
+
}, "#getTaskLogger");
|
|
156
|
+
__name(_LoggerAPI, "LoggerAPI");
|
|
157
|
+
var LoggerAPI = _LoggerAPI;
|
|
158
|
+
|
|
159
|
+
// src/v3/logger-api.ts
|
|
160
|
+
var logger = LoggerAPI.getInstance();
|
|
87
161
|
async function unboundedTimeout(delay = 0, value, options) {
|
|
88
162
|
const maxDelay = 2147483647;
|
|
89
163
|
const fullTimeouts = Math.floor(delay / maxDelay);
|
|
@@ -132,7 +206,7 @@ var _ProdRuntimeManager = class _ProdRuntimeManager {
|
|
|
132
206
|
const { willCheckpointAndRestore } = await this.ipc.sendWithAck("WAIT_FOR_DURATION", {
|
|
133
207
|
ms,
|
|
134
208
|
now
|
|
135
|
-
});
|
|
209
|
+
}, 31e3);
|
|
136
210
|
if (!willCheckpointAndRestore) {
|
|
137
211
|
await internalTimeout;
|
|
138
212
|
return;
|
|
@@ -143,11 +217,18 @@ var _ProdRuntimeManager = class _ProdRuntimeManager {
|
|
|
143
217
|
checkpointSafeInternalTimeout
|
|
144
218
|
]);
|
|
145
219
|
clock.reset();
|
|
146
|
-
|
|
147
|
-
version
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
220
|
+
try {
|
|
221
|
+
const { checkpointCanceled, version } = await this.ipc.sendWithAck("CANCEL_CHECKPOINT", {
|
|
222
|
+
version: "v2",
|
|
223
|
+
reason: "WAIT_FOR_DURATION"
|
|
224
|
+
}, 31e3);
|
|
225
|
+
if (checkpointCanceled) {
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
} catch (error) {
|
|
229
|
+
logger.debug("Checkpoint cancellation timed out", {
|
|
230
|
+
error
|
|
231
|
+
});
|
|
151
232
|
return;
|
|
152
233
|
}
|
|
153
234
|
await externalResume;
|
|
@@ -156,13 +237,7 @@ var _ProdRuntimeManager = class _ProdRuntimeManager {
|
|
|
156
237
|
if (!this._waitForDuration) {
|
|
157
238
|
return;
|
|
158
239
|
}
|
|
159
|
-
process.stdout.write("pre");
|
|
160
|
-
process.stdout.write(JSON.stringify(clock.preciseNow()));
|
|
161
|
-
console.log("pre", clock.preciseNow());
|
|
162
240
|
clock.reset();
|
|
163
|
-
console.log("post", clock.preciseNow());
|
|
164
|
-
process.stdout.write("post");
|
|
165
|
-
process.stdout.write(JSON.stringify(clock.preciseNow()));
|
|
166
241
|
this._waitForDuration.resolve("external");
|
|
167
242
|
this._waitForDuration = void 0;
|
|
168
243
|
}
|
|
@@ -207,13 +282,13 @@ var _ProdRuntimeManager = class _ProdRuntimeManager {
|
|
|
207
282
|
items: results
|
|
208
283
|
};
|
|
209
284
|
}
|
|
210
|
-
resumeTask(completion
|
|
211
|
-
const wait = this._taskWaits.get(
|
|
285
|
+
resumeTask(completion) {
|
|
286
|
+
const wait = this._taskWaits.get(completion.id);
|
|
212
287
|
if (!wait) {
|
|
213
288
|
return;
|
|
214
289
|
}
|
|
215
290
|
wait.resolve(completion);
|
|
216
|
-
this._taskWaits.delete(
|
|
291
|
+
this._taskWaits.delete(completion.id);
|
|
217
292
|
}
|
|
218
293
|
get waitThresholdInMs() {
|
|
219
294
|
return this.options.waitThresholdInMs ?? 3e4;
|
|
@@ -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","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 { ApiClientConfiguration } from \"../apiClientManager/types\";\nimport { 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 [\"api-client\"]?: ApiClientConfiguration;\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(\n \"CANCEL_CHECKPOINT\",\n {\n version: \"v2\",\n reason: \"WAIT_FOR_DURATION\",\n },\n 31_000\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
|
+
{"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/logger/taskLogger.ts","../../../src/v3/logger/index.ts","../../../src/v3/logger-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","unregisterGlobal","PreciseDate","SimpleClock","preciseNow","now","nowStruct","toStruct","seconds","nanos","reset","API_NAME","SIMPLE_CLOCK","ClockAPI","getInstance","_instance","setGlobalClock","clock","SeverityNumber","NoopTaskLogger","debug","log","info","warn","error","trace","name","fn","NOOP_TASK_LOGGER","LoggerAPI","disable","setGlobalTaskLogger","taskLogger","message","metadata","logger","setInterval","setTimeout","unboundedTimeout","delay","value","options","maxDelay","fullTimeouts","Math","floor","remainingDelay","lastTimeoutResult","i","checkpointSafeTimeout","scanIntervalMs","start","Date","ProdRuntimeManager","constructor","ipc","_taskWaits","Map","_batchWaits","waitForDuration","ms","internalTimeout","checkpointSafeInternalTimeout","waitThresholdInMs","externalResume","Promise","resolve","reject","_waitForDuration","willCheckpointAndRestore","sendWithAck","send","race","checkpointCanceled","version","reason","resumeAfterDuration","undefined","waitUntil","date","getTime","waitForTask","params","promise","set","id","friendlyId","result","waitForBatch","runs","length","items","all","map","runId","batchFriendlyId","runFriendlyIds","results","resumeTask","completion","wait","get","delete"],"mappings":"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","sourcesContent":["export const _globalThis = typeof globalThis === \"object\" ? globalThis : global;\n","import { ApiClientConfiguration } from \"../apiClientManager/types\";\nimport { 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 [\"api-client\"]?: ApiClientConfiguration;\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 { Attributes, Span, SpanOptions } from \"@opentelemetry/api\";\nimport { Logger, SeverityNumber } from \"@opentelemetry/api-logs\";\nimport { iconStringForSeverity } from \"../icons\";\nimport { SemanticInternalAttributes } from \"../semanticInternalAttributes\";\nimport { TriggerTracer } from \"../tracer\";\nimport { flattenAttributes } from \"../utils/flattenAttributes\";\nimport { ClockTime } from \"../clock/clock\";\nimport { clock } from \"../clock-api\";\n\nexport type LogLevel = \"none\" | \"error\" | \"warn\" | \"info\" | \"debug\" | \"log\";\n\nexport const logLevels: Array<LogLevel> = [\"none\", \"error\", \"warn\", \"info\", \"debug\"];\n\nexport type TaskLoggerConfig = {\n logger: Logger;\n tracer: TriggerTracer;\n level: LogLevel;\n};\n\nexport interface TaskLogger {\n debug(message: string, properties?: Record<string, unknown>): void;\n log(message: string, properties?: Record<string, unknown>): void;\n info(message: string, properties?: Record<string, unknown>): void;\n warn(message: string, properties?: Record<string, unknown>): void;\n error(message: string, properties?: Record<string, unknown>): void;\n trace<T>(name: string, fn: (span: Span) => Promise<T>, options?: SpanOptions): Promise<T>;\n}\n\nexport class OtelTaskLogger implements TaskLogger {\n private readonly _level: number;\n\n constructor(private readonly _config: TaskLoggerConfig) {\n this._level = logLevels.indexOf(_config.level);\n }\n\n debug(message: string, properties?: Record<string, unknown>) {\n if (this._level < 4) return; // [\"none\", \"error\", \"warn\", \"info\", \"debug\"];\n\n this.#emitLog(message, this.#getTimestampInHrTime(), \"debug\", SeverityNumber.DEBUG, properties);\n }\n\n log(message: string, properties?: Record<string, unknown>) {\n if (this._level < 3) return; // [\"none\", \"error\", \"warn\", \"info\", \"debug\"];\n\n this.#emitLog(message, this.#getTimestampInHrTime(), \"log\", SeverityNumber.INFO, properties);\n }\n\n info(message: string, properties?: Record<string, unknown>) {\n if (this._level < 3) return; // [\"none\", \"error\", \"warn\", \"info\", \"debug\"];\n\n this.#emitLog(message, this.#getTimestampInHrTime(), \"info\", SeverityNumber.INFO, properties);\n }\n\n warn(message: string, properties?: Record<string, unknown>) {\n if (this._level < 2) return; // [\"none\", \"error\", \"warn\", \"info\", \"debug\"];\n\n this.#emitLog(message, this.#getTimestampInHrTime(), \"warn\", SeverityNumber.WARN, properties);\n }\n\n error(message: string, properties?: Record<string, unknown>) {\n if (this._level < 1) return; // [\"none\", \"error\", \"warn\", \"info\", \"debug\"];\n\n this.#emitLog(message, this.#getTimestampInHrTime(), \"error\", SeverityNumber.ERROR, properties);\n }\n\n #emitLog(\n message: string,\n timestamp: ClockTime,\n severityText: string,\n severityNumber: SeverityNumber,\n properties?: Record<string, unknown>\n ) {\n let attributes: Attributes = { ...flattenAttributes(safeJsonProcess(properties)) };\n\n const icon = iconStringForSeverity(severityNumber);\n if (icon !== undefined) {\n attributes[SemanticInternalAttributes.STYLE_ICON] = icon;\n }\n\n this._config.logger.emit({\n severityNumber,\n severityText,\n body: message,\n attributes,\n timestamp,\n });\n }\n\n trace<T>(name: string, fn: (span: Span) => Promise<T>, options?: SpanOptions): Promise<T> {\n return this._config.tracer.startActiveSpan(name, fn, options);\n }\n\n #getTimestampInHrTime(): ClockTime {\n return clock.preciseNow();\n }\n}\n\nexport class NoopTaskLogger implements TaskLogger {\n debug() {}\n log() {}\n info() {}\n warn() {}\n error() {}\n trace<T>(name: string, fn: (span: Span) => Promise<T>): Promise<T> {\n return fn({} as Span);\n }\n}\n\nfunction safeJsonProcess(value?: Record<string, unknown>): Record<string, unknown> | undefined {\n try {\n return JSON.parse(JSON.stringify(value, jsonErrorReplacer));\n } catch {\n return value;\n }\n}\n\nfunction jsonErrorReplacer(key: string, value: unknown) {\n if (value instanceof Error) {\n return {\n name: value.name,\n message: value.message,\n stack: value.stack,\n };\n }\n\n return value;\n}\n","import { NoopTaskLogger, TaskLogger } from \"./taskLogger\";\nimport { getGlobal, registerGlobal, unregisterGlobal } from \"../utils/globals\";\nimport { Span } from \"@opentelemetry/api\";\n\nconst API_NAME = \"logger\";\n\nconst NOOP_TASK_LOGGER = new NoopTaskLogger();\n\nexport class LoggerAPI implements TaskLogger {\n private static _instance?: LoggerAPI;\n\n private constructor() {}\n\n public static getInstance(): LoggerAPI {\n if (!this._instance) {\n this._instance = new LoggerAPI();\n }\n\n return this._instance;\n }\n\n public disable() {\n unregisterGlobal(API_NAME);\n }\n\n public setGlobalTaskLogger(taskLogger: TaskLogger): boolean {\n return registerGlobal(API_NAME, taskLogger);\n }\n\n public debug(message: string, metadata?: Record<string, unknown>) {\n this.#getTaskLogger().debug(message, metadata);\n }\n\n public log(message: string, metadata?: Record<string, unknown>) {\n this.#getTaskLogger().log(message, metadata);\n }\n\n public info(message: string, metadata?: Record<string, unknown>) {\n this.#getTaskLogger().info(message, metadata);\n }\n\n public warn(message: string, metadata?: Record<string, unknown>) {\n this.#getTaskLogger().warn(message, metadata);\n }\n\n public error(message: string, metadata?: Record<string, unknown>) {\n this.#getTaskLogger().error(message, metadata);\n }\n\n public trace<T>(name: string, fn: (span: Span) => Promise<T>): Promise<T> {\n return this.#getTaskLogger().trace(name, fn);\n }\n\n #getTaskLogger(): TaskLogger {\n return getGlobal(API_NAME) ?? NOOP_TASK_LOGGER;\n }\n}\n","// Split module-level variable definition into separate files to allow\n// tree-shaking on each api instance.\nimport { LoggerAPI } from \"./logger\";\n/** Entrypoint for logger API */\nexport const logger = LoggerAPI.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(\n \"WAIT_FOR_DURATION\",\n {\n ms,\n now,\n },\n 31_000\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 try {\n // The coordinator should cancel any in-progress checkpoints\n const { checkpointCanceled, version } = await this.ipc.sendWithAck(\n \"CANCEL_CHECKPOINT\",\n {\n version: \"v2\",\n reason: \"WAIT_FOR_DURATION\",\n },\n 31_000\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 } catch (error) {\n // If the cancellation times out, we will proceed as if the checkpoint was canceled\n logger.debug(\"Checkpoint cancellation timed out\", { error });\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 // Resets the clock to the current time\n clock.reset();\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): void {\n const wait = this._taskWaits.get(completion.id);\n\n if (!wait) {\n return;\n }\n\n wait.resolve(completion);\n\n this._taskWaits.delete(completion.id);\n }\n\n private get waitThresholdInMs(): number {\n return this.options.waitThresholdInMs ?? 30_000;\n }\n}\n"]}
|
|
@@ -1,11 +1,12 @@
|
|
|
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 {
|
|
5
|
-
export { R as RuntimeManager } from '../../manager-
|
|
6
|
-
import { B as BackgroundWorkerProperties } from '../../messages-
|
|
7
|
-
import {
|
|
8
|
-
|
|
4
|
+
import { b as TaskRunExecution, T as TaskRunExecutionResult } from '../../manager-JkbddlcO.mjs';
|
|
5
|
+
export { R as RuntimeManager } from '../../manager-JkbddlcO.mjs';
|
|
6
|
+
import { B as BackgroundWorkerProperties } from '../../messages-6_-q72KG.mjs';
|
|
7
|
+
import { C as Config, T as TaskFileMetadata, a as TaskMetadataWithFilePath } from '../../schemas-r4ZP9S-F.mjs';
|
|
8
|
+
import { T as TriggerTracer, P as ProjectConfig, H as HandleErrorFunction, a as TaskMetadataWithFunctions, C as Clock, b as ClockTime, c as TaskCatalog } from '../../catalog-XTlJQaMn.mjs';
|
|
9
|
+
export { O as OtelTaskLogger, l as logLevels } from '../../catalog-XTlJQaMn.mjs';
|
|
9
10
|
import { PreciseDate } from '@google-cloud/precise-date';
|
|
10
11
|
import { LogRecordProcessor, LogRecord } from '@opentelemetry/sdk-logs';
|
|
11
12
|
import { SpanProcessor, Span } from '@opentelemetry/sdk-trace-base';
|
|
@@ -1,11 +1,12 @@
|
|
|
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 {
|
|
5
|
-
export { R as RuntimeManager } from '../../manager-
|
|
6
|
-
import { B as BackgroundWorkerProperties } from '../../messages-
|
|
7
|
-
import {
|
|
8
|
-
|
|
4
|
+
import { b as TaskRunExecution, T as TaskRunExecutionResult } from '../../manager-JkbddlcO.js';
|
|
5
|
+
export { R as RuntimeManager } from '../../manager-JkbddlcO.js';
|
|
6
|
+
import { B as BackgroundWorkerProperties } from '../../messages-6_-q72KG.js';
|
|
7
|
+
import { C as Config, T as TaskFileMetadata, a as TaskMetadataWithFilePath } from '../../schemas-r4ZP9S-F.js';
|
|
8
|
+
import { T as TriggerTracer, P as ProjectConfig, H as HandleErrorFunction, a as TaskMetadataWithFunctions, C as Clock, b as ClockTime, c as TaskCatalog } from '../../catalog-dRKTgwQ7.js';
|
|
9
|
+
export { O as OtelTaskLogger, l as logLevels } from '../../catalog-dRKTgwQ7.js';
|
|
9
10
|
import { PreciseDate } from '@google-cloud/precise-date';
|
|
10
11
|
import { LogRecordProcessor, LogRecord } from '@opentelemetry/sdk-logs';
|
|
11
12
|
import { SpanProcessor, Span } from '@opentelemetry/sdk-trace-base';
|