@trigger.dev/sdk 0.2.0 → 0.2.2
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/index.d.ts +23 -5
- package/dist/index.js +203 -142
- package/dist/index.js.map +1 -1
- package/package.json +3 -1
package/dist/index.d.ts
CHANGED
|
@@ -2,8 +2,6 @@ import * as zod from 'zod';
|
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
import { EventFilterSchema, TriggerMetadataSchema, ScheduleSourceSchema, ScheduledEventPayloadSchema, SerializableCustomEventSchema } from '@trigger.dev/common-schemas';
|
|
4
4
|
|
|
5
|
-
type LogLevel = "log" | "error" | "warn" | "info" | "debug";
|
|
6
|
-
|
|
7
5
|
type EventRule = z.infer<typeof EventFilterSchema>;
|
|
8
6
|
type TriggerEvent<TSchema extends z.ZodTypeAny> = {
|
|
9
7
|
metadata: z.infer<typeof TriggerMetadataSchema>;
|
|
@@ -17,7 +15,10 @@ declare function customEvent<TSchema extends z.ZodTypeAny>(options: TriggerCusto
|
|
|
17
15
|
type TriggerScheduleOptions = z.infer<typeof ScheduleSourceSchema>;
|
|
18
16
|
declare function scheduleEvent(options: TriggerScheduleOptions): TriggerEvent<typeof ScheduledEventPayloadSchema>;
|
|
19
17
|
|
|
20
|
-
|
|
18
|
+
declare const logLevels: readonly ["disabled", "log", "error", "warn", "info", "debug"];
|
|
19
|
+
type LogLevel = (typeof logLevels)[number];
|
|
20
|
+
|
|
21
|
+
type TriggerCustomEvent = z.infer<typeof SerializableCustomEventSchema>;
|
|
21
22
|
type WaitForOptions = {
|
|
22
23
|
seconds?: number;
|
|
23
24
|
minutes?: number;
|
|
@@ -30,7 +31,7 @@ interface TriggerContext {
|
|
|
30
31
|
apiKey: string;
|
|
31
32
|
organizationId: string;
|
|
32
33
|
logger: TriggerLogger;
|
|
33
|
-
|
|
34
|
+
sendEvent(key: string, event: TriggerCustomEvent): Promise<void>;
|
|
34
35
|
waitFor(key: string, options: WaitForOptions): Promise<void>;
|
|
35
36
|
waitUntil(key: string, date: Date): Promise<void>;
|
|
36
37
|
}
|
|
@@ -48,6 +49,11 @@ type TriggerOptions<TSchema extends z.ZodTypeAny> = {
|
|
|
48
49
|
apiKey?: string;
|
|
49
50
|
endpoint?: string;
|
|
50
51
|
logLevel?: LogLevel;
|
|
52
|
+
/**
|
|
53
|
+
* The TTL for the trigger in seconds. If the trigger is not run within this time, it will be aborted. Defaults to 3600 seconds (1 hour).
|
|
54
|
+
* @type {number}
|
|
55
|
+
*/
|
|
56
|
+
triggerTTL?: number;
|
|
51
57
|
run: (event: z.infer<TSchema>, ctx: TriggerContext) => Promise<any>;
|
|
52
58
|
};
|
|
53
59
|
declare class Trigger<TSchema extends z.ZodTypeAny> {
|
|
@@ -61,6 +67,8 @@ declare class Trigger<TSchema extends z.ZodTypeAny> {
|
|
|
61
67
|
get on(): TriggerEvent<TSchema>;
|
|
62
68
|
}
|
|
63
69
|
|
|
70
|
+
declare function sendEvent(id: string, event: TriggerCustomEvent): Promise<void>;
|
|
71
|
+
|
|
64
72
|
declare function getTriggerRun(): {
|
|
65
73
|
performRequest: <TSchema extends zod.ZodTypeAny>(key: string, options: {
|
|
66
74
|
service: string;
|
|
@@ -70,6 +78,16 @@ declare function getTriggerRun(): {
|
|
|
70
78
|
schema: TSchema;
|
|
71
79
|
};
|
|
72
80
|
}) => Promise<zod.TypeOf<TSchema>>;
|
|
81
|
+
sendEvent: (key: string, event: {
|
|
82
|
+
context?: (string | number | boolean | Date | {
|
|
83
|
+
[key: string]: string | number | boolean | Date | any | (string | number | boolean | Date | any | (string | number | boolean | Date | any | (string | number | boolean | Date | any | (string | number | boolean | Date | any | (string | number | boolean | Date | any | (string | number | boolean | Date | any | (string | number | boolean | Date | any | (string | number | boolean | Date | any | (string | number | boolean | Date | any | (string | number | boolean | Date | any | (string | number | boolean | Date | any | any | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null;
|
|
84
|
+
} | (string | number | boolean | Date | any | (string | number | boolean | Date | any | (string | number | boolean | Date | any | (string | number | boolean | Date | any | (string | number | boolean | Date | any | (string | number | boolean | Date | any | (string | number | boolean | Date | any | (string | number | boolean | Date | any | (string | number | boolean | Date | any | (string | number | boolean | Date | any | (string | number | boolean | Date | any | any | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null) | undefined;
|
|
85
|
+
timestamp?: string | undefined;
|
|
86
|
+
name: string;
|
|
87
|
+
payload: string | number | boolean | Date | {
|
|
88
|
+
[key: string]: string | number | boolean | Date | any | (string | number | boolean | Date | any | (string | number | boolean | Date | any | (string | number | boolean | Date | any | (string | number | boolean | Date | any | (string | number | boolean | Date | any | (string | number | boolean | Date | any | (string | number | boolean | Date | any | (string | number | boolean | Date | any | (string | number | boolean | Date | any | (string | number | boolean | Date | any | (string | number | boolean | Date | any | any | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null;
|
|
89
|
+
} | (string | number | boolean | Date | any | (string | number | boolean | Date | any | (string | number | boolean | Date | any | (string | number | boolean | Date | any | (string | number | boolean | Date | any | (string | number | boolean | Date | any | (string | number | boolean | Date | any | (string | number | boolean | Date | any | (string | number | boolean | Date | any | (string | number | boolean | Date | any | (string | number | boolean | Date | any | any | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null)[] | null;
|
|
90
|
+
}) => Promise<void>;
|
|
73
91
|
} | undefined;
|
|
74
92
|
|
|
75
|
-
export { EventRule, Trigger, TriggerCustomEventOptions, TriggerEvent, TriggerOptions, TriggerScheduleOptions, customEvent, getTriggerRun, scheduleEvent };
|
|
93
|
+
export { EventRule, Trigger, TriggerCustomEventOptions, TriggerEvent, TriggerOptions, TriggerScheduleOptions, customEvent, getTriggerRun, scheduleEvent, sendEvent };
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
2
3
|
var __defProp = Object.defineProperty;
|
|
3
4
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
5
7
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
8
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
7
9
|
var __export = (target, all) => {
|
|
@@ -16,6 +18,10 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
18
|
}
|
|
17
19
|
return to;
|
|
18
20
|
};
|
|
21
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
22
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
23
|
+
mod
|
|
24
|
+
));
|
|
19
25
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
20
26
|
var __accessCheck = (obj, member, msg) => {
|
|
21
27
|
if (!member.has(obj))
|
|
@@ -46,13 +52,11 @@ __export(src_exports, {
|
|
|
46
52
|
Trigger: () => Trigger,
|
|
47
53
|
customEvent: () => customEvent,
|
|
48
54
|
getTriggerRun: () => getTriggerRun,
|
|
49
|
-
scheduleEvent: () => scheduleEvent
|
|
55
|
+
scheduleEvent: () => scheduleEvent,
|
|
56
|
+
sendEvent: () => sendEvent
|
|
50
57
|
});
|
|
51
58
|
module.exports = __toCommonJS(src_exports);
|
|
52
59
|
|
|
53
|
-
// ../internal-bridge/src/schemas/host.ts
|
|
54
|
-
var import_zod7 = require("zod");
|
|
55
|
-
|
|
56
60
|
// ../common-schemas/src/json.ts
|
|
57
61
|
var import_zod = require("zod");
|
|
58
62
|
var LiteralSchema = import_zod.z.union([
|
|
@@ -190,7 +194,7 @@ var ScheduledEventTriggerSchema = import_zod6.z.object({
|
|
|
190
194
|
type: import_zod6.z.literal("SCHEDULE"),
|
|
191
195
|
service: import_zod6.z.literal("scheduler"),
|
|
192
196
|
name: import_zod6.z.string(),
|
|
193
|
-
source:
|
|
197
|
+
source: ScheduleSourceSchema
|
|
194
198
|
});
|
|
195
199
|
var TriggerMetadataSchema = import_zod6.z.discriminatedUnion("type", [
|
|
196
200
|
CustomEventTriggerSchema,
|
|
@@ -199,7 +203,38 @@ var TriggerMetadataSchema = import_zod6.z.discriminatedUnion("type", [
|
|
|
199
203
|
ScheduledEventTriggerSchema
|
|
200
204
|
]);
|
|
201
205
|
|
|
206
|
+
// src/events.ts
|
|
207
|
+
function customEvent(options) {
|
|
208
|
+
return {
|
|
209
|
+
metadata: {
|
|
210
|
+
type: "CUSTOM_EVENT",
|
|
211
|
+
service: "trigger",
|
|
212
|
+
name: options.name,
|
|
213
|
+
filter: {
|
|
214
|
+
event: [
|
|
215
|
+
options.name
|
|
216
|
+
]
|
|
217
|
+
}
|
|
218
|
+
},
|
|
219
|
+
schema: options.schema
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
__name(customEvent, "customEvent");
|
|
223
|
+
function scheduleEvent(options) {
|
|
224
|
+
return {
|
|
225
|
+
metadata: {
|
|
226
|
+
type: "SCHEDULE",
|
|
227
|
+
service: "scheduler",
|
|
228
|
+
name: "scheduled-event",
|
|
229
|
+
source: options
|
|
230
|
+
},
|
|
231
|
+
schema: ScheduledEventPayloadSchema
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
__name(scheduleEvent, "scheduleEvent");
|
|
235
|
+
|
|
202
236
|
// ../internal-bridge/src/schemas/host.ts
|
|
237
|
+
var import_zod7 = require("zod");
|
|
203
238
|
var HostRPCSchema = {
|
|
204
239
|
TRIGGER_WORKFLOW: {
|
|
205
240
|
request: import_zod7.z.object({
|
|
@@ -322,7 +357,8 @@ var ServerRPCSchema = {
|
|
|
322
357
|
workflowName: import_zod8.z.string(),
|
|
323
358
|
trigger: TriggerMetadataSchema,
|
|
324
359
|
packageVersion: import_zod8.z.string(),
|
|
325
|
-
packageName: import_zod8.z.string()
|
|
360
|
+
packageName: import_zod8.z.string(),
|
|
361
|
+
triggerTTL: import_zod8.z.number().optional()
|
|
326
362
|
}),
|
|
327
363
|
response: import_zod8.z.discriminatedUnion("type", [
|
|
328
364
|
import_zod8.z.object({
|
|
@@ -344,7 +380,7 @@ var ServerRPCSchema = {
|
|
|
344
380
|
COMPLETE_WORKFLOW_RUN: {
|
|
345
381
|
request: import_zod8.z.object({
|
|
346
382
|
runId: import_zod8.z.string(),
|
|
347
|
-
output: import_zod8.z.string(),
|
|
383
|
+
output: import_zod8.z.string().optional(),
|
|
348
384
|
timestamp: import_zod8.z.string()
|
|
349
385
|
}),
|
|
350
386
|
response: import_zod8.z.boolean()
|
|
@@ -381,6 +417,68 @@ var TriggerEnvironmentSchema = import_zod9.z.enum([
|
|
|
381
417
|
// ../internal-bridge/src/zodRPC.ts
|
|
382
418
|
var import_zod10 = require("zod");
|
|
383
419
|
var import_node_crypto = require("crypto");
|
|
420
|
+
|
|
421
|
+
// ../internal-bridge/src/logger.ts
|
|
422
|
+
var logLevels = [
|
|
423
|
+
"disabled",
|
|
424
|
+
"log",
|
|
425
|
+
"error",
|
|
426
|
+
"warn",
|
|
427
|
+
"info",
|
|
428
|
+
"debug"
|
|
429
|
+
];
|
|
430
|
+
var _name, _level;
|
|
431
|
+
var Logger = class {
|
|
432
|
+
constructor(name2, level = "disabled") {
|
|
433
|
+
__privateAdd(this, _name, void 0);
|
|
434
|
+
__privateAdd(this, _level, void 0);
|
|
435
|
+
__privateSet(this, _name, name2);
|
|
436
|
+
__privateSet(this, _level, logLevels.indexOf(process.env.TRIGGER_LOG_LEVEL ?? level));
|
|
437
|
+
}
|
|
438
|
+
log(...args) {
|
|
439
|
+
if (__privateGet(this, _level) < 1)
|
|
440
|
+
return;
|
|
441
|
+
console.log(`[${__privateGet(this, _name)}] `, ...args);
|
|
442
|
+
}
|
|
443
|
+
error(...args) {
|
|
444
|
+
if (__privateGet(this, _level) < 2)
|
|
445
|
+
return;
|
|
446
|
+
console.error(`[${formattedDateTime()}] [${__privateGet(this, _name)}] `, ...args);
|
|
447
|
+
}
|
|
448
|
+
warn(...args) {
|
|
449
|
+
if (__privateGet(this, _level) < 3)
|
|
450
|
+
return;
|
|
451
|
+
console.warn(`[${formattedDateTime()}] [${__privateGet(this, _name)}] `, ...args);
|
|
452
|
+
}
|
|
453
|
+
info(...args) {
|
|
454
|
+
if (__privateGet(this, _level) < 4)
|
|
455
|
+
return;
|
|
456
|
+
console.info(`[${formattedDateTime()}] [${__privateGet(this, _name)}] `, ...args);
|
|
457
|
+
}
|
|
458
|
+
debug(...args) {
|
|
459
|
+
if (__privateGet(this, _level) < 5)
|
|
460
|
+
return;
|
|
461
|
+
console.debug(`[${formattedDateTime()}] [${__privateGet(this, _name)}] `, ...args);
|
|
462
|
+
}
|
|
463
|
+
};
|
|
464
|
+
__name(Logger, "Logger");
|
|
465
|
+
_name = new WeakMap();
|
|
466
|
+
_level = new WeakMap();
|
|
467
|
+
function formattedDateTime() {
|
|
468
|
+
const date = new Date();
|
|
469
|
+
const hours = date.getHours();
|
|
470
|
+
const minutes = date.getMinutes();
|
|
471
|
+
const seconds = date.getSeconds();
|
|
472
|
+
const milliseconds = date.getMilliseconds();
|
|
473
|
+
const formattedHours = hours < 10 ? `0${hours}` : hours;
|
|
474
|
+
const formattedMinutes = minutes < 10 ? `0${minutes}` : minutes;
|
|
475
|
+
const formattedSeconds = seconds < 10 ? `0${seconds}` : seconds;
|
|
476
|
+
const formattedMilliseconds = milliseconds < 10 ? `00${milliseconds}` : milliseconds < 100 ? `0${milliseconds}` : milliseconds;
|
|
477
|
+
return `${formattedHours}:${formattedMinutes}:${formattedSeconds}.${formattedMilliseconds}`;
|
|
478
|
+
}
|
|
479
|
+
__name(formattedDateTime, "formattedDateTime");
|
|
480
|
+
|
|
481
|
+
// ../internal-bridge/src/zodRPC.ts
|
|
384
482
|
var RPCMessageSchema = import_zod10.z.object({
|
|
385
483
|
id: import_zod10.z.string(),
|
|
386
484
|
methodName: import_zod10.z.string(),
|
|
@@ -390,7 +488,7 @@ var RPCMessageSchema = import_zod10.z.object({
|
|
|
390
488
|
"RESPONSE"
|
|
391
489
|
])
|
|
392
490
|
});
|
|
393
|
-
var _connection, _sender, _receiver, _handlers, _pendingCalls, _onMessage, onMessage_fn, _onCall, onCall_fn, _onResponse, onResponse_fn, _handleCall, handleCall_fn, _handleResponse, handleResponse_fn;
|
|
491
|
+
var _connection, _sender, _receiver, _handlers, _pendingCalls, _logger, _onMessage, onMessage_fn, _onCall, onCall_fn, _onResponse, onResponse_fn, _handleCall, handleCall_fn, _handleResponse, handleResponse_fn;
|
|
394
492
|
var ZodRPC = class {
|
|
395
493
|
constructor(options) {
|
|
396
494
|
__privateAdd(this, _onMessage);
|
|
@@ -403,6 +501,7 @@ var ZodRPC = class {
|
|
|
403
501
|
__privateAdd(this, _receiver, void 0);
|
|
404
502
|
__privateAdd(this, _handlers, void 0);
|
|
405
503
|
__privateAdd(this, _pendingCalls, /* @__PURE__ */ new Map());
|
|
504
|
+
__privateAdd(this, _logger, new Logger("ZodRPC"));
|
|
406
505
|
__privateSet(this, _connection, options.connection);
|
|
407
506
|
__privateSet(this, _sender, options.sender);
|
|
408
507
|
__privateSet(this, _receiver, options.receiver);
|
|
@@ -440,6 +539,7 @@ _sender = new WeakMap();
|
|
|
440
539
|
_receiver = new WeakMap();
|
|
441
540
|
_handlers = new WeakMap();
|
|
442
541
|
_pendingCalls = new WeakMap();
|
|
542
|
+
_logger = new WeakMap();
|
|
443
543
|
_onMessage = new WeakSet();
|
|
444
544
|
onMessage_fn = /* @__PURE__ */ __name(async function(rawData) {
|
|
445
545
|
try {
|
|
@@ -451,7 +551,7 @@ onMessage_fn = /* @__PURE__ */ __name(async function(rawData) {
|
|
|
451
551
|
await __privateMethod(this, _onResponse, onResponse_fn).call(this, data);
|
|
452
552
|
}
|
|
453
553
|
} catch (err) {
|
|
454
|
-
|
|
554
|
+
__privateGet(this, _logger).error(err);
|
|
455
555
|
}
|
|
456
556
|
}, "#onMessage");
|
|
457
557
|
_onCall = new WeakSet();
|
|
@@ -460,10 +560,10 @@ onCall_fn = /* @__PURE__ */ __name(async function(message) {
|
|
|
460
560
|
await __privateMethod(this, _handleCall, handleCall_fn).call(this, message);
|
|
461
561
|
} catch (callError) {
|
|
462
562
|
if (callError instanceof import_zod10.ZodError) {
|
|
463
|
-
|
|
563
|
+
__privateGet(this, _logger).error(`[ZodRPC] Received invalid call:
|
|
464
564
|
${JSON.stringify(message)}: `, callError.errors);
|
|
465
565
|
} else {
|
|
466
|
-
|
|
566
|
+
__privateGet(this, _logger).error(`[ZodRPC] Error handling call:
|
|
467
567
|
${JSON.stringify(message)}: `, callError);
|
|
468
568
|
}
|
|
469
569
|
}
|
|
@@ -474,11 +574,11 @@ onResponse_fn = /* @__PURE__ */ __name(async function(message1) {
|
|
|
474
574
|
await __privateMethod(this, _handleResponse, handleResponse_fn).call(this, message1);
|
|
475
575
|
} catch (callError) {
|
|
476
576
|
if (callError instanceof import_zod10.ZodError) {
|
|
477
|
-
|
|
577
|
+
__privateGet(this, _logger).error(`[ZodRPC] Received invalid response
|
|
478
578
|
|
|
479
579
|
${JSON.stringify(message1)}: `, callError.flatten());
|
|
480
580
|
} else {
|
|
481
|
-
|
|
581
|
+
__privateGet(this, _logger).error(`[ZodRPC] Error handling response
|
|
482
582
|
|
|
483
583
|
${JSON.stringify(message1)}: `, callError);
|
|
484
584
|
}
|
|
@@ -492,6 +592,9 @@ handleCall_fn = /* @__PURE__ */ __name(async function(message2) {
|
|
|
492
592
|
if (!method) {
|
|
493
593
|
throw new Error(`There is no method for ${message2.methodName}`);
|
|
494
594
|
}
|
|
595
|
+
__privateGet(this, _logger).debug("Received call", {
|
|
596
|
+
message: message2
|
|
597
|
+
});
|
|
495
598
|
const inputs = method.request.parse(message2.data);
|
|
496
599
|
const handler = __privateGet(this, _handlers)[methodName];
|
|
497
600
|
const returnValue = await handler(inputs);
|
|
@@ -503,7 +606,7 @@ handleCall_fn = /* @__PURE__ */ __name(async function(message2) {
|
|
|
503
606
|
try {
|
|
504
607
|
await __privateGet(this, _connection).send(preparedResponseText);
|
|
505
608
|
} catch (err) {
|
|
506
|
-
|
|
609
|
+
__privateGet(this, _logger).error("Failed sending response", preparedResponseText, err);
|
|
507
610
|
}
|
|
508
611
|
return;
|
|
509
612
|
}, "#handleCall");
|
|
@@ -543,72 +646,13 @@ function packageResponse({ id, methodName, data }) {
|
|
|
543
646
|
}
|
|
544
647
|
__name(packageResponse, "packageResponse");
|
|
545
648
|
|
|
546
|
-
// ../internal-bridge/src/logger.ts
|
|
547
|
-
var logLevels = [
|
|
548
|
-
"log",
|
|
549
|
-
"error",
|
|
550
|
-
"warn",
|
|
551
|
-
"info",
|
|
552
|
-
"debug"
|
|
553
|
-
];
|
|
554
|
-
var _name, _level;
|
|
555
|
-
var Logger = class {
|
|
556
|
-
constructor(name2, level = "info") {
|
|
557
|
-
__privateAdd(this, _name, void 0);
|
|
558
|
-
__privateAdd(this, _level, void 0);
|
|
559
|
-
__privateSet(this, _name, name2);
|
|
560
|
-
__privateSet(this, _level, logLevels.indexOf(process.env.TRIGGER_LOG_LEVEL ?? level));
|
|
561
|
-
}
|
|
562
|
-
log(...args) {
|
|
563
|
-
if (__privateGet(this, _level) < 0)
|
|
564
|
-
return;
|
|
565
|
-
console.log(`[${formattedDateTime()}] [${__privateGet(this, _name)}] `, ...args);
|
|
566
|
-
}
|
|
567
|
-
error(...args) {
|
|
568
|
-
if (__privateGet(this, _level) < 1)
|
|
569
|
-
return;
|
|
570
|
-
console.error(`[${formattedDateTime()}] [${__privateGet(this, _name)}] `, ...args);
|
|
571
|
-
}
|
|
572
|
-
warn(...args) {
|
|
573
|
-
if (__privateGet(this, _level) < 2)
|
|
574
|
-
return;
|
|
575
|
-
console.warn(`[${formattedDateTime()}] [${__privateGet(this, _name)}] `, ...args);
|
|
576
|
-
}
|
|
577
|
-
info(...args) {
|
|
578
|
-
if (__privateGet(this, _level) < 3)
|
|
579
|
-
return;
|
|
580
|
-
console.info(`[${formattedDateTime()}] [${__privateGet(this, _name)}] `, ...args);
|
|
581
|
-
}
|
|
582
|
-
debug(...args) {
|
|
583
|
-
if (__privateGet(this, _level) < 4)
|
|
584
|
-
return;
|
|
585
|
-
console.debug(`[${formattedDateTime()}] [${__privateGet(this, _name)}] `, ...args);
|
|
586
|
-
}
|
|
587
|
-
};
|
|
588
|
-
__name(Logger, "Logger");
|
|
589
|
-
_name = new WeakMap();
|
|
590
|
-
_level = new WeakMap();
|
|
591
|
-
function formattedDateTime() {
|
|
592
|
-
const date = new Date();
|
|
593
|
-
const hours = date.getHours();
|
|
594
|
-
const minutes = date.getMinutes();
|
|
595
|
-
const seconds = date.getSeconds();
|
|
596
|
-
const milliseconds = date.getMilliseconds();
|
|
597
|
-
const formattedHours = hours < 10 ? `0${hours}` : hours;
|
|
598
|
-
const formattedMinutes = minutes < 10 ? `0${minutes}` : minutes;
|
|
599
|
-
const formattedSeconds = seconds < 10 ? `0${seconds}` : seconds;
|
|
600
|
-
const formattedMilliseconds = milliseconds < 10 ? `00${milliseconds}` : milliseconds < 100 ? `0${milliseconds}` : milliseconds;
|
|
601
|
-
return `${formattedHours}:${formattedMinutes}:${formattedSeconds}.${formattedMilliseconds}`;
|
|
602
|
-
}
|
|
603
|
-
__name(formattedDateTime, "formattedDateTime");
|
|
604
|
-
|
|
605
649
|
// src/client.ts
|
|
606
650
|
var import_uuid2 = require("uuid");
|
|
607
651
|
var import_ws = require("ws");
|
|
608
652
|
|
|
609
653
|
// package.json
|
|
610
654
|
var name = "@trigger.dev/sdk";
|
|
611
|
-
var version = "0.2.
|
|
655
|
+
var version = "0.2.2";
|
|
612
656
|
|
|
613
657
|
// src/connection.ts
|
|
614
658
|
var import_uuid = require("uuid");
|
|
@@ -619,7 +663,7 @@ __name(TimeoutError, "TimeoutError");
|
|
|
619
663
|
var NotConnectedError = class extends Error {
|
|
620
664
|
};
|
|
621
665
|
__name(NotConnectedError, "NotConnectedError");
|
|
622
|
-
var _socket, _connectTimeout, _sendTimeout, _pingTimeout, _isAuthenticated, _timeouts, _isClosed, _pendingMessages,
|
|
666
|
+
var _socket, _connectTimeout, _sendTimeout, _pingTimeout, _isAuthenticated, _timeouts, _isClosed, _pendingMessages, _logger2, _pingIntervalHandle, _pingIntervalMs, _closeUnresponsiveConnectionTimeoutMs, _startPingInterval, startPingInterval_fn, _ping, ping_fn;
|
|
623
667
|
var HostConnection = class {
|
|
624
668
|
constructor(socket, options) {
|
|
625
669
|
__privateAdd(this, _startPingInterval);
|
|
@@ -632,7 +676,7 @@ var HostConnection = class {
|
|
|
632
676
|
__privateAdd(this, _timeouts, void 0);
|
|
633
677
|
__privateAdd(this, _isClosed, false);
|
|
634
678
|
__privateAdd(this, _pendingMessages, /* @__PURE__ */ new Map());
|
|
635
|
-
__privateAdd(this,
|
|
679
|
+
__privateAdd(this, _logger2, void 0);
|
|
636
680
|
__privateAdd(this, _pingIntervalHandle, void 0);
|
|
637
681
|
__privateAdd(this, _pingIntervalMs, 3e4);
|
|
638
682
|
__privateAdd(this, _closeUnresponsiveConnectionTimeoutMs, 3 * 60 * 1e3);
|
|
@@ -647,7 +691,7 @@ var HostConnection = class {
|
|
|
647
691
|
__privateSet(this, _sendTimeout, options?.sendTimeout ?? 5e3);
|
|
648
692
|
__privateSet(this, _pingTimeout, options?.pingTimeout ?? 5e3);
|
|
649
693
|
__privateSet(this, _timeouts, /* @__PURE__ */ new Set());
|
|
650
|
-
__privateSet(this,
|
|
694
|
+
__privateSet(this, _logger2, new Logger("trigger.dev connection"));
|
|
651
695
|
this.onClose.attach(() => {
|
|
652
696
|
__privateSet(this, _isClosed, true);
|
|
653
697
|
if (__privateGet(this, _pingIntervalHandle)) {
|
|
@@ -710,21 +754,21 @@ var HostConnection = class {
|
|
|
710
754
|
}
|
|
711
755
|
}
|
|
712
756
|
async connect() {
|
|
713
|
-
__privateGet(this,
|
|
757
|
+
__privateGet(this, _logger2).debug("[connect] Attempting to connect");
|
|
714
758
|
return new Promise((resolve, reject) => {
|
|
715
759
|
if (__privateGet(this, _socket).readyState === __privateGet(this, _socket).OPEN && __privateGet(this, _isAuthenticated)) {
|
|
716
|
-
__privateGet(this,
|
|
760
|
+
__privateGet(this, _logger2).debug("[connect] Already connected, resolving");
|
|
717
761
|
return resolve();
|
|
718
762
|
}
|
|
719
763
|
const failTimeout = setTimeout(() => {
|
|
720
|
-
__privateGet(this,
|
|
764
|
+
__privateGet(this, _logger2).debug("[connect] Connection timed out, rejecting");
|
|
721
765
|
reject(new TimeoutError());
|
|
722
766
|
}, __privateGet(this, _connectTimeout));
|
|
723
767
|
__privateGet(this, _timeouts).add(failTimeout);
|
|
724
768
|
this.onAuthenticated.attach(() => {
|
|
725
769
|
clearTimeout(failTimeout);
|
|
726
770
|
__privateGet(this, _timeouts).delete(failTimeout);
|
|
727
|
-
__privateGet(this,
|
|
771
|
+
__privateGet(this, _logger2).debug("[connect] Connected, resolving");
|
|
728
772
|
resolve();
|
|
729
773
|
});
|
|
730
774
|
});
|
|
@@ -768,7 +812,7 @@ _isAuthenticated = new WeakMap();
|
|
|
768
812
|
_timeouts = new WeakMap();
|
|
769
813
|
_isClosed = new WeakMap();
|
|
770
814
|
_pendingMessages = new WeakMap();
|
|
771
|
-
|
|
815
|
+
_logger2 = new WeakMap();
|
|
772
816
|
_pingIntervalHandle = new WeakMap();
|
|
773
817
|
_pingIntervalMs = new WeakMap();
|
|
774
818
|
_closeUnresponsiveConnectionTimeoutMs = new WeakMap();
|
|
@@ -787,12 +831,12 @@ startPingInterval_fn = /* @__PURE__ */ __name(function() {
|
|
|
787
831
|
await __privateMethod(this, _ping, ping_fn).call(this);
|
|
788
832
|
lastSuccessfulPing = new Date();
|
|
789
833
|
} catch (err) {
|
|
790
|
-
__privateGet(this,
|
|
834
|
+
__privateGet(this, _logger2).warn("Pong not received in time");
|
|
791
835
|
if (!(err instanceof TimeoutError)) {
|
|
792
|
-
__privateGet(this,
|
|
836
|
+
__privateGet(this, _logger2).error(err);
|
|
793
837
|
}
|
|
794
838
|
if (lastSuccessfulPing.getTime() < new Date().getTime() - __privateGet(this, _closeUnresponsiveConnectionTimeoutMs)) {
|
|
795
|
-
__privateGet(this,
|
|
839
|
+
__privateGet(this, _logger2).error("No pong received in last three minutes, closing connection to Interval and retrying...");
|
|
796
840
|
if (__privateGet(this, _pingIntervalHandle)) {
|
|
797
841
|
clearInterval(__privateGet(this, _pingIntervalHandle));
|
|
798
842
|
__privateSet(this, _pingIntervalHandle, void 0);
|
|
@@ -822,11 +866,11 @@ ping_fn = /* @__PURE__ */ __name(async function() {
|
|
|
822
866
|
onAckReceived: () => {
|
|
823
867
|
clearTimeout(failTimeout);
|
|
824
868
|
__privateGet(this, _timeouts).delete(failTimeout);
|
|
825
|
-
__privateGet(this,
|
|
869
|
+
__privateGet(this, _logger2).debug(`Resolving ping`);
|
|
826
870
|
resolve();
|
|
827
871
|
}
|
|
828
872
|
});
|
|
829
|
-
__privateGet(this,
|
|
873
|
+
__privateGet(this, _logger2).debug(`Sending ping ${id} to ${socket.url}`);
|
|
830
874
|
socket.ping(id, void 0, (err) => {
|
|
831
875
|
if (err) {
|
|
832
876
|
reject(err);
|
|
@@ -860,7 +904,7 @@ var ContextLogger = class {
|
|
|
860
904
|
__name(ContextLogger, "ContextLogger");
|
|
861
905
|
|
|
862
906
|
// src/client.ts
|
|
863
|
-
var _trigger, _options, _connection2, _serverRPC, _apiKey, _endpoint, _isConnected, _retryIntervalMs,
|
|
907
|
+
var _trigger, _options, _connection2, _serverRPC, _apiKey, _endpoint, _isConnected, _retryIntervalMs, _logger3, _closedByUser, _responseCompleteCallbacks, _waitForCallbacks, _initializeConnection, initializeConnection_fn, _initializeRPC, initializeRPC_fn, _initializeHost, initializeHost_fn, _send, send_fn;
|
|
864
908
|
var TriggerClient = class {
|
|
865
909
|
constructor(trigger, options) {
|
|
866
910
|
__privateAdd(this, _initializeConnection);
|
|
@@ -875,7 +919,7 @@ var TriggerClient = class {
|
|
|
875
919
|
__privateAdd(this, _endpoint, void 0);
|
|
876
920
|
__privateAdd(this, _isConnected, false);
|
|
877
921
|
__privateAdd(this, _retryIntervalMs, 3e3);
|
|
878
|
-
__privateAdd(this,
|
|
922
|
+
__privateAdd(this, _logger3, void 0);
|
|
879
923
|
__privateAdd(this, _closedByUser, false);
|
|
880
924
|
__privateAdd(this, _responseCompleteCallbacks, /* @__PURE__ */ new Map());
|
|
881
925
|
__privateAdd(this, _waitForCallbacks, /* @__PURE__ */ new Map());
|
|
@@ -887,7 +931,7 @@ var TriggerClient = class {
|
|
|
887
931
|
}
|
|
888
932
|
__privateSet(this, _apiKey, apiKey);
|
|
889
933
|
__privateSet(this, _endpoint, __privateGet(this, _options).endpoint ?? "wss://wss.trigger.dev/ws");
|
|
890
|
-
__privateSet(this,
|
|
934
|
+
__privateSet(this, _logger3, new Logger("trigger.dev", __privateGet(this, _options).logLevel));
|
|
891
935
|
}
|
|
892
936
|
async listen(instanceId) {
|
|
893
937
|
await __privateMethod(this, _initializeConnection, initializeConnection_fn).call(this, instanceId);
|
|
@@ -912,14 +956,14 @@ _apiKey = new WeakMap();
|
|
|
912
956
|
_endpoint = new WeakMap();
|
|
913
957
|
_isConnected = new WeakMap();
|
|
914
958
|
_retryIntervalMs = new WeakMap();
|
|
915
|
-
|
|
959
|
+
_logger3 = new WeakMap();
|
|
916
960
|
_closedByUser = new WeakMap();
|
|
917
961
|
_responseCompleteCallbacks = new WeakMap();
|
|
918
962
|
_waitForCallbacks = new WeakMap();
|
|
919
963
|
_initializeConnection = new WeakSet();
|
|
920
964
|
initializeConnection_fn = /* @__PURE__ */ __name(async function(instanceId) {
|
|
921
965
|
const id = instanceId ?? (0, import_uuid2.v4)();
|
|
922
|
-
__privateGet(this,
|
|
966
|
+
__privateGet(this, _logger3).debug("Initializing connection", {
|
|
923
967
|
id,
|
|
924
968
|
endpoint: __privateGet(this, _endpoint)
|
|
925
969
|
});
|
|
@@ -934,29 +978,29 @@ initializeConnection_fn = /* @__PURE__ */ __name(async function(instanceId) {
|
|
|
934
978
|
});
|
|
935
979
|
connection.onClose.attach(async ([code, reason]) => {
|
|
936
980
|
if (__privateGet(this, _closedByUser)) {
|
|
937
|
-
__privateGet(this,
|
|
981
|
+
__privateGet(this, _logger3).debug("Connection closed by user, so we won't reconnect");
|
|
938
982
|
__privateSet(this, _closedByUser, false);
|
|
939
983
|
return;
|
|
940
984
|
}
|
|
941
|
-
__privateGet(this,
|
|
985
|
+
__privateGet(this, _logger3).error(`\u{1F6A9} Could not connect to trigger.dev (code ${code})`);
|
|
942
986
|
if (reason) {
|
|
943
|
-
__privateGet(this,
|
|
987
|
+
__privateGet(this, _logger3).error("Reason:", reason);
|
|
944
988
|
}
|
|
945
989
|
if (!__privateGet(this, _isConnected))
|
|
946
990
|
return;
|
|
947
|
-
__privateGet(this,
|
|
991
|
+
__privateGet(this, _logger3).log("\u{1F50C} Reconnecting to trigger.dev...");
|
|
948
992
|
__privateSet(this, _isConnected, false);
|
|
949
993
|
while (!__privateGet(this, _isConnected)) {
|
|
950
994
|
__privateMethod(this, _initializeConnection, initializeConnection_fn).call(this, id).then(() => {
|
|
951
|
-
__privateGet(this,
|
|
995
|
+
__privateGet(this, _logger3).log("\u26A1 Reconnection successful");
|
|
952
996
|
}).catch(() => {
|
|
953
997
|
});
|
|
954
|
-
__privateGet(this,
|
|
998
|
+
__privateGet(this, _logger3).debug(`Reconnection failed, retrying in ${Math.round(__privateGet(this, _retryIntervalMs) / 1e3)} seconds`, id);
|
|
955
999
|
await new Promise((resolve) => setTimeout(resolve, __privateGet(this, _retryIntervalMs)));
|
|
956
1000
|
}
|
|
957
1001
|
});
|
|
958
1002
|
await connection.connect();
|
|
959
|
-
__privateGet(this,
|
|
1003
|
+
__privateGet(this, _logger3).debug("Connection initialized", id);
|
|
960
1004
|
__privateSet(this, _connection2, connection);
|
|
961
1005
|
__privateSet(this, _isConnected, true);
|
|
962
1006
|
if (__privateGet(this, _serverRPC)) {
|
|
@@ -975,10 +1019,10 @@ initializeRPC_fn = /* @__PURE__ */ __name(async function() {
|
|
|
975
1019
|
receiver: HostRPCSchema,
|
|
976
1020
|
handlers: {
|
|
977
1021
|
RESOLVE_DELAY: async (data) => {
|
|
978
|
-
__privateGet(this,
|
|
1022
|
+
__privateGet(this, _logger3).debug("Handling RESOLVE_DELAY", data);
|
|
979
1023
|
const waitCallbacks = __privateGet(this, _waitForCallbacks).get(messageKey(data.meta.runId, data.key));
|
|
980
1024
|
if (!waitCallbacks) {
|
|
981
|
-
__privateGet(this,
|
|
1025
|
+
__privateGet(this, _logger3).debug(`Could not find wait callbacks for wait ID ${messageKey(data.meta.runId, data.key)}. This can happen when a workflow run is resumed`);
|
|
982
1026
|
return true;
|
|
983
1027
|
}
|
|
984
1028
|
const { resolve } = waitCallbacks;
|
|
@@ -986,10 +1030,10 @@ initializeRPC_fn = /* @__PURE__ */ __name(async function() {
|
|
|
986
1030
|
return true;
|
|
987
1031
|
},
|
|
988
1032
|
RESOLVE_REQUEST: async (data) => {
|
|
989
|
-
__privateGet(this,
|
|
1033
|
+
__privateGet(this, _logger3).debug("Handling RESOLVE_REQUEST", data);
|
|
990
1034
|
const requestCallbacks = __privateGet(this, _responseCompleteCallbacks).get(messageKey(data.meta.runId, data.key));
|
|
991
1035
|
if (!requestCallbacks) {
|
|
992
|
-
__privateGet(this,
|
|
1036
|
+
__privateGet(this, _logger3).debug(`Could not find request callbacks for request ID ${messageKey(data.meta.runId, data.key)}. This can happen when a workflow run is resumed`);
|
|
993
1037
|
return true;
|
|
994
1038
|
}
|
|
995
1039
|
const { resolve } = requestCallbacks;
|
|
@@ -997,10 +1041,10 @@ initializeRPC_fn = /* @__PURE__ */ __name(async function() {
|
|
|
997
1041
|
return true;
|
|
998
1042
|
},
|
|
999
1043
|
REJECT_REQUEST: async (data) => {
|
|
1000
|
-
__privateGet(this,
|
|
1044
|
+
__privateGet(this, _logger3).debug("Handling REJECT_REQUEST", data);
|
|
1001
1045
|
const requestCallbacks = __privateGet(this, _responseCompleteCallbacks).get(messageKey(data.meta.runId, data.key));
|
|
1002
1046
|
if (!requestCallbacks) {
|
|
1003
|
-
__privateGet(this,
|
|
1047
|
+
__privateGet(this, _logger3).debug(`Could not find request callbacks for request ID ${messageKey(data.meta.runId, data.key)}. This can happen when a workflow run is resumed`);
|
|
1004
1048
|
return true;
|
|
1005
1049
|
}
|
|
1006
1050
|
const { reject } = requestCallbacks;
|
|
@@ -1008,7 +1052,7 @@ initializeRPC_fn = /* @__PURE__ */ __name(async function() {
|
|
|
1008
1052
|
return true;
|
|
1009
1053
|
},
|
|
1010
1054
|
TRIGGER_WORKFLOW: async (data) => {
|
|
1011
|
-
__privateGet(this,
|
|
1055
|
+
__privateGet(this, _logger3).debug("Handling TRIGGER_WORKFLOW", data);
|
|
1012
1056
|
const ctx = {
|
|
1013
1057
|
id: data.id,
|
|
1014
1058
|
environment: data.meta.environment,
|
|
@@ -1026,7 +1070,7 @@ initializeRPC_fn = /* @__PURE__ */ __name(async function() {
|
|
|
1026
1070
|
timestamp: String(highPrecisionTimestamp())
|
|
1027
1071
|
});
|
|
1028
1072
|
}),
|
|
1029
|
-
|
|
1073
|
+
sendEvent: async (key, event) => {
|
|
1030
1074
|
await serverRPC.send("SEND_EVENT", {
|
|
1031
1075
|
runId: data.id,
|
|
1032
1076
|
key,
|
|
@@ -1077,7 +1121,7 @@ initializeRPC_fn = /* @__PURE__ */ __name(async function() {
|
|
|
1077
1121
|
}
|
|
1078
1122
|
};
|
|
1079
1123
|
const eventData = __privateGet(this, _options).on.schema.parse(data.trigger.input);
|
|
1080
|
-
__privateGet(this,
|
|
1124
|
+
__privateGet(this, _logger3).debug("Parsed event data", eventData);
|
|
1081
1125
|
triggerRunLocalStorage.run({
|
|
1082
1126
|
performRequest: async (key, options) => {
|
|
1083
1127
|
const result = new Promise((resolve, reject) => {
|
|
@@ -1098,14 +1142,23 @@ initializeRPC_fn = /* @__PURE__ */ __name(async function() {
|
|
|
1098
1142
|
});
|
|
1099
1143
|
const output = await result;
|
|
1100
1144
|
return options.response.schema.parse(output);
|
|
1145
|
+
},
|
|
1146
|
+
sendEvent: async (key, event) => {
|
|
1147
|
+
await serverRPC.send("SEND_EVENT", {
|
|
1148
|
+
runId: data.id,
|
|
1149
|
+
key,
|
|
1150
|
+
event: JSON.parse(JSON.stringify(event)),
|
|
1151
|
+
timestamp: String(highPrecisionTimestamp())
|
|
1152
|
+
});
|
|
1101
1153
|
}
|
|
1102
1154
|
}, () => {
|
|
1103
|
-
__privateGet(this,
|
|
1155
|
+
__privateGet(this, _logger3).debug("Running trigger...");
|
|
1104
1156
|
serverRPC.send("START_WORKFLOW_RUN", {
|
|
1105
1157
|
runId: data.id,
|
|
1106
1158
|
timestamp: String(highPrecisionTimestamp())
|
|
1107
1159
|
}).then(() => {
|
|
1108
1160
|
return __privateGet(this, _trigger).options.run(eventData, ctx).then((output) => {
|
|
1161
|
+
__privateGet(this, _logger3).log(`Completed workflow '${__privateGet(this, _options).name}', run ${data.id} \u{1F3C3}`);
|
|
1109
1162
|
return serverRPC.send("COMPLETE_WORKFLOW_RUN", {
|
|
1110
1163
|
runId: data.id,
|
|
1111
1164
|
output: JSON.stringify(output),
|
|
@@ -1145,7 +1198,7 @@ initializeRPC_fn = /* @__PURE__ */ __name(async function() {
|
|
|
1145
1198
|
}
|
|
1146
1199
|
}
|
|
1147
1200
|
});
|
|
1148
|
-
__privateGet(this,
|
|
1201
|
+
__privateGet(this, _logger3).debug("Successfully initialized RPC with server");
|
|
1149
1202
|
__privateSet(this, _serverRPC, serverRPC);
|
|
1150
1203
|
}, "#initializeRPC");
|
|
1151
1204
|
_initializeHost = new WeakSet();
|
|
@@ -1162,12 +1215,13 @@ initializeHost_fn = /* @__PURE__ */ __name(async function() {
|
|
|
1162
1215
|
workflowName: __privateGet(this, _trigger).name,
|
|
1163
1216
|
trigger: __privateGet(this, _trigger).on.metadata,
|
|
1164
1217
|
packageVersion: version,
|
|
1165
|
-
packageName: name
|
|
1218
|
+
packageName: name,
|
|
1219
|
+
triggerTTL: __privateGet(this, _options).triggerTTL
|
|
1166
1220
|
});
|
|
1167
1221
|
if (response?.type === "error") {
|
|
1168
1222
|
throw new Error(response.message);
|
|
1169
1223
|
}
|
|
1170
|
-
__privateGet(this,
|
|
1224
|
+
__privateGet(this, _logger3).debug("Successfully initialized workflow with server");
|
|
1171
1225
|
}, "#initializeHost");
|
|
1172
1226
|
_send = new WeakSet();
|
|
1173
1227
|
send_fn = /* @__PURE__ */ __name(async function(methodName, request) {
|
|
@@ -1175,12 +1229,12 @@ send_fn = /* @__PURE__ */ __name(async function(methodName, request) {
|
|
|
1175
1229
|
throw new Error("serverRPC not initialized");
|
|
1176
1230
|
while (true) {
|
|
1177
1231
|
try {
|
|
1178
|
-
__privateGet(this,
|
|
1232
|
+
__privateGet(this, _logger3).debug(`Sending RPC request to server: ${methodName}`, request);
|
|
1179
1233
|
return await __privateGet(this, _serverRPC).send(methodName, request);
|
|
1180
1234
|
} catch (err) {
|
|
1181
1235
|
if (err instanceof TimeoutError) {
|
|
1182
|
-
__privateGet(this,
|
|
1183
|
-
__privateGet(this,
|
|
1236
|
+
__privateGet(this, _logger3).log(`RPC call timed out, retrying in ${Math.round(__privateGet(this, _retryIntervalMs) / 1e3)}s...`);
|
|
1237
|
+
__privateGet(this, _logger3).error(err);
|
|
1184
1238
|
await sleep(__privateGet(this, _retryIntervalMs));
|
|
1185
1239
|
} else {
|
|
1186
1240
|
throw err;
|
|
@@ -1225,35 +1279,41 @@ var Trigger = class {
|
|
|
1225
1279
|
__name(Trigger, "Trigger");
|
|
1226
1280
|
_client = new WeakMap();
|
|
1227
1281
|
|
|
1228
|
-
// src/
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
options.name
|
|
1238
|
-
]
|
|
1239
|
-
}
|
|
1240
|
-
},
|
|
1241
|
-
schema: options.schema
|
|
1242
|
-
};
|
|
1282
|
+
// src/customEvents.ts
|
|
1283
|
+
var import_node_fetch = __toESM(require("node-fetch"));
|
|
1284
|
+
var import_ulid = require("ulid");
|
|
1285
|
+
function sendEvent(id, event) {
|
|
1286
|
+
const triggerRun = triggerRunLocalStorage.getStore();
|
|
1287
|
+
if (!triggerRun) {
|
|
1288
|
+
return sendEventFetch(event);
|
|
1289
|
+
}
|
|
1290
|
+
return triggerRun.sendEvent(id, event);
|
|
1243
1291
|
}
|
|
1244
|
-
__name(
|
|
1245
|
-
function
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1292
|
+
__name(sendEvent, "sendEvent");
|
|
1293
|
+
async function sendEventFetch(event) {
|
|
1294
|
+
if (!process.env.TRIGGER_API_KEY) {
|
|
1295
|
+
throw new Error(`There was a problem sending a custom event: the TRIGGER_API_KEY environment variable is not set`);
|
|
1296
|
+
}
|
|
1297
|
+
const id = (0, import_ulid.ulid)();
|
|
1298
|
+
const baseUrl = process.env.TRIGGER_API_URL || "https://app.trigger.dev";
|
|
1299
|
+
const url = `${baseUrl}/api/v1/events`;
|
|
1300
|
+
const response = await (0, import_node_fetch.default)(url, {
|
|
1301
|
+
method: "POST",
|
|
1302
|
+
headers: {
|
|
1303
|
+
"Content-Type": "application/json",
|
|
1304
|
+
Authorization: `Bearer ${process.env.TRIGGER_API_KEY}`
|
|
1252
1305
|
},
|
|
1253
|
-
|
|
1254
|
-
|
|
1306
|
+
body: JSON.stringify({
|
|
1307
|
+
id,
|
|
1308
|
+
event
|
|
1309
|
+
})
|
|
1310
|
+
});
|
|
1311
|
+
if (!response.ok) {
|
|
1312
|
+
throw new Error(`There was a problem sending a custom event: ${response.statusText}`);
|
|
1313
|
+
}
|
|
1314
|
+
return;
|
|
1255
1315
|
}
|
|
1256
|
-
__name(
|
|
1316
|
+
__name(sendEventFetch, "sendEventFetch");
|
|
1257
1317
|
|
|
1258
1318
|
// src/index.ts
|
|
1259
1319
|
function getTriggerRun() {
|
|
@@ -1265,6 +1325,7 @@ __name(getTriggerRun, "getTriggerRun");
|
|
|
1265
1325
|
Trigger,
|
|
1266
1326
|
customEvent,
|
|
1267
1327
|
getTriggerRun,
|
|
1268
|
-
scheduleEvent
|
|
1328
|
+
scheduleEvent,
|
|
1329
|
+
sendEvent
|
|
1269
1330
|
});
|
|
1270
1331
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../../internal-bridge/src/schemas/host.ts","../../common-schemas/src/json.ts","../../common-schemas/src/error.ts","../../common-schemas/src/logs.ts","../../common-schemas/src/waits.ts","../../common-schemas/src/events.ts","../../common-schemas/src/triggers.ts","../../internal-bridge/src/schemas/server.ts","../../internal-bridge/src/schemas/common.ts","../../internal-bridge/src/zodRPC.ts","../../internal-bridge/src/logger.ts","../src/client.ts","../src/connection.ts","../src/localStorage.ts","../src/logger.ts","../src/trigger/index.ts","../src/events.ts"],"sourcesContent":["export * from \"./trigger\";\nexport * from \"./events\";\n\nimport { triggerRunLocalStorage } from \"./localStorage\";\n\nexport function getTriggerRun() {\n return triggerRunLocalStorage.getStore();\n}\n","import { z } from \"zod\";\nimport { JsonSchema } from \"@trigger.dev/common-schemas\";\n\nexport const HostRPCSchema = {\n TRIGGER_WORKFLOW: {\n request: z.object({\n id: z.string(),\n trigger: z.object({\n input: JsonSchema.default({}),\n context: JsonSchema.default({}),\n }),\n meta: z.object({\n environment: z.string(),\n workflowId: z.string(),\n organizationId: z.string(),\n apiKey: z.string(),\n }),\n }),\n response: z.boolean(),\n },\n RESOLVE_REQUEST: {\n request: z.object({\n id: z.string(),\n key: z.string(),\n output: JsonSchema.default({}),\n meta: z.object({\n environment: z.string(),\n workflowId: z.string(),\n organizationId: z.string(),\n apiKey: z.string(),\n runId: z.string(),\n }),\n }),\n response: z.boolean(),\n },\n RESOLVE_DELAY: {\n request: z.object({\n id: z.string(),\n key: z.string(),\n meta: z.object({\n environment: z.string(),\n workflowId: z.string(),\n organizationId: z.string(),\n apiKey: z.string(),\n runId: z.string(),\n }),\n }),\n response: z.boolean(),\n },\n REJECT_REQUEST: {\n request: z.object({\n id: z.string(),\n key: z.string(),\n error: JsonSchema.default({}),\n meta: z.object({\n environment: z.string(),\n workflowId: z.string(),\n organizationId: z.string(),\n apiKey: z.string(),\n runId: z.string(),\n }),\n }),\n response: z.boolean(),\n },\n};\n\nexport type HostRPC = typeof HostRPCSchema;\n","import { z } from \"zod\";\n\nconst LiteralSchema = z.union([z.string(), z.number(), z.boolean(), z.null()]);\ntype Literal = z.infer<typeof LiteralSchema>;\n\ntype Json = Literal | { [key: string]: Json } | Json[];\n\nexport const JsonSchema: z.ZodType<Json> = z.lazy(() =>\n z.union([LiteralSchema, z.array(JsonSchema), z.record(JsonSchema)])\n);\n\nconst SerializableSchema = z.union([\n z.string(),\n z.number(),\n z.boolean(),\n z.null(),\n z.date(),\n]);\ntype Serializable = z.infer<typeof SerializableSchema>;\n\ntype SerializableJson =\n | Serializable\n | { [key: string]: SerializableJson }\n | SerializableJson[];\n\nexport const SerializableJsonSchema: z.ZodType<SerializableJson> = z.lazy(() =>\n z.union([\n SerializableSchema,\n z.array(SerializableJsonSchema),\n z.record(SerializableJsonSchema),\n ])\n);\n","import { z } from \"zod\";\n\nexport const ErrorSchema = z.object({\n name: z.string(),\n message: z.string(),\n stackTrace: z.string().optional(),\n});\n","import { z } from \"zod\";\nimport { JsonSchema } from \"./json\";\n\nexport const LogMessageSchema = z.object({\n level: z.enum([\"DEBUG\", \"INFO\", \"WARN\", \"ERROR\"]),\n message: z.string(),\n properties: JsonSchema.default({}),\n});\n","import { z } from \"zod\";\n\nexport const DelaySchema = z.object({\n type: z.literal(\"DELAY\"),\n seconds: z.number().optional(),\n minutes: z.number().optional(),\n hours: z.number().optional(),\n days: z.number().optional(),\n});\n\nexport type Delay = z.infer<typeof DelaySchema>;\n\nexport const ScheduledForSchema = z.object({\n type: z.literal(\"SCHEDULE_FOR\"),\n scheduledFor: z.string().datetime(),\n});\n\nexport type Scheduled = z.infer<typeof ScheduledForSchema>;\n\nexport const WaitSchema = z.discriminatedUnion(\"type\", [\n DelaySchema,\n ScheduledForSchema,\n]);\n","import { z } from \"zod\";\nimport { JsonSchema, SerializableJsonSchema } from \"./json\";\n\nexport const CustomEventSchema = z.object({\n name: z.string(),\n payload: JsonSchema,\n context: JsonSchema.optional(),\n timestamp: z.string().datetime().optional(),\n});\n\nexport const SerializableCustomEventSchema = z.object({\n name: z.string(),\n payload: SerializableJsonSchema,\n context: SerializableJsonSchema.optional(),\n timestamp: z.string().datetime().optional(),\n});\n\nconst EventMatcherSchema = z.union([\n z.array(z.string()),\n z.array(z.number()),\n z.array(z.boolean()),\n]);\ntype EventMatcher = z.infer<typeof EventMatcherSchema>;\n\nexport type EventFilter = { [key: string]: EventMatcher | EventFilter };\n\nexport const EventFilterSchema: z.ZodType<EventFilter> = z.lazy(() =>\n z.record(z.union([EventMatcherSchema, EventFilterSchema]))\n);\n\nexport const ScheduledEventPayloadSchema = z.object({\n scheduledTime: z.coerce.date(),\n});\n\nexport type ScheduledEventPayload = z.infer<typeof ScheduledEventPayloadSchema>;\n\nexport const ScheduleSourceRateSchema = z.object({\n rateOf: z.union([\n z.object({\n minutes: z.number().min(1).max(1440).int(),\n }),\n z.object({\n hours: z.number().min(1).max(720).int(),\n }),\n z.object({\n days: z.number().min(1).max(365).int(),\n }),\n ]),\n});\n\nexport type ScheduleSourceRate = z.infer<typeof ScheduleSourceRateSchema>;\n\nexport const ScheduleSourceCronSchema = z.object({\n cron: z.string(),\n});\n\nexport type ScheduleSourceCron = z.infer<typeof ScheduleSourceCronSchema>;\n\nexport const ScheduleSourceSchema = z.union([\n ScheduleSourceRateSchema,\n ScheduleSourceCronSchema,\n]);\n\nexport type ScheduleSource = z.infer<typeof ScheduleSourceSchema>;\n","import { z } from \"zod\";\nimport { EventFilterSchema } from \"./events\";\nimport { JsonSchema } from \"./json\";\n\nexport const CustomEventTriggerSchema = z.object({\n type: z.literal(\"CUSTOM_EVENT\"),\n service: z.literal(\"trigger\"),\n name: z.string(),\n filter: EventFilterSchema,\n});\nexport type CustomEventTrigger = z.infer<typeof CustomEventTriggerSchema>;\n\nexport const WebhookEventTriggerSchema = z.object({\n type: z.literal(\"WEBHOOK\"),\n service: z.string(),\n name: z.string(),\n filter: EventFilterSchema,\n source: JsonSchema,\n});\nexport type WebhookEventTrigger = z.infer<typeof WebhookEventTriggerSchema>;\n\nexport const HttpEventTriggerSchema = z.object({\n type: z.literal(\"HTTP_ENDPOINT\"),\n service: z.literal(\"trigger\"),\n name: z.string(),\n filter: EventFilterSchema,\n});\nexport type HttpEventTrigger = z.infer<typeof HttpEventTriggerSchema>;\n\nexport const ScheduledEventTriggerSchema = z.object({\n type: z.literal(\"SCHEDULE\"),\n service: z.literal(\"scheduler\"),\n name: z.string(),\n source: JsonSchema,\n});\nexport type ScheduledEventTrigger = z.infer<typeof ScheduledEventTriggerSchema>;\n\nexport const TriggerMetadataSchema = z.discriminatedUnion(\"type\", [\n CustomEventTriggerSchema,\n WebhookEventTriggerSchema,\n HttpEventTriggerSchema,\n ScheduledEventTriggerSchema,\n]);\n\nexport type TriggerMetadata = z.infer<typeof TriggerMetadataSchema>;\n","import {\n CustomEventSchema,\n TriggerMetadataSchema,\n WaitSchema,\n} from \"@trigger.dev/common-schemas\";\nimport { z } from \"zod\";\n\nexport const ServerRPCSchema = {\n INITIALIZE_DELAY: {\n request: z.object({\n runId: z.string(),\n key: z.string(),\n wait: WaitSchema,\n timestamp: z.string(),\n }),\n response: z.boolean(),\n },\n SEND_REQUEST: {\n request: z.object({\n runId: z.string(),\n key: z.string(),\n request: z.object({\n service: z.string(),\n endpoint: z.string(),\n params: z.any(),\n }),\n timestamp: z.string(),\n }),\n response: z.boolean(),\n },\n SEND_LOG: {\n request: z.object({\n runId: z.string(),\n key: z.string(),\n log: z.object({\n message: z.string(),\n level: z.enum([\"DEBUG\", \"INFO\", \"WARN\", \"ERROR\"]),\n properties: z.string().optional(),\n }),\n timestamp: z.string(),\n }),\n response: z.boolean(),\n },\n SEND_EVENT: {\n request: z.object({\n runId: z.string(),\n key: z.string(),\n event: CustomEventSchema,\n timestamp: z.string(),\n }),\n response: z.boolean(),\n },\n INITIALIZE_HOST: {\n request: z.object({\n apiKey: z.string(),\n workflowId: z.string(),\n workflowName: z.string(),\n trigger: TriggerMetadataSchema,\n packageVersion: z.string(),\n packageName: z.string(),\n }),\n response: z\n .discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"success\"),\n }),\n z.object({\n type: z.literal(\"error\"),\n message: z.string(),\n }),\n ])\n .nullable(),\n },\n START_WORKFLOW_RUN: {\n request: z.object({\n runId: z.string(),\n timestamp: z.string(),\n }),\n response: z.boolean(),\n },\n COMPLETE_WORKFLOW_RUN: {\n request: z.object({\n runId: z.string(),\n output: z.string(),\n timestamp: z.string(),\n }),\n response: z.boolean(),\n },\n SEND_WORKFLOW_ERROR: {\n request: z.object({\n runId: z.string(),\n error: z.object({\n name: z.string(),\n message: z.string(),\n stackTrace: z.string().optional(),\n }),\n timestamp: z.string(),\n }),\n response: z.boolean(),\n },\n};\n\nexport type ServerRPC = typeof ServerRPCSchema;\n","import { z } from \"zod\";\n\nexport const MESSAGE_META = z.object({\n data: z.any(),\n id: z.string(),\n type: z.union([z.literal(\"ACK\"), z.literal(\"MESSAGE\")]),\n});\n\nexport const TriggerEnvironmentSchema = z.enum([\"live\", \"development\"]);\nexport type TriggerEnvironment = z.infer<typeof TriggerEnvironmentSchema>;\n","import { z, ZodError } from \"zod\";\nimport { createHash } from \"node:crypto\";\nimport { IConnection } from \"./types\";\n\nexport const RPCMessageSchema = z.object({\n id: z.string(),\n methodName: z.string(),\n data: z.any(),\n kind: z.enum([\"CALL\", \"RESPONSE\"]),\n});\n\nexport type RPCMessage = z.infer<typeof RPCMessageSchema>;\n\ninterface TransmitterSchema {\n [key: string]: {\n request: z.ZodFirstPartySchemaTypes | z.ZodDiscriminatedUnion<any, any>;\n response: z.ZodFirstPartySchemaTypes | z.ZodDiscriminatedUnion<any, any>;\n };\n}\n\nexport type ZodRPCHandlers<ReceiverSchema extends TransmitterSchema> = {\n [K in keyof ReceiverSchema]: (\n data: z.infer<ReceiverSchema[K][\"request\"]>\n ) => Promise<z.infer<ReceiverSchema[K][\"response\"]>>;\n};\n\ntype ZodRPCOptions<\n SenderSchema extends TransmitterSchema,\n ReceiverSchema extends TransmitterSchema\n> = {\n connection: IConnection;\n sender: SenderSchema;\n receiver: ReceiverSchema;\n handlers: ZodRPCHandlers<ReceiverSchema>;\n};\n\ntype onResponseCallback = (data: any) => void;\n\nexport class ZodRPC<\n SenderSchema extends TransmitterSchema,\n ReceiverSchema extends TransmitterSchema\n> {\n #connection: IConnection;\n #sender: SenderSchema;\n #receiver: ReceiverSchema;\n #handlers: ZodRPCHandlers<ReceiverSchema>;\n #pendingCalls = new Map<string, onResponseCallback>();\n\n constructor(options: ZodRPCOptions<SenderSchema, ReceiverSchema>) {\n this.#connection = options.connection;\n this.#sender = options.sender;\n this.#receiver = options.receiver;\n this.#handlers = options.handlers;\n\n this.#connection.onMessage.attach(this.#onMessage.bind(this));\n }\n\n public resetConnection(connection: IConnection) {\n this.#connection.onMessage.detach();\n this.#connection = connection;\n this.#connection.onMessage.attach(this.#onMessage.bind(this));\n }\n\n async #onMessage(rawData: unknown) {\n try {\n const data = RPCMessageSchema.parse(JSON.parse(rawData as string));\n\n if (data.kind === \"CALL\") {\n await this.#onCall(data);\n }\n\n if (data.kind === \"RESPONSE\") {\n await this.#onResponse(data);\n }\n } catch (err) {\n console.error(err);\n }\n }\n\n async #onCall(message: RPCMessage) {\n try {\n await this.#handleCall(message);\n } catch (callError) {\n if (callError instanceof ZodError) {\n console.error(\n `[ZodRPC][foobar] Received invalid call:\\n${JSON.stringify(\n message\n )}: `,\n callError.errors\n );\n } else {\n console.error(\n `[ZodRPC] Error handling call:\\n${JSON.stringify(message)}: `,\n callError\n );\n }\n }\n }\n\n async #onResponse(message: RPCMessage) {\n try {\n await this.#handleResponse(message);\n } catch (callError) {\n if (callError instanceof ZodError) {\n console.error(\n `[ZodRPC] Received invalid response\\n\\n${JSON.stringify(message)}: `,\n callError.flatten()\n );\n } else {\n console.error(\n `[ZodRPC] Error handling response\\n\\n${JSON.stringify(message)}: `,\n callError\n );\n }\n }\n }\n\n public send<K extends keyof SenderSchema>(\n key: K,\n data: z.infer<SenderSchema[K][\"request\"]>\n ) {\n const id = generateStableId(this.#connection.id, key as string, data);\n\n const message = packageMessage({ id, methodName: key as string, data });\n\n return new Promise<z.infer<SenderSchema[K][\"response\"]>>(\n (resolve, reject) => {\n this.#pendingCalls.set(id, (rawResponseText: string) => {\n try {\n const parsed = this.#sender[key][\"response\"].parse(rawResponseText);\n\n return resolve(parsed);\n } catch (err) {\n reject(err);\n }\n });\n\n this.#connection.send(message).catch((err) => reject(err));\n }\n );\n }\n\n async #handleCall(message: RPCMessage) {\n const receiver = this.#receiver;\n type MethodKeys = keyof typeof receiver;\n\n const methodName = message.methodName as MethodKeys;\n\n const method: ReceiverSchema[MethodKeys] | undefined =\n this.#receiver[methodName];\n\n if (!method) {\n throw new Error(`There is no method for ${message.methodName}`);\n }\n\n // struggling to get real inference here\n const inputs = method.request.parse(message.data);\n\n const handler = this.#handlers[methodName];\n\n const returnValue = await handler(inputs);\n\n const preparedResponseText = packageResponse({\n id: message.id,\n methodName: methodName as string, //??\n data: returnValue,\n });\n\n try {\n await this.#connection.send(preparedResponseText);\n } catch (err) {\n console.error(\"Failed sending response\", preparedResponseText, err);\n }\n\n return;\n }\n\n async #handleResponse(message: RPCMessage) {\n const responseCallback = this.#pendingCalls.get(message.id);\n if (!responseCallback) return;\n\n responseCallback(message.data);\n\n this.#pendingCalls.delete(message.id);\n }\n}\n\n// Generates a stableId for a given request, based on:\n// - The connection id\n// - The request key\n// - The request data (serialized)\n// Returns a hash of the above\nfunction generateStableId(\n connId: string,\n reqKey: string,\n reqData: any\n): string {\n // Serialize the request data\n const serializedData = JSON.stringify(reqData);\n\n // Concatenate the connection id, request key, and serialized data\n const inputString = connId + reqKey + serializedData;\n\n // Generate a hash of the input string using the SHA-256 algorithm\n const hash = createHash(\"sha256\").update(inputString).digest(\"hex\");\n\n // Return the hash\n return hash;\n}\n\nfunction packageMessage({ id, methodName, data }: Omit<RPCMessage, \"kind\">) {\n const callerData: RPCMessage = {\n id,\n kind: \"CALL\",\n data,\n methodName,\n };\n\n return JSON.stringify(callerData);\n}\n\nfunction packageResponse({ id, methodName, data }: Omit<RPCMessage, \"kind\">) {\n const preparedResponseText: RPCMessage = {\n id: id,\n kind: \"RESPONSE\",\n methodName: methodName,\n data,\n };\n return JSON.stringify(preparedResponseText);\n}\n","// Create a logger class that uses the debug package internally\n\nexport type LogLevel = \"log\" | \"error\" | \"warn\" | \"info\" | \"debug\";\n\nconst logLevels: Array<LogLevel> = [\"log\", \"error\", \"warn\", \"info\", \"debug\"];\n\nexport class Logger {\n #name: string;\n readonly #level: number;\n\n constructor(name: string, level: LogLevel = \"info\") {\n this.#name = name;\n this.#level = logLevels.indexOf(\n (process.env.TRIGGER_LOG_LEVEL ?? level) as LogLevel\n );\n }\n\n log(...args: any[]) {\n if (this.#level < 0) return;\n\n console.log(`[${formattedDateTime()}] [${this.#name}] `, ...args);\n }\n\n error(...args: any[]) {\n if (this.#level < 1) return;\n\n console.error(`[${formattedDateTime()}] [${this.#name}] `, ...args);\n }\n\n warn(...args: any[]) {\n if (this.#level < 2) return;\n\n console.warn(`[${formattedDateTime()}] [${this.#name}] `, ...args);\n }\n\n info(...args: any[]) {\n if (this.#level < 3) return;\n\n console.info(`[${formattedDateTime()}] [${this.#name}] `, ...args);\n }\n\n debug(...args: any[]) {\n if (this.#level < 4) return;\n\n console.debug(`[${formattedDateTime()}] [${this.#name}] `, ...args);\n }\n}\n\nfunction formattedDateTime() {\n const date = new Date();\n\n const hours = date.getHours();\n const minutes = date.getMinutes();\n const seconds = date.getSeconds();\n const milliseconds = date.getMilliseconds();\n\n // Make sure the time is always 2 digits\n const formattedHours = hours < 10 ? `0${hours}` : hours;\n const formattedMinutes = minutes < 10 ? `0${minutes}` : minutes;\n const formattedSeconds = seconds < 10 ? `0${seconds}` : seconds;\n const formattedMilliseconds =\n milliseconds < 10\n ? `00${milliseconds}`\n : milliseconds < 100\n ? `0${milliseconds}`\n : milliseconds;\n\n return `${formattedHours}:${formattedMinutes}:${formattedSeconds}.${formattedMilliseconds}`;\n}\n","import {\n HostRPCSchema,\n Logger,\n ServerRPCSchema,\n ZodRPC,\n} from \"internal-bridge\";\nimport { v4 } from \"uuid\";\nimport { WebSocket } from \"ws\";\nimport { z } from \"zod\";\nimport * as pkg from \"../package.json\";\nimport { HostConnection, TimeoutError } from \"./connection\";\nimport { triggerRunLocalStorage } from \"./localStorage\";\nimport { ContextLogger } from \"./logger\";\nimport { Trigger, TriggerOptions } from \"./trigger\";\nimport { TriggerContext } from \"./types\";\n\nexport class TriggerClient<TSchema extends z.ZodTypeAny> {\n #trigger: Trigger<TSchema>;\n #options: TriggerOptions<TSchema>;\n\n #connection?: HostConnection;\n #serverRPC?: ZodRPC<typeof ServerRPCSchema, typeof HostRPCSchema>;\n\n #apiKey: string;\n #endpoint: string;\n\n #isConnected = false;\n #retryIntervalMs: number = 3_000;\n #logger: Logger;\n #closedByUser = false;\n\n #responseCompleteCallbacks = new Map<\n string,\n {\n resolve: (output: any) => void;\n reject: (err?: any) => void;\n }\n >();\n\n #waitForCallbacks = new Map<\n string,\n {\n resolve: () => void;\n reject: (err?: any) => void;\n }\n >();\n\n constructor(trigger: Trigger<TSchema>, options: TriggerOptions<TSchema>) {\n this.#trigger = trigger;\n this.#options = options;\n\n const apiKey = this.#options.apiKey ?? process.env.TRIGGER_API_KEY;\n\n if (!apiKey) {\n throw new Error(\n \"Cannot connect to Trigger because of invalid API Key: Please include an API Key in the `apiKey` option or in the `TRIGGER_API_KEY` environment variable.\"\n );\n }\n\n this.#apiKey = apiKey;\n this.#endpoint = this.#options.endpoint ?? \"wss://wss.trigger.dev/ws\";\n this.#logger = new Logger(\"trigger.dev\", this.#options.logLevel);\n }\n\n async listen(instanceId?: string) {\n await this.#initializeConnection(instanceId);\n this.#initializeRPC();\n this.#initializeHost();\n }\n\n close() {\n this.#closedByUser = true;\n\n if (this.#serverRPC) {\n this.#serverRPC = undefined;\n }\n\n this.#connection?.close();\n this.#isConnected = false;\n }\n\n async #initializeConnection(instanceId?: string) {\n const id = instanceId ?? v4();\n\n this.#logger.debug(\"Initializing connection\", {\n id,\n endpoint: this.#endpoint,\n });\n\n const headers = { Authorization: `Bearer ${this.#apiKey}` };\n\n const connection = new HostConnection(\n new WebSocket(this.#endpoint, {\n headers,\n followRedirects: true,\n }),\n { id }\n );\n\n connection.onClose.attach(async ([code, reason]) => {\n if (this.#closedByUser) {\n this.#logger.debug(\"Connection closed by user, so we won't reconnect\");\n this.#closedByUser = false;\n return;\n }\n\n this.#logger.error(`🚩 Could not connect to trigger.dev (code ${code})`);\n\n if (reason) {\n this.#logger.error(\"Reason:\", reason);\n }\n\n // If #isConnected is already false, that means we are already trying to reconnect\n if (!this.#isConnected) return;\n\n this.#logger.log(\"🔌 Reconnecting to trigger.dev...\");\n\n this.#isConnected = false;\n\n while (!this.#isConnected) {\n this.#initializeConnection(id)\n .then(() => {\n this.#logger.log(\"⚡ Reconnection successful\");\n })\n .catch(() => {});\n\n this.#logger.debug(\n `Reconnection failed, retrying in ${Math.round(\n this.#retryIntervalMs / 1000\n )} seconds`,\n id\n );\n\n await new Promise((resolve) =>\n setTimeout(resolve, this.#retryIntervalMs)\n );\n }\n });\n\n await connection.connect();\n\n this.#logger.debug(\"Connection initialized\", id);\n\n this.#connection = connection;\n this.#isConnected = true;\n\n if (this.#serverRPC) {\n this.#serverRPC.resetConnection(connection);\n await this.#initializeHost();\n }\n }\n\n async #initializeRPC() {\n if (!this.#connection) {\n throw new Error(\"Cannot initialize RPC without a connection\");\n }\n\n const serverRPC = new ZodRPC({\n connection: this.#connection,\n sender: ServerRPCSchema,\n receiver: HostRPCSchema,\n handlers: {\n RESOLVE_DELAY: async (data) => {\n this.#logger.debug(\"Handling RESOLVE_DELAY\", data);\n\n const waitCallbacks = this.#waitForCallbacks.get(\n messageKey(data.meta.runId, data.key)\n );\n\n if (!waitCallbacks) {\n this.#logger.debug(\n `Could not find wait callbacks for wait ID ${messageKey(\n data.meta.runId,\n data.key\n )}. This can happen when a workflow run is resumed`\n );\n\n return true;\n }\n\n const { resolve } = waitCallbacks;\n\n resolve();\n\n return true;\n },\n RESOLVE_REQUEST: async (data) => {\n this.#logger.debug(\"Handling RESOLVE_REQUEST\", data);\n\n const requestCallbacks = this.#responseCompleteCallbacks.get(\n messageKey(data.meta.runId, data.key)\n );\n\n if (!requestCallbacks) {\n this.#logger.debug(\n `Could not find request callbacks for request ID ${messageKey(\n data.meta.runId,\n data.key\n )}. This can happen when a workflow run is resumed`\n );\n\n return true;\n }\n\n const { resolve } = requestCallbacks;\n\n resolve(data.output);\n\n return true;\n },\n REJECT_REQUEST: async (data) => {\n this.#logger.debug(\"Handling REJECT_REQUEST\", data);\n\n const requestCallbacks = this.#responseCompleteCallbacks.get(\n messageKey(data.meta.runId, data.key)\n );\n\n if (!requestCallbacks) {\n this.#logger.debug(\n `Could not find request callbacks for request ID ${messageKey(\n data.meta.runId,\n data.key\n )}. This can happen when a workflow run is resumed`\n );\n\n return true;\n }\n\n const { reject } = requestCallbacks;\n\n reject(data.error);\n\n return true;\n },\n TRIGGER_WORKFLOW: async (data) => {\n this.#logger.debug(\"Handling TRIGGER_WORKFLOW\", data);\n\n const ctx: TriggerContext = {\n id: data.id,\n environment: data.meta.environment,\n apiKey: data.meta.apiKey,\n organizationId: data.meta.organizationId,\n logger: new ContextLogger(async (level, message, properties) => {\n await serverRPC.send(\"SEND_LOG\", {\n runId: data.id,\n key: message,\n log: {\n level,\n message,\n properties: JSON.stringify(properties ?? {}),\n },\n timestamp: String(highPrecisionTimestamp()),\n });\n }),\n fireEvent: async (key, event) => {\n await serverRPC.send(\"SEND_EVENT\", {\n runId: data.id,\n key,\n event: JSON.parse(JSON.stringify(event)),\n timestamp: String(highPrecisionTimestamp()),\n });\n },\n waitFor: async (key, options) => {\n const result = new Promise<void>((resolve, reject) => {\n this.#waitForCallbacks.set(messageKey(data.id, key), {\n resolve,\n reject,\n });\n });\n\n await serverRPC.send(\"INITIALIZE_DELAY\", {\n runId: data.id,\n key,\n wait: {\n type: \"DELAY\",\n seconds: options.seconds,\n minutes: options.minutes,\n hours: options.hours,\n days: options.days,\n },\n timestamp: String(highPrecisionTimestamp()),\n });\n\n await result;\n\n return;\n },\n waitUntil: async (key, date: Date) => {\n const result = new Promise<void>((resolve, reject) => {\n this.#waitForCallbacks.set(messageKey(data.id, key), {\n resolve,\n reject,\n });\n });\n\n await serverRPC.send(\"INITIALIZE_DELAY\", {\n runId: data.id,\n key,\n wait: {\n type: \"SCHEDULE_FOR\",\n scheduledFor: date.toISOString(),\n },\n timestamp: String(highPrecisionTimestamp()),\n });\n\n await result;\n\n return;\n },\n };\n\n const eventData = this.#options.on.schema.parse(data.trigger.input);\n\n this.#logger.debug(\"Parsed event data\", eventData);\n\n triggerRunLocalStorage.run(\n {\n performRequest: async (key, options) => {\n const result = new Promise((resolve, reject) => {\n this.#responseCompleteCallbacks.set(\n messageKey(data.id, key),\n {\n resolve,\n reject,\n }\n );\n });\n\n await serverRPC.send(\"SEND_REQUEST\", {\n runId: data.id,\n key,\n request: {\n service: options.service,\n endpoint: options.endpoint,\n params: options.params,\n },\n timestamp: String(highPrecisionTimestamp()),\n });\n\n const output = await result;\n\n return options.response.schema.parse(output);\n },\n },\n () => {\n this.#logger.debug(\"Running trigger...\");\n\n serverRPC\n .send(\"START_WORKFLOW_RUN\", {\n runId: data.id,\n timestamp: String(highPrecisionTimestamp()),\n })\n .then(() => {\n return this.#trigger.options\n .run(eventData, ctx)\n .then((output) => {\n return serverRPC.send(\"COMPLETE_WORKFLOW_RUN\", {\n runId: data.id,\n output: JSON.stringify(output),\n timestamp: String(highPrecisionTimestamp()),\n });\n })\n .catch((anyError) => {\n const parseAnyError = (\n error: any\n ): {\n name: string;\n message: string;\n stackTrace?: string;\n } => {\n if (error instanceof Error) {\n return {\n name: error.name,\n message: error.message,\n stackTrace: error.stack,\n };\n }\n\n console.error(anyError);\n\n return {\n name: \"UnknownError\",\n message: \"An unknown error occurred\",\n };\n };\n\n const error = parseAnyError(anyError);\n\n return serverRPC.send(\"SEND_WORKFLOW_ERROR\", {\n runId: data.id,\n error,\n timestamp: String(highPrecisionTimestamp()),\n });\n });\n })\n .catch((anyError) => {\n return serverRPC.send(\"SEND_WORKFLOW_ERROR\", {\n runId: data.id,\n error: anyError,\n timestamp: String(highPrecisionTimestamp()),\n });\n });\n }\n );\n\n return true;\n },\n },\n });\n\n this.#logger.debug(\"Successfully initialized RPC with server\");\n\n this.#serverRPC = serverRPC;\n }\n\n async #initializeHost() {\n if (!this.#connection) {\n throw new Error(\"Cannot initialize host without a connection\");\n }\n\n if (!this.#serverRPC) {\n throw new Error(\"Cannot initialize host without an RPC connection\");\n }\n\n const response = await this.#send(\"INITIALIZE_HOST\", {\n apiKey: this.#apiKey,\n workflowId: this.#trigger.id,\n workflowName: this.#trigger.name,\n trigger: this.#trigger.on.metadata,\n packageVersion: pkg.version,\n packageName: pkg.name,\n });\n\n if (response?.type === \"error\") {\n throw new Error(response.message);\n }\n\n this.#logger.debug(\"Successfully initialized workflow with server\");\n }\n\n async #send<MethodName extends keyof typeof ServerRPCSchema>(\n methodName: MethodName,\n request: z.input<typeof ServerRPCSchema[MethodName][\"request\"]>\n ) {\n if (!this.#serverRPC) throw new Error(\"serverRPC not initialized\");\n\n while (true) {\n try {\n this.#logger.debug(\n `Sending RPC request to server: ${methodName}`,\n request\n );\n\n return await this.#serverRPC.send(methodName, request);\n } catch (err) {\n if (err instanceof TimeoutError) {\n this.#logger.log(\n `RPC call timed out, retrying in ${Math.round(\n this.#retryIntervalMs / 1000\n )}s...`\n );\n\n this.#logger.error(err);\n\n await sleep(this.#retryIntervalMs);\n } else {\n throw err;\n }\n }\n }\n }\n}\n\nexport const sleep = (ms: number) =>\n new Promise((resolve) => setTimeout(resolve, ms));\n\nconst messageKey = (runId: string, key: string) => `${runId}:${key}`;\n\nfunction highPrecisionTimestamp() {\n const [seconds, nanoseconds] = process.hrtime();\n\n return seconds * 1e9 + nanoseconds;\n}\n","import type { WebSocket as NodeWebSocket } from \"ws\";\nimport { v4 } from \"uuid\";\nimport { Evt } from \"evt\";\nimport { IConnection, Logger, MESSAGE_META } from \"internal-bridge\";\n\nexport class TimeoutError extends Error {}\nexport class NotConnectedError extends Error {}\n\ntype PendingMessage = {\n data: string;\n onAckReceived: () => void;\n};\n\nexport type ConnectionOptions = {\n connectTimeout?: number;\n sendTimeout?: number;\n pingTimeout?: number;\n id?: string;\n};\n\nexport class HostConnection implements IConnection {\n id: string;\n onMessage: Evt<string>;\n onAuthenticated: Evt<void>;\n onClose: Evt<[number, string]>;\n onOpen: Evt<void>;\n onError: Evt<Error>;\n\n #socket: WebSocket | NodeWebSocket;\n\n #connectTimeout: number;\n #sendTimeout: number;\n #pingTimeout: number;\n #isAuthenticated: boolean = false;\n #timeouts: Set<NodeJS.Timeout>;\n #isClosed: boolean = false;\n #pendingMessages = new Map<string, PendingMessage>();\n #logger: Logger;\n\n #pingIntervalHandle: NodeJS.Timeout | undefined;\n #pingIntervalMs: number = 30_000; // 30 seconds\n #closeUnresponsiveConnectionTimeoutMs: number = 3 * 60 * 1000; // 3 minutes\n\n constructor(socket: WebSocket | NodeWebSocket, options?: ConnectionOptions) {\n this.#socket = socket;\n this.id = options?.id ?? v4();\n\n this.onMessage = new Evt();\n this.onAuthenticated = new Evt<void>();\n this.onClose = new Evt<[number, string]>();\n this.onOpen = new Evt();\n this.onError = new Evt<Error>();\n\n this.#connectTimeout = options?.connectTimeout ?? 5000;\n this.#sendTimeout = options?.sendTimeout ?? 5000;\n this.#pingTimeout = options?.pingTimeout ?? 5000;\n\n this.#timeouts = new Set();\n\n this.#logger = new Logger(\"trigger.dev connection\");\n\n this.onClose.attach(() => {\n this.#isClosed = true;\n\n if (this.#pingIntervalHandle) {\n clearInterval(this.#pingIntervalHandle);\n this.#pingIntervalHandle = undefined;\n }\n\n for (const timeout of this.#timeouts) {\n clearTimeout(timeout);\n }\n\n this.#timeouts.clear();\n });\n\n this.#socket.onopen = () => {\n this.#isClosed = false;\n this.onOpen.post();\n\n this.#startPingInterval();\n };\n\n this.#socket.onclose = (ev: CloseEvent) => {\n this.onClose.post([ev.code, ev.reason]);\n };\n\n this.#socket.onerror = (ev: ErrorEvent | Event) => {\n const message = \"message\" in ev ? ev.message : \"Unknown error\";\n\n this.onError.post(new Error(message));\n };\n\n this.#socket.onmessage = (event: MessageEvent) => {\n if (this.#isClosed) return;\n\n const data = JSON.parse(event.data.toString());\n const metadata = MESSAGE_META.parse(data);\n\n if (metadata.type === \"ACK\") {\n const pendingMessage = this.#pendingMessages.get(metadata.id);\n\n if (pendingMessage) {\n pendingMessage.onAckReceived();\n this.#pendingMessages.delete(metadata.id);\n }\n }\n\n if (metadata.type === \"MESSAGE\") {\n socket.send(JSON.stringify({ type: \"ACK\", id: metadata.id }));\n\n if (metadata.data === \"AUTHENTICATED\") {\n this.#isAuthenticated = true;\n this.onAuthenticated.post();\n return;\n }\n\n this.onMessage.post(metadata.data);\n }\n };\n\n if (\"pong\" in socket) {\n socket.on(\"pong\", (buf) => {\n const id = buf.toString();\n const pendingMessage = this.#pendingMessages.get(id);\n\n if (pendingMessage?.data === \"ping\") {\n pendingMessage.onAckReceived();\n }\n });\n }\n }\n\n async connect() {\n this.#logger.debug(\"[connect] Attempting to connect\");\n\n return new Promise<void>((resolve, reject) => {\n if (\n this.#socket.readyState === this.#socket.OPEN &&\n this.#isAuthenticated\n ) {\n this.#logger.debug(\"[connect] Already connected, resolving\");\n\n return resolve();\n }\n\n const failTimeout = setTimeout(() => {\n this.#logger.debug(\"[connect] Connection timed out, rejecting\");\n\n reject(new TimeoutError());\n }, this.#connectTimeout);\n\n this.#timeouts.add(failTimeout);\n\n this.onAuthenticated.attach(() => {\n clearTimeout(failTimeout);\n this.#timeouts.delete(failTimeout);\n\n this.#logger.debug(\"[connect] Connected, resolving\");\n\n resolve();\n });\n });\n }\n\n async send(data: string) {\n if (this.#isClosed) throw new NotConnectedError();\n\n return new Promise<void>((resolve, reject) => {\n const id = v4();\n\n const failTimeout = setTimeout(() => {\n reject(new TimeoutError());\n }, this.#sendTimeout);\n\n this.#timeouts.add(failTimeout);\n\n this.#pendingMessages.set(id, {\n data,\n onAckReceived: () => {\n clearTimeout(failTimeout);\n\n this.#timeouts.delete(failTimeout);\n\n resolve();\n },\n });\n\n this.#socket.send(JSON.stringify({ id, data, type: \"MESSAGE\" }));\n });\n }\n\n close(code?: number, reason?: string) {\n this.#isClosed = true;\n this.onMessage.detach();\n return this.#socket.close(code, reason);\n }\n\n #startPingInterval() {\n // Do the ping stuff here\n let lastSuccessfulPing = new Date();\n this.#pingIntervalHandle = setInterval(async () => {\n if (!this.#socket.OPEN) {\n if (this.#pingIntervalHandle) {\n clearInterval(this.#pingIntervalHandle);\n this.#pingIntervalHandle = undefined;\n }\n\n return;\n }\n\n try {\n await this.#ping();\n lastSuccessfulPing = new Date();\n } catch (err) {\n this.#logger.warn(\"Pong not received in time\");\n if (!(err instanceof TimeoutError)) {\n this.#logger.error(err);\n }\n\n if (\n lastSuccessfulPing.getTime() <\n new Date().getTime() - this.#closeUnresponsiveConnectionTimeoutMs\n ) {\n this.#logger.error(\n \"No pong received in last three minutes, closing connection to Interval and retrying...\"\n );\n if (this.#pingIntervalHandle) {\n clearInterval(this.#pingIntervalHandle);\n this.#pingIntervalHandle = undefined;\n }\n this.#socket.close();\n }\n }\n }, this.#pingIntervalMs);\n }\n\n async #ping() {\n if (!this.#socket.OPEN) {\n throw new NotConnectedError();\n }\n\n if (!(\"ping\" in this.#socket)) {\n // Not supported in web client WebSocket\n throw new Error(\n \"ping not supported in this underlying websocket connection\"\n );\n }\n\n const socket = this.#socket;\n\n return new Promise<void>((resolve, reject) => {\n const id = v4();\n\n const failTimeout = setTimeout(() => {\n reject(new TimeoutError(\"Pong not received in time\"));\n }, this.#pingTimeout);\n\n this.#timeouts.add(failTimeout);\n\n this.#pendingMessages.set(id, {\n data: \"ping\",\n onAckReceived: () => {\n clearTimeout(failTimeout);\n\n this.#timeouts.delete(failTimeout);\n\n this.#logger.debug(`Resolving ping`);\n\n resolve();\n },\n });\n\n this.#logger.debug(`Sending ping ${id} to ${socket.url}`);\n\n socket.ping(id, undefined, (err) => {\n if (err) {\n reject(err);\n }\n });\n });\n }\n}\n","import { AsyncLocalStorage } from \"node:async_hooks\";\nimport { z } from \"zod\";\n\ntype PerformRequestOptions<TSchema extends z.ZodTypeAny> = {\n service: string;\n params: unknown;\n endpoint: string;\n response: {\n schema: TSchema;\n };\n};\n\ntype TriggerRunLocalStorage = {\n performRequest: <TSchema extends z.ZodTypeAny>(\n key: string,\n options: PerformRequestOptions<TSchema>\n ) => Promise<z.infer<TSchema>>;\n};\n\nexport const triggerRunLocalStorage =\n new AsyncLocalStorage<TriggerRunLocalStorage>();\n","import { TriggerLogger } from \"./types\";\n\ntype CallbackFunction = (\n level: \"DEBUG\" | \"INFO\" | \"WARN\" | \"ERROR\",\n message: string,\n properties?: Record<string, any>\n) => Promise<void>;\n\nexport class ContextLogger implements TriggerLogger {\n constructor(private callback: CallbackFunction) {}\n\n debug(message: string, properties?: Record<string, any>): Promise<void> {\n return this.callback(\"DEBUG\", message, properties);\n }\n info(message: string, properties?: Record<string, any>): Promise<void> {\n return this.callback(\"INFO\", message, properties);\n }\n warn(message: string, properties?: Record<string, any>): Promise<void> {\n return this.callback(\"WARN\", message, properties);\n }\n error(message: string, properties?: Record<string, any>): Promise<void> {\n return this.callback(\"ERROR\", message, properties);\n }\n}\n","import { TriggerClient } from \"../client\";\nimport { LogLevel } from \"internal-bridge\";\nimport { TriggerEvent } from \"../events\";\n\nimport type { TriggerContext } from \"../types\";\nimport { z } from \"zod\";\n\nexport type TriggerOptions<TSchema extends z.ZodTypeAny> = {\n id: string;\n name: string;\n on: TriggerEvent<TSchema>;\n apiKey?: string;\n endpoint?: string;\n logLevel?: LogLevel;\n run: (event: z.infer<TSchema>, ctx: TriggerContext) => Promise<any>;\n};\n\nexport class Trigger<TSchema extends z.ZodTypeAny> {\n options: TriggerOptions<TSchema>;\n #client: TriggerClient<TSchema> | undefined;\n\n constructor(options: TriggerOptions<TSchema>) {\n this.options = options;\n }\n\n async listen() {\n if (!this.#client) {\n this.#client = new TriggerClient(this, this.options);\n }\n\n return this.#client.listen();\n }\n\n get id() {\n return this.options.id;\n }\n\n get name() {\n return this.options.name;\n }\n\n get endpoint() {\n return this.options.endpoint;\n }\n\n get on() {\n return this.options.on;\n }\n}\n","import {\n EventFilterSchema,\n TriggerMetadataSchema,\n ScheduleSourceSchema,\n ScheduledEventPayloadSchema,\n} from \"@trigger.dev/common-schemas\";\nimport { z } from \"zod\";\n\nexport type EventRule = z.infer<typeof EventFilterSchema>;\n\nexport type TriggerEvent<TSchema extends z.ZodTypeAny> = {\n metadata: z.infer<typeof TriggerMetadataSchema>;\n schema: TSchema;\n};\n\nexport type TriggerCustomEventOptions<TSchema extends z.ZodTypeAny> = {\n name: string;\n schema: TSchema;\n};\n\nexport function customEvent<TSchema extends z.ZodTypeAny>(\n options: TriggerCustomEventOptions<TSchema>\n): TriggerEvent<TSchema> {\n return {\n metadata: {\n type: \"CUSTOM_EVENT\",\n service: \"trigger\",\n name: options.name,\n filter: { event: [options.name] },\n },\n schema: options.schema,\n };\n}\n\nexport type TriggerScheduleOptions = z.infer<typeof ScheduleSourceSchema>;\n\nexport function scheduleEvent(\n options: TriggerScheduleOptions\n): TriggerEvent<typeof ScheduledEventPayloadSchema> {\n return {\n metadata: {\n type: \"SCHEDULE\",\n service: \"scheduler\",\n name: \"scheduled-event\",\n source: options,\n },\n schema: ScheduledEventPayloadSchema,\n };\n}\n"],"mappings":"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","names":["import_zod","LiteralSchema","z","union","string","number","boolean","null","JsonSchema","lazy","array","record","SerializableSchema","date","SerializableJsonSchema","import_zod","ErrorSchema","z","object","name","string","message","stackTrace","optional","import_zod","LogMessageSchema","z","object","level","enum","message","string","properties","JsonSchema","default","import_zod","DelaySchema","z","object","type","literal","seconds","number","optional","minutes","hours","days","ScheduledForSchema","scheduledFor","string","datetime","WaitSchema","discriminatedUnion","import_zod","CustomEventSchema","z","object","name","string","payload","JsonSchema","context","optional","timestamp","datetime","SerializableCustomEventSchema","SerializableJsonSchema","EventMatcherSchema","union","array","number","boolean","EventFilterSchema","lazy","record","ScheduledEventPayloadSchema","scheduledTime","coerce","date","ScheduleSourceRateSchema","rateOf","minutes","min","max","int","hours","days","ScheduleSourceCronSchema","cron","ScheduleSourceSchema","import_zod","CustomEventTriggerSchema","z","object","type","literal","service","name","string","filter","EventFilterSchema","WebhookEventTriggerSchema","source","JsonSchema","HttpEventTriggerSchema","ScheduledEventTriggerSchema","TriggerMetadataSchema","discriminatedUnion","HostRPCSchema","TRIGGER_WORKFLOW","request","z","object","id","string","trigger","input","JsonSchema","default","context","meta","environment","workflowId","organizationId","apiKey","response","boolean","RESOLVE_REQUEST","key","output","runId","RESOLVE_DELAY","REJECT_REQUEST","error","import_zod","ServerRPCSchema","INITIALIZE_DELAY","request","z","object","runId","string","key","wait","WaitSchema","timestamp","response","boolean","SEND_REQUEST","service","endpoint","params","any","SEND_LOG","log","message","level","enum","properties","optional","SEND_EVENT","event","CustomEventSchema","INITIALIZE_HOST","apiKey","workflowId","workflowName","trigger","TriggerMetadataSchema","packageVersion","packageName","discriminatedUnion","type","literal","nullable","START_WORKFLOW_RUN","COMPLETE_WORKFLOW_RUN","output","SEND_WORKFLOW_ERROR","error","name","stackTrace","import_zod","MESSAGE_META","z","object","data","any","id","string","type","union","literal","TriggerEnvironmentSchema","enum","import_zod","RPCMessageSchema","z","object","id","string","methodName","data","any","kind","enum","ZodRPC","constructor","options","Map","connection","sender","receiver","handlers","onMessage","attach","bind","resetConnection","detach","send","key","generateStableId","message","packageMessage","Promise","resolve","reject","set","rawResponseText","parsed","parse","err","catch","rawData","JSON","console","error","callError","ZodError","stringify","errors","flatten","method","Error","inputs","request","handler","returnValue","preparedResponseText","packageResponse","responseCallback","get","delete","connId","reqKey","reqData","serializedData","inputString","hash","createHash","update","digest","callerData","logLevels","Logger","constructor","name","level","indexOf","process","env","TRIGGER_LOG_LEVEL","log","args","console","formattedDateTime","error","warn","info","debug","date","Date","hours","getHours","minutes","getMinutes","seconds","getSeconds","milliseconds","getMilliseconds","formattedHours","formattedMinutes","formattedSeconds","formattedMilliseconds","import_uuid","TimeoutError","Error","NotConnectedError","HostConnection","constructor","socket","options","Map","id","v4","onMessage","Evt","onAuthenticated","onClose","onOpen","onError","connectTimeout","sendTimeout","pingTimeout","Set","Logger","attach","clearInterval","undefined","timeout","clearTimeout","clear","onopen","post","onclose","ev","code","reason","onerror","message","onmessage","event","data","JSON","parse","toString","metadata","MESSAGE_META","type","pendingMessage","get","onAckReceived","delete","send","stringify","on","buf","connect","debug","Promise","resolve","reject","readyState","OPEN","failTimeout","setTimeout","add","set","close","detach","lastSuccessfulPing","Date","setInterval","err","warn","error","getTime","url","ping","triggerRunLocalStorage","AsyncLocalStorage","ContextLogger","constructor","callback","debug","message","properties","info","warn","error","_connection","_logger","TriggerClient","constructor","trigger","options","Map","apiKey","process","env","TRIGGER_API_KEY","Error","endpoint","Logger","logLevel","listen","instanceId","close","undefined","id","v4","debug","headers","Authorization","connection","HostConnection","WebSocket","followRedirects","onClose","attach","code","reason","error","log","then","catch","Math","round","Promise","resolve","setTimeout","connect","resetConnection","serverRPC","ZodRPC","sender","ServerRPCSchema","receiver","HostRPCSchema","handlers","RESOLVE_DELAY","data","waitCallbacks","get","messageKey","meta","runId","key","RESOLVE_REQUEST","requestCallbacks","output","REJECT_REQUEST","reject","TRIGGER_WORKFLOW","ctx","environment","organizationId","logger","ContextLogger","level","message","properties","send","JSON","stringify","timestamp","String","highPrecisionTimestamp","fireEvent","event","parse","waitFor","result","set","wait","type","seconds","minutes","hours","days","waitUntil","date","scheduledFor","toISOString","eventData","on","schema","input","triggerRunLocalStorage","run","performRequest","request","service","params","response","anyError","parseAnyError","name","stackTrace","stack","console","workflowId","workflowName","metadata","packageVersion","version","packageName","methodName","err","TimeoutError","sleep","ms","nanoseconds","hrtime","Trigger","constructor","options","listen","TriggerClient","id","name","endpoint","on","customEvent","options","metadata","type","service","name","filter","event","schema","scheduleEvent","source","ScheduledEventPayloadSchema","getTriggerRun","triggerRunLocalStorage","getStore"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../../common-schemas/src/json.ts","../../common-schemas/src/error.ts","../../common-schemas/src/logs.ts","../../common-schemas/src/waits.ts","../../common-schemas/src/events.ts","../../common-schemas/src/triggers.ts","../src/events.ts","../../internal-bridge/src/schemas/host.ts","../../internal-bridge/src/schemas/server.ts","../../internal-bridge/src/schemas/common.ts","../../internal-bridge/src/zodRPC.ts","../../internal-bridge/src/logger.ts","../src/client.ts","../src/connection.ts","../src/localStorage.ts","../src/logger.ts","../src/trigger/index.ts","../src/customEvents.ts"],"sourcesContent":["export * from \"./events\";\nexport * from \"./trigger\";\nexport * from \"./customEvents\";\n\nimport { triggerRunLocalStorage } from \"./localStorage\";\n\nexport function getTriggerRun() {\n return triggerRunLocalStorage.getStore();\n}\n","import { z } from \"zod\";\n\nconst LiteralSchema = z.union([z.string(), z.number(), z.boolean(), z.null()]);\ntype Literal = z.infer<typeof LiteralSchema>;\n\ntype Json = Literal | { [key: string]: Json } | Json[];\n\nexport const JsonSchema: z.ZodType<Json> = z.lazy(() =>\n z.union([LiteralSchema, z.array(JsonSchema), z.record(JsonSchema)])\n);\n\nconst SerializableSchema = z.union([\n z.string(),\n z.number(),\n z.boolean(),\n z.null(),\n z.date(),\n]);\ntype Serializable = z.infer<typeof SerializableSchema>;\n\ntype SerializableJson =\n | Serializable\n | { [key: string]: SerializableJson }\n | SerializableJson[];\n\nexport const SerializableJsonSchema: z.ZodType<SerializableJson> = z.lazy(() =>\n z.union([\n SerializableSchema,\n z.array(SerializableJsonSchema),\n z.record(SerializableJsonSchema),\n ])\n);\n","import { z } from \"zod\";\n\nexport const ErrorSchema = z.object({\n name: z.string(),\n message: z.string(),\n stackTrace: z.string().optional(),\n});\n","import { z } from \"zod\";\nimport { JsonSchema } from \"./json\";\n\nexport const LogMessageSchema = z.object({\n level: z.enum([\"DEBUG\", \"INFO\", \"WARN\", \"ERROR\"]),\n message: z.string(),\n properties: JsonSchema.default({}),\n});\n","import { z } from \"zod\";\n\nexport const DelaySchema = z.object({\n type: z.literal(\"DELAY\"),\n seconds: z.number().optional(),\n minutes: z.number().optional(),\n hours: z.number().optional(),\n days: z.number().optional(),\n});\n\nexport type Delay = z.infer<typeof DelaySchema>;\n\nexport const ScheduledForSchema = z.object({\n type: z.literal(\"SCHEDULE_FOR\"),\n scheduledFor: z.string().datetime(),\n});\n\nexport type Scheduled = z.infer<typeof ScheduledForSchema>;\n\nexport const WaitSchema = z.discriminatedUnion(\"type\", [\n DelaySchema,\n ScheduledForSchema,\n]);\n","import { z } from \"zod\";\nimport { JsonSchema, SerializableJsonSchema } from \"./json\";\n\nexport const CustomEventSchema = z.object({\n name: z.string(),\n payload: JsonSchema,\n context: JsonSchema.optional(),\n timestamp: z.string().datetime().optional(),\n});\n\nexport const SerializableCustomEventSchema = z.object({\n name: z.string(),\n payload: SerializableJsonSchema,\n context: SerializableJsonSchema.optional(),\n timestamp: z.string().datetime().optional(),\n});\n\nconst EventMatcherSchema = z.union([\n z.array(z.string()),\n z.array(z.number()),\n z.array(z.boolean()),\n]);\ntype EventMatcher = z.infer<typeof EventMatcherSchema>;\n\nexport type EventFilter = { [key: string]: EventMatcher | EventFilter };\n\nexport const EventFilterSchema: z.ZodType<EventFilter> = z.lazy(() =>\n z.record(z.union([EventMatcherSchema, EventFilterSchema]))\n);\n\nexport const ScheduledEventPayloadSchema = z.object({\n scheduledTime: z.coerce.date(),\n});\n\nexport type ScheduledEventPayload = z.infer<typeof ScheduledEventPayloadSchema>;\n\nexport const ScheduleSourceRateSchema = z.object({\n rateOf: z.union([\n z.object({\n minutes: z.number().min(1).max(1440).int(),\n }),\n z.object({\n hours: z.number().min(1).max(720).int(),\n }),\n z.object({\n days: z.number().min(1).max(365).int(),\n }),\n ]),\n});\n\nexport type ScheduleSourceRate = z.infer<typeof ScheduleSourceRateSchema>;\n\nexport const ScheduleSourceCronSchema = z.object({\n cron: z.string(),\n});\n\nexport type ScheduleSourceCron = z.infer<typeof ScheduleSourceCronSchema>;\n\nexport const ScheduleSourceSchema = z.union([\n ScheduleSourceRateSchema,\n ScheduleSourceCronSchema,\n]);\n\nexport type ScheduleSource = z.infer<typeof ScheduleSourceSchema>;\n","import { z } from \"zod\";\nimport { EventFilterSchema, ScheduleSourceSchema } from \"./events\";\nimport { JsonSchema } from \"./json\";\n\nexport const CustomEventTriggerSchema = z.object({\n type: z.literal(\"CUSTOM_EVENT\"),\n service: z.literal(\"trigger\"),\n name: z.string(),\n filter: EventFilterSchema,\n});\nexport type CustomEventTrigger = z.infer<typeof CustomEventTriggerSchema>;\n\nexport const WebhookEventTriggerSchema = z.object({\n type: z.literal(\"WEBHOOK\"),\n service: z.string(),\n name: z.string(),\n filter: EventFilterSchema,\n source: JsonSchema,\n});\nexport type WebhookEventTrigger = z.infer<typeof WebhookEventTriggerSchema>;\n\nexport const HttpEventTriggerSchema = z.object({\n type: z.literal(\"HTTP_ENDPOINT\"),\n service: z.literal(\"trigger\"),\n name: z.string(),\n filter: EventFilterSchema,\n});\nexport type HttpEventTrigger = z.infer<typeof HttpEventTriggerSchema>;\n\nexport const ScheduledEventTriggerSchema = z.object({\n type: z.literal(\"SCHEDULE\"),\n service: z.literal(\"scheduler\"),\n name: z.string(),\n source: ScheduleSourceSchema,\n});\nexport type ScheduledEventTrigger = z.infer<typeof ScheduledEventTriggerSchema>;\n\nexport const TriggerMetadataSchema = z.discriminatedUnion(\"type\", [\n CustomEventTriggerSchema,\n WebhookEventTriggerSchema,\n HttpEventTriggerSchema,\n ScheduledEventTriggerSchema,\n]);\n\nexport type TriggerMetadata = z.infer<typeof TriggerMetadataSchema>;\n","import {\n EventFilterSchema,\n TriggerMetadataSchema,\n ScheduleSourceSchema,\n ScheduledEventPayloadSchema,\n} from \"@trigger.dev/common-schemas\";\nimport { z } from \"zod\";\n\nexport type EventRule = z.infer<typeof EventFilterSchema>;\n\nexport type TriggerEvent<TSchema extends z.ZodTypeAny> = {\n metadata: z.infer<typeof TriggerMetadataSchema>;\n schema: TSchema;\n};\n\nexport type TriggerCustomEventOptions<TSchema extends z.ZodTypeAny> = {\n name: string;\n schema: TSchema;\n};\n\nexport function customEvent<TSchema extends z.ZodTypeAny>(\n options: TriggerCustomEventOptions<TSchema>\n): TriggerEvent<TSchema> {\n return {\n metadata: {\n type: \"CUSTOM_EVENT\",\n service: \"trigger\",\n name: options.name,\n filter: { event: [options.name] },\n },\n schema: options.schema,\n };\n}\n\nexport type TriggerScheduleOptions = z.infer<typeof ScheduleSourceSchema>;\n\nexport function scheduleEvent(\n options: TriggerScheduleOptions\n): TriggerEvent<typeof ScheduledEventPayloadSchema> {\n return {\n metadata: {\n type: \"SCHEDULE\",\n service: \"scheduler\",\n name: \"scheduled-event\",\n source: options,\n },\n schema: ScheduledEventPayloadSchema,\n };\n}\n","import { z } from \"zod\";\nimport { JsonSchema } from \"@trigger.dev/common-schemas\";\n\nexport const HostRPCSchema = {\n TRIGGER_WORKFLOW: {\n request: z.object({\n id: z.string(),\n trigger: z.object({\n input: JsonSchema.default({}),\n context: JsonSchema.default({}),\n }),\n meta: z.object({\n environment: z.string(),\n workflowId: z.string(),\n organizationId: z.string(),\n apiKey: z.string(),\n }),\n }),\n response: z.boolean(),\n },\n RESOLVE_REQUEST: {\n request: z.object({\n id: z.string(),\n key: z.string(),\n output: JsonSchema.default({}),\n meta: z.object({\n environment: z.string(),\n workflowId: z.string(),\n organizationId: z.string(),\n apiKey: z.string(),\n runId: z.string(),\n }),\n }),\n response: z.boolean(),\n },\n RESOLVE_DELAY: {\n request: z.object({\n id: z.string(),\n key: z.string(),\n meta: z.object({\n environment: z.string(),\n workflowId: z.string(),\n organizationId: z.string(),\n apiKey: z.string(),\n runId: z.string(),\n }),\n }),\n response: z.boolean(),\n },\n REJECT_REQUEST: {\n request: z.object({\n id: z.string(),\n key: z.string(),\n error: JsonSchema.default({}),\n meta: z.object({\n environment: z.string(),\n workflowId: z.string(),\n organizationId: z.string(),\n apiKey: z.string(),\n runId: z.string(),\n }),\n }),\n response: z.boolean(),\n },\n};\n\nexport type HostRPC = typeof HostRPCSchema;\n","import {\n CustomEventSchema,\n TriggerMetadataSchema,\n WaitSchema,\n} from \"@trigger.dev/common-schemas\";\nimport { z } from \"zod\";\n\nexport const ServerRPCSchema = {\n INITIALIZE_DELAY: {\n request: z.object({\n runId: z.string(),\n key: z.string(),\n wait: WaitSchema,\n timestamp: z.string(),\n }),\n response: z.boolean(),\n },\n SEND_REQUEST: {\n request: z.object({\n runId: z.string(),\n key: z.string(),\n request: z.object({\n service: z.string(),\n endpoint: z.string(),\n params: z.any(),\n }),\n timestamp: z.string(),\n }),\n response: z.boolean(),\n },\n SEND_LOG: {\n request: z.object({\n runId: z.string(),\n key: z.string(),\n log: z.object({\n message: z.string(),\n level: z.enum([\"DEBUG\", \"INFO\", \"WARN\", \"ERROR\"]),\n properties: z.string().optional(),\n }),\n timestamp: z.string(),\n }),\n response: z.boolean(),\n },\n SEND_EVENT: {\n request: z.object({\n runId: z.string(),\n key: z.string(),\n event: CustomEventSchema,\n timestamp: z.string(),\n }),\n response: z.boolean(),\n },\n INITIALIZE_HOST: {\n request: z.object({\n apiKey: z.string(),\n workflowId: z.string(),\n workflowName: z.string(),\n trigger: TriggerMetadataSchema,\n packageVersion: z.string(),\n packageName: z.string(),\n triggerTTL: z.number().optional(),\n }),\n response: z\n .discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"success\"),\n }),\n z.object({\n type: z.literal(\"error\"),\n message: z.string(),\n }),\n ])\n .nullable(),\n },\n START_WORKFLOW_RUN: {\n request: z.object({\n runId: z.string(),\n timestamp: z.string(),\n }),\n response: z.boolean(),\n },\n COMPLETE_WORKFLOW_RUN: {\n request: z.object({\n runId: z.string(),\n output: z.string().optional(),\n timestamp: z.string(),\n }),\n response: z.boolean(),\n },\n SEND_WORKFLOW_ERROR: {\n request: z.object({\n runId: z.string(),\n error: z.object({\n name: z.string(),\n message: z.string(),\n stackTrace: z.string().optional(),\n }),\n timestamp: z.string(),\n }),\n response: z.boolean(),\n },\n};\n\nexport type ServerRPC = typeof ServerRPCSchema;\n","import { z } from \"zod\";\n\nexport const MESSAGE_META = z.object({\n data: z.any(),\n id: z.string(),\n type: z.union([z.literal(\"ACK\"), z.literal(\"MESSAGE\")]),\n});\n\nexport const TriggerEnvironmentSchema = z.enum([\"live\", \"development\"]);\nexport type TriggerEnvironment = z.infer<typeof TriggerEnvironmentSchema>;\n","import { z, ZodError } from \"zod\";\nimport { createHash } from \"node:crypto\";\nimport { IConnection } from \"./types\";\nimport { Logger } from \"./logger\";\n\nexport const RPCMessageSchema = z.object({\n id: z.string(),\n methodName: z.string(),\n data: z.any(),\n kind: z.enum([\"CALL\", \"RESPONSE\"]),\n});\n\nexport type RPCMessage = z.infer<typeof RPCMessageSchema>;\n\ninterface TransmitterSchema {\n [key: string]: {\n request: z.ZodFirstPartySchemaTypes | z.ZodDiscriminatedUnion<any, any>;\n response: z.ZodFirstPartySchemaTypes | z.ZodDiscriminatedUnion<any, any>;\n };\n}\n\nexport type ZodRPCHandlers<ReceiverSchema extends TransmitterSchema> = {\n [K in keyof ReceiverSchema]: (\n data: z.infer<ReceiverSchema[K][\"request\"]>\n ) => Promise<z.infer<ReceiverSchema[K][\"response\"]>>;\n};\n\ntype ZodRPCOptions<\n SenderSchema extends TransmitterSchema,\n ReceiverSchema extends TransmitterSchema\n> = {\n connection: IConnection;\n sender: SenderSchema;\n receiver: ReceiverSchema;\n handlers: ZodRPCHandlers<ReceiverSchema>;\n};\n\ntype onResponseCallback = (data: any) => void;\n\nexport class ZodRPC<\n SenderSchema extends TransmitterSchema,\n ReceiverSchema extends TransmitterSchema\n> {\n #connection: IConnection;\n #sender: SenderSchema;\n #receiver: ReceiverSchema;\n #handlers: ZodRPCHandlers<ReceiverSchema>;\n #pendingCalls = new Map<string, onResponseCallback>();\n #logger: Logger = new Logger(\"ZodRPC\");\n\n constructor(options: ZodRPCOptions<SenderSchema, ReceiverSchema>) {\n this.#connection = options.connection;\n this.#sender = options.sender;\n this.#receiver = options.receiver;\n this.#handlers = options.handlers;\n\n this.#connection.onMessage.attach(this.#onMessage.bind(this));\n }\n\n public resetConnection(connection: IConnection) {\n this.#connection.onMessage.detach();\n this.#connection = connection;\n this.#connection.onMessage.attach(this.#onMessage.bind(this));\n }\n\n async #onMessage(rawData: unknown) {\n try {\n const data = RPCMessageSchema.parse(JSON.parse(rawData as string));\n\n if (data.kind === \"CALL\") {\n await this.#onCall(data);\n }\n\n if (data.kind === \"RESPONSE\") {\n await this.#onResponse(data);\n }\n } catch (err) {\n this.#logger.error(err);\n }\n }\n\n async #onCall(message: RPCMessage) {\n try {\n await this.#handleCall(message);\n } catch (callError) {\n if (callError instanceof ZodError) {\n this.#logger.error(\n `[ZodRPC] Received invalid call:\\n${JSON.stringify(message)}: `,\n callError.errors\n );\n } else {\n this.#logger.error(\n `[ZodRPC] Error handling call:\\n${JSON.stringify(message)}: `,\n callError\n );\n }\n }\n }\n\n async #onResponse(message: RPCMessage) {\n try {\n await this.#handleResponse(message);\n } catch (callError) {\n if (callError instanceof ZodError) {\n this.#logger.error(\n `[ZodRPC] Received invalid response\\n\\n${JSON.stringify(message)}: `,\n callError.flatten()\n );\n } else {\n this.#logger.error(\n `[ZodRPC] Error handling response\\n\\n${JSON.stringify(message)}: `,\n callError\n );\n }\n }\n }\n\n public send<K extends keyof SenderSchema>(\n key: K,\n data: z.infer<SenderSchema[K][\"request\"]>\n ) {\n const id = generateStableId(this.#connection.id, key as string, data);\n\n const message = packageMessage({ id, methodName: key as string, data });\n\n return new Promise<z.infer<SenderSchema[K][\"response\"]>>(\n (resolve, reject) => {\n this.#pendingCalls.set(id, (rawResponseText: string) => {\n try {\n const parsed = this.#sender[key][\"response\"].parse(rawResponseText);\n\n return resolve(parsed);\n } catch (err) {\n reject(err);\n }\n });\n\n this.#connection.send(message).catch((err) => reject(err));\n }\n );\n }\n\n async #handleCall(message: RPCMessage) {\n const receiver = this.#receiver;\n type MethodKeys = keyof typeof receiver;\n\n const methodName = message.methodName as MethodKeys;\n\n const method: ReceiverSchema[MethodKeys] | undefined =\n this.#receiver[methodName];\n\n if (!method) {\n throw new Error(`There is no method for ${message.methodName}`);\n }\n\n this.#logger.debug(\"Received call\", { message });\n\n // struggling to get real inference here\n const inputs = method.request.parse(message.data);\n\n const handler = this.#handlers[methodName];\n\n const returnValue = await handler(inputs);\n\n const preparedResponseText = packageResponse({\n id: message.id,\n methodName: methodName as string, //??\n data: returnValue,\n });\n\n try {\n await this.#connection.send(preparedResponseText);\n } catch (err) {\n this.#logger.error(\"Failed sending response\", preparedResponseText, err);\n }\n\n return;\n }\n\n async #handleResponse(message: RPCMessage) {\n const responseCallback = this.#pendingCalls.get(message.id);\n if (!responseCallback) return;\n\n responseCallback(message.data);\n\n this.#pendingCalls.delete(message.id);\n }\n}\n\n// Generates a stableId for a given request, based on:\n// - The connection id\n// - The request key\n// - The request data (serialized)\n// Returns a hash of the above\nfunction generateStableId(\n connId: string,\n reqKey: string,\n reqData: any\n): string {\n // Serialize the request data\n const serializedData = JSON.stringify(reqData);\n\n // Concatenate the connection id, request key, and serialized data\n const inputString = connId + reqKey + serializedData;\n\n // Generate a hash of the input string using the SHA-256 algorithm\n const hash = createHash(\"sha256\").update(inputString).digest(\"hex\");\n\n // Return the hash\n return hash;\n}\n\nfunction packageMessage({ id, methodName, data }: Omit<RPCMessage, \"kind\">) {\n const callerData: RPCMessage = {\n id,\n kind: \"CALL\",\n data,\n methodName,\n };\n\n return JSON.stringify(callerData);\n}\n\nfunction packageResponse({ id, methodName, data }: Omit<RPCMessage, \"kind\">) {\n const preparedResponseText: RPCMessage = {\n id: id,\n kind: \"RESPONSE\",\n methodName: methodName,\n data,\n };\n return JSON.stringify(preparedResponseText);\n}\n","// Create a logger class that uses the debug package internally\n\nconst logLevels = [\n \"disabled\",\n \"log\",\n \"error\",\n \"warn\",\n \"info\",\n \"debug\",\n] as const;\n\nexport type LogLevel = (typeof logLevels)[number];\n\nexport class Logger {\n #name: string;\n readonly #level: number;\n\n constructor(name: string, level: LogLevel = \"disabled\") {\n this.#name = name;\n this.#level = logLevels.indexOf(\n (process.env.TRIGGER_LOG_LEVEL ?? level) as LogLevel\n );\n }\n\n log(...args: any[]) {\n if (this.#level < 1) return;\n\n console.log(`[${this.#name}] `, ...args);\n }\n\n error(...args: any[]) {\n if (this.#level < 2) return;\n\n console.error(`[${formattedDateTime()}] [${this.#name}] `, ...args);\n }\n\n warn(...args: any[]) {\n if (this.#level < 3) return;\n\n console.warn(`[${formattedDateTime()}] [${this.#name}] `, ...args);\n }\n\n info(...args: any[]) {\n if (this.#level < 4) return;\n\n console.info(`[${formattedDateTime()}] [${this.#name}] `, ...args);\n }\n\n debug(...args: any[]) {\n if (this.#level < 5) return;\n\n console.debug(`[${formattedDateTime()}] [${this.#name}] `, ...args);\n }\n}\n\nfunction formattedDateTime() {\n const date = new Date();\n\n const hours = date.getHours();\n const minutes = date.getMinutes();\n const seconds = date.getSeconds();\n const milliseconds = date.getMilliseconds();\n\n // Make sure the time is always 2 digits\n const formattedHours = hours < 10 ? `0${hours}` : hours;\n const formattedMinutes = minutes < 10 ? `0${minutes}` : minutes;\n const formattedSeconds = seconds < 10 ? `0${seconds}` : seconds;\n const formattedMilliseconds =\n milliseconds < 10\n ? `00${milliseconds}`\n : milliseconds < 100\n ? `0${milliseconds}`\n : milliseconds;\n\n return `${formattedHours}:${formattedMinutes}:${formattedSeconds}.${formattedMilliseconds}`;\n}\n","import {\n HostRPCSchema,\n Logger,\n ServerRPCSchema,\n ZodRPC,\n} from \"internal-bridge\";\nimport { v4 } from \"uuid\";\nimport { WebSocket } from \"ws\";\nimport { z } from \"zod\";\nimport * as pkg from \"../package.json\";\nimport { HostConnection, TimeoutError } from \"./connection\";\nimport { triggerRunLocalStorage } from \"./localStorage\";\nimport { ContextLogger } from \"./logger\";\nimport { Trigger, TriggerOptions } from \"./trigger\";\nimport { TriggerContext } from \"./types\";\n\nexport class TriggerClient<TSchema extends z.ZodTypeAny> {\n #trigger: Trigger<TSchema>;\n #options: TriggerOptions<TSchema>;\n\n #connection?: HostConnection;\n #serverRPC?: ZodRPC<typeof ServerRPCSchema, typeof HostRPCSchema>;\n\n #apiKey: string;\n #endpoint: string;\n\n #isConnected = false;\n #retryIntervalMs: number = 3_000;\n #logger: Logger;\n #closedByUser = false;\n\n #responseCompleteCallbacks = new Map<\n string,\n {\n resolve: (output: any) => void;\n reject: (err?: any) => void;\n }\n >();\n\n #waitForCallbacks = new Map<\n string,\n {\n resolve: () => void;\n reject: (err?: any) => void;\n }\n >();\n\n constructor(trigger: Trigger<TSchema>, options: TriggerOptions<TSchema>) {\n this.#trigger = trigger;\n this.#options = options;\n\n const apiKey = this.#options.apiKey ?? process.env.TRIGGER_API_KEY;\n\n if (!apiKey) {\n throw new Error(\n \"Cannot connect to Trigger because of invalid API Key: Please include an API Key in the `apiKey` option or in the `TRIGGER_API_KEY` environment variable.\"\n );\n }\n\n this.#apiKey = apiKey;\n this.#endpoint = this.#options.endpoint ?? \"wss://wss.trigger.dev/ws\";\n this.#logger = new Logger(\"trigger.dev\", this.#options.logLevel);\n }\n\n async listen(instanceId?: string) {\n await this.#initializeConnection(instanceId);\n this.#initializeRPC();\n this.#initializeHost();\n }\n\n close() {\n this.#closedByUser = true;\n\n if (this.#serverRPC) {\n this.#serverRPC = undefined;\n }\n\n this.#connection?.close();\n this.#isConnected = false;\n }\n\n async #initializeConnection(instanceId?: string) {\n const id = instanceId ?? v4();\n\n this.#logger.debug(\"Initializing connection\", {\n id,\n endpoint: this.#endpoint,\n });\n\n const headers = { Authorization: `Bearer ${this.#apiKey}` };\n\n const connection = new HostConnection(\n new WebSocket(this.#endpoint, {\n headers,\n followRedirects: true,\n }),\n { id }\n );\n\n connection.onClose.attach(async ([code, reason]) => {\n if (this.#closedByUser) {\n this.#logger.debug(\"Connection closed by user, so we won't reconnect\");\n this.#closedByUser = false;\n return;\n }\n\n this.#logger.error(`🚩 Could not connect to trigger.dev (code ${code})`);\n\n if (reason) {\n this.#logger.error(\"Reason:\", reason);\n }\n\n // If #isConnected is already false, that means we are already trying to reconnect\n if (!this.#isConnected) return;\n\n this.#logger.log(\"🔌 Reconnecting to trigger.dev...\");\n\n this.#isConnected = false;\n\n while (!this.#isConnected) {\n this.#initializeConnection(id)\n .then(() => {\n this.#logger.log(\"⚡ Reconnection successful\");\n })\n .catch(() => {});\n\n this.#logger.debug(\n `Reconnection failed, retrying in ${Math.round(\n this.#retryIntervalMs / 1000\n )} seconds`,\n id\n );\n\n await new Promise((resolve) =>\n setTimeout(resolve, this.#retryIntervalMs)\n );\n }\n });\n\n await connection.connect();\n\n this.#logger.debug(\"Connection initialized\", id);\n\n this.#connection = connection;\n this.#isConnected = true;\n\n if (this.#serverRPC) {\n this.#serverRPC.resetConnection(connection);\n await this.#initializeHost();\n }\n }\n\n async #initializeRPC() {\n if (!this.#connection) {\n throw new Error(\"Cannot initialize RPC without a connection\");\n }\n\n const serverRPC = new ZodRPC({\n connection: this.#connection,\n sender: ServerRPCSchema,\n receiver: HostRPCSchema,\n handlers: {\n RESOLVE_DELAY: async (data) => {\n this.#logger.debug(\"Handling RESOLVE_DELAY\", data);\n\n const waitCallbacks = this.#waitForCallbacks.get(\n messageKey(data.meta.runId, data.key)\n );\n\n if (!waitCallbacks) {\n this.#logger.debug(\n `Could not find wait callbacks for wait ID ${messageKey(\n data.meta.runId,\n data.key\n )}. This can happen when a workflow run is resumed`\n );\n\n return true;\n }\n\n const { resolve } = waitCallbacks;\n\n resolve();\n\n return true;\n },\n RESOLVE_REQUEST: async (data) => {\n this.#logger.debug(\"Handling RESOLVE_REQUEST\", data);\n\n const requestCallbacks = this.#responseCompleteCallbacks.get(\n messageKey(data.meta.runId, data.key)\n );\n\n if (!requestCallbacks) {\n this.#logger.debug(\n `Could not find request callbacks for request ID ${messageKey(\n data.meta.runId,\n data.key\n )}. This can happen when a workflow run is resumed`\n );\n\n return true;\n }\n\n const { resolve } = requestCallbacks;\n\n resolve(data.output);\n\n return true;\n },\n REJECT_REQUEST: async (data) => {\n this.#logger.debug(\"Handling REJECT_REQUEST\", data);\n\n const requestCallbacks = this.#responseCompleteCallbacks.get(\n messageKey(data.meta.runId, data.key)\n );\n\n if (!requestCallbacks) {\n this.#logger.debug(\n `Could not find request callbacks for request ID ${messageKey(\n data.meta.runId,\n data.key\n )}. This can happen when a workflow run is resumed`\n );\n\n return true;\n }\n\n const { reject } = requestCallbacks;\n\n reject(data.error);\n\n return true;\n },\n TRIGGER_WORKFLOW: async (data) => {\n this.#logger.debug(\"Handling TRIGGER_WORKFLOW\", data);\n\n const ctx: TriggerContext = {\n id: data.id,\n environment: data.meta.environment,\n apiKey: data.meta.apiKey,\n organizationId: data.meta.organizationId,\n logger: new ContextLogger(async (level, message, properties) => {\n await serverRPC.send(\"SEND_LOG\", {\n runId: data.id,\n key: message,\n log: {\n level,\n message,\n properties: JSON.stringify(properties ?? {}),\n },\n timestamp: String(highPrecisionTimestamp()),\n });\n }),\n sendEvent: async (key, event) => {\n await serverRPC.send(\"SEND_EVENT\", {\n runId: data.id,\n key,\n event: JSON.parse(JSON.stringify(event)),\n timestamp: String(highPrecisionTimestamp()),\n });\n },\n waitFor: async (key, options) => {\n const result = new Promise<void>((resolve, reject) => {\n this.#waitForCallbacks.set(messageKey(data.id, key), {\n resolve,\n reject,\n });\n });\n\n await serverRPC.send(\"INITIALIZE_DELAY\", {\n runId: data.id,\n key,\n wait: {\n type: \"DELAY\",\n seconds: options.seconds,\n minutes: options.minutes,\n hours: options.hours,\n days: options.days,\n },\n timestamp: String(highPrecisionTimestamp()),\n });\n\n await result;\n\n return;\n },\n waitUntil: async (key, date: Date) => {\n const result = new Promise<void>((resolve, reject) => {\n this.#waitForCallbacks.set(messageKey(data.id, key), {\n resolve,\n reject,\n });\n });\n\n await serverRPC.send(\"INITIALIZE_DELAY\", {\n runId: data.id,\n key,\n wait: {\n type: \"SCHEDULE_FOR\",\n scheduledFor: date.toISOString(),\n },\n timestamp: String(highPrecisionTimestamp()),\n });\n\n await result;\n\n return;\n },\n };\n\n const eventData = this.#options.on.schema.parse(data.trigger.input);\n\n this.#logger.debug(\"Parsed event data\", eventData);\n\n triggerRunLocalStorage.run(\n {\n performRequest: async (key, options) => {\n const result = new Promise((resolve, reject) => {\n this.#responseCompleteCallbacks.set(\n messageKey(data.id, key),\n {\n resolve,\n reject,\n }\n );\n });\n\n await serverRPC.send(\"SEND_REQUEST\", {\n runId: data.id,\n key,\n request: {\n service: options.service,\n endpoint: options.endpoint,\n params: options.params,\n },\n timestamp: String(highPrecisionTimestamp()),\n });\n\n const output = await result;\n\n return options.response.schema.parse(output);\n },\n sendEvent: async (key, event) => {\n await serverRPC.send(\"SEND_EVENT\", {\n runId: data.id,\n key,\n event: JSON.parse(JSON.stringify(event)),\n timestamp: String(highPrecisionTimestamp()),\n });\n },\n },\n () => {\n this.#logger.debug(\"Running trigger...\");\n\n serverRPC\n .send(\"START_WORKFLOW_RUN\", {\n runId: data.id,\n timestamp: String(highPrecisionTimestamp()),\n })\n .then(() => {\n return this.#trigger.options\n .run(eventData, ctx)\n .then((output) => {\n this.#logger.log(\n `Completed workflow '${this.#options.name}', run ${\n data.id\n } 🏃`\n );\n\n return serverRPC.send(\"COMPLETE_WORKFLOW_RUN\", {\n runId: data.id,\n output: JSON.stringify(output),\n timestamp: String(highPrecisionTimestamp()),\n });\n })\n .catch((anyError) => {\n const parseAnyError = (\n error: any\n ): {\n name: string;\n message: string;\n stackTrace?: string;\n } => {\n if (error instanceof Error) {\n return {\n name: error.name,\n message: error.message,\n stackTrace: error.stack,\n };\n }\n\n console.error(anyError);\n\n return {\n name: \"UnknownError\",\n message: \"An unknown error occurred\",\n };\n };\n\n const error = parseAnyError(anyError);\n\n return serverRPC.send(\"SEND_WORKFLOW_ERROR\", {\n runId: data.id,\n error,\n timestamp: String(highPrecisionTimestamp()),\n });\n });\n })\n .catch((anyError) => {\n return serverRPC.send(\"SEND_WORKFLOW_ERROR\", {\n runId: data.id,\n error: anyError,\n timestamp: String(highPrecisionTimestamp()),\n });\n });\n }\n );\n\n return true;\n },\n },\n });\n\n this.#logger.debug(\"Successfully initialized RPC with server\");\n\n this.#serverRPC = serverRPC;\n }\n\n async #initializeHost() {\n if (!this.#connection) {\n throw new Error(\"Cannot initialize host without a connection\");\n }\n\n if (!this.#serverRPC) {\n throw new Error(\"Cannot initialize host without an RPC connection\");\n }\n\n const response = await this.#send(\"INITIALIZE_HOST\", {\n apiKey: this.#apiKey,\n workflowId: this.#trigger.id,\n workflowName: this.#trigger.name,\n trigger: this.#trigger.on.metadata,\n packageVersion: pkg.version,\n packageName: pkg.name,\n triggerTTL: this.#options.triggerTTL,\n });\n\n if (response?.type === \"error\") {\n throw new Error(response.message);\n }\n\n this.#logger.debug(\"Successfully initialized workflow with server\");\n }\n\n async #send<MethodName extends keyof typeof ServerRPCSchema>(\n methodName: MethodName,\n request: z.input<(typeof ServerRPCSchema)[MethodName][\"request\"]>\n ) {\n if (!this.#serverRPC) throw new Error(\"serverRPC not initialized\");\n\n while (true) {\n try {\n this.#logger.debug(\n `Sending RPC request to server: ${methodName}`,\n request\n );\n\n return await this.#serverRPC.send(methodName, request);\n } catch (err) {\n if (err instanceof TimeoutError) {\n this.#logger.log(\n `RPC call timed out, retrying in ${Math.round(\n this.#retryIntervalMs / 1000\n )}s...`\n );\n\n this.#logger.error(err);\n\n await sleep(this.#retryIntervalMs);\n } else {\n throw err;\n }\n }\n }\n }\n}\n\nexport const sleep = (ms: number) =>\n new Promise((resolve) => setTimeout(resolve, ms));\n\nconst messageKey = (runId: string, key: string) => `${runId}:${key}`;\n\nfunction highPrecisionTimestamp() {\n const [seconds, nanoseconds] = process.hrtime();\n\n return seconds * 1e9 + nanoseconds;\n}\n","import type { WebSocket as NodeWebSocket } from \"ws\";\nimport { v4 } from \"uuid\";\nimport { Evt } from \"evt\";\nimport { IConnection, Logger, MESSAGE_META } from \"internal-bridge\";\n\nexport class TimeoutError extends Error {}\nexport class NotConnectedError extends Error {}\n\ntype PendingMessage = {\n data: string;\n onAckReceived: () => void;\n};\n\nexport type ConnectionOptions = {\n connectTimeout?: number;\n sendTimeout?: number;\n pingTimeout?: number;\n id?: string;\n};\n\nexport class HostConnection implements IConnection {\n id: string;\n onMessage: Evt<string>;\n onAuthenticated: Evt<void>;\n onClose: Evt<[number, string]>;\n onOpen: Evt<void>;\n onError: Evt<Error>;\n\n #socket: WebSocket | NodeWebSocket;\n\n #connectTimeout: number;\n #sendTimeout: number;\n #pingTimeout: number;\n #isAuthenticated: boolean = false;\n #timeouts: Set<NodeJS.Timeout>;\n #isClosed: boolean = false;\n #pendingMessages = new Map<string, PendingMessage>();\n #logger: Logger;\n\n #pingIntervalHandle: NodeJS.Timeout | undefined;\n #pingIntervalMs: number = 30_000; // 30 seconds\n #closeUnresponsiveConnectionTimeoutMs: number = 3 * 60 * 1000; // 3 minutes\n\n constructor(socket: WebSocket | NodeWebSocket, options?: ConnectionOptions) {\n this.#socket = socket;\n this.id = options?.id ?? v4();\n\n this.onMessage = new Evt();\n this.onAuthenticated = new Evt<void>();\n this.onClose = new Evt<[number, string]>();\n this.onOpen = new Evt();\n this.onError = new Evt<Error>();\n\n this.#connectTimeout = options?.connectTimeout ?? 5000;\n this.#sendTimeout = options?.sendTimeout ?? 5000;\n this.#pingTimeout = options?.pingTimeout ?? 5000;\n\n this.#timeouts = new Set();\n\n this.#logger = new Logger(\"trigger.dev connection\");\n\n this.onClose.attach(() => {\n this.#isClosed = true;\n\n if (this.#pingIntervalHandle) {\n clearInterval(this.#pingIntervalHandle);\n this.#pingIntervalHandle = undefined;\n }\n\n for (const timeout of this.#timeouts) {\n clearTimeout(timeout);\n }\n\n this.#timeouts.clear();\n });\n\n this.#socket.onopen = () => {\n this.#isClosed = false;\n this.onOpen.post();\n\n this.#startPingInterval();\n };\n\n this.#socket.onclose = (ev: CloseEvent) => {\n this.onClose.post([ev.code, ev.reason]);\n };\n\n this.#socket.onerror = (ev: ErrorEvent | Event) => {\n const message = \"message\" in ev ? ev.message : \"Unknown error\";\n\n this.onError.post(new Error(message));\n };\n\n this.#socket.onmessage = (event: MessageEvent) => {\n if (this.#isClosed) return;\n\n const data = JSON.parse(event.data.toString());\n const metadata = MESSAGE_META.parse(data);\n\n if (metadata.type === \"ACK\") {\n const pendingMessage = this.#pendingMessages.get(metadata.id);\n\n if (pendingMessage) {\n pendingMessage.onAckReceived();\n this.#pendingMessages.delete(metadata.id);\n }\n }\n\n if (metadata.type === \"MESSAGE\") {\n socket.send(JSON.stringify({ type: \"ACK\", id: metadata.id }));\n\n if (metadata.data === \"AUTHENTICATED\") {\n this.#isAuthenticated = true;\n this.onAuthenticated.post();\n return;\n }\n\n this.onMessage.post(metadata.data);\n }\n };\n\n if (\"pong\" in socket) {\n socket.on(\"pong\", (buf) => {\n const id = buf.toString();\n const pendingMessage = this.#pendingMessages.get(id);\n\n if (pendingMessage?.data === \"ping\") {\n pendingMessage.onAckReceived();\n }\n });\n }\n }\n\n async connect() {\n this.#logger.debug(\"[connect] Attempting to connect\");\n\n return new Promise<void>((resolve, reject) => {\n if (\n this.#socket.readyState === this.#socket.OPEN &&\n this.#isAuthenticated\n ) {\n this.#logger.debug(\"[connect] Already connected, resolving\");\n\n return resolve();\n }\n\n const failTimeout = setTimeout(() => {\n this.#logger.debug(\"[connect] Connection timed out, rejecting\");\n\n reject(new TimeoutError());\n }, this.#connectTimeout);\n\n this.#timeouts.add(failTimeout);\n\n this.onAuthenticated.attach(() => {\n clearTimeout(failTimeout);\n this.#timeouts.delete(failTimeout);\n\n this.#logger.debug(\"[connect] Connected, resolving\");\n\n resolve();\n });\n });\n }\n\n async send(data: string) {\n if (this.#isClosed) throw new NotConnectedError();\n\n return new Promise<void>((resolve, reject) => {\n const id = v4();\n\n const failTimeout = setTimeout(() => {\n reject(new TimeoutError());\n }, this.#sendTimeout);\n\n this.#timeouts.add(failTimeout);\n\n this.#pendingMessages.set(id, {\n data,\n onAckReceived: () => {\n clearTimeout(failTimeout);\n\n this.#timeouts.delete(failTimeout);\n\n resolve();\n },\n });\n\n this.#socket.send(JSON.stringify({ id, data, type: \"MESSAGE\" }));\n });\n }\n\n close(code?: number, reason?: string) {\n this.#isClosed = true;\n this.onMessage.detach();\n return this.#socket.close(code, reason);\n }\n\n #startPingInterval() {\n // Do the ping stuff here\n let lastSuccessfulPing = new Date();\n this.#pingIntervalHandle = setInterval(async () => {\n if (!this.#socket.OPEN) {\n if (this.#pingIntervalHandle) {\n clearInterval(this.#pingIntervalHandle);\n this.#pingIntervalHandle = undefined;\n }\n\n return;\n }\n\n try {\n await this.#ping();\n lastSuccessfulPing = new Date();\n } catch (err) {\n this.#logger.warn(\"Pong not received in time\");\n if (!(err instanceof TimeoutError)) {\n this.#logger.error(err);\n }\n\n if (\n lastSuccessfulPing.getTime() <\n new Date().getTime() - this.#closeUnresponsiveConnectionTimeoutMs\n ) {\n this.#logger.error(\n \"No pong received in last three minutes, closing connection to Interval and retrying...\"\n );\n if (this.#pingIntervalHandle) {\n clearInterval(this.#pingIntervalHandle);\n this.#pingIntervalHandle = undefined;\n }\n this.#socket.close();\n }\n }\n }, this.#pingIntervalMs);\n }\n\n async #ping() {\n if (!this.#socket.OPEN) {\n throw new NotConnectedError();\n }\n\n if (!(\"ping\" in this.#socket)) {\n // Not supported in web client WebSocket\n throw new Error(\n \"ping not supported in this underlying websocket connection\"\n );\n }\n\n const socket = this.#socket;\n\n return new Promise<void>((resolve, reject) => {\n const id = v4();\n\n const failTimeout = setTimeout(() => {\n reject(new TimeoutError(\"Pong not received in time\"));\n }, this.#pingTimeout);\n\n this.#timeouts.add(failTimeout);\n\n this.#pendingMessages.set(id, {\n data: \"ping\",\n onAckReceived: () => {\n clearTimeout(failTimeout);\n\n this.#timeouts.delete(failTimeout);\n\n this.#logger.debug(`Resolving ping`);\n\n resolve();\n },\n });\n\n this.#logger.debug(`Sending ping ${id} to ${socket.url}`);\n\n socket.ping(id, undefined, (err) => {\n if (err) {\n reject(err);\n }\n });\n });\n }\n}\n","import { AsyncLocalStorage } from \"node:async_hooks\";\nimport { z } from \"zod\";\nimport { TriggerCustomEvent } from \"./types\";\n\ntype PerformRequestOptions<TSchema extends z.ZodTypeAny> = {\n service: string;\n params: unknown;\n endpoint: string;\n response: {\n schema: TSchema;\n };\n};\n\ntype TriggerRunLocalStorage = {\n performRequest: <TSchema extends z.ZodTypeAny>(\n key: string,\n options: PerformRequestOptions<TSchema>\n ) => Promise<z.infer<TSchema>>;\n sendEvent: (key: string, event: TriggerCustomEvent) => Promise<void>;\n};\n\nexport const triggerRunLocalStorage =\n new AsyncLocalStorage<TriggerRunLocalStorage>();\n","import { TriggerLogger } from \"./types\";\n\ntype CallbackFunction = (\n level: \"DEBUG\" | \"INFO\" | \"WARN\" | \"ERROR\",\n message: string,\n properties?: Record<string, any>\n) => Promise<void>;\n\nexport class ContextLogger implements TriggerLogger {\n constructor(private callback: CallbackFunction) {}\n\n debug(message: string, properties?: Record<string, any>): Promise<void> {\n return this.callback(\"DEBUG\", message, properties);\n }\n info(message: string, properties?: Record<string, any>): Promise<void> {\n return this.callback(\"INFO\", message, properties);\n }\n warn(message: string, properties?: Record<string, any>): Promise<void> {\n return this.callback(\"WARN\", message, properties);\n }\n error(message: string, properties?: Record<string, any>): Promise<void> {\n return this.callback(\"ERROR\", message, properties);\n }\n}\n","import { TriggerClient } from \"../client\";\nimport { LogLevel } from \"internal-bridge\";\nimport { TriggerEvent } from \"../events\";\n\nimport type { TriggerContext } from \"../types\";\nimport { z } from \"zod\";\n\nexport type TriggerOptions<TSchema extends z.ZodTypeAny> = {\n id: string;\n name: string;\n on: TriggerEvent<TSchema>;\n apiKey?: string;\n endpoint?: string;\n logLevel?: LogLevel;\n\n /**\n * The TTL for the trigger in seconds. If the trigger is not run within this time, it will be aborted. Defaults to 3600 seconds (1 hour).\n * @type {number}\n */\n triggerTTL?: number;\n\n run: (event: z.infer<TSchema>, ctx: TriggerContext) => Promise<any>;\n};\n\nexport class Trigger<TSchema extends z.ZodTypeAny> {\n options: TriggerOptions<TSchema>;\n #client: TriggerClient<TSchema> | undefined;\n\n constructor(options: TriggerOptions<TSchema>) {\n this.options = options;\n }\n\n async listen() {\n if (!this.#client) {\n this.#client = new TriggerClient(this, this.options);\n }\n\n return this.#client.listen();\n }\n\n get id() {\n return this.options.id;\n }\n\n get name() {\n return this.options.name;\n }\n\n get endpoint() {\n return this.options.endpoint;\n }\n\n get on() {\n return this.options.on;\n }\n}\n","import { triggerRunLocalStorage } from \"./localStorage\";\nimport type { TriggerCustomEvent } from \"./types\";\nimport fetch from \"node-fetch\";\nimport { ulid } from \"ulid\";\n\nexport function sendEvent(\n id: string,\n event: TriggerCustomEvent\n): Promise<void> {\n const triggerRun = triggerRunLocalStorage.getStore();\n\n if (!triggerRun) {\n // Do it through the API\n return sendEventFetch(event);\n }\n\n return triggerRun.sendEvent(id, event);\n}\n\nasync function sendEventFetch(event: TriggerCustomEvent): Promise<void> {\n if (!process.env.TRIGGER_API_KEY) {\n throw new Error(\n `There was a problem sending a custom event: the TRIGGER_API_KEY environment variable is not set`\n );\n }\n\n const id = ulid();\n\n const baseUrl = process.env.TRIGGER_API_URL || \"https://app.trigger.dev\";\n const url = `${baseUrl}/api/v1/events`;\n\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${process.env.TRIGGER_API_KEY}`,\n },\n body: JSON.stringify({\n id,\n event,\n }),\n });\n\n if (!response.ok) {\n throw new Error(\n `There was a problem sending a custom event: ${response.statusText}`\n );\n }\n\n return;\n}\n"],"mappings":"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","names":["LiteralSchema","z","union","string","number","boolean","null","JsonSchema","lazy","array","record","SerializableSchema","date","SerializableJsonSchema","import_zod","ErrorSchema","z","object","name","string","message","stackTrace","optional","import_zod","LogMessageSchema","z","object","level","enum","message","string","properties","JsonSchema","default","import_zod","DelaySchema","z","object","type","literal","seconds","number","optional","minutes","hours","days","ScheduledForSchema","scheduledFor","string","datetime","WaitSchema","discriminatedUnion","import_zod","CustomEventSchema","z","object","name","string","payload","JsonSchema","context","optional","timestamp","datetime","SerializableCustomEventSchema","SerializableJsonSchema","EventMatcherSchema","union","array","number","boolean","EventFilterSchema","lazy","record","ScheduledEventPayloadSchema","scheduledTime","coerce","date","ScheduleSourceRateSchema","rateOf","minutes","min","max","int","hours","days","ScheduleSourceCronSchema","cron","ScheduleSourceSchema","import_zod","CustomEventTriggerSchema","z","object","type","literal","service","name","string","filter","EventFilterSchema","WebhookEventTriggerSchema","source","JsonSchema","HttpEventTriggerSchema","ScheduledEventTriggerSchema","ScheduleSourceSchema","TriggerMetadataSchema","discriminatedUnion","customEvent","options","metadata","type","service","name","filter","event","schema","scheduleEvent","source","ScheduledEventPayloadSchema","import_zod","HostRPCSchema","TRIGGER_WORKFLOW","request","z","object","id","string","trigger","input","JsonSchema","default","context","meta","environment","workflowId","organizationId","apiKey","response","boolean","RESOLVE_REQUEST","key","output","runId","RESOLVE_DELAY","REJECT_REQUEST","error","import_zod","ServerRPCSchema","INITIALIZE_DELAY","request","z","object","runId","string","key","wait","WaitSchema","timestamp","response","boolean","SEND_REQUEST","service","endpoint","params","any","SEND_LOG","log","message","level","enum","properties","optional","SEND_EVENT","event","CustomEventSchema","INITIALIZE_HOST","apiKey","workflowId","workflowName","trigger","TriggerMetadataSchema","packageVersion","packageName","triggerTTL","number","discriminatedUnion","type","literal","nullable","START_WORKFLOW_RUN","COMPLETE_WORKFLOW_RUN","output","SEND_WORKFLOW_ERROR","error","name","stackTrace","import_zod","MESSAGE_META","z","object","data","any","id","string","type","union","literal","TriggerEnvironmentSchema","enum","import_zod","logLevels","Logger","constructor","name","level","indexOf","process","env","TRIGGER_LOG_LEVEL","log","args","console","error","formattedDateTime","warn","info","debug","date","Date","hours","getHours","minutes","getMinutes","seconds","getSeconds","milliseconds","getMilliseconds","formattedHours","formattedMinutes","formattedSeconds","formattedMilliseconds","RPCMessageSchema","z","object","id","string","methodName","data","any","kind","enum","ZodRPC","constructor","options","Map","Logger","connection","sender","receiver","handlers","onMessage","attach","bind","resetConnection","detach","send","key","generateStableId","message","packageMessage","Promise","resolve","reject","set","rawResponseText","parsed","parse","err","catch","rawData","JSON","error","callError","ZodError","stringify","errors","flatten","method","Error","debug","inputs","request","handler","returnValue","preparedResponseText","packageResponse","responseCallback","get","delete","connId","reqKey","reqData","serializedData","inputString","hash","createHash","update","digest","callerData","import_uuid","TimeoutError","Error","NotConnectedError","_logger","HostConnection","constructor","socket","options","Map","id","v4","onMessage","Evt","onAuthenticated","onClose","onOpen","onError","connectTimeout","sendTimeout","pingTimeout","Set","Logger","attach","clearInterval","undefined","timeout","clearTimeout","clear","onopen","post","onclose","ev","code","reason","onerror","message","onmessage","event","data","JSON","parse","toString","metadata","MESSAGE_META","type","pendingMessage","get","onAckReceived","delete","send","stringify","on","buf","connect","debug","Promise","resolve","reject","readyState","OPEN","failTimeout","setTimeout","add","set","close","detach","lastSuccessfulPing","Date","setInterval","err","warn","error","getTime","url","ping","triggerRunLocalStorage","AsyncLocalStorage","ContextLogger","constructor","callback","debug","message","properties","info","warn","error","_connection","_logger","TriggerClient","constructor","trigger","options","Map","apiKey","process","env","TRIGGER_API_KEY","Error","endpoint","Logger","logLevel","listen","instanceId","close","undefined","id","v4","debug","headers","Authorization","connection","HostConnection","WebSocket","followRedirects","onClose","attach","code","reason","error","log","then","catch","Math","round","Promise","resolve","setTimeout","connect","resetConnection","serverRPC","ZodRPC","sender","ServerRPCSchema","receiver","HostRPCSchema","handlers","RESOLVE_DELAY","data","waitCallbacks","get","messageKey","meta","runId","key","RESOLVE_REQUEST","requestCallbacks","output","REJECT_REQUEST","reject","TRIGGER_WORKFLOW","ctx","environment","organizationId","logger","ContextLogger","level","message","properties","send","JSON","stringify","timestamp","String","highPrecisionTimestamp","sendEvent","event","parse","waitFor","result","set","wait","type","seconds","minutes","hours","days","waitUntil","date","scheduledFor","toISOString","eventData","on","schema","input","triggerRunLocalStorage","run","performRequest","request","service","params","response","name","anyError","parseAnyError","stackTrace","stack","console","workflowId","workflowName","metadata","packageVersion","version","packageName","triggerTTL","methodName","err","TimeoutError","sleep","ms","nanoseconds","hrtime","Trigger","constructor","options","listen","TriggerClient","id","name","endpoint","on","sendEvent","id","event","triggerRun","triggerRunLocalStorage","getStore","sendEventFetch","process","env","TRIGGER_API_KEY","Error","ulid","baseUrl","TRIGGER_API_URL","url","response","fetch","method","headers","Authorization","body","JSON","stringify","ok","statusText","getTriggerRun","triggerRunLocalStorage","getStore"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@trigger.dev/sdk",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.2",
|
|
4
4
|
"description": "trigger.dev Node.JS SDK",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
"@trigger.dev/tsconfig": "0.0.0",
|
|
23
23
|
"@types/debug": "^4.1.7",
|
|
24
24
|
"@types/node": "16",
|
|
25
|
+
"@types/node-fetch": "2.6.x",
|
|
25
26
|
"@types/uuid": "^9.0.0",
|
|
26
27
|
"@types/ws": "^8.5.3",
|
|
27
28
|
"internal-bridge": "0.0.1",
|
|
@@ -32,6 +33,7 @@
|
|
|
32
33
|
"dependencies": {
|
|
33
34
|
"debug": "^4.3.4",
|
|
34
35
|
"evt": "^2.4.13",
|
|
36
|
+
"node-fetch": "2.6.x",
|
|
35
37
|
"ulid": "^2.3.0",
|
|
36
38
|
"uuid": "^9.0.0",
|
|
37
39
|
"ws": "^8.11.0",
|