convert @trigger.dev/sdk to tshy

This commit is contained in:
Eric Allam
2024-08-06 11:52:02 +01:00
committed by Eric Allam
parent cc7a438c51
commit e6c8b459e6
43 changed files with 333 additions and 346 deletions
+2 -1
View File
@@ -1,4 +1,5 @@
{
"deno.enablePaths": ["references/deno-reference", "runtime_tests/tests/deno"],
"debug.toolBarLocation": "commandCenter"
"debug.toolBarLocation": "commandCenter",
"typescript.tsdk": "node_modules/typescript/lib"
}
+1 -1
View File
@@ -94,7 +94,7 @@
"typescript": "^5.5.4"
},
"engines": {
"node": ">=18.0.0"
"node": ">=18.20.0"
},
"exports": {
"./package.json": "./package.json",
+46 -35
View File
@@ -3,45 +3,32 @@
"version": "3.0.0-beta.52",
"description": "trigger.dev Node.JS SDK",
"license": "MIT",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
"module": "./dist/index.mjs",
"publishConfig": {
"access": "public"
},
"type": "module",
"files": [
"dist"
],
"exports": {
".": {
"import": {
"types": "./dist/index.d.mts",
"default": "./dist/index.mjs"
},
"require": "./dist/index.js",
"types": "./dist/index.d.ts"
"tshy": {
"selfLink": false,
"main": false,
"module": false,
"project": "./tsconfig.build.json",
"exports": {
"./package.json": "./package.json",
".": "./src/index.ts",
"./v3": "./src/v3/index.ts"
},
"./v3": {
"import": {
"types": "./dist/v3/index.d.mts",
"default": "./dist/v3/index.mjs"
},
"require": "./dist/v3/index.js",
"types": "./dist/v3/index.d.ts"
},
"./package.json": "./package.json"
},
"typesVersions": {
"*": {
"v3": [
"./dist/v3/index.d.ts"
]
}
"sourceDialects": [
"triggerdotdev-source"
]
},
"scripts": {
"clean": "rimraf dist",
"build": "npm run clean && npm run build:tsup",
"build:tsup": "tsup --dts-resolve",
"prepare": "tshy",
"build": "tshy",
"dev": "tshy --watch",
"typecheck": "tsc --noEmit"
},
"dependencies": {
@@ -65,20 +52,44 @@
"msw": "^2.2.1"
},
"devDependencies": {
"@trigger.dev/tsup": "workspace:*",
"@types/debug": "^4.1.7",
"@types/node": "18",
"@types/node": "20.14.14",
"@types/slug": "^5.0.3",
"@types/uuid": "^9.0.0",
"@types/ws": "^8.5.3",
"encoding": "^0.1.13",
"msw": "^2.2.1",
"rimraf": "^3.0.2",
"tsup": "^8.0.1",
"typed-emitter": "^2.1.0",
"typescript": "^5.3.0"
"typescript": "^5.5.4",
"tshy": "^3.0.2"
},
"engines": {
"node": ">=18.0.0"
"node": ">=18.20.0"
},
"exports": {
"./package.json": "./package.json",
".": {
"import": {
"triggerdotdev-source": "./src/index.ts",
"types": "./dist/esm/index.d.ts",
"default": "./dist/esm/index.js"
},
"require": {
"types": "./dist/commonjs/index.d.ts",
"default": "./dist/commonjs/index.js"
}
},
"./v3": {
"import": {
"triggerdotdev-source": "./src/v3/index.ts",
"types": "./dist/esm/v3/index.d.ts",
"default": "./dist/esm/v3/index.js"
},
"require": {
"types": "./dist/commonjs/v3/index.d.ts",
"default": "./dist/commonjs/v3/index.js"
}
}
}
}
}
+2 -2
View File
@@ -43,8 +43,8 @@ import { LogLevel, Logger } from "@trigger.dev/core/logger";
import { env } from "node:process";
import { z } from "zod";
import { KeyValueStoreClient } from "./store/keyValueStoreClient";
import { AutoYieldRateLimitError } from "./errors";
import { KeyValueStoreClient } from "./store/keyValueStoreClient.js";
import { AutoYieldRateLimitError } from "./errors.js";
export type ApiClientOptions = {
apiKey?: string;
+6 -6
View File
@@ -6,12 +6,12 @@ import {
RequestWithRawBodySchema,
TriggerMetadata,
} from "@trigger.dev/core";
import { ParsedPayloadSchemaError } from "./errors";
import { Job } from "./job";
import { TriggerClient } from "./triggerClient";
import { EventSpecification, EventSpecificationExample, Trigger, VerifyResult } from "./types";
import { formatSchemaErrors } from "./utils/formatSchemaErrors";
import { slugifyId } from "./utils";
import { ParsedPayloadSchemaError } from "./errors.js";
import { Job } from "./job.js";
import { TriggerClient } from "./triggerClient.js";
import { EventSpecification, EventSpecificationExample, Trigger, VerifyResult } from "./types.js";
import { formatSchemaErrors } from "./utils/formatSchemaErrors.js";
import { slugifyId } from "./utils.js";
type HttpEndpointOptions<TEventSpecification extends EventSpecification<any>> = {
id: string;
+17 -17
View File
@@ -1,22 +1,22 @@
export * from "./job";
export * from "./triggerClient";
export * from "./integrations";
export * from "./triggers/eventTrigger";
export * from "./triggers/externalSource";
export * from "./triggers/dynamic";
export * from "./triggers/scheduled";
export * from "./triggers/notifications";
export * from "./triggers/invokeTrigger";
export * from "./triggers/webhook";
export * from "./io";
export * from "./types";
export * from "./utils";
export * from "./security";
export * from "./job.js";
export * from "./triggerClient.js";
export * from "./integrations.js";
export * from "./triggers/eventTrigger.js";
export * from "./triggers/externalSource.js";
export * from "./triggers/dynamic.js";
export * from "./triggers/scheduled.js";
export * from "./triggers/notifications.js";
export * from "./triggers/invokeTrigger.js";
export * from "./triggers/webhook.js";
export * from "./io.js";
export * from "./types.js";
export * from "./utils.js";
export * from "./security.js";
import { ServerTask } from "@trigger.dev/core";
import { RedactString } from "./types";
export { isTriggerError } from "./errors";
export { retry } from "./retry";
import { RedactString } from "./types.js";
export { isTriggerError } from "./errors.js";
export { retry } from "./retry.js";
export type { NormalizedRequest, EventFilter } from "@trigger.dev/core";
+2 -2
View File
@@ -1,6 +1,6 @@
import { ConnectionAuth, IntegrationMetadata } from "@trigger.dev/core";
import { IO } from "./io";
import { Prettify } from "@trigger.dev/core";
import { IO } from "./io.js";
export type { ConnectionAuth } from "@trigger.dev/core";
export interface TriggerIntegration {
+12 -11
View File
@@ -25,7 +25,7 @@ import { LogLevel, Logger } from "@trigger.dev/core/logger";
import { BloomFilter } from "@trigger.dev/core/bloom";
import { AsyncLocalStorage } from "node:async_hooks";
import { webcrypto } from "node:crypto";
import { ApiClient } from "./apiClient";
import { ApiClient } from "./apiClient.js";
import {
AutoYieldExecutionError,
AutoYieldRateLimitError,
@@ -38,23 +38,23 @@ import {
TriggerInternalError,
YieldExecutionError,
isTriggerError,
} from "./errors";
import { IntegrationTaskKey } from "./integrations";
import { calculateRetryAt } from "./retry";
import { TriggerStatus } from "./status";
import { TriggerClient } from "./triggerClient";
import { DynamicTrigger } from "./triggers/dynamic";
import { ExternalSource, ExternalSourceParams } from "./triggers/externalSource";
import { DynamicSchedule } from "./triggers/scheduled";
} from "./errors.js";
import { IntegrationTaskKey } from "./integrations.js";
import { calculateRetryAt } from "./retry.js";
import { TriggerStatus } from "./status.js";
import { TriggerClient } from "./triggerClient.js";
import { DynamicTrigger } from "./triggers/dynamic.js";
import { ExternalSource, ExternalSourceParams } from "./triggers/externalSource.js";
import { DynamicSchedule } from "./triggers/scheduled.js";
import {
EventSpecification,
TaskLogger,
TriggerContext,
WaitForEventResult,
waitForEventSchema,
} from "./types";
} from "./types.js";
import { z } from "zod";
import { KeyValueStore } from "./store/keyValueStore";
import { KeyValueStore } from "./store/keyValueStore.js";
import { Buffer } from "node:buffer";
export type IOTask = ServerTask;
@@ -1065,6 +1065,7 @@ export class IO {
.map((outcome) => outcome as PromiseRejectedResult);
if (nonInternalErrors.length > 0) {
// @ts-expect-error
throw nonInternalErrors[0].reason;
}
@@ -1,6 +1,6 @@
import { ConnectionAuth } from "@trigger.dev/core";
import { IOWithIntegrations, TriggerIntegration } from "./integrations";
import { IO } from "./io";
import { IOWithIntegrations, TriggerIntegration } from "./integrations.js";
import { IO } from "./io.js";
export function createIOWithIntegrations<TIntegrations extends Record<string, TriggerIntegration>>(
io: IO,
@@ -39,6 +39,7 @@ export function createIOWithIntegrations<TIntegrations extends Record<string, Tr
}
if (typeof prop === "string" && prop in connections) {
// @ts-expect-error
const { integration, auth } = connections[prop];
return integration.cloneForRun(io, prop, auth);
}
+10 -6
View File
@@ -8,18 +8,18 @@ import {
SuccessfulRunNotification,
} from "@trigger.dev/core";
import { LogLevel } from "@trigger.dev/core/logger";
import { ConcurrencyLimit } from "./concurrencyLimit";
import { IOWithIntegrations, TriggerIntegration } from "./integrations";
import { runLocalStorage } from "./runLocalStorage";
import { TriggerClient } from "./triggerClient";
import { ConcurrencyLimit } from "./concurrencyLimit.js";
import { IOWithIntegrations, TriggerIntegration } from "./integrations.js";
import { runLocalStorage } from "./runLocalStorage.js";
import { TriggerClient } from "./triggerClient.js";
import type {
EventSpecification,
Trigger,
TriggerContext,
TriggerEventType,
TriggerInvokeType,
} from "./types";
import { slugifyId } from "./utils";
} from "./types.js";
import { slugifyId } from "./utils.js";
export type JobOptions<
TTrigger extends Trigger<EventSpecification<any>>,
@@ -154,6 +154,10 @@ export class Job<
(acc: Record<string, IntegrationConfig>, key) => {
const integration = this.options.integrations![key];
if (!integration) {
return acc;
}
acc[key] = {
id: integration.id,
metadata: integration.metadata,
+3 -3
View File
@@ -1,6 +1,6 @@
import { IO } from "./io";
import { TriggerContext } from "./types";
import { TypedAsyncLocalStorage } from "./utils/typedAsyncLocalStorage";
import { IO } from "./io.js";
import { TriggerContext } from "./types.js";
import { TypedAsyncLocalStorage } from "./utils/typedAsyncLocalStorage.js";
export type RunStore = {
io: IO;
+1 -1
View File
@@ -1,6 +1,6 @@
import crypto from "node:crypto";
import type { BinaryToTextEncoding, BinaryLike, KeyObject } from "crypto";
import { VerifyResult } from "./types";
import { VerifyResult } from "./types.js";
/** Easily verify webhook payloads when they're using common signing methods. */
export async function verifyRequestSignature({
+2 -2
View File
@@ -1,6 +1,6 @@
import { DisplayProperty, StatusUpdate } from "@trigger.dev/core";
import { IntegrationTaskKey } from "./integrations";
import { IO } from "./io";
import { IntegrationTaskKey } from "./integrations.js";
import { IO } from "./io.js";
export class TriggerStatus {
constructor(
@@ -1,6 +1,6 @@
import { ApiClient } from "../apiClient";
import { Json } from "../io";
import { runLocalStorage } from "../runLocalStorage";
import { ApiClient } from "../apiClient.js";
import { Json } from "../io.js";
import { runLocalStorage } from "../runLocalStorage.js";
export class KeyValueStore {
constructor(
@@ -1,6 +1,6 @@
import { AsyncMap } from "@trigger.dev/core";
import { KeyValueStoreResponseBody } from "@trigger.dev/core";
import { JSONOutputSerializer, Json } from "../io";
import { JSONOutputSerializer, Json } from "../io.js";
type QueryKeyValueStoreFunction = (
action: "DELETE" | "GET" | "HAS" | "SET",
+24 -22
View File
@@ -47,9 +47,9 @@ import {
import { LogLevel, Logger } from "@trigger.dev/core/logger";
import EventEmitter from "node:events";
import { env } from "node:process";
import * as packageJson from "../package.json";
import { ApiClient } from "./apiClient";
import { ConcurrencyLimit, ConcurrencyLimitOptions } from "./concurrencyLimit";
import { version } from "../package.json";
import { ApiClient } from "./apiClient.js";
import { ConcurrencyLimit, ConcurrencyLimitOptions } from "./concurrencyLimit.js";
import {
AutoYieldExecutionError,
AutoYieldRateLimitError,
@@ -61,19 +61,19 @@ import {
ResumeWithTaskError,
RetryWithTaskError,
YieldExecutionError,
} from "./errors";
import { EndpointOptions, HttpEndpoint, httpEndpoint } from "./httpEndpoint";
import { TriggerIntegration } from "./integrations";
import { IO, IOStats } from "./io";
import { createIOWithIntegrations } from "./ioWithIntegrations";
import { Job, JobOptions } from "./job";
import { runLocalStorage } from "./runLocalStorage";
import { KeyValueStore } from "./store/keyValueStore";
import { DynamicTrigger, DynamicTriggerOptions } from "./triggers/dynamic";
import { EventTrigger } from "./triggers/eventTrigger";
import { ExternalSource } from "./triggers/externalSource";
import { DynamicIntervalOptions, DynamicSchedule } from "./triggers/scheduled";
import { WebhookDeliveryContext, WebhookSource } from "./triggers/webhook";
} from "./errors.js";
import { EndpointOptions, HttpEndpoint, httpEndpoint } from "./httpEndpoint.js";
import { TriggerIntegration } from "./integrations.js";
import { IO, IOStats } from "./io.js";
import { createIOWithIntegrations } from "./ioWithIntegrations.js";
import { Job, JobOptions } from "./job.js";
import { runLocalStorage } from "./runLocalStorage.js";
import { KeyValueStore } from "./store/keyValueStore.js";
import { DynamicTrigger, DynamicTriggerOptions } from "./triggers/dynamic.js";
import { EventTrigger } from "./triggers/eventTrigger.js";
import { ExternalSource } from "./triggers/externalSource.js";
import { DynamicIntervalOptions, DynamicSchedule } from "./triggers/scheduled.js";
import { WebhookDeliveryContext, WebhookSource } from "./triggers/webhook.js";
import {
type EventSpecification,
type NotificationsEventEmitter,
@@ -81,8 +81,8 @@ import {
type TriggerContext,
type TriggerPreprocessContext,
type VerifyResult,
} from "./types";
import { formatSchemaErrors } from "./utils/formatSchemaErrors";
} from "./types.js";
import { formatSchemaErrors } from "./utils/formatSchemaErrors.js";
const parseRequestPayload = (rawPayload: any) => {
const result = RequestWithRawBodySchema.safeParse(rawPayload);
@@ -1610,7 +1610,7 @@ export class TriggerClient {
const integration = integrations[key];
const auth = (connections ?? {})[key];
const result = await this.#resolveConnection(ctx, integration, auth);
const result = await this.#resolveConnection(ctx, integration!, auth);
if (result.ok) {
return {
@@ -1650,7 +1650,7 @@ export class TriggerClient {
const integration = integrations[result.key];
acc[result.key] = { id: integration.id, error: result.error };
acc[result.key] = { id: integration!.id, error: result.error };
return acc;
},
@@ -1766,7 +1766,7 @@ export class TriggerClient {
(acc: Record<string, IntegrationConfig>, key) => {
const integration = job.options.integrations![key];
acc[key] = this.#buildJobIntegration(integration);
acc[key] = this.#buildJobIntegration(integration!);
return acc;
},
@@ -1795,7 +1795,7 @@ export class TriggerClient {
#standardResponseHeaders(start: number): Record<string, string> {
return {
"Trigger-Version": API_VERSIONS.LAZY_LOADED_CACHED_TASKS,
"Trigger-SDK-Version": packageJson.version,
"Trigger-SDK-Version": version,
"X-Trigger-Request-Timing": `dur=${performance.now() - start / 1000.0}`,
};
}
@@ -1869,8 +1869,10 @@ function deepMergeOptions(obj1: Options, obj2: Options): Options {
for (const key in obj2) {
if (obj2.hasOwnProperty(key)) {
if (key in mergedOptions) {
// @ts-expect-error
mergedOptions[key] = [...mergedOptions[key], ...obj2[key]];
} else {
// @ts-expect-error
mergedOptions[key] = obj2[key];
}
}
+6 -6
View File
@@ -4,12 +4,12 @@ import {
TriggerMetadata,
deepMergeFilters,
} from "@trigger.dev/core";
import { Job } from "../job";
import { TriggerClient } from "../triggerClient";
import { EventSpecification, Trigger } from "../types";
import { slugifyId } from "../utils";
import { ExternalSource, ExternalSourceParams } from "./externalSource";
import { runLocalStorage } from "../runLocalStorage";
import { Job } from "../job.js";
import { TriggerClient } from "../triggerClient.js";
import { EventSpecification, Trigger } from "../types.js";
import { slugifyId } from "../utils.js";
import { ExternalSource, ExternalSourceParams } from "./externalSource.js";
import { runLocalStorage } from "../runLocalStorage.js";
import { EventFilter } from "@trigger.dev/core";
/** Options for a DynamicTrigger */
@@ -1,16 +1,16 @@
import { EventFilter, TriggerMetadata, deepMergeFilters } from "@trigger.dev/core";
import { Job } from "../job";
import { TriggerClient } from "../triggerClient";
import { Job } from "../job.js";
import { TriggerClient } from "../triggerClient.js";
import {
EventSpecification,
EventSpecificationExample,
EventTypeFromSpecification,
SchemaParser,
Trigger,
} from "../types";
import { formatSchemaErrors } from "../utils/formatSchemaErrors";
import { ParsedPayloadSchemaError } from "../errors";
import { VerifyCallback } from "../httpEndpoint";
} from "../types.js";
import { formatSchemaErrors } from "../utils/formatSchemaErrors.js";
import { ParsedPayloadSchemaError } from "../errors.js";
import { VerifyCallback } from "../httpEndpoint.js";
type EventTriggerOptions<TEventSpecification extends EventSpecification<any>> = {
event: TEventSpecification;
@@ -14,12 +14,12 @@ import {
} from "@trigger.dev/core";
import { Logger } from "@trigger.dev/core/logger";
import type { Buffer } from "buffer";
import { IOWithIntegrations, TriggerIntegration } from "../integrations";
import { IO } from "../io";
import { Job } from "../job";
import { TriggerClient } from "../triggerClient";
import type { EventSpecification, SchemaParser, Trigger, TriggerContext } from "../types";
import { slugifyId } from "../utils";
import { IOWithIntegrations, TriggerIntegration } from "../integrations.js";
import { IO } from "../io.js";
import { Job } from "../job.js";
import { TriggerClient } from "../triggerClient.js";
import type { EventSpecification, SchemaParser, Trigger, TriggerContext } from "../types.js";
import { slugifyId } from "../utils.js";
export type HttpSourceEvent = {
url: string;
@@ -1,16 +1,10 @@
import { TriggerMetadata } from "@trigger.dev/core";
import { ParsedPayloadSchemaError } from "../errors";
import { Job } from "../job";
import { TriggerClient } from "../triggerClient";
import {
EventSpecification,
EventSpecificationExample,
SchemaParser,
Trigger,
VerifyResult,
} from "../types";
import { formatSchemaErrors } from "../utils/formatSchemaErrors";
import { TypeOf, ZodType, z } from "zod";
import { ParsedPayloadSchemaError } from "../errors.js";
import { Job } from "../job.js";
import { TriggerClient } from "../triggerClient.js";
import { EventSpecification, EventSpecificationExample, Trigger } from "../types.js";
import { formatSchemaErrors } from "../utils/formatSchemaErrors.js";
/** Configuration options for an InvokeTrigger */
type InvokeTriggerOptions<TSchema extends ZodType = z.ZodTypeAny> = {
@@ -7,10 +7,10 @@ import {
MissingConnectionResolvedNotificationPayloadSchema,
TriggerMetadata,
} from "@trigger.dev/core";
import { TriggerIntegration } from "../integrations";
import { Job } from "../job";
import { TriggerClient } from "../triggerClient";
import { EventSpecification, Trigger } from "../types";
import { TriggerIntegration } from "../integrations.js";
import { Job } from "../job.js";
import { TriggerClient } from "../triggerClient.js";
import { EventSpecification, Trigger } from "../types.js";
export function missingConnectionNotification(integrations: Array<TriggerIntegration>) {
return new MissingConnectionNotification({ integrations });
+10 -8
View File
@@ -7,11 +7,11 @@ import {
TriggerMetadata,
currentDate,
} from "@trigger.dev/core";
import { Job } from "../job";
import { TriggerClient } from "../triggerClient";
import { EventSpecification, Trigger } from "../types";
import { Job } from "../job.js";
import { TriggerClient } from "../triggerClient.js";
import { EventSpecification, Trigger } from "../types.js";
import cronstrue from "cronstrue";
import { runLocalStorage } from "../runLocalStorage";
import { runLocalStorage } from "../runLocalStorage.js";
type ScheduledEventSpecification = EventSpecification<ScheduledPayload>;
@@ -85,12 +85,14 @@ export class CronTrigger implements Trigger<ScheduledEventSpecification> {
get event() {
/**
* We need to concat `(UTC)` string at the end of the human readable string to avoid confusion
* We need to concat `(UTC)` string at the end of the human readable string to avoid confusion
* with execution time/last run of a job in the UI dashboard which is displayed in local time.
*/
const humanReadable = cronstrue.toString(this.options.cron, {
throwExceptionOnParseError: false,
}).concat(" (UTC)");
const humanReadable = cronstrue
.toString(this.options.cron, {
throwExceptionOnParseError: false,
})
.concat(" (UTC)");
return {
name: "trigger.scheduled",
+6 -6
View File
@@ -6,18 +6,18 @@ import {
TriggerMetadata,
deepMergeFilters,
} from "@trigger.dev/core";
import { IOWithIntegrations, TriggerIntegration } from "../integrations";
import { IO } from "../io";
import { Job } from "../job";
import { TriggerClient } from "../triggerClient";
import { IOWithIntegrations, TriggerIntegration } from "../integrations.js";
import { IO } from "../io.js";
import { Job } from "../job.js";
import { TriggerClient } from "../triggerClient.js";
import type {
EventSpecification,
SchemaParser,
Trigger,
TriggerContext,
VerifyResult,
} from "../types";
import { slugifyId } from "../utils";
} from "../types.js";
import { slugifyId } from "../utils.js";
import { SerializableJson } from "@trigger.dev/core";
import { Prettify } from "@trigger.dev/core";
import { createHash } from "node:crypto";
+43
View File
@@ -0,0 +1,43 @@
export type EventMap = {
[key: string]: (...args: any[]) => void;
};
/**
* Type-safe event emitter.
*
* Use it like this:
*
* ```typescript
* type MyEvents = {
* error: (error: Error) => void;
* message: (from: string, content: string) => void;
* }
*
* const myEmitter = new EventEmitter() as TypedEmitter<MyEvents>;
*
* myEmitter.emit("error", "x") // <- Will catch this type error;
* ```
*/
interface TypedEventEmitter<Events extends EventMap> {
addListener<E extends keyof Events>(event: E, listener: Events[E]): this;
on<E extends keyof Events>(event: E, listener: Events[E]): this;
once<E extends keyof Events>(event: E, listener: Events[E]): this;
prependListener<E extends keyof Events>(event: E, listener: Events[E]): this;
prependOnceListener<E extends keyof Events>(event: E, listener: Events[E]): this;
off<E extends keyof Events>(event: E, listener: Events[E]): this;
removeAllListeners<E extends keyof Events>(event?: E): this;
removeListener<E extends keyof Events>(event: E, listener: Events[E]): this;
emit<E extends keyof Events>(event: E, ...args: Parameters<Events[E]>): boolean;
// The sloppy `eventNames()` return type is to mitigate type incompatibilities - see #5
eventNames(): (keyof Events | string | symbol)[];
rawListeners<E extends keyof Events>(event: E): Events[E][];
listeners<E extends keyof Events>(event: E): Events[E][];
listenerCount<E extends keyof Events>(event: E): number;
getMaxListeners(): number;
setMaxListeners(maxListeners: number): this;
}
export type { TypedEventEmitter };
+4 -4
View File
@@ -13,10 +13,10 @@ import type {
TriggerMetadata,
} from "@trigger.dev/core";
import { Logger } from "@trigger.dev/core/logger";
import type TypedEmitter from "typed-emitter";
import type { TypedEventEmitter } from "./typed-emitter.js";
import { z } from "zod";
import { Job } from "./job";
import { TriggerClient } from "./triggerClient";
import { Job } from "./job.js";
import { TriggerClient } from "./triggerClient.js";
export type {
DisplayProperty,
@@ -179,4 +179,4 @@ export type NotificationEvents = {
runFailed: (notification: FailedRunNotification) => void;
};
export type NotificationsEventEmitter = TypedEmitter<NotificationEvents>;
export type NotificationsEventEmitter = TypedEventEmitter<NotificationEvents>;
@@ -1,5 +1,5 @@
import type { SchemaError } from "@trigger.dev/core";
import { SchemaParserIssue } from "../types";
import { SchemaParserIssue } from "../types.js";
export function formatSchemaErrors(errors: SchemaParserIssue[]): SchemaError[] {
return errors.map((error) => {
+1 -1
View File
@@ -1,5 +1,5 @@
import { SemanticInternalAttributes } from "@trigger.dev/core/v3";
import { tracer } from "./tracer";
import { tracer } from "./tracer.js";
export type CacheMetadata = {
createdTime: number;
+2 -2
View File
@@ -14,8 +14,8 @@ import {
mergeRequestOptions,
taskContext,
} from "@trigger.dev/core/v3";
import { apiClientMissingError } from "./shared";
import { tracer } from "./tracer";
import { apiClientMissingError } from "./shared.js";
import { tracer } from "./tracer.js";
export type { CreateEnvironmentVariableParams, ImportEnvironmentVariablesParams };
@@ -69,11 +69,13 @@ function injectScope(scope: "run" | "attempt" | "global"): string[] {
if (taskContext?.ctx) {
return [taskContext.ctx.run.id];
}
break;
}
case "attempt": {
if (taskContext?.ctx) {
return [taskContext.ctx.attempt.id];
}
break;
}
}
+14 -14
View File
@@ -1,15 +1,15 @@
export * from "./cache";
export * from "./config";
export { retry, type RetryOptions } from "./retry";
export { queue } from "./shared";
export * from "./tasks";
export * from "./wait";
export * from "./usage";
export * from "./idempotencyKeys";
export * from "./tags";
export * from "./cache.js";
export * from "./config.js";
export { retry, type RetryOptions } from "./retry.js";
export { queue } from "./shared.js";
export * from "./tasks.js";
export * from "./wait.js";
export * from "./usage.js";
export * from "./idempotencyKeys.js";
export * from "./tags.js";
export type { Context };
import type { Context } from "./shared";
import type { Context } from "./shared.js";
import type { ApiClientConfiguration } from "@trigger.dev/core/v3";
import { apiClientManager } from "@trigger.dev/core/v3";
@@ -31,10 +31,10 @@ export {
type LogLevel,
} from "@trigger.dev/core/v3";
export { runs } from "./runs";
export * as schedules from "./schedules";
export * as envvars from "./envvars";
export type { ImportEnvironmentVariablesParams } from "./envvars";
export { runs } from "./runs.js";
export * as schedules from "./schedules/index.js";
export * as envvars from "./envvars.js";
export type { ImportEnvironmentVariablesParams } from "./envvars.js";
/**
* Register the global API client configuration. Alternatively, you can set the `TRIGGER_SECRET_KEY` and `TRIGGER_API_URL` environment variables.
+20 -3
View File
@@ -24,7 +24,7 @@ import {
import { defaultFetchRetryOptions } from "@trigger.dev/core/v3";
import type { HttpHandler } from "msw";
import { AsyncLocalStorage } from "node:async_hooks";
import { tracer } from "./tracer";
import { tracer } from "./tracer.js";
export type { RetryOptions };
@@ -457,6 +457,8 @@ const calculateRetryDelayForResponse = async (
break;
}
}
return;
};
const getRetryStrategyForResponse = async (
@@ -468,8 +470,17 @@ const getRetryStrategyForResponse = async (
for (let i = 0; i < statusCodes.length; i++) {
const statusRange = statusCodes[i];
if (!statusRange) {
continue;
}
const strategy = retry[statusRange];
if (!strategy) {
continue;
}
if (isStatusCodeInRange(response.status, statusRange)) {
if (strategy.bodyFilter) {
const body = safeJsonParse(await clonedResponse.text());
@@ -488,6 +499,8 @@ const getRetryStrategyForResponse = async (
return strategy;
}
}
return;
};
/**
@@ -512,15 +525,19 @@ const isStatusCodeInRange = (statusCode: number, statusRange: string): boolean =
const [start, end] = statusRange.split("-");
if (end) {
return statusCode >= parseInt(start, 10) && statusCode <= parseInt(end, 10);
return statusCode >= parseInt(start ?? "0", 10) && statusCode <= parseInt(end, 10);
}
if (start.endsWith("xx")) {
if (start?.endsWith("xx")) {
const prefix = start.slice(0, -2);
const statusCodePrefix = Math.floor(statusCode / 100).toString();
return statusCodePrefix === prefix;
}
if (!start) {
return false;
}
const statusCodeString = statusCode.toString();
const rangePrefix = start.slice(0, -1);
+2 -2
View File
@@ -17,8 +17,8 @@ import {
isRequestOptions,
mergeRequestOptions,
} from "@trigger.dev/core/v3";
import { AnyTask, Prettify, RunHandle, Task, apiClientMissingError } from "./shared";
import { tracer } from "./tracer";
import { AnyTask, Prettify, RunHandle, Task, apiClientMissingError } from "./shared.js";
import { tracer } from "./tracer.js";
export type RetrieveRunResult<TRunId> = Prettify<
TRunId extends RunHandle<infer TOutput>
@@ -12,9 +12,9 @@ import {
taskCatalog,
} from "@trigger.dev/core/v3";
import { zodfetch } from "@trigger.dev/core/v3/zodfetch";
import { Task, TaskOptions, apiClientMissingError, createTask } from "../shared";
import * as SchedulesAPI from "./api";
import { tracer } from "../tracer";
import { Task, TaskOptions, apiClientMissingError, createTask } from "../shared.js";
import * as SchedulesAPI from "./api.js";
import { tracer } from "../tracer.js";
export type ScheduleOptions<
TIdentifier extends string,
+5 -5
View File
@@ -36,10 +36,10 @@ import {
taskCatalog,
taskContext,
} from "@trigger.dev/core/v3";
import * as packageJson from "../../package.json";
import { tracer } from "./tracer";
import { PollOptions, RetrieveRunResult, runs } from "./runs";
import { IdempotencyKey, idempotencyKeys, isIdempotencyKey } from "./idempotencyKeys";
import { version } from "../../package.json";
import { tracer } from "./tracer.js";
import { PollOptions, RetrieveRunResult, runs } from "./runs.js";
import { IdempotencyKey, idempotencyKeys, isIdempotencyKey } from "./idempotencyKeys.js";
export type Context = TaskRunContext;
@@ -545,7 +545,7 @@ export function createTask<
taskCatalog.registerTaskMetadata({
id: params.id,
packageVersion: packageJson.version,
packageVersion: version,
queue: params.queue,
retry: params.retry ? { ...defaultRetryOptions, ...params.retry } : undefined,
machine: params.machine,
+2 -2
View File
@@ -7,8 +7,8 @@ import {
mergeRequestOptions,
taskContext,
} from "@trigger.dev/core/v3";
import { apiClientMissingError } from "./shared";
import { tracer } from "./tracer";
import { apiClientMissingError } from "./shared.js";
import { tracer } from "./tracer.js";
export const tags = {
add: addTags,
+2 -2
View File
@@ -6,7 +6,7 @@ import {
trigger,
triggerAndPoll,
triggerAndWait,
} from "./shared";
} from "./shared.js";
import type {
TaskOptions,
@@ -22,7 +22,7 @@ import type {
TaskIdentifier,
TaskRunOptions,
AnyTask,
} from "./shared";
} from "./shared.js";
export type {
TaskOptions,
+2 -2
View File
@@ -1,4 +1,4 @@
import { TriggerTracer } from "@trigger.dev/core/v3";
import * as packageJson from "../../package.json";
import { version } from "../../package.json";
export const tracer = new TriggerTracer({ name: "@trigger.dev/sdk", version: packageJson.version });
export const tracer = new TriggerTracer({ name: "@trigger.dev/sdk", version: version });
+1 -1
View File
@@ -1,5 +1,5 @@
import { SemanticInternalAttributes, accessoryAttributes, runtime } from "@trigger.dev/core/v3";
import { tracer } from "./tracer";
import { tracer } from "./tracer.js";
export type WaitOptions =
| {
+9
View File
@@ -0,0 +1,9 @@
{
"extends": "../../.configs/tsconfig.base.json",
"compilerOptions": {
"composite": true,
"sourceMap": true,
"stripInternal": true,
"isolatedDeclarations": false
}
}
+1 -6
View File
@@ -4,12 +4,7 @@
"isolatedDeclarations": false,
"composite": true,
"sourceMap": true,
"paths": {
"@trigger.dev/core/*": ["../core/src/*"],
"@trigger.dev/core": ["../core/src/index"]
},
"stripInternal": true
},
"include": ["./src/**/*.ts"],
"exclude": ["node_modules"]
"include": ["./src/**/*.ts"]
}
File diff suppressed because one or more lines are too long
-9
View File
@@ -1,9 +0,0 @@
import { Options, defineConfig as defineConfigTSUP } from "tsup";
import { packageOptions } from "@trigger.dev/tsup";
const options: Options = {
...packageOptions,
entry: ["./src/index.ts", "./src/v3/index.ts"],
};
export default defineConfigTSUP(options);
+41 -126
View File
@@ -384,9 +384,6 @@ importers:
'@trigger.dev/core':
specifier: workspace:*
version: link:../../packages/core
'@trigger.dev/core-backend':
specifier: workspace:*
version: link:../../packages/core-backend
'@trigger.dev/database':
specifier: workspace:*
version: link:../../packages/database
@@ -1189,40 +1186,6 @@ importers:
specifier: ^5.3.0
version: 5.3.3
packages/core-backend:
dependencies:
'@opentelemetry/api':
specifier: ^1.8.0
version: 1.8.0
devDependencies:
'@trigger.dev/tsconfig':
specifier: workspace:*
version: link:../../config-packages/tsconfig
'@trigger.dev/tsup':
specifier: workspace:*
version: link:../../config-packages/tsup
'@types/jest':
specifier: ^29.5.3
version: 29.5.3
'@types/node':
specifier: '18'
version: 18.17.1
jest:
specifier: ^29.6.2
version: 29.6.2(@types/node@18.17.1)
rimraf:
specifier: ^3.0.2
version: 3.0.2
ts-jest:
specifier: ^29.1.1
version: 29.1.1(@babel/core@7.22.17)(esbuild@0.19.11)(jest@29.6.2)(typescript@5.3.2)
tsup:
specifier: ^8.0.1
version: 8.0.1(patch_hash=a5ztaafw5l4qfghy2hjjuynb34)(postcss@8.4.38)(typescript@5.3.2)
typescript:
specifier: ^5.3.0
version: 5.3.2
packages/database:
dependencies:
'@prisma/client':
@@ -1351,9 +1314,6 @@ importers:
'@trigger.dev/core':
specifier: workspace:3.0.0-beta.52
version: link:../core
'@trigger.dev/core-backend':
specifier: workspace:3.0.0-beta.52
version: link:../core-backend
chalk:
specifier: ^5.2.0
version: 5.2.0
@@ -1377,7 +1337,7 @@ importers:
version: 2.1.1
msw:
specifier: ^2.2.1
version: 2.2.1(typescript@5.3.2)
version: 2.2.1(typescript@5.5.4)
slug:
specifier: ^6.0.0
version: 6.1.0
@@ -1397,15 +1357,12 @@ importers:
specifier: 3.22.3
version: 3.22.3
devDependencies:
'@trigger.dev/tsup':
specifier: workspace:*
version: link:../../config-packages/tsup
'@types/debug':
specifier: ^4.1.7
version: 4.1.7
'@types/node':
specifier: '18'
version: 18.14.0
specifier: 20.14.14
version: 20.14.14
'@types/slug':
specifier: ^5.0.3
version: 5.0.3
@@ -1421,15 +1378,15 @@ importers:
rimraf:
specifier: ^3.0.2
version: 3.0.2
tsup:
specifier: ^8.0.1
version: 8.0.1(patch_hash=a5ztaafw5l4qfghy2hjjuynb34)(postcss@8.4.38)(typescript@5.3.2)
tshy:
specifier: ^3.0.2
version: 3.0.2
typed-emitter:
specifier: ^2.1.0
version: 2.1.0
typescript:
specifier: ^5.3.0
version: 5.3.2
specifier: ^5.5.4
version: 5.5.4
references/v3-catalog:
dependencies:
@@ -12738,10 +12695,6 @@ packages:
/@types/node@18.11.18:
resolution: {integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==}
/@types/node@18.14.0:
resolution: {integrity: sha512-5EWrvLmglK+imbCJY0+INViFWUHg1AHel1sq4ZVSfdcNqGy9Edv3UB9IIzzg+xPaUcAgZYcfVs2fBcwDeZzU0A==}
dev: true
/@types/node@18.17.1:
resolution: {integrity: sha512-xlR1jahfizdplZYRU59JlUx9uzF1ARa8jbhM11ccpCJya8kvos5jwdm2ZAgxSCwOl0fq21svP18EVwPBXMQudw==}
dev: true
@@ -14768,7 +14721,6 @@ packages:
readdirp: 3.6.0
optionalDependencies:
fsevents: 2.3.3
dev: true
/chownr@1.1.4:
resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==}
@@ -18232,7 +18184,7 @@ packages:
foreground-child: 3.1.1
jackspeak: 2.3.6
minimatch: 9.0.3
minipass: 7.0.3
minipass: 7.1.2
path-scurry: 1.10.1
dev: false
@@ -21321,7 +21273,6 @@ packages:
/minipass@7.1.2:
resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
engines: {node: '>=16 || 14 >=14.17'}
dev: true
/minizlib@2.1.2:
resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==}
@@ -21418,37 +21369,6 @@ packages:
/ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
/msw@2.2.1(typescript@5.3.2):
resolution: {integrity: sha512-DCsZAQwan+2onEcpD86fiEnCKW4IvYzqcwDq/2TIoeNrmBqNp/mJW4wHQyxcoYrRPwgujin7wDFflqiSO1iT/w==}
engines: {node: '>=18'}
hasBin: true
requiresBuild: true
peerDependencies:
typescript: '>= 4.7.x <= 5.3.x'
peerDependenciesMeta:
typescript:
optional: true
dependencies:
'@bundled-es-modules/cookie': 2.0.0
'@bundled-es-modules/statuses': 1.0.1
'@inquirer/confirm': 3.0.0
'@mswjs/cookies': 1.1.0
'@mswjs/interceptors': 0.25.16
'@open-draft/until': 2.1.0
'@types/cookie': 0.6.0
'@types/statuses': 2.0.4
chalk: 4.1.2
graphql: 16.8.1
headers-polyfill: 4.0.2
is-node-process: 1.2.0
outvariant: 1.4.2
path-to-regexp: 6.2.1
strict-event-emitter: 0.5.1
type-fest: 4.10.3
typescript: 5.3.2
yargs: 17.7.2
dev: false
/msw@2.2.1(typescript@5.3.3):
resolution: {integrity: sha512-DCsZAQwan+2onEcpD86fiEnCKW4IvYzqcwDq/2TIoeNrmBqNp/mJW4wHQyxcoYrRPwgujin7wDFflqiSO1iT/w==}
engines: {node: '>=18'}
@@ -21480,6 +21400,37 @@ packages:
yargs: 17.7.2
dev: false
/msw@2.2.1(typescript@5.5.4):
resolution: {integrity: sha512-DCsZAQwan+2onEcpD86fiEnCKW4IvYzqcwDq/2TIoeNrmBqNp/mJW4wHQyxcoYrRPwgujin7wDFflqiSO1iT/w==}
engines: {node: '>=18'}
hasBin: true
requiresBuild: true
peerDependencies:
typescript: '>= 4.7.x <= 5.3.x'
peerDependenciesMeta:
typescript:
optional: true
dependencies:
'@bundled-es-modules/cookie': 2.0.0
'@bundled-es-modules/statuses': 1.0.1
'@inquirer/confirm': 3.0.0
'@mswjs/cookies': 1.1.0
'@mswjs/interceptors': 0.25.16
'@open-draft/until': 2.1.0
'@types/cookie': 0.6.0
'@types/statuses': 2.0.4
chalk: 4.1.2
graphql: 16.8.1
headers-polyfill: 4.0.2
is-node-process: 1.2.0
outvariant: 1.4.2
path-to-regexp: 6.2.1
strict-event-emitter: 0.5.1
type-fest: 4.10.3
typescript: 5.5.4
yargs: 17.7.2
dev: false
/mustache@4.2.0:
resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==}
hasBin: true
@@ -25943,7 +25894,7 @@ packages:
dependencies:
'@alloc/quick-lru': 5.2.0
arg: 5.0.2
chokidar: 3.5.3
chokidar: 3.6.0
didyoumean: 1.2.2
dlv: 1.1.3
fast-glob: 3.3.1
@@ -26321,41 +26272,6 @@ packages:
/ts-interface-checker@0.1.13:
resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
/ts-jest@29.1.1(@babel/core@7.22.17)(esbuild@0.19.11)(jest@29.6.2)(typescript@5.3.2):
resolution: {integrity: sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
hasBin: true
peerDependencies:
'@babel/core': '>=7.0.0-beta.0 <8'
'@jest/types': ^29.0.0
babel-jest: ^29.0.0
esbuild: '*'
jest: ^29.0.0
typescript: '>=4.3 <6'
peerDependenciesMeta:
'@babel/core':
optional: true
'@jest/types':
optional: true
babel-jest:
optional: true
esbuild:
optional: true
dependencies:
'@babel/core': 7.22.17
bs-logger: 0.2.6
esbuild: 0.19.11
fast-json-stable-stringify: 2.1.0
jest: 29.6.2(@types/node@18.17.1)
jest-util: 29.6.2
json5: 2.2.3
lodash.memoize: 4.1.2
make-error: 1.3.6
semver: 7.5.4
typescript: 5.3.2
yargs-parser: 21.1.1
dev: true
/ts-jest@29.1.1(@babel/core@7.22.17)(esbuild@0.19.11)(jest@29.6.2)(typescript@5.3.3):
resolution: {integrity: sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -27069,7 +26985,6 @@ packages:
resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==}
engines: {node: '>=14.17'}
hasBin: true
dev: true
/ufo@1.3.0:
resolution: {integrity: sha512-bRn3CsoojyNStCZe0BG0Mt4Nr/4KF+rhFlnNXybgqt5pXHNFRlqinSoQaTrGyzE4X8aHplSb+TorH+COin9Yxw==}