@trigger.dev/sdk 3.0.0-beta.4 → 3.0.0-beta.40

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/v3/shared.ts","../../package.json","../../src/v3/tracer.ts","../../src/v3/tasks.ts","../../src/v3/wait.ts","../../src/v3/cache.ts","../../src/v3/retry.ts","../../src/v3/index.ts"],"names":["SpanKind","SEMATTRS_MESSAGING_DESTINATION","SEMATTRS_MESSAGING_OPERATION","SEMATTRS_MESSAGING_SYSTEM","SemanticInternalAttributes","accessoryAttributes","apiClientManager","conditionallyImportPacket","createErrorTaskError","defaultRetryOptions","parsePacket","runtime","taskContextManager","TriggerTracer","tracer","name","version","createTask","params","task","trigger","payload","options","apiClient","client","apiClientMissingError","taskMetadata","getTaskMetadata","id","handle","startActiveSpan","span","response","triggerTask","queue","concurrencyKey","test","ctx","run","isTest","spanParentAsLink","ok","Error","error","setAttribute","data","kind","PRODUCER","attributes","STYLE_ICON","worker","JSON","stringify","length","items","text","exportName","variant","style","batchTrigger","batchTriggerTask","map","item","batchId","join","triggerAndWait","dependentAttempt","attempt","lockToVersion","result","waitForTask","runResult","handleTaskRunExecutionResult","output","batchTriggerAndWait","waitForBatch","runs","handleBatchTaskRunExecutionResult","Object","defineProperty","value","packageVersion","retry","undefined","machine","fns","init","cleanup","middleware","handleError","enumerable","someObjectStoreOutputs","some","outputType","results","Promise","all","INTERNAL","execution","outputPacket","dataType","importedPacket","hasBaseUrl","baseURL","hasAccessToken","accessToken","wait","for","start","Date","now","durationInMs","calculateDurationInMs","waitForDuration","nameForWaitOptions","until","throwIfInThePast","date","getTime","toISOString","seconds","minutes","hours","days","weeks","months","years","InMemoryCache","_cache","Map","get","key","set","delete","createCache","store","cache","cacheKey","fn","cacheEntry","updateName","metadata","createdTime","SpanStatusCode","context","trace","SEMATTRS_HTTP_HOST","SEMATTRS_HTTP_METHOD","SEMATTRS_HTTP_RESPONSE_CONTENT_LENGTH","SEMATTRS_HTTP_SCHEME","SEMATTRS_HTTP_STATUS_CODE","SEMATTRS_HTTP_URL","calculateNextRetryDelay","calculateResetAt","eventFilterMatches","flattenAttributes","defaultFetchRetryOptions","AsyncLocalStorage","onThrow","opts","maxAttempts","innerSpan","startSpan","contextWithSpanSet","setSpan","active","with","end","e","recordException","String","setStatus","code","ERROR","nextRetryDelay","RETRY_AT","RETRY_COUNT","RETRY_DELAY","normalizeUrlFromInput","input","URL","url","normalizeHttpMethod","method","toUpperCase","fetchHttpHandlerStorage","fetchWithInterceptors","handlers","getStore","getResponse","request","Request","fetch","FetchErrorWithSpan","constructor","originalError","MAX_ATTEMPTS","retryFetch","abortController","AbortController","timeoutId","timeoutInMs","setTimeout","abort","signal","addEventListener","doFetchRequest","clearTimeout","setAttributes","createFetchResponseAttributes","nextRetry","calculateRetryDelayForResponse","resolveDefaults","byStatus","type","nextRetryDate","isInFuture","waitUntil","timeout","cause","connectionError","createFetchAttributes","createFetchRetryOptionsAttributes","attemptCount","httpMethod","headers","toString","status","statusText","message","strategy","getRetryStrategyForResponse","resetAt","resetHeader","resetTimestamp","resetFormat","statusCodes","keys","clonedResponse","clone","i","statusRange","isStatusCodeInRange","bodyFilter","body","safeJsonParse","statusCode","includes","split","s","trim","parseInt","endsWith","prefix","slice","statusCodePrefix","Math","floor","statusCodeString","rangePrefix","startsWith","createAttributesFromHeaders","normalizedHeaderKey","toLowerCase","forEach","json","parse","interceptFetch","current","push","obj","defaults","href","hostname","port","protocol","replace","logger"],"mappings":"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","sourcesContent":["import { SpanKind } from \"@opentelemetry/api\";\nimport {\n SEMATTRS_MESSAGING_DESTINATION,\n SEMATTRS_MESSAGING_OPERATION,\n SEMATTRS_MESSAGING_SYSTEM,\n} from \"@opentelemetry/semantic-conventions\";\nimport {\n HandleErrorFnParams,\n HandleErrorResult,\n InitFnParams,\n InitOutput,\n MachineCpu,\n MachineMemory,\n MiddlewareFnParams,\n QueueOptions,\n RetryOptions,\n RunFnParams,\n SemanticInternalAttributes,\n SuccessFnParams,\n TaskRunContext,\n TaskRunExecutionResult,\n accessoryAttributes,\n apiClientManager,\n conditionallyImportPacket,\n createErrorTaskError,\n defaultRetryOptions,\n parsePacket,\n runtime,\n taskContextManager,\n} from \"@trigger.dev/core/v3\";\nimport * as packageJson from \"../../package.json\";\nimport { tracer } from \"./tracer\";\n\nexport type Context = TaskRunContext;\n\ntype RequireOne<T, K extends keyof T> = {\n [X in Exclude<keyof T, K>]?: T[X];\n} & {\n [P in K]-?: T[P];\n};\n\nexport type Queue = RequireOne<QueueOptions, \"name\">;\n\nexport function queue(options: { name: string } & QueueOptions): Queue {\n return options;\n}\n\nexport type TaskOptions<TPayload, TOutput = any, TInitOutput extends InitOutput = any> = {\n /** An id for your task. This must be unique inside your project and not change between versions. */\n id: string;\n /** The retry settings when an uncaught error is thrown.\n *\n * If omitted it will use the values in your `trigger.config.ts` file.\n * \n * @example\n * \n * ```\n * export const taskWithRetries = task({\n id: \"task-with-retries\",\n retry: {\n maxAttempts: 10,\n factor: 1.8,\n minTimeoutInMs: 500,\n maxTimeoutInMs: 30_000,\n randomize: false,\n },\n run: async ({ payload, ctx }) => {\n //...\n },\n });\n * ```\n * */\n retry?: RetryOptions;\n /** Used to configure what should happen when more than one run is triggered at the same time.\n * \n * @example \n * one at a time execution\n * \n * ```ts\n * export const oneAtATime = task({\n id: \"one-at-a-time\",\n queue: {\n concurrencyLimit: 1,\n },\n run: async ({ payload, ctx }) => {\n //...\n },\n });\n * ```\n */\n queue?: QueueOptions;\n /** Configure the spec of the machine you want your task to run on.\n * \n * @example\n * \n * ```ts\n * export const heavyTask = task({\n id: \"heavy-task\",\n machine: {\n cpu: 2,\n memory: 4,\n },\n run: async ({ payload, ctx }) => {\n //...\n },\n });\n * ```\n */\n machine?: {\n /** vCPUs. The default is 0.5.\n *\n * Possible values:\n * - 0.25\n * - 0.5\n * - 1\n * - 2\n * - 4\n */\n cpu?: MachineCpu;\n /** In GBs of RAM. The default is 1.\n *\n * Possible values:\n * - 0.25\n * - 0.5\n * - 1\n * - 2\n * - 4\n * - 8\n */\n memory?: MachineMemory;\n };\n /** This gets called when a task is triggered. It's where you put the code you want to execute.\n *\n * @param payload - The payload that is passed to your task when it's triggered. This must be JSON serializable.\n * @param params - Metadata about the run.\n */\n run: (payload: TPayload, params: RunFnParams<TInitOutput>) => Promise<TOutput>;\n init?: (payload: TPayload, params: InitFnParams) => Promise<TInitOutput>;\n handleError?: (\n payload: TPayload,\n error: unknown,\n params: HandleErrorFnParams<TInitOutput>\n ) => HandleErrorResult;\n cleanup?: (payload: TPayload, params: RunFnParams<TInitOutput>) => Promise<void>;\n middleware?: (payload: TPayload, params: MiddlewareFnParams) => Promise<void>;\n onSuccess?: (payload: TPayload, params: SuccessFnParams<TOutput, TInitOutput>) => Promise<void>;\n};\n\ntype InvokeHandle = {\n id: string;\n};\n\ntype InvokeBatchHandle = {\n batchId: string;\n runs: string[];\n};\n\nexport type TaskRunResult<TOutput = any> =\n | {\n ok: true;\n id: string;\n output: TOutput;\n }\n | {\n ok: false;\n id: string;\n error: any;\n };\n\nexport type BatchResult<TOutput = any> = {\n id: string;\n runs: TaskRunResult<TOutput>[];\n};\n\nexport type Task<TInput, TOutput = any> = {\n trigger: (params: { payload: TInput; options?: TaskRunOptions }) => Promise<InvokeHandle>;\n batchTrigger: (params: {\n items: { payload: TInput; options?: TaskRunOptions }[];\n batchOptions?: BatchRunOptions;\n }) => Promise<InvokeBatchHandle>;\n triggerAndWait: (params: { payload: TInput; options?: TaskRunOptions }) => Promise<TOutput>;\n batchTriggerAndWait: (params: {\n items: { payload: TInput; options?: TaskRunOptions }[];\n batchOptions?: BatchRunOptions;\n }) => Promise<BatchResult<TOutput>>;\n};\n\ntype TaskRunOptions = {\n idempotencyKey?: string;\n maxAttempts?: number;\n startAt?: Date;\n startAfter?: number;\n queue?: TaskRunConcurrencyOptions;\n concurrencyKey?: string;\n};\n\ntype TaskRunConcurrencyOptions = Queue;\n\ntype BatchRunOptions = TaskRunOptions & {\n maxConcurrency?: number;\n};\n\nexport type Prettify<T> = {\n [K in keyof T]: T[K];\n} & {};\n\nexport type DynamicBaseOptions = {\n id: string;\n};\n\nexport function createTask<TInput, TOutput, TInitOutput extends InitOutput>(\n params: TaskOptions<TInput, TOutput, TInitOutput>\n): Task<TInput, TOutput> {\n const task: Task<TInput, TOutput> = {\n trigger: async ({ payload, options }) => {\n const apiClient = apiClientManager.client;\n\n if (!apiClient) {\n throw apiClientMissingError();\n }\n\n const taskMetadata = runtime.getTaskMetadata(params.id);\n\n const handle = await tracer.startActiveSpan(\n taskMetadata ? \"Trigger\" : `${params.id} trigger()`,\n async (span) => {\n const response = await apiClient.triggerTask(\n params.id,\n {\n payload: payload,\n options: {\n queue: params.queue,\n concurrencyKey: options?.concurrencyKey,\n test: taskContextManager.ctx?.run.isTest,\n },\n },\n { spanParentAsLink: true }\n );\n\n if (!response.ok) {\n throw new Error(response.error);\n }\n\n span.setAttribute(\"messaging.message.id\", response.data.id);\n\n return response.data;\n },\n {\n kind: SpanKind.PRODUCER,\n attributes: {\n [SEMATTRS_MESSAGING_OPERATION]: \"publish\",\n [SemanticInternalAttributes.STYLE_ICON]: \"trigger\",\n [\"messaging.client_id\"]: taskContextManager.worker?.id,\n [SEMATTRS_MESSAGING_DESTINATION]: params.queue?.name ?? params.id,\n [\"messaging.message.body.size\"]: JSON.stringify(payload).length,\n [SEMATTRS_MESSAGING_SYSTEM]: \"trigger.dev\",\n ...(taskMetadata\n ? accessoryAttributes({\n items: [\n {\n text: `${taskMetadata.exportName}.trigger()`,\n variant: \"normal\",\n },\n ],\n style: \"codepath\",\n })\n : {}),\n },\n }\n );\n\n return handle;\n },\n batchTrigger: async ({ items }) => {\n const apiClient = apiClientManager.client;\n\n if (!apiClient) {\n throw apiClientMissingError();\n }\n\n const taskMetadata = runtime.getTaskMetadata(params.id);\n\n const response = await tracer.startActiveSpan(\n taskMetadata ? \"Batch trigger\" : `${params.id} batchTrigger()`,\n async (span) => {\n const response = await apiClient.batchTriggerTask(\n params.id,\n {\n items: items.map((item) => ({\n payload: item.payload,\n options: {\n queue: item.options?.queue ?? params.queue,\n concurrencyKey: item.options?.concurrencyKey,\n test: taskContextManager.ctx?.run.isTest,\n },\n })),\n },\n { spanParentAsLink: true }\n );\n\n if (!response.ok) {\n throw new Error(response.error);\n }\n\n span.setAttribute(\"messaging.message.id\", response.data.batchId);\n\n return response.data;\n },\n {\n kind: SpanKind.PRODUCER,\n attributes: {\n [SEMATTRS_MESSAGING_OPERATION]: \"publish\",\n [\"messaging.batch.message_count\"]: items.length,\n [\"messaging.client_id\"]: taskContextManager.worker?.id,\n [SEMATTRS_MESSAGING_DESTINATION]: params.queue?.name ?? params.id,\n [\"messaging.message.body.size\"]: items\n .map((item) => JSON.stringify(item.payload))\n .join(\"\").length,\n [SEMATTRS_MESSAGING_SYSTEM]: \"trigger.dev\",\n [SemanticInternalAttributes.STYLE_ICON]: \"trigger\",\n ...(taskMetadata\n ? accessoryAttributes({\n items: [\n {\n text: `${taskMetadata.exportName}.batchTrigger()`,\n variant: \"normal\",\n },\n ],\n style: \"codepath\",\n })\n : {}),\n },\n }\n );\n\n return response;\n },\n triggerAndWait: async ({ payload, options }) => {\n const ctx = taskContextManager.ctx;\n\n if (!ctx) {\n throw new Error(\"triggerAndWait can only be used from inside a task.run()\");\n }\n\n const apiClient = apiClientManager.client;\n\n if (!apiClient) {\n throw apiClientMissingError();\n }\n\n const taskMetadata = runtime.getTaskMetadata(params.id);\n\n return await tracer.startActiveSpan(\n taskMetadata ? \"Trigger\" : `${params.id} triggerAndWait()`,\n async (span) => {\n const response = await apiClient.triggerTask(params.id, {\n payload,\n options: {\n dependentAttempt: ctx.attempt.id,\n lockToVersion: taskContextManager.worker?.version, // Lock to current version because we're waiting for it to finish\n queue: params.queue,\n concurrencyKey: options?.concurrencyKey,\n test: taskContextManager.ctx?.run.isTest,\n },\n });\n\n if (!response.ok) {\n throw new Error(response.error);\n }\n\n span.setAttribute(\"messaging.message.id\", response.data.id);\n\n const result = await runtime.waitForTask({\n id: response.data.id,\n ctx,\n });\n\n const runResult = await handleTaskRunExecutionResult<TOutput>(result);\n\n if (!runResult.ok) {\n throw runResult.error;\n }\n\n return runResult.output;\n },\n {\n kind: SpanKind.PRODUCER,\n attributes: {\n [SemanticInternalAttributes.STYLE_ICON]: \"trigger\",\n [SEMATTRS_MESSAGING_OPERATION]: \"publish\",\n [\"messaging.client_id\"]: taskContextManager.worker?.id,\n [SEMATTRS_MESSAGING_DESTINATION]: params.queue?.name ?? params.id,\n [SEMATTRS_MESSAGING_SYSTEM]: \"trigger.dev\",\n ...(taskMetadata\n ? accessoryAttributes({\n items: [\n {\n text: `${taskMetadata.exportName}.triggerAndWait()`,\n variant: \"normal\",\n },\n ],\n style: \"codepath\",\n })\n : {}),\n },\n }\n );\n },\n batchTriggerAndWait: async ({ items }) => {\n const ctx = taskContextManager.ctx;\n\n if (!ctx) {\n throw new Error(\"batchTriggerAndWait can only be used from inside a task.run()\");\n }\n\n const apiClient = apiClientManager.client;\n\n if (!apiClient) {\n throw apiClientMissingError();\n }\n\n const taskMetadata = runtime.getTaskMetadata(params.id);\n\n return await tracer.startActiveSpan(\n taskMetadata ? \"Batch trigger\" : `${params.id} batchTriggerAndWait()`,\n async (span) => {\n const response = await apiClient.batchTriggerTask(params.id, {\n items: items.map((item) => ({\n payload: item.payload,\n options: {\n lockToVersion: taskContextManager.worker?.version,\n queue: item.options?.queue ?? params.queue,\n concurrencyKey: item.options?.concurrencyKey,\n test: taskContextManager.ctx?.run.isTest,\n },\n })),\n dependentAttempt: ctx.attempt.id,\n });\n\n if (!response.ok) {\n throw new Error(response.error);\n }\n\n span.setAttribute(\"messaging.message.id\", response.data.batchId);\n\n const result = await runtime.waitForBatch({\n id: response.data.batchId,\n runs: response.data.runs,\n ctx,\n });\n\n const runs = await handleBatchTaskRunExecutionResult<TOutput>(result.items);\n\n return {\n id: result.id,\n runs,\n };\n },\n {\n kind: SpanKind.PRODUCER,\n attributes: {\n [SEMATTRS_MESSAGING_OPERATION]: \"publish\",\n [\"messaging.batch.message_count\"]: items.length,\n [\"messaging.client_id\"]: taskContextManager.worker?.id,\n [SEMATTRS_MESSAGING_DESTINATION]: params.queue?.name ?? params.id,\n [\"messaging.message.body.size\"]: items\n .map((item) => JSON.stringify(item.payload))\n .join(\"\").length,\n [SEMATTRS_MESSAGING_SYSTEM]: \"trigger.dev\",\n [SemanticInternalAttributes.STYLE_ICON]: \"trigger\",\n ...(taskMetadata\n ? accessoryAttributes({\n items: [\n {\n text: `${taskMetadata.exportName}.batchTriggerAndWait()`,\n variant: \"normal\",\n },\n ],\n style: \"codepath\",\n })\n : {}),\n },\n }\n );\n },\n };\n\n Object.defineProperty(task, \"__trigger\", {\n value: {\n id: params.id,\n packageVersion: packageJson.version,\n queue: params.queue,\n retry: params.retry ? { ...defaultRetryOptions, ...params.retry } : undefined,\n machine: params.machine,\n fns: {\n run: params.run,\n init: params.init,\n cleanup: params.cleanup,\n middleware: params.middleware,\n handleError: params.handleError,\n },\n },\n enumerable: false,\n });\n\n return task;\n}\n\nasync function handleBatchTaskRunExecutionResult<TOutput>(\n items: Array<TaskRunExecutionResult>\n): Promise<Array<TaskRunResult<TOutput>>> {\n const someObjectStoreOutputs = items.some(\n (item) => item.ok && item.outputType === \"application/store\"\n );\n\n if (!someObjectStoreOutputs) {\n const results = await Promise.all(\n items.map(async (item) => {\n return await handleTaskRunExecutionResult<TOutput>(item);\n })\n );\n\n return results;\n }\n\n return await tracer.startActiveSpan(\n \"store.downloadPayloads\",\n async (span) => {\n const results = await Promise.all(\n items.map(async (item) => {\n return await handleTaskRunExecutionResult<TOutput>(item);\n })\n );\n\n return results;\n },\n {\n kind: SpanKind.INTERNAL,\n [SemanticInternalAttributes.STYLE_ICON]: \"cloud-download\",\n }\n );\n}\n\nasync function handleTaskRunExecutionResult<TOutput>(\n execution: TaskRunExecutionResult\n): Promise<TaskRunResult<TOutput>> {\n if (execution.ok) {\n const outputPacket = { data: execution.output, dataType: execution.outputType };\n const importedPacket = await conditionallyImportPacket(outputPacket, tracer);\n\n return {\n ok: true,\n id: execution.id,\n output: await parsePacket(importedPacket),\n };\n } else {\n return {\n ok: false,\n id: execution.id,\n error: createErrorTaskError(execution.error),\n };\n }\n}\n\nfunction apiClientMissingError() {\n const hasBaseUrl = !!apiClientManager.baseURL;\n const hasAccessToken = !!apiClientManager.accessToken;\n if (!hasBaseUrl && !hasAccessToken) {\n return `You need to set the TRIGGER_API_URL and TRIGGER_SECRET_KEY environment variables.`;\n } else if (!hasBaseUrl) {\n return `You need to set the TRIGGER_API_URL environment variable.`;\n } else if (!hasAccessToken) {\n return `You need to set the TRIGGER_SECRET_KEY environment variable.`;\n }\n\n return `Unknown error`;\n}\n","{\n \"name\": \"@trigger.dev/sdk\",\n \"version\": \"3.0.0-beta.4\",\n \"description\": \"trigger.dev Node.JS SDK\",\n \"license\": \"MIT\",\n \"main\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"module\": \"./dist/index.mjs\",\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"files\": [\n \"dist\"\n ],\n \"exports\": {\n \".\": {\n \"import\": {\n \"types\": \"./dist/index.d.mts\",\n \"default\": \"./dist/index.mjs\"\n },\n \"require\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\"\n },\n \"./v3\": {\n \"import\": {\n \"types\": \"./dist/v3/index.d.mts\",\n \"default\": \"./dist/v3/index.mjs\"\n },\n \"require\": \"./dist/v3/index.js\",\n \"types\": \"./dist/v3/index.d.ts\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"typesVersions\": {\n \"*\": {\n \"v3\": [\n \"./dist/v3/index.d.ts\"\n ]\n }\n },\n \"scripts\": {\n \"clean\": \"rimraf dist\",\n \"build\": \"npm run clean && npm run build:tsup\",\n \"build:tsup\": \"tsup --dts-resolve\",\n \"typecheck\": \"tsc --noEmit\"\n },\n \"dependencies\": {\n \"@opentelemetry/api\": \"^1.8.0\",\n \"@opentelemetry/api-logs\": \"^0.48.0\",\n \"@opentelemetry/semantic-conventions\": \"^1.22.0\",\n \"@trigger.dev/core\": \"workspace:^3.0.0-beta.4\",\n \"@trigger.dev/core-backend\": \"workspace:^3.0.0-beta.4\",\n \"chalk\": \"^5.2.0\",\n \"cronstrue\": \"^2.21.0\",\n \"debug\": \"^4.3.4\",\n \"evt\": \"^2.4.13\",\n \"get-caller-file\": \"^2.0.5\",\n \"git-remote-origin-url\": \"^4.0.0\",\n \"git-repo-info\": \"^2.1.1\",\n \"slug\": \"^6.0.0\",\n \"terminal-link\": \"^3.0.0\",\n \"ulid\": \"^2.3.0\",\n \"uuid\": \"^9.0.0\",\n \"ws\": \"^8.11.0\",\n \"zod\": \"3.22.3\"\n },\n \"devDependencies\": {\n \"@trigger.dev/tsconfig\": \"workspace:*\",\n \"@trigger.dev/tsup\": \"workspace:*\",\n \"@types/debug\": \"^4.1.7\",\n \"@types/node\": \"18\",\n \"@types/slug\": \"^5.0.3\",\n \"@types/uuid\": \"^9.0.0\",\n \"@types/ws\": \"^8.5.3\",\n \"encoding\": \"^0.1.13\",\n \"msw\": \"^2.2.1\",\n \"rimraf\": \"^3.0.2\",\n \"tsup\": \"^8.0.1\",\n \"typed-emitter\": \"^2.1.0\",\n \"typescript\": \"^5.3.0\"\n },\n \"peerDependencies\": {\n \"msw\": \"^2.2.1\"\n },\n \"peerDependenciesMeta\": {\n \"msw\": {\n \"optional\": true\n }\n },\n \"engines\": {\n \"node\": \">=18.0.0\"\n }\n}","import { TriggerTracer } from \"@trigger.dev/core/v3\";\nimport * as packageJson from \"../../package.json\";\n\nexport const tracer = new TriggerTracer({ name: \"@trigger.dev/sdk\", version: packageJson.version });\n","import { InitOutput } from \"@trigger.dev/core/v3\";\nimport { TaskOptions, Task, createTask } from \"./shared\";\n\n/** Creates a task that can be triggered\n * @param options - Task options\n * @example \n * \n * ```ts\n * import { task } from \"@trigger.dev/sdk/v3\";\n *\n * export const helloWorld = task({\n id: \"hello-world\",\n * run: async (payload: { url: string }) => {\n * return { hello: \"world\" };\n * },\n * });\n *\n * ```\n * \n * @returns A task that can be triggered\n */\nexport function task<TInput, TOutput = any, TInitOutput extends InitOutput = any>(\n options: TaskOptions<TInput, TOutput, TInitOutput>\n): Task<TInput, TOutput> {\n return createTask<TInput, TOutput, TInitOutput>(options);\n}\n","import { SemanticInternalAttributes, accessoryAttributes, runtime } from \"@trigger.dev/core/v3\";\nimport { tracer } from \"./tracer\";\n\nexport type WaitOptions =\n | {\n seconds: number;\n }\n | {\n minutes: number;\n }\n | {\n hours: number;\n }\n | {\n days: number;\n }\n | {\n weeks: number;\n }\n | {\n months: number;\n }\n | {\n years: number;\n };\n\nexport const wait = {\n for: async (options: WaitOptions) => {\n return tracer.startActiveSpan(\n `wait.for()`,\n async (span) => {\n const start = Date.now();\n const durationInMs = calculateDurationInMs(options);\n\n await runtime.waitForDuration(durationInMs);\n },\n {\n attributes: {\n [SemanticInternalAttributes.STYLE_ICON]: \"wait\",\n ...accessoryAttributes({\n items: [\n {\n text: nameForWaitOptions(options),\n variant: \"normal\",\n },\n ],\n style: \"codepath\",\n }),\n },\n }\n );\n },\n until: async (options: { date: Date; throwIfInThePast?: boolean }) => {\n return tracer.startActiveSpan(\n `wait.until()`,\n async (span) => {\n const start = Date.now();\n\n if (options.throwIfInThePast && options.date < new Date()) {\n throw new Error(\"Date is in the past\");\n }\n\n const durationInMs = options.date.getTime() - start;\n\n await runtime.waitForDuration(durationInMs);\n },\n {\n attributes: {\n [SemanticInternalAttributes.STYLE_ICON]: \"wait\",\n ...accessoryAttributes({\n items: [\n {\n text: options.date.toISOString(),\n variant: \"normal\",\n },\n ],\n style: \"codepath\",\n }),\n },\n }\n );\n },\n};\n\nfunction nameForWaitOptions(options: WaitOptions): string {\n if (\"seconds\" in options) {\n return options.seconds === 1 ? `1 second` : `${options.seconds} seconds`;\n }\n\n if (\"minutes\" in options) {\n return options.minutes === 1 ? `1 minute` : `${options.minutes} minutes`;\n }\n\n if (\"hours\" in options) {\n return options.hours === 1 ? `1 hour` : `${options.hours} hours`;\n }\n\n if (\"days\" in options) {\n return options.days === 1 ? `1 day` : `${options.days} days`;\n }\n\n if (\"weeks\" in options) {\n return options.weeks === 1 ? `1 week` : `${options.weeks} weeks`;\n }\n\n if (\"months\" in options) {\n return options.months === 1 ? `1 month` : `${options.months} months`;\n }\n\n if (\"years\" in options) {\n return options.years === 1 ? `1 year` : `${options.years} years`;\n }\n\n return \"NaN\";\n}\n\nfunction calculateDurationInMs(options: WaitOptions): number {\n if (\"seconds\" in options) {\n return options.seconds * 1000;\n }\n\n if (\"minutes\" in options) {\n return options.minutes * 1000 * 60;\n }\n\n if (\"hours\" in options) {\n return options.hours * 1000 * 60 * 60;\n }\n\n if (\"days\" in options) {\n return options.days * 1000 * 60 * 60 * 24;\n }\n\n if (\"weeks\" in options) {\n return options.weeks * 1000 * 60 * 60 * 24 * 7;\n }\n\n if (\"months\" in options) {\n return options.months * 1000 * 60 * 60 * 24 * 30;\n }\n\n if (\"years\" in options) {\n return options.years * 1000 * 60 * 60 * 24 * 365;\n }\n\n throw new Error(\"Invalid options\");\n}\n\ntype RequestOptions = {\n to: (url: string) => Promise<void>;\n timeout: WaitOptions;\n};\n","import { SemanticInternalAttributes } from \"@trigger.dev/core/v3\";\nimport { tracer } from \"./tracer\";\n\nexport type CacheMetadata = {\n createdTime: number;\n ttl?: number | null;\n};\n\nexport type CacheEntry<Value = unknown> = {\n metadata: CacheMetadata;\n value: Value;\n};\n\nexport type Eventually<Value> = Value | null | undefined | Promise<Value | null | undefined>;\n\nexport type CacheStore<Value = any> = {\n name?: string;\n get: (key: string) => Eventually<CacheEntry<Value>>;\n set: (key: string, value: CacheEntry<Value>) => unknown | Promise<unknown>;\n delete: (key: string) => unknown | Promise<unknown>;\n};\n\nexport type CacheFunction = <Value>(\n cacheKey: string,\n fn: () => Promise<Value> | Value\n) => Promise<Value> | Value;\n\nexport class InMemoryCache<Value = any> {\n private _cache: Map<string, CacheEntry<Value>> = new Map();\n\n get(key: string): Eventually<CacheEntry<Value>> {\n return this._cache.get(key);\n }\n\n set(key: string, value: CacheEntry<Value>): unknown {\n this._cache.set(key, value);\n\n return undefined;\n }\n\n delete(key: string): unknown {\n this._cache.delete(key);\n\n return undefined;\n }\n}\n\n/**\n * Create a cache function that uses the provided store to cache values. Using InMemoryCache is safe because each task run is isolated.\n * @param store\n * @returns\n */\nexport function createCache(store: CacheStore): CacheFunction {\n return function cache<Value>(\n cacheKey: string,\n fn: () => Promise<Value> | Value\n ): Promise<Value> | Value {\n return tracer.startActiveSpan(\"cache\", async (span) => {\n span.setAttribute(\"cache.key\", cacheKey);\n span.setAttribute(SemanticInternalAttributes.STYLE_ICON, \"device-sd-card\");\n\n const cacheEntry = await store.get(cacheKey);\n\n if (cacheEntry) {\n span.updateName(`cache.hit ${cacheKey}`);\n\n return cacheEntry.value;\n }\n\n span.updateName(`cache.miss ${cacheKey}`);\n\n const value = await tracer.startActiveSpan(\n \"cache.getFreshValue\",\n async (span) => {\n return await fn();\n },\n {\n attributes: {\n \"cache.key\": cacheKey,\n [SemanticInternalAttributes.STYLE_ICON]: \"device-sd-card\",\n },\n }\n );\n\n await tracer.startActiveSpan(\n \"cache.set\",\n async (span) => {\n await store.set(cacheKey, {\n value,\n metadata: {\n createdTime: Date.now(),\n },\n });\n },\n {\n attributes: {\n \"cache.key\": cacheKey,\n [SemanticInternalAttributes.STYLE_ICON]: \"device-sd-card\",\n },\n }\n );\n\n return value;\n });\n };\n}\n","import { Attributes, Span, SpanStatusCode, context, trace } from \"@opentelemetry/api\";\nimport {\n SEMATTRS_HTTP_HOST,\n SEMATTRS_HTTP_METHOD,\n SEMATTRS_HTTP_RESPONSE_CONTENT_LENGTH,\n SEMATTRS_HTTP_SCHEME,\n SEMATTRS_HTTP_STATUS_CODE,\n SEMATTRS_HTTP_URL,\n} from \"@opentelemetry/semantic-conventions\";\nimport {\n FetchRetryByStatusOptions,\n FetchRetryOptions,\n FetchRetryStrategy,\n RetryOptions,\n SemanticInternalAttributes,\n accessoryAttributes,\n calculateNextRetryDelay,\n calculateResetAt,\n defaultRetryOptions,\n eventFilterMatches,\n flattenAttributes,\n runtime,\n} from \"@trigger.dev/core/v3\";\nimport { defaultFetchRetryOptions } from \"@trigger.dev/core/v3\";\nimport type { HttpHandler } from \"msw\";\nimport { AsyncLocalStorage } from \"node:async_hooks\";\nimport { tracer } from \"./tracer\";\n\nexport type { RetryOptions };\n\nfunction onThrow<T>(\n fn: (options: { attempt: number; maxAttempts: number }) => Promise<T>,\n options: RetryOptions\n): Promise<T> {\n const opts = {\n ...defaultRetryOptions,\n ...options,\n };\n\n return tracer.startActiveSpan(\n `retry.onThrow()`,\n async (span) => {\n let attempt = 1;\n\n while (attempt <= opts.maxAttempts) {\n const innerSpan = tracer.startSpan(\"retry.fn()\", {\n attributes: {\n [SemanticInternalAttributes.STYLE_ICON]: \"function\",\n ...accessoryAttributes({\n items: [\n {\n text: `${attempt}/${opts.maxAttempts}`,\n variant: \"normal\",\n },\n ],\n style: \"codepath\",\n }),\n },\n });\n\n const contextWithSpanSet = trace.setSpan(context.active(), innerSpan);\n\n try {\n const result = await context.with(contextWithSpanSet, async () => {\n return fn({ attempt, maxAttempts: opts.maxAttempts });\n });\n\n innerSpan.end();\n\n return result;\n } catch (e) {\n if (e instanceof Error || typeof e === \"string\") {\n innerSpan.recordException(e);\n } else {\n innerSpan.recordException(String(e));\n }\n\n innerSpan.setStatus({ code: SpanStatusCode.ERROR });\n\n const nextRetryDelay = calculateNextRetryDelay(opts, attempt);\n\n if (!nextRetryDelay) {\n innerSpan.end();\n\n throw e;\n }\n\n innerSpan.setAttribute(\n SemanticInternalAttributes.RETRY_AT,\n new Date(Date.now() + nextRetryDelay).toISOString()\n );\n innerSpan.setAttribute(SemanticInternalAttributes.RETRY_COUNT, attempt);\n innerSpan.setAttribute(SemanticInternalAttributes.RETRY_DELAY, `${nextRetryDelay}ms`);\n innerSpan.end();\n\n await runtime.waitForDuration(nextRetryDelay);\n } finally {\n attempt++;\n }\n }\n\n throw new Error(\"Max attempts reached\");\n },\n {\n attributes: {\n [SemanticInternalAttributes.STYLE_ICON]: \"arrow-capsule\",\n },\n }\n );\n}\n\nexport interface RetryFetchRequestInit extends RequestInit {\n retry?: FetchRetryOptions;\n timeoutInMs?: number;\n}\n\nconst normalizeUrlFromInput = (input: RequestInfo | URL | string): URL => {\n if (typeof input === \"string\") {\n return new URL(input);\n }\n\n if (input instanceof URL) {\n return input;\n }\n\n return new URL(input.url);\n};\n\nconst normalizeHttpMethod = (input: RequestInfo | URL | string, init?: RequestInit): string => {\n if (typeof input === \"string\" || input instanceof URL) {\n return (init?.method || \"GET\").toUpperCase();\n }\n\n return (input.method ?? init?.method ?? \"GET\").toUpperCase();\n};\n\nconst fetchHttpHandlerStorage = new AsyncLocalStorage<Array<HttpHandler>>();\n\nconst fetchWithInterceptors = async (\n input: RequestInfo | URL,\n init?: RequestInit\n): Promise<Response> => {\n const handlers = fetchHttpHandlerStorage.getStore();\n\n if (handlers) {\n try {\n const { getResponse } = await import(\"msw\");\n\n const request = new Request(input, init);\n\n const response = await getResponse(handlers, request);\n\n if (response) {\n return response;\n }\n } catch (e) {\n // Do nothing\n return fetch(input, init);\n }\n }\n\n return fetch(input, init);\n};\n\nclass FetchErrorWithSpan extends Error {\n constructor(\n public readonly originalError: unknown,\n public readonly span: Span\n ) {\n super(\"Fetch error\");\n }\n}\n\nconst MAX_ATTEMPTS = 10;\n\nasync function retryFetch(\n input: RequestInfo | URL,\n init?: RetryFetchRequestInit | undefined\n): Promise<Response> {\n return tracer.startActiveSpan(\n \"retry.fetch()\",\n async (span) => {\n let attempt = 1;\n\n while (true) {\n try {\n const abortController = new AbortController();\n\n const timeoutId = init?.timeoutInMs\n ? setTimeout(\n () => {\n abortController.abort();\n },\n init?.timeoutInMs\n )\n : undefined;\n\n init?.signal?.addEventListener(\"abort\", () => {\n abortController.abort();\n });\n\n const [response, span] = await doFetchRequest(\n input,\n { ...(init ?? {}), signal: abortController.signal },\n attempt\n );\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n\n if (response.ok) {\n span.setAttributes(createFetchResponseAttributes(response));\n\n span.end();\n\n return response;\n }\n\n const nextRetry = await calculateRetryDelayForResponse(\n resolveDefaults(init?.retry, \"byStatus\", defaultFetchRetryOptions.byStatus),\n response,\n attempt\n );\n\n if (!nextRetry) {\n span.setAttributes(createFetchResponseAttributes(response));\n\n span.end();\n\n return response;\n }\n\n if (attempt >= MAX_ATTEMPTS) {\n span.setAttributes(createFetchResponseAttributes(response));\n\n span.end();\n\n return response;\n }\n\n if (nextRetry.type === \"delay\") {\n span.setAttribute(\n SemanticInternalAttributes.RETRY_AT,\n new Date(Date.now() + nextRetry.value).toISOString()\n );\n span.setAttribute(SemanticInternalAttributes.RETRY_COUNT, attempt);\n span.setAttribute(SemanticInternalAttributes.RETRY_DELAY, `${nextRetry.value}ms`);\n\n span.end();\n\n await runtime.waitForDuration(nextRetry.value);\n } else {\n const now = Date.now();\n const nextRetryDate = new Date(nextRetry.value);\n const isInFuture = nextRetryDate.getTime() > now;\n\n span.setAttribute(\n SemanticInternalAttributes.RETRY_AT,\n new Date(nextRetry.value).toISOString()\n );\n span.setAttribute(SemanticInternalAttributes.RETRY_COUNT, attempt);\n\n if (isInFuture) {\n span.setAttribute(\n SemanticInternalAttributes.RETRY_DELAY,\n `${nextRetry.value - now}ms`\n );\n }\n\n span.end();\n\n await runtime.waitUntil(new Date(nextRetry.value));\n }\n } catch (e) {\n if (e instanceof FetchErrorWithSpan && e.originalError instanceof Error) {\n if (e.originalError.name === \"AbortError\") {\n const nextRetryDelay = calculateNextRetryDelay(\n resolveDefaults(init?.retry, \"timeout\", defaultFetchRetryOptions.timeout),\n attempt\n );\n\n if (!nextRetryDelay) {\n e.span.end();\n throw e;\n }\n\n if (attempt >= MAX_ATTEMPTS) {\n e.span.end();\n throw e;\n }\n\n e.span.setAttribute(\n SemanticInternalAttributes.RETRY_AT,\n new Date(Date.now() + nextRetryDelay).toISOString()\n );\n e.span.setAttribute(SemanticInternalAttributes.RETRY_COUNT, attempt);\n e.span.setAttribute(SemanticInternalAttributes.RETRY_DELAY, `${nextRetryDelay}ms`);\n\n e.span.end();\n\n await runtime.waitForDuration(nextRetryDelay);\n\n continue; // Move to the next attempt\n } else if (\n e.originalError.name === \"TypeError\" &&\n \"cause\" in e.originalError &&\n e.originalError.cause instanceof Error\n ) {\n const nextRetryDelay = calculateNextRetryDelay(\n resolveDefaults(\n init?.retry,\n \"connectionError\",\n defaultFetchRetryOptions.connectionError\n ),\n attempt\n );\n\n if (!nextRetryDelay) {\n e.span.end();\n throw e;\n }\n\n if (attempt >= MAX_ATTEMPTS) {\n e.span.end();\n throw e;\n }\n\n e.span.setAttribute(\n SemanticInternalAttributes.RETRY_AT,\n new Date(Date.now() + nextRetryDelay).toISOString()\n );\n e.span.setAttribute(SemanticInternalAttributes.RETRY_COUNT, attempt);\n e.span.setAttribute(SemanticInternalAttributes.RETRY_DELAY, `${nextRetryDelay}ms`);\n\n e.span.end();\n\n await runtime.waitForDuration(nextRetryDelay);\n\n continue; // Move to the next attempt\n }\n }\n\n if (e instanceof FetchErrorWithSpan) {\n e.span.end();\n }\n\n throw e;\n } finally {\n attempt++;\n }\n }\n },\n {\n attributes: {\n [SemanticInternalAttributes.STYLE_ICON]: \"arrow-capsule\",\n ...createFetchAttributes(input, init),\n ...createFetchRetryOptionsAttributes(init?.retry),\n },\n }\n );\n}\n\nconst doFetchRequest = async (\n input: RequestInfo | URL | string,\n init?: RequestInit,\n attemptCount: number = 0\n): Promise<[Response, Span]> => {\n const httpMethod = normalizeHttpMethod(input, init);\n\n const span = tracer.startSpan(`HTTP ${httpMethod}`, {\n attributes: {\n [SemanticInternalAttributes.STYLE_ICON]: \"world\",\n ...(attemptCount > 1 ? { [\"http.request.resend_count\"]: attemptCount - 1 } : {}),\n ...createFetchAttributes(input, init),\n },\n });\n\n try {\n const response = await fetchWithInterceptors(input, {\n ...init,\n headers: {\n ...init?.headers,\n \"x-retry-count\": attemptCount.toString(),\n },\n });\n\n span.setAttributes(createFetchResponseAttributes(response));\n\n if (!response.ok) {\n span.recordException(`${response.status}: ${response.statusText}`);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: `${response.status}: ${response.statusText}`,\n });\n }\n\n return [response, span];\n } catch (e) {\n if (typeof e === \"string\" || e instanceof Error) {\n span.recordException(e);\n }\n\n span.setStatus({ code: SpanStatusCode.ERROR });\n span.setAttribute(SEMATTRS_HTTP_STATUS_CODE, 0);\n span.setAttribute(\"http.status_text\", \"This operation was aborted.\");\n\n throw new FetchErrorWithSpan(e, span);\n }\n};\n\nconst calculateRetryDelayForResponse = async (\n retry: FetchRetryByStatusOptions | undefined,\n response: Response,\n attemptCount: number\n): Promise<{ type: \"delay\"; value: number } | { type: \"timestamp\"; value: number } | undefined> => {\n if (!retry) {\n return;\n }\n\n const strategy = await getRetryStrategyForResponse(response, retry);\n\n if (!strategy) {\n return;\n }\n\n switch (strategy.strategy) {\n case \"backoff\": {\n const value = calculateNextRetryDelay({ ...defaultRetryOptions, ...strategy }, attemptCount);\n\n if (value) {\n return { type: \"delay\", value };\n }\n\n break;\n }\n case \"headers\": {\n const resetAt = response.headers.get(strategy.resetHeader);\n\n if (typeof resetAt === \"string\") {\n const resetTimestamp = calculateResetAt(\n resetAt,\n strategy.resetFormat ?? \"unix_timestamp_in_ms\"\n );\n\n if (resetTimestamp) {\n return { type: \"timestamp\", value: resetTimestamp };\n }\n }\n\n break;\n }\n }\n};\n\nconst getRetryStrategyForResponse = async (\n response: Response,\n retry: FetchRetryByStatusOptions\n): Promise<FetchRetryStrategy | undefined> => {\n const statusCodes = Object.keys(retry);\n const clonedResponse = response.clone();\n\n for (let i = 0; i < statusCodes.length; i++) {\n const statusRange = statusCodes[i];\n const strategy = retry[statusRange];\n\n if (isStatusCodeInRange(response.status, statusRange)) {\n if (strategy.bodyFilter) {\n const body = safeJsonParse(await clonedResponse.text());\n\n if (!body) {\n continue;\n }\n\n if (eventFilterMatches(body, strategy.bodyFilter)) {\n return strategy;\n } else {\n continue;\n }\n }\n\n return strategy;\n }\n }\n};\n\n/**\n * Checks if a given status code falls within a given range.\n * The range can be a single status code (e.g. \"200\"),\n * a range of status codes (e.g. \"500-599\"),\n * a range of status codes with a wildcard (e.g. \"4xx\" for any 4xx status code),\n * or a list of status codes separated by commas (e.g. \"401,403,404,409-412,5xx\").\n * Returns `true` if the status code falls within the range, and `false` otherwise.\n */\nconst isStatusCodeInRange = (statusCode: number, statusRange: string): boolean => {\n if (statusRange === \"all\") {\n return true;\n }\n\n if (statusRange.includes(\",\")) {\n const statusCodes = statusRange.split(\",\").map((s) => s.trim());\n\n return statusCodes.some((s) => isStatusCodeInRange(statusCode, s));\n }\n\n const [start, end] = statusRange.split(\"-\");\n\n if (end) {\n return statusCode >= parseInt(start, 10) && statusCode <= parseInt(end, 10);\n }\n\n if (start.endsWith(\"xx\")) {\n const prefix = start.slice(0, -2);\n const statusCodePrefix = Math.floor(statusCode / 100).toString();\n return statusCodePrefix === prefix;\n }\n\n const statusCodeString = statusCode.toString();\n const rangePrefix = start.slice(0, -1);\n\n if (start.endsWith(\"x\") && statusCodeString.startsWith(rangePrefix)) {\n return true;\n }\n\n return statusCode === parseInt(start, 10);\n};\n\nconst createAttributesFromHeaders = (headers: Headers): Attributes => {\n const attributes: Attributes = {};\n\n const normalizedHeaderKey = (key: string) => {\n return key.toLowerCase();\n };\n\n headers.forEach((value, key) => {\n attributes[`http.response.header.${normalizedHeaderKey(key)}`] = value;\n });\n\n return attributes;\n};\n\nconst safeJsonParse = (json: string): unknown => {\n try {\n return JSON.parse(json);\n } catch (e) {\n return null;\n }\n};\n\nconst interceptFetch = (...handlers: Array<HttpHandler>) => {\n return {\n run: async <T>(fn: (...args: any[]) => Promise<T>): Promise<T> => {\n const current = fetchHttpHandlerStorage.getStore();\n\n if (current) {\n current.push(...handlers);\n return fn();\n } else {\n return fetchHttpHandlerStorage.run(handlers, fn);\n }\n },\n };\n};\n\n// This function will resolve the defaults of a property within an options object.\n// If the options object is undefined, it will return the defaults for that property (passed in as the 3rd arg).\n// if the options object is defined, and the property exists, then it will return the defaults if the value of the property is undefined or null\nconst resolveDefaults = <\n TObject extends Record<string, unknown>,\n K extends keyof TObject,\n TValue extends TObject[K],\n>(\n obj: TObject | undefined,\n key: K,\n defaults: TValue\n): TValue => {\n if (!obj) {\n return defaults;\n }\n\n if (obj[key] === undefined || obj[key] === null) {\n return defaults;\n }\n\n return obj[key] as TValue;\n};\n\nconst createFetchAttributes = (\n input: RequestInfo | URL,\n init?: RetryFetchRequestInit | undefined\n): Attributes => {\n const url = normalizeUrlFromInput(input);\n const httpMethod = normalizeHttpMethod(input, init);\n\n return {\n [SEMATTRS_HTTP_METHOD]: httpMethod,\n [SEMATTRS_HTTP_URL]: url.href,\n [SEMATTRS_HTTP_HOST]: url.hostname,\n [\"server.host\"]: url.hostname,\n [\"server.port\"]: url.port,\n [SEMATTRS_HTTP_SCHEME]: url.protocol.replace(\":\", \"\"),\n ...accessoryAttributes({\n items: [\n {\n text: url.hostname,\n variant: \"normal\",\n },\n ],\n style: \"codepath\",\n }),\n };\n};\n\nconst createFetchResponseAttributes = (response: Response): Attributes => {\n return {\n [SEMATTRS_HTTP_STATUS_CODE]: response.status,\n \"http.status_text\": response.statusText,\n [SEMATTRS_HTTP_RESPONSE_CONTENT_LENGTH]: response.headers.get(\"content-length\") || \"0\",\n ...createAttributesFromHeaders(response.headers),\n };\n};\n\nconst createFetchRetryOptionsAttributes = (retry?: FetchRetryOptions): Attributes => {\n const byStatus = resolveDefaults(retry, \"byStatus\", defaultFetchRetryOptions.byStatus);\n const connectionError = resolveDefaults(\n retry,\n \"connectionError\",\n defaultFetchRetryOptions.connectionError\n );\n const timeout = resolveDefaults(retry, \"timeout\", defaultFetchRetryOptions.timeout);\n\n return {\n ...flattenAttributes(byStatus, \"retry.byStatus\"),\n ...flattenAttributes(connectionError, \"retry.connectionError\"),\n ...flattenAttributes(timeout, \"retry.timeout\"),\n };\n};\n\nexport const retry = {\n onThrow,\n fetch: retryFetch,\n interceptFetch,\n};\n","export * from \"./tasks\";\nexport * from \"./config\";\nexport * from \"./wait\";\nexport * from \"./cache\";\nexport { retry, type RetryOptions } from \"./retry\";\n\nimport type { Context } from \"./shared\";\nexport type { Context };\n\nexport { logger, type LogLevel } from \"@trigger.dev/core/v3\";\n"]}
1
+ {"version":3,"sources":["../../src/v3/cache.ts","../../src/v3/tracer.ts","../../package.json","../../src/v3/retry.ts","../../src/v3/shared.ts","../../src/v3/tasks.ts","../../src/v3/wait.ts","../../src/v3/usage.ts","../../src/v3/index.ts","../../src/v3/runs.ts","../../src/v3/schedules/index.ts","../../src/v3/envvars.ts"],"names":["SemanticInternalAttributes","TriggerTracer","tracer","name","version","InMemoryCache","_cache","Map","get","key","set","value","undefined","delete","createCache","store","cache","cacheKey","fn","startActiveSpan","span","setAttribute","STYLE_ICON","cacheEntry","updateName","attributes","metadata","createdTime","Date","now","SpanStatusCode","context","trace","SEMATTRS_HTTP_HOST","SEMATTRS_HTTP_METHOD","SEMATTRS_HTTP_RESPONSE_CONTENT_LENGTH","SEMATTRS_HTTP_SCHEME","SEMATTRS_HTTP_STATUS_CODE","SEMATTRS_HTTP_URL","accessoryAttributes","calculateNextRetryDelay","calculateResetAt","defaultRetryOptions","eventFilterMatches","flattenAttributes","runtime","defaultFetchRetryOptions","AsyncLocalStorage","onThrow","options","opts","attempt","maxAttempts","innerSpan","startSpan","items","text","variant","style","contextWithSpanSet","setSpan","active","result","with","end","e","Error","recordException","String","setStatus","code","ERROR","nextRetryDelay","RETRY_AT","toISOString","RETRY_COUNT","RETRY_DELAY","waitForDuration","normalizeUrlFromInput","input","URL","url","normalizeHttpMethod","init","method","toUpperCase","fetchHttpHandlerStorage","fetchWithInterceptors","handlers","getStore","getResponse","request","Request","response","fetch","FetchErrorWithSpan","constructor","originalError","MAX_ATTEMPTS","retryFetch","abortController","AbortController","timeoutId","timeoutInMs","setTimeout","abort","signal","addEventListener","doFetchRequest","clearTimeout","ok","setAttributes","createFetchResponseAttributes","nextRetry","calculateRetryDelayForResponse","resolveDefaults","retry","byStatus","type","nextRetryDate","isInFuture","getTime","waitUntil","timeout","cause","connectionError","createFetchAttributes","createFetchRetryOptionsAttributes","attemptCount","httpMethod","headers","toString","status","statusText","message","strategy","getRetryStrategyForResponse","resetAt","resetHeader","resetTimestamp","resetFormat","statusCodes","Object","keys","clonedResponse","clone","i","length","statusRange","isStatusCodeInRange","bodyFilter","body","safeJsonParse","statusCode","includes","split","map","s","trim","some","start","parseInt","endsWith","prefix","slice","statusCodePrefix","Math","floor","statusCodeString","rangePrefix","startsWith","createAttributesFromHeaders","normalizedHeaderKey","toLowerCase","forEach","json","JSON","parse","interceptFetch","run","current","push","obj","defaults","href","hostname","port","protocol","replace","SpanKind","SEMATTRS_MESSAGING_DESTINATION","SEMATTRS_MESSAGING_OPERATION","SEMATTRS_MESSAGING_SYSTEM","apiClientManager","conditionallyImportPacket","createErrorTaskError","logger","parsePacket","stringifyIO","taskCatalog","taskContext","queue","createTask","params","task","id","trigger","payload","apiClient","client","apiClientMissingError","taskMetadata","getTaskMetadata","payloadPacket","handle","triggerTask","data","concurrencyKey","test","ctx","isTest","payloadType","dataType","idempotencyKey","spanParentAsLink","kind","PRODUCER","worker","exportName","batchTrigger","batchTriggerTask","Promise","all","item","batchId","triggerAndWait","dependentAttempt","lockToVersion","getRunResult","log","runId","handleTaskRunExecutionResult","waitForTask","batchTriggerAndWait","getBatchResults","hasIdempotencyKey","results","existingResults","incompleteRuns","runs","filter","handleBatchTaskRunExecutionResult","waitForBatch","combinedItems","existingItem","find","newItem","registerTaskMetadata","packageVersion","machine","fns","cleanup","middleware","handleError","onSuccess","onFailure","onStart","someObjectStoreOutputs","outputType","INTERNAL","execution","outputPacket","output","importedPacket","error","hasBaseUrl","baseURL","hasAccessToken","accessToken","wait","for","durationInMs","calculateDurationInMs","nameForWaitOptions","until","throwIfInThePast","date","seconds","minutes","hours","days","weeks","months","years","usage","usageApi","getCurrent","sample","compute","costInCents","durationMs","total","baseCostInCents","totalCostInCents","currentCostInCents","centsPerMs","cpuTime","measure","cb","measurement","stop","ApiError","AuthenticationError","BadRequestError","ConflictError","InternalServerError","NotFoundError","PermissionDeniedError","RateLimitError","UnprocessableEntityError","replay","replayRun","cancel","cancelRun","retrieve","retrieveRun","list","listRuns","paramsOrProjectRef","listProjectRuns","TimezonesResult","zodfetch","updateTaskMetadata","triggerSource","create","createSchedule","scheduleId","retrieveSchedule","update","updateSchedule","del","deleteSchedule","deactivate","deactivateSchedule","activate","activateSchedule","listSchedules","timezones","baseUrl","excludeUtc","upload","projectRefOrParams","slug","$projectRef","$params","$slug","environment","project","ref","importEnvVars","projectRef","listEnvVars","createEnvVar","projectRefOrName","$name","retrieveEnvVar","deleteEnvVar","slugOrParams","updateEnvVar","configure","setGlobalAPIClientConfiguration"],"mappings":"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","sourcesContent":["import { SemanticInternalAttributes } from \"@trigger.dev/core/v3\";\nimport { tracer } from \"./tracer\";\n\nexport type CacheMetadata = {\n createdTime: number;\n ttl?: number | null;\n};\n\nexport type CacheEntry<Value = unknown> = {\n metadata: CacheMetadata;\n value: Value;\n};\n\nexport type Eventually<Value> = Value | null | undefined | Promise<Value | null | undefined>;\n\nexport type CacheStore<Value = any> = {\n name?: string;\n get: (key: string) => Eventually<CacheEntry<Value>>;\n set: (key: string, value: CacheEntry<Value>) => unknown | Promise<unknown>;\n delete: (key: string) => unknown | Promise<unknown>;\n};\n\nexport type CacheFunction = <Value>(\n cacheKey: string,\n fn: () => Promise<Value> | Value\n) => Promise<Value> | Value;\n\nexport class InMemoryCache<Value = any> {\n private _cache: Map<string, CacheEntry<Value>> = new Map();\n\n get(key: string): Eventually<CacheEntry<Value>> {\n return this._cache.get(key);\n }\n\n set(key: string, value: CacheEntry<Value>): unknown {\n this._cache.set(key, value);\n\n return undefined;\n }\n\n delete(key: string): unknown {\n this._cache.delete(key);\n\n return undefined;\n }\n}\n\n/**\n * Create a cache function that uses the provided store to cache values. Using InMemoryCache is safe because each task run is isolated.\n * @param store\n * @returns\n */\nexport function createCache(store: CacheStore): CacheFunction {\n return function cache<Value>(\n cacheKey: string,\n fn: () => Promise<Value> | Value\n ): Promise<Value> | Value {\n return tracer.startActiveSpan(\"cache\", async (span) => {\n span.setAttribute(\"cache.key\", cacheKey);\n span.setAttribute(SemanticInternalAttributes.STYLE_ICON, \"device-sd-card\");\n\n const cacheEntry = await store.get(cacheKey);\n\n if (cacheEntry) {\n span.updateName(`cache.hit ${cacheKey}`);\n\n return cacheEntry.value;\n }\n\n span.updateName(`cache.miss ${cacheKey}`);\n\n const value = await tracer.startActiveSpan(\n \"cache.getFreshValue\",\n async (span) => {\n return await fn();\n },\n {\n attributes: {\n \"cache.key\": cacheKey,\n [SemanticInternalAttributes.STYLE_ICON]: \"device-sd-card\",\n },\n }\n );\n\n await tracer.startActiveSpan(\n \"cache.set\",\n async (span) => {\n await store.set(cacheKey, {\n value,\n metadata: {\n createdTime: Date.now(),\n },\n });\n },\n {\n attributes: {\n \"cache.key\": cacheKey,\n [SemanticInternalAttributes.STYLE_ICON]: \"device-sd-card\",\n },\n }\n );\n\n return value;\n });\n };\n}\n","import { TriggerTracer } from \"@trigger.dev/core/v3\";\nimport * as packageJson from \"../../package.json\";\n\nexport const tracer = new TriggerTracer({ name: \"@trigger.dev/sdk\", version: packageJson.version });\n","{\n \"name\": \"@trigger.dev/sdk\",\n \"version\": \"3.0.0-beta.40\",\n \"description\": \"trigger.dev Node.JS SDK\",\n \"license\": \"MIT\",\n \"main\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"module\": \"./dist/index.mjs\",\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"files\": [\n \"dist\"\n ],\n \"exports\": {\n \".\": {\n \"import\": {\n \"types\": \"./dist/index.d.mts\",\n \"default\": \"./dist/index.mjs\"\n },\n \"require\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\"\n },\n \"./v3\": {\n \"import\": {\n \"types\": \"./dist/v3/index.d.mts\",\n \"default\": \"./dist/v3/index.mjs\"\n },\n \"require\": \"./dist/v3/index.js\",\n \"types\": \"./dist/v3/index.d.ts\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"typesVersions\": {\n \"*\": {\n \"v3\": [\n \"./dist/v3/index.d.ts\"\n ]\n }\n },\n \"scripts\": {\n \"clean\": \"rimraf dist\",\n \"build\": \"npm run clean && npm run build:tsup\",\n \"build:tsup\": \"tsup --dts-resolve\",\n \"typecheck\": \"tsc --noEmit\"\n },\n \"dependencies\": {\n \"@opentelemetry/api\": \"^1.8.0\",\n \"@opentelemetry/api-logs\": \"^0.48.0\",\n \"@opentelemetry/semantic-conventions\": \"^1.22.0\",\n \"@trigger.dev/core\": \"workspace:3.0.0-beta.40\",\n \"@trigger.dev/core-backend\": \"workspace:3.0.0-beta.40\",\n \"chalk\": \"^5.2.0\",\n \"cronstrue\": \"^2.21.0\",\n \"debug\": \"^4.3.4\",\n \"evt\": \"^2.4.13\",\n \"get-caller-file\": \"^2.0.5\",\n \"git-remote-origin-url\": \"^4.0.0\",\n \"git-repo-info\": \"^2.1.1\",\n \"slug\": \"^6.0.0\",\n \"terminal-link\": \"^3.0.0\",\n \"ulid\": \"^2.3.0\",\n \"uuid\": \"^9.0.0\",\n \"ws\": \"^8.11.0\",\n \"zod\": \"3.22.3\",\n \"msw\": \"^2.2.1\"\n },\n \"devDependencies\": {\n \"@trigger.dev/tsconfig\": \"workspace:*\",\n \"@trigger.dev/tsup\": \"workspace:*\",\n \"@types/debug\": \"^4.1.7\",\n \"@types/node\": \"18\",\n \"@types/slug\": \"^5.0.3\",\n \"@types/uuid\": \"^9.0.0\",\n \"@types/ws\": \"^8.5.3\",\n \"encoding\": \"^0.1.13\",\n \"msw\": \"^2.2.1\",\n \"rimraf\": \"^3.0.2\",\n \"tsup\": \"^8.0.1\",\n \"typed-emitter\": \"^2.1.0\",\n \"typescript\": \"^5.3.0\"\n },\n \"engines\": {\n \"node\": \">=18.0.0\"\n }\n}","import { Attributes, Span, SpanStatusCode, context, trace } from \"@opentelemetry/api\";\nimport {\n SEMATTRS_HTTP_HOST,\n SEMATTRS_HTTP_METHOD,\n SEMATTRS_HTTP_RESPONSE_CONTENT_LENGTH,\n SEMATTRS_HTTP_SCHEME,\n SEMATTRS_HTTP_STATUS_CODE,\n SEMATTRS_HTTP_URL,\n} from \"@opentelemetry/semantic-conventions\";\nimport {\n FetchRetryByStatusOptions,\n FetchRetryOptions,\n FetchRetryStrategy,\n RetryOptions,\n SemanticInternalAttributes,\n accessoryAttributes,\n calculateNextRetryDelay,\n calculateResetAt,\n defaultRetryOptions,\n eventFilterMatches,\n flattenAttributes,\n runtime,\n} from \"@trigger.dev/core/v3\";\nimport { defaultFetchRetryOptions } from \"@trigger.dev/core/v3\";\nimport type { HttpHandler } from \"msw\";\nimport { AsyncLocalStorage } from \"node:async_hooks\";\nimport { tracer } from \"./tracer\";\n\nexport type { RetryOptions };\n\nfunction onThrow<T>(\n fn: (options: { attempt: number; maxAttempts: number }) => Promise<T>,\n options: RetryOptions\n): Promise<T> {\n const opts = {\n ...defaultRetryOptions,\n ...options,\n };\n\n return tracer.startActiveSpan(\n `retry.onThrow()`,\n async (span) => {\n let attempt = 1;\n\n while (attempt <= opts.maxAttempts) {\n const innerSpan = tracer.startSpan(\"retry.fn()\", {\n attributes: {\n [SemanticInternalAttributes.STYLE_ICON]: \"function\",\n ...accessoryAttributes({\n items: [\n {\n text: `${attempt}/${opts.maxAttempts}`,\n variant: \"normal\",\n },\n ],\n style: \"codepath\",\n }),\n },\n });\n\n const contextWithSpanSet = trace.setSpan(context.active(), innerSpan);\n\n try {\n const result = await context.with(contextWithSpanSet, async () => {\n return fn({ attempt, maxAttempts: opts.maxAttempts });\n });\n\n innerSpan.end();\n\n return result;\n } catch (e) {\n if (e instanceof Error || typeof e === \"string\") {\n innerSpan.recordException(e);\n } else {\n innerSpan.recordException(String(e));\n }\n\n innerSpan.setStatus({ code: SpanStatusCode.ERROR });\n\n const nextRetryDelay = calculateNextRetryDelay(opts, attempt);\n\n if (!nextRetryDelay) {\n innerSpan.end();\n\n throw e;\n }\n\n innerSpan.setAttribute(\n SemanticInternalAttributes.RETRY_AT,\n new Date(Date.now() + nextRetryDelay).toISOString()\n );\n innerSpan.setAttribute(SemanticInternalAttributes.RETRY_COUNT, attempt);\n innerSpan.setAttribute(SemanticInternalAttributes.RETRY_DELAY, `${nextRetryDelay}ms`);\n innerSpan.end();\n\n await runtime.waitForDuration(nextRetryDelay);\n } finally {\n attempt++;\n }\n }\n\n throw new Error(\"Max attempts reached\");\n },\n {\n attributes: {\n [SemanticInternalAttributes.STYLE_ICON]: \"arrow-capsule\",\n },\n }\n );\n}\n\nexport interface RetryFetchRequestInit extends RequestInit {\n retry?: FetchRetryOptions;\n timeoutInMs?: number;\n}\n\nconst normalizeUrlFromInput = (input: RequestInfo | URL | string): URL => {\n if (typeof input === \"string\") {\n return new URL(input);\n }\n\n if (input instanceof URL) {\n return input;\n }\n\n return new URL(input.url);\n};\n\nconst normalizeHttpMethod = (input: RequestInfo | URL | string, init?: RequestInit): string => {\n if (typeof input === \"string\" || input instanceof URL) {\n return (init?.method || \"GET\").toUpperCase();\n }\n\n return (input.method ?? init?.method ?? \"GET\").toUpperCase();\n};\n\nconst fetchHttpHandlerStorage = new AsyncLocalStorage<Array<HttpHandler>>();\n\nconst fetchWithInterceptors = async (\n input: RequestInfo | URL,\n init?: RequestInit\n): Promise<Response> => {\n const handlers = fetchHttpHandlerStorage.getStore();\n\n if (handlers) {\n try {\n const { getResponse } = await import(\"msw\");\n\n const request = new Request(input, init);\n\n const response = await getResponse(handlers, request);\n\n if (response) {\n return response;\n }\n } catch (e) {\n // Do nothing\n return fetch(input, init);\n }\n }\n\n return fetch(input, init);\n};\n\nclass FetchErrorWithSpan extends Error {\n constructor(\n public readonly originalError: unknown,\n public readonly span: Span\n ) {\n super(\"Fetch error\");\n }\n}\n\nconst MAX_ATTEMPTS = 10;\n\nasync function retryFetch(\n input: RequestInfo | URL,\n init?: RetryFetchRequestInit | undefined\n): Promise<Response> {\n return tracer.startActiveSpan(\n \"retry.fetch()\",\n async (span) => {\n let attempt = 1;\n\n while (true) {\n try {\n const abortController = new AbortController();\n\n const timeoutId = init?.timeoutInMs\n ? setTimeout(\n () => {\n abortController.abort();\n },\n init?.timeoutInMs\n )\n : undefined;\n\n init?.signal?.addEventListener(\"abort\", () => {\n abortController.abort();\n });\n\n const [response, span] = await doFetchRequest(\n input,\n { ...(init ?? {}), signal: abortController.signal },\n attempt\n );\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n\n if (response.ok) {\n span.setAttributes(createFetchResponseAttributes(response));\n\n span.end();\n\n return response;\n }\n\n const nextRetry = await calculateRetryDelayForResponse(\n resolveDefaults(init?.retry, \"byStatus\", defaultFetchRetryOptions.byStatus),\n response,\n attempt\n );\n\n if (!nextRetry) {\n span.setAttributes(createFetchResponseAttributes(response));\n\n span.end();\n\n return response;\n }\n\n if (attempt >= MAX_ATTEMPTS) {\n span.setAttributes(createFetchResponseAttributes(response));\n\n span.end();\n\n return response;\n }\n\n if (nextRetry.type === \"delay\") {\n span.setAttribute(\n SemanticInternalAttributes.RETRY_AT,\n new Date(Date.now() + nextRetry.value).toISOString()\n );\n span.setAttribute(SemanticInternalAttributes.RETRY_COUNT, attempt);\n span.setAttribute(SemanticInternalAttributes.RETRY_DELAY, `${nextRetry.value}ms`);\n\n span.end();\n\n await runtime.waitForDuration(nextRetry.value);\n } else {\n const now = Date.now();\n const nextRetryDate = new Date(nextRetry.value);\n const isInFuture = nextRetryDate.getTime() > now;\n\n span.setAttribute(\n SemanticInternalAttributes.RETRY_AT,\n new Date(nextRetry.value).toISOString()\n );\n span.setAttribute(SemanticInternalAttributes.RETRY_COUNT, attempt);\n\n if (isInFuture) {\n span.setAttribute(\n SemanticInternalAttributes.RETRY_DELAY,\n `${nextRetry.value - now}ms`\n );\n }\n\n span.end();\n\n await runtime.waitUntil(new Date(nextRetry.value));\n }\n } catch (e) {\n if (e instanceof FetchErrorWithSpan && e.originalError instanceof Error) {\n if (e.originalError.name === \"AbortError\") {\n const nextRetryDelay = calculateNextRetryDelay(\n resolveDefaults(init?.retry, \"timeout\", defaultFetchRetryOptions.timeout),\n attempt\n );\n\n if (!nextRetryDelay) {\n e.span.end();\n throw e;\n }\n\n if (attempt >= MAX_ATTEMPTS) {\n e.span.end();\n throw e;\n }\n\n e.span.setAttribute(\n SemanticInternalAttributes.RETRY_AT,\n new Date(Date.now() + nextRetryDelay).toISOString()\n );\n e.span.setAttribute(SemanticInternalAttributes.RETRY_COUNT, attempt);\n e.span.setAttribute(SemanticInternalAttributes.RETRY_DELAY, `${nextRetryDelay}ms`);\n\n e.span.end();\n\n await runtime.waitForDuration(nextRetryDelay);\n\n continue; // Move to the next attempt\n } else if (\n e.originalError.name === \"TypeError\" &&\n \"cause\" in e.originalError &&\n e.originalError.cause instanceof Error\n ) {\n const nextRetryDelay = calculateNextRetryDelay(\n resolveDefaults(\n init?.retry,\n \"connectionError\",\n defaultFetchRetryOptions.connectionError\n ),\n attempt\n );\n\n if (!nextRetryDelay) {\n e.span.end();\n throw e;\n }\n\n if (attempt >= MAX_ATTEMPTS) {\n e.span.end();\n throw e;\n }\n\n e.span.setAttribute(\n SemanticInternalAttributes.RETRY_AT,\n new Date(Date.now() + nextRetryDelay).toISOString()\n );\n e.span.setAttribute(SemanticInternalAttributes.RETRY_COUNT, attempt);\n e.span.setAttribute(SemanticInternalAttributes.RETRY_DELAY, `${nextRetryDelay}ms`);\n\n e.span.end();\n\n await runtime.waitForDuration(nextRetryDelay);\n\n continue; // Move to the next attempt\n }\n }\n\n if (e instanceof FetchErrorWithSpan) {\n e.span.end();\n }\n\n throw e;\n } finally {\n attempt++;\n }\n }\n },\n {\n attributes: {\n [SemanticInternalAttributes.STYLE_ICON]: \"arrow-capsule\",\n ...createFetchAttributes(input, init),\n ...createFetchRetryOptionsAttributes(init?.retry),\n },\n }\n );\n}\n\nconst doFetchRequest = async (\n input: RequestInfo | URL | string,\n init?: RequestInit,\n attemptCount: number = 0\n): Promise<[Response, Span]> => {\n const httpMethod = normalizeHttpMethod(input, init);\n\n const span = tracer.startSpan(`HTTP ${httpMethod}`, {\n attributes: {\n [SemanticInternalAttributes.STYLE_ICON]: \"world\",\n ...(attemptCount > 1 ? { [\"http.request.resend_count\"]: attemptCount - 1 } : {}),\n ...createFetchAttributes(input, init),\n },\n });\n\n try {\n const response = await fetchWithInterceptors(input, {\n ...init,\n headers: {\n ...init?.headers,\n \"x-retry-count\": attemptCount.toString(),\n },\n });\n\n span.setAttributes(createFetchResponseAttributes(response));\n\n if (!response.ok) {\n span.recordException(`${response.status}: ${response.statusText}`);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: `${response.status}: ${response.statusText}`,\n });\n }\n\n return [response, span];\n } catch (e) {\n if (typeof e === \"string\" || e instanceof Error) {\n span.recordException(e);\n }\n\n span.setStatus({ code: SpanStatusCode.ERROR });\n span.setAttribute(SEMATTRS_HTTP_STATUS_CODE, 0);\n span.setAttribute(\"http.status_text\", \"This operation was aborted.\");\n\n throw new FetchErrorWithSpan(e, span);\n }\n};\n\nconst calculateRetryDelayForResponse = async (\n retry: FetchRetryByStatusOptions | undefined,\n response: Response,\n attemptCount: number\n): Promise<{ type: \"delay\"; value: number } | { type: \"timestamp\"; value: number } | undefined> => {\n if (!retry) {\n return;\n }\n\n const strategy = await getRetryStrategyForResponse(response, retry);\n\n if (!strategy) {\n return;\n }\n\n switch (strategy.strategy) {\n case \"backoff\": {\n const value = calculateNextRetryDelay({ ...defaultRetryOptions, ...strategy }, attemptCount);\n\n if (value) {\n return { type: \"delay\", value };\n }\n\n break;\n }\n case \"headers\": {\n const resetAt = response.headers.get(strategy.resetHeader);\n\n if (typeof resetAt === \"string\") {\n const resetTimestamp = calculateResetAt(\n resetAt,\n strategy.resetFormat ?? \"unix_timestamp_in_ms\"\n );\n\n if (resetTimestamp) {\n return { type: \"timestamp\", value: resetTimestamp };\n }\n }\n\n break;\n }\n }\n};\n\nconst getRetryStrategyForResponse = async (\n response: Response,\n retry: FetchRetryByStatusOptions\n): Promise<FetchRetryStrategy | undefined> => {\n const statusCodes = Object.keys(retry);\n const clonedResponse = response.clone();\n\n for (let i = 0; i < statusCodes.length; i++) {\n const statusRange = statusCodes[i];\n const strategy = retry[statusRange];\n\n if (isStatusCodeInRange(response.status, statusRange)) {\n if (strategy.bodyFilter) {\n const body = safeJsonParse(await clonedResponse.text());\n\n if (!body) {\n continue;\n }\n\n if (eventFilterMatches(body, strategy.bodyFilter)) {\n return strategy;\n } else {\n continue;\n }\n }\n\n return strategy;\n }\n }\n};\n\n/**\n * Checks if a given status code falls within a given range.\n * The range can be a single status code (e.g. \"200\"),\n * a range of status codes (e.g. \"500-599\"),\n * a range of status codes with a wildcard (e.g. \"4xx\" for any 4xx status code),\n * or a list of status codes separated by commas (e.g. \"401,403,404,409-412,5xx\").\n * Returns `true` if the status code falls within the range, and `false` otherwise.\n */\nconst isStatusCodeInRange = (statusCode: number, statusRange: string): boolean => {\n if (statusRange === \"all\") {\n return true;\n }\n\n if (statusRange.includes(\",\")) {\n const statusCodes = statusRange.split(\",\").map((s) => s.trim());\n\n return statusCodes.some((s) => isStatusCodeInRange(statusCode, s));\n }\n\n const [start, end] = statusRange.split(\"-\");\n\n if (end) {\n return statusCode >= parseInt(start, 10) && statusCode <= parseInt(end, 10);\n }\n\n if (start.endsWith(\"xx\")) {\n const prefix = start.slice(0, -2);\n const statusCodePrefix = Math.floor(statusCode / 100).toString();\n return statusCodePrefix === prefix;\n }\n\n const statusCodeString = statusCode.toString();\n const rangePrefix = start.slice(0, -1);\n\n if (start.endsWith(\"x\") && statusCodeString.startsWith(rangePrefix)) {\n return true;\n }\n\n return statusCode === parseInt(start, 10);\n};\n\nconst createAttributesFromHeaders = (headers: Headers): Attributes => {\n const attributes: Attributes = {};\n\n const normalizedHeaderKey = (key: string) => {\n return key.toLowerCase();\n };\n\n headers.forEach((value, key) => {\n attributes[`http.response.header.${normalizedHeaderKey(key)}`] = value;\n });\n\n return attributes;\n};\n\nconst safeJsonParse = (json: string): unknown => {\n try {\n return JSON.parse(json);\n } catch (e) {\n return null;\n }\n};\n\nconst interceptFetch = (...handlers: Array<HttpHandler>) => {\n return {\n run: async <T>(fn: (...args: any[]) => Promise<T>): Promise<T> => {\n const current = fetchHttpHandlerStorage.getStore();\n\n if (current) {\n current.push(...handlers);\n return fn();\n } else {\n return fetchHttpHandlerStorage.run(handlers, fn);\n }\n },\n };\n};\n\n// This function will resolve the defaults of a property within an options object.\n// If the options object is undefined, it will return the defaults for that property (passed in as the 3rd arg).\n// if the options object is defined, and the property exists, then it will return the defaults if the value of the property is undefined or null\nconst resolveDefaults = <\n TObject extends Record<string, unknown>,\n K extends keyof TObject,\n TValue extends TObject[K],\n>(\n obj: TObject | undefined,\n key: K,\n defaults: TValue\n): TValue => {\n if (!obj) {\n return defaults;\n }\n\n if (obj[key] === undefined || obj[key] === null) {\n return defaults;\n }\n\n return obj[key] as TValue;\n};\n\nconst createFetchAttributes = (\n input: RequestInfo | URL,\n init?: RetryFetchRequestInit | undefined\n): Attributes => {\n const url = normalizeUrlFromInput(input);\n const httpMethod = normalizeHttpMethod(input, init);\n\n return {\n [SEMATTRS_HTTP_METHOD]: httpMethod,\n [SEMATTRS_HTTP_URL]: url.href,\n [SEMATTRS_HTTP_HOST]: url.hostname,\n [\"server.host\"]: url.hostname,\n [\"server.port\"]: url.port,\n [SEMATTRS_HTTP_SCHEME]: url.protocol.replace(\":\", \"\"),\n ...accessoryAttributes({\n items: [\n {\n text: url.hostname,\n variant: \"normal\",\n },\n ],\n style: \"codepath\",\n }),\n };\n};\n\nconst createFetchResponseAttributes = (response: Response): Attributes => {\n return {\n [SEMATTRS_HTTP_STATUS_CODE]: response.status,\n \"http.status_text\": response.statusText,\n [SEMATTRS_HTTP_RESPONSE_CONTENT_LENGTH]: response.headers.get(\"content-length\") || \"0\",\n ...createAttributesFromHeaders(response.headers),\n };\n};\n\nconst createFetchRetryOptionsAttributes = (retry?: FetchRetryOptions): Attributes => {\n const byStatus = resolveDefaults(retry, \"byStatus\", defaultFetchRetryOptions.byStatus);\n const connectionError = resolveDefaults(\n retry,\n \"connectionError\",\n defaultFetchRetryOptions.connectionError\n );\n const timeout = resolveDefaults(retry, \"timeout\", defaultFetchRetryOptions.timeout);\n\n return {\n ...flattenAttributes(byStatus, \"retry.byStatus\"),\n ...flattenAttributes(connectionError, \"retry.connectionError\"),\n ...flattenAttributes(timeout, \"retry.timeout\"),\n };\n};\n\nexport const retry = {\n onThrow,\n fetch: retryFetch,\n interceptFetch,\n};\n","import { SpanKind } from \"@opentelemetry/api\";\nimport {\n SEMATTRS_MESSAGING_DESTINATION,\n SEMATTRS_MESSAGING_OPERATION,\n SEMATTRS_MESSAGING_SYSTEM,\n} from \"@opentelemetry/semantic-conventions\";\nimport {\n BatchTaskRunExecutionResult,\n FailureFnParams,\n HandleErrorFnParams,\n HandleErrorResult,\n InitFnParams,\n InitOutput,\n MachineCpu,\n MachineMemory,\n MiddlewareFnParams,\n QueueOptions,\n RetryOptions,\n RunFnParams,\n SemanticInternalAttributes,\n StartFnParams,\n SuccessFnParams,\n TaskRunContext,\n TaskRunExecutionResult,\n accessoryAttributes,\n apiClientManager,\n conditionallyImportPacket,\n createErrorTaskError,\n defaultRetryOptions,\n logger,\n parsePacket,\n runtime,\n stringifyIO,\n taskCatalog,\n taskContext,\n} from \"@trigger.dev/core/v3\";\nimport * as packageJson from \"../../package.json\";\nimport { tracer } from \"./tracer\";\n\nexport type Context = TaskRunContext;\n\ntype RequireOne<T, K extends keyof T> = {\n [X in Exclude<keyof T, K>]?: T[X];\n} & {\n [P in K]-?: T[P];\n};\n\nexport type Queue = RequireOne<QueueOptions, \"name\">;\n\nexport function queue(options: { name: string } & QueueOptions): Queue {\n return options;\n}\n\nexport type TaskOptions<\n TPayload = void,\n TOutput = unknown,\n TInitOutput extends InitOutput = any,\n> = {\n /** An id for your task. This must be unique inside your project and not change between versions. */\n id: string;\n /** The retry settings when an uncaught error is thrown.\n *\n * If omitted it will use the values in your `trigger.config.ts` file.\n * \n * @example\n * \n * ```\n * export const taskWithRetries = task({\n id: \"task-with-retries\",\n retry: {\n maxAttempts: 10,\n factor: 1.8,\n minTimeoutInMs: 500,\n maxTimeoutInMs: 30_000,\n randomize: false,\n },\n run: async ({ payload, ctx }) => {\n //...\n },\n });\n * ```\n * */\n retry?: RetryOptions;\n /** Used to configure what should happen when more than one run is triggered at the same time.\n * \n * @example \n * one at a time execution\n * \n * ```ts\n * export const oneAtATime = task({\n id: \"one-at-a-time\",\n queue: {\n concurrencyLimit: 1,\n },\n run: async ({ payload, ctx }) => {\n //...\n },\n });\n * ```\n */\n queue?: QueueOptions;\n /** Configure the spec of the machine you want your task to run on.\n * \n * @example\n * \n * ```ts\n * export const heavyTask = task({\n id: \"heavy-task\",\n machine: {\n cpu: 2,\n memory: 4,\n },\n run: async ({ payload, ctx }) => {\n //...\n },\n });\n * ```\n */\n machine?: {\n /** vCPUs. The default is 0.5.\n *\n * Possible values:\n * - 0.25\n * - 0.5\n * - 1\n * - 2\n * - 4\n * @deprecated use preset instead\n */\n cpu?: MachineCpu;\n /** In GBs of RAM. The default is 1.\n *\n * Possible values:\n * - 0.25\n * - 0.5\n * - 1\n * - 2\n * - 4\n * - 8\n * * @deprecated use preset instead\n */\n memory?: MachineMemory;\n\n /** Preset to use for the machine. Defaults to small-1x */\n preset?:\n | \"micro\"\n | \"small-1x\"\n | \"small-2x\"\n | \"medium-1x\"\n | \"medium-2x\"\n | \"large-1x\"\n | \"large-2x\";\n };\n /** This gets called when a task is triggered. It's where you put the code you want to execute.\n *\n * @param payload - The payload that is passed to your task when it's triggered. This must be JSON serializable.\n * @param params - Metadata about the run.\n */\n run: (payload: TPayload, params: RunFnParams<TInitOutput>) => Promise<TOutput>;\n\n /**\n * init is called before the run function is called. It's useful for setting up any global state.\n */\n init?: (payload: TPayload, params: InitFnParams) => Promise<TInitOutput>;\n\n /**\n * cleanup is called after the run function has completed.\n */\n cleanup?: (payload: TPayload, params: RunFnParams<TInitOutput>) => Promise<void>;\n\n /**\n * handleError is called when the run function throws an error. It can be used to modify the error or return new retry options.\n */\n handleError?: (\n payload: TPayload,\n error: unknown,\n params: HandleErrorFnParams<TInitOutput>\n ) => HandleErrorResult;\n\n /**\n * middleware allows you to run code \"around\" the run function. This can be useful for logging, metrics, or other cross-cutting concerns.\n *\n * When writing middleware, you should always call `next()` to continue the execution of the task:\n *\n * ```ts\n * export const middlewareTask = task({\n * id: \"middleware-task\",\n * middleware: async (payload, { ctx, next }) => {\n * console.log(\"Before run\");\n * await next();\n * console.log(\"After run\");\n * },\n * run: async (payload, { ctx }) => {}\n * });\n * ```\n */\n middleware?: (payload: TPayload, params: MiddlewareFnParams) => Promise<void>;\n\n /**\n * onStart is called the first time a task is executed in a run (not before every retry)\n */\n onStart?: (payload: TPayload, params: StartFnParams) => Promise<void>;\n\n /**\n * onSuccess is called after the run function has successfully completed.\n */\n onSuccess?: (\n payload: TPayload,\n output: TOutput,\n params: SuccessFnParams<TInitOutput>\n ) => Promise<void>;\n\n /**\n * onFailure is called after a task run has failed (meaning the run function threw an error and won't be retried anymore)\n */\n onFailure?: (\n payload: TPayload,\n error: unknown,\n params: FailureFnParams<TInitOutput>\n ) => Promise<void>;\n};\n\ntype InvokeHandle = {\n id: string;\n};\n\ntype InvokeBatchHandle = {\n batchId: string;\n runs: string[];\n};\n\nexport type TaskRunResult<TOutput = any> =\n | {\n ok: true;\n id: string;\n output: TOutput;\n }\n | {\n ok: false;\n id: string;\n error: unknown;\n };\n\nexport type BatchResult<TOutput = any> = {\n id: string;\n runs: TaskRunResult<TOutput>[];\n};\n\ntype BatchItem<TInput> = TInput extends void\n ? { payload?: TInput; options?: TaskRunOptions }\n : { payload: TInput; options?: TaskRunOptions };\n\nexport interface Task<TInput = void, TOutput = any> {\n /**\n * The id of the task.\n */\n id: string;\n /**\n * Trigger a task with the given payload, and continue without waiting for the result. If you want to wait for the result, use `triggerAndWait`. Returns the id of the triggered task run.\n * @param payload\n * @param options\n * @returns InvokeHandle\n * - `id` - The id of the triggered task run.\n */\n trigger: (payload: TInput, options?: TaskRunOptions) => Promise<InvokeHandle>;\n\n /**\n * Batch trigger multiple task runs with the given payloads, and continue without waiting for the results. If you want to wait for the results, use `batchTriggerAndWait`. Returns the id of the triggered batch.\n * @param items\n * @returns InvokeBatchHandle\n * - `batchId` - The id of the triggered batch.\n * - `runs` - The ids of the triggered task runs.\n */\n batchTrigger: (items: Array<BatchItem<TInput>>) => Promise<InvokeBatchHandle>;\n\n /**\n * Trigger a task with the given payload, and wait for the result. Returns the result of the task run\n * @param payload\n * @param options - Options for the task run\n * @returns TaskRunResult\n * @example\n * ```\n * const result = await task.triggerAndWait({ foo: \"bar\" });\n *\n * if (result.ok) {\n * console.log(result.output);\n * } else {\n * console.error(result.error);\n * }\n * ```\n */\n triggerAndWait: (payload: TInput, options?: TaskRunOptions) => Promise<TaskRunResult<TOutput>>;\n\n /**\n * Batch trigger multiple task runs with the given payloads, and wait for the results. Returns the results of the task runs.\n * @param items\n * @returns BatchResult\n * @example\n * ```\n * const result = await task.batchTriggerAndWait([\n * { payload: { foo: \"bar\" } },\n * { payload: { foo: \"baz\" } },\n * ]);\n *\n * for (const run of result.runs) {\n * if (run.ok) {\n * console.log(run.output);\n * } else {\n * console.error(run.error);\n * }\n * }\n * ```\n */\n batchTriggerAndWait: (items: Array<BatchItem<TInput>>) => Promise<BatchResult<TOutput>>;\n}\n\nexport type TaskPayload<TTask extends Task> = TTask extends Task<infer TInput, any>\n ? TInput\n : never;\n\nexport type TaskOutput<TTask extends Task> = TTask extends Task<any, infer TOutput>\n ? TOutput\n : never;\n\ntype TaskRunOptions = {\n idempotencyKey?: string;\n maxAttempts?: number;\n startAt?: Date;\n startAfter?: number;\n queue?: TaskRunConcurrencyOptions;\n concurrencyKey?: string;\n};\n\ntype TaskRunConcurrencyOptions = Queue;\n\nexport type Prettify<T> = {\n [K in keyof T]: T[K];\n} & {};\n\nexport type DynamicBaseOptions = {\n id: string;\n};\n\nexport function createTask<TInput = void, TOutput = unknown, TInitOutput extends InitOutput = any>(\n params: TaskOptions<TInput, TOutput, TInitOutput>\n): Task<TInput, TOutput> {\n const task: Task<TInput, TOutput> = {\n id: params.id,\n trigger: async (payload, options) => {\n const apiClient = apiClientManager.client;\n\n if (!apiClient) {\n throw apiClientMissingError();\n }\n\n const taskMetadata = taskCatalog.getTaskMetadata(params.id);\n\n const payloadPacket = await stringifyIO(payload);\n\n const handle = await tracer.startActiveSpan(\n taskMetadata ? \"Trigger\" : `${params.id} trigger()`,\n async (span) => {\n const response = await apiClient.triggerTask(\n params.id,\n {\n payload: payloadPacket.data,\n options: {\n queue: options?.queue ?? params.queue,\n concurrencyKey: options?.concurrencyKey,\n test: taskContext.ctx?.run.isTest,\n payloadType: payloadPacket.dataType,\n idempotencyKey: options?.idempotencyKey,\n },\n },\n { spanParentAsLink: true }\n );\n\n span.setAttribute(\"messaging.message.id\", response.id);\n\n return response;\n },\n {\n kind: SpanKind.PRODUCER,\n attributes: {\n [SEMATTRS_MESSAGING_OPERATION]: \"publish\",\n [SemanticInternalAttributes.STYLE_ICON]: \"trigger\",\n [\"messaging.client_id\"]: taskContext.worker?.id,\n [SEMATTRS_MESSAGING_DESTINATION]: params.queue?.name ?? params.id,\n [SEMATTRS_MESSAGING_SYSTEM]: \"trigger.dev\",\n ...(taskMetadata\n ? accessoryAttributes({\n items: [\n {\n text: `${taskMetadata.exportName}.trigger()`,\n variant: \"normal\",\n },\n ],\n style: \"codepath\",\n })\n : {}),\n },\n }\n );\n\n return handle;\n },\n batchTrigger: async (items) => {\n const apiClient = apiClientManager.client;\n\n if (!apiClient) {\n throw apiClientMissingError();\n }\n\n const taskMetadata = taskCatalog.getTaskMetadata(params.id);\n\n const response = await tracer.startActiveSpan(\n taskMetadata ? \"Batch trigger\" : `${params.id} batchTrigger()`,\n async (span) => {\n const response = await apiClient.batchTriggerTask(\n params.id,\n {\n items: await Promise.all(\n items.map(async (item) => {\n const payloadPacket = await stringifyIO(item.payload);\n\n return {\n payload: payloadPacket.data,\n options: {\n queue: item.options?.queue ?? params.queue,\n concurrencyKey: item.options?.concurrencyKey,\n test: taskContext.ctx?.run.isTest,\n payloadType: payloadPacket.dataType,\n idempotencyKey: item.options?.idempotencyKey,\n },\n };\n })\n ),\n },\n { spanParentAsLink: true }\n );\n\n span.setAttribute(\"messaging.message.id\", response.batchId);\n\n return response;\n },\n {\n kind: SpanKind.PRODUCER,\n attributes: {\n [SEMATTRS_MESSAGING_OPERATION]: \"publish\",\n [\"messaging.batch.message_count\"]: items.length,\n [\"messaging.client_id\"]: taskContext.worker?.id,\n [SEMATTRS_MESSAGING_DESTINATION]: params.queue?.name ?? params.id,\n [SEMATTRS_MESSAGING_SYSTEM]: \"trigger.dev\",\n [SemanticInternalAttributes.STYLE_ICON]: \"trigger\",\n ...(taskMetadata\n ? accessoryAttributes({\n items: [\n {\n text: `${taskMetadata.exportName}.batchTrigger()`,\n variant: \"normal\",\n },\n ],\n style: \"codepath\",\n })\n : {}),\n },\n }\n );\n\n return response;\n },\n triggerAndWait: async (payload, options) => {\n const ctx = taskContext.ctx;\n\n if (!ctx) {\n throw new Error(\"triggerAndWait can only be used from inside a task.run()\");\n }\n\n const apiClient = apiClientManager.client;\n\n if (!apiClient) {\n throw apiClientMissingError();\n }\n\n const taskMetadata = taskCatalog.getTaskMetadata(params.id);\n\n const payloadPacket = await stringifyIO(payload);\n\n return await tracer.startActiveSpan(\n taskMetadata ? \"Trigger\" : `${params.id} triggerAndWait()`,\n async (span) => {\n const response = await apiClient.triggerTask(params.id, {\n payload: payloadPacket.data,\n options: {\n dependentAttempt: ctx.attempt.id,\n lockToVersion: taskContext.worker?.version, // Lock to current version because we're waiting for it to finish\n queue: options?.queue ?? params.queue,\n concurrencyKey: options?.concurrencyKey,\n test: taskContext.ctx?.run.isTest,\n payloadType: payloadPacket.dataType,\n idempotencyKey: options?.idempotencyKey,\n },\n });\n\n span.setAttribute(\"messaging.message.id\", response.id);\n\n if (options?.idempotencyKey) {\n // If an idempotency key is provided, we can check if the result is already available\n const result = await apiClient.getRunResult(response.id);\n\n if (result) {\n logger.log(\n `Result reused from previous task run with idempotency key '${options.idempotencyKey}'.`,\n {\n runId: response.id,\n idempotencyKey: options.idempotencyKey,\n }\n );\n\n return await handleTaskRunExecutionResult<TOutput>(result);\n }\n }\n\n const result = await runtime.waitForTask({\n id: response.id,\n ctx,\n });\n\n return await handleTaskRunExecutionResult<TOutput>(result);\n },\n {\n kind: SpanKind.PRODUCER,\n attributes: {\n [SemanticInternalAttributes.STYLE_ICON]: \"trigger\",\n [SEMATTRS_MESSAGING_OPERATION]: \"publish\",\n [\"messaging.client_id\"]: taskContext.worker?.id,\n [SEMATTRS_MESSAGING_DESTINATION]: params.queue?.name ?? params.id,\n [SEMATTRS_MESSAGING_SYSTEM]: \"trigger.dev\",\n ...(taskMetadata\n ? accessoryAttributes({\n items: [\n {\n text: `${taskMetadata.exportName}.triggerAndWait()`,\n variant: \"normal\",\n },\n ],\n style: \"codepath\",\n })\n : {}),\n },\n }\n );\n },\n batchTriggerAndWait: async (items) => {\n const ctx = taskContext.ctx;\n\n if (!ctx) {\n throw new Error(\"batchTriggerAndWait can only be used from inside a task.run()\");\n }\n\n const apiClient = apiClientManager.client;\n\n if (!apiClient) {\n throw apiClientMissingError();\n }\n\n const taskMetadata = taskCatalog.getTaskMetadata(params.id);\n\n return await tracer.startActiveSpan(\n taskMetadata ? \"Batch trigger\" : `${params.id} batchTriggerAndWait()`,\n async (span) => {\n const response = await apiClient.batchTriggerTask(params.id, {\n items: await Promise.all(\n items.map(async (item) => {\n const payloadPacket = await stringifyIO(item.payload);\n\n return {\n payload: payloadPacket.data,\n options: {\n lockToVersion: taskContext.worker?.version,\n queue: item.options?.queue ?? params.queue,\n concurrencyKey: item.options?.concurrencyKey,\n test: taskContext.ctx?.run.isTest,\n payloadType: payloadPacket.dataType,\n idempotencyKey: item.options?.idempotencyKey,\n },\n };\n })\n ),\n dependentAttempt: ctx.attempt.id,\n });\n\n span.setAttribute(\"messaging.message.id\", response.batchId);\n\n const getBatchResults = async (): Promise<BatchTaskRunExecutionResult> => {\n // We need to check if the results are already available, but only if any of the items options has an idempotency key\n const hasIdempotencyKey = items.some((item) => item.options?.idempotencyKey);\n\n if (hasIdempotencyKey) {\n const results = await apiClient.getBatchResults(response.batchId);\n\n if (results) {\n return results;\n }\n }\n\n return {\n id: response.batchId,\n items: [],\n };\n };\n\n const existingResults = await getBatchResults();\n\n const incompleteRuns = response.runs.filter(\n (runId) => !existingResults.items.some((item) => item.id === runId)\n );\n\n if (incompleteRuns.length === 0) {\n logger.log(\n `Results reused from previous task runs because of the provided idempotency keys.`\n );\n\n // All runs are already completed\n const runs = await handleBatchTaskRunExecutionResult<TOutput>(existingResults.items);\n\n return {\n id: existingResults.id,\n runs,\n };\n }\n\n const result = await runtime.waitForBatch({\n id: response.batchId,\n runs: incompleteRuns,\n ctx,\n });\n\n // Combine the already completed runs with the newly completed runs, ordered by the original order\n const combinedItems: BatchTaskRunExecutionResult[\"items\"] = [];\n\n for (const runId of response.runs) {\n const existingItem = existingResults.items.find((item) => item.id === runId);\n\n if (existingItem) {\n combinedItems.push(existingItem);\n } else {\n const newItem = result.items.find((item) => item.id === runId);\n\n if (newItem) {\n combinedItems.push(newItem);\n }\n }\n }\n\n const runs = await handleBatchTaskRunExecutionResult<TOutput>(combinedItems);\n\n return {\n id: result.id,\n runs,\n };\n },\n {\n kind: SpanKind.PRODUCER,\n attributes: {\n [SEMATTRS_MESSAGING_OPERATION]: \"publish\",\n [\"messaging.batch.message_count\"]: items.length,\n [\"messaging.client_id\"]: taskContext.worker?.id,\n [SEMATTRS_MESSAGING_DESTINATION]: params.queue?.name ?? params.id,\n [SEMATTRS_MESSAGING_SYSTEM]: \"trigger.dev\",\n [SemanticInternalAttributes.STYLE_ICON]: \"trigger\",\n ...(taskMetadata\n ? accessoryAttributes({\n items: [\n {\n text: `${taskMetadata.exportName}.batchTriggerAndWait()`,\n variant: \"normal\",\n },\n ],\n style: \"codepath\",\n })\n : {}),\n },\n }\n );\n },\n };\n\n taskCatalog.registerTaskMetadata({\n id: params.id,\n packageVersion: packageJson.version,\n queue: params.queue,\n retry: params.retry ? { ...defaultRetryOptions, ...params.retry } : undefined,\n machine: params.machine,\n fns: {\n run: params.run,\n init: params.init,\n cleanup: params.cleanup,\n middleware: params.middleware,\n handleError: params.handleError,\n onSuccess: params.onSuccess,\n onFailure: params.onFailure,\n onStart: params.onStart,\n },\n });\n\n return task;\n}\n\nasync function handleBatchTaskRunExecutionResult<TOutput>(\n items: Array<TaskRunExecutionResult>\n): Promise<Array<TaskRunResult<TOutput>>> {\n const someObjectStoreOutputs = items.some(\n (item) => item.ok && item.outputType === \"application/store\"\n );\n\n if (!someObjectStoreOutputs) {\n const results = await Promise.all(\n items.map(async (item) => {\n return await handleTaskRunExecutionResult<TOutput>(item);\n })\n );\n\n return results;\n }\n\n return await tracer.startActiveSpan(\n \"store.downloadPayloads\",\n async (span) => {\n const results = await Promise.all(\n items.map(async (item) => {\n return await handleTaskRunExecutionResult<TOutput>(item);\n })\n );\n\n return results;\n },\n {\n kind: SpanKind.INTERNAL,\n [SemanticInternalAttributes.STYLE_ICON]: \"cloud-download\",\n }\n );\n}\n\nasync function handleTaskRunExecutionResult<TOutput>(\n execution: TaskRunExecutionResult\n): Promise<TaskRunResult<TOutput>> {\n if (execution.ok) {\n const outputPacket = { data: execution.output, dataType: execution.outputType };\n const importedPacket = await conditionallyImportPacket(outputPacket, tracer);\n\n return {\n ok: true,\n id: execution.id,\n output: await parsePacket(importedPacket),\n };\n } else {\n return {\n ok: false,\n id: execution.id,\n error: createErrorTaskError(execution.error),\n };\n }\n}\n\nexport function apiClientMissingError() {\n const hasBaseUrl = !!apiClientManager.baseURL;\n const hasAccessToken = !!apiClientManager.accessToken;\n if (!hasBaseUrl && !hasAccessToken) {\n return `You need to set the TRIGGER_API_URL and TRIGGER_SECRET_KEY environment variables.`;\n } else if (!hasBaseUrl) {\n return `You need to set the TRIGGER_API_URL environment variable.`;\n } else if (!hasAccessToken) {\n return `You need to set the TRIGGER_SECRET_KEY environment variable.`;\n }\n\n return `Unknown error`;\n}\n","import { InitOutput } from \"@trigger.dev/core/v3\";\nimport { TaskOptions, Task, createTask } from \"./shared\";\n\n/** Creates a task that can be triggered\n * @param options - Task options\n * @example \n * \n * ```ts\n * import { task } from \"@trigger.dev/sdk/v3\";\n *\n * export const helloWorld = task({\n id: \"hello-world\",\n * run: async (payload: { url: string }) => {\n * return { hello: \"world\" };\n * },\n * });\n *\n * ```\n * \n * @returns A task that can be triggered\n */\nexport function task<TInput = void, TOutput = unknown, TInitOutput extends InitOutput = any>(\n options: TaskOptions<TInput, TOutput, TInitOutput>\n): Task<TInput, TOutput> {\n return createTask<TInput, TOutput, TInitOutput>(options);\n}\n\nexport type { TaskOptions, Task };\n","import { SemanticInternalAttributes, accessoryAttributes, runtime } from \"@trigger.dev/core/v3\";\nimport { tracer } from \"./tracer\";\n\nexport type WaitOptions =\n | {\n seconds: number;\n }\n | {\n minutes: number;\n }\n | {\n hours: number;\n }\n | {\n days: number;\n }\n | {\n weeks: number;\n }\n | {\n months: number;\n }\n | {\n years: number;\n };\n\nexport const wait = {\n for: async (options: WaitOptions) => {\n return tracer.startActiveSpan(\n `wait.for()`,\n async (span) => {\n const start = Date.now();\n const durationInMs = calculateDurationInMs(options);\n\n await runtime.waitForDuration(durationInMs);\n },\n {\n attributes: {\n [SemanticInternalAttributes.STYLE_ICON]: \"wait\",\n ...accessoryAttributes({\n items: [\n {\n text: nameForWaitOptions(options),\n variant: \"normal\",\n },\n ],\n style: \"codepath\",\n }),\n },\n }\n );\n },\n until: async (options: { date: Date; throwIfInThePast?: boolean }) => {\n return tracer.startActiveSpan(\n `wait.until()`,\n async (span) => {\n const start = Date.now();\n\n if (options.throwIfInThePast && options.date < new Date()) {\n throw new Error(\"Date is in the past\");\n }\n\n const durationInMs = options.date.getTime() - start;\n\n await runtime.waitForDuration(durationInMs);\n },\n {\n attributes: {\n [SemanticInternalAttributes.STYLE_ICON]: \"wait\",\n ...accessoryAttributes({\n items: [\n {\n text: options.date.toISOString(),\n variant: \"normal\",\n },\n ],\n style: \"codepath\",\n }),\n },\n }\n );\n },\n};\n\nfunction nameForWaitOptions(options: WaitOptions): string {\n if (\"seconds\" in options) {\n return options.seconds === 1 ? `1 second` : `${options.seconds} seconds`;\n }\n\n if (\"minutes\" in options) {\n return options.minutes === 1 ? `1 minute` : `${options.minutes} minutes`;\n }\n\n if (\"hours\" in options) {\n return options.hours === 1 ? `1 hour` : `${options.hours} hours`;\n }\n\n if (\"days\" in options) {\n return options.days === 1 ? `1 day` : `${options.days} days`;\n }\n\n if (\"weeks\" in options) {\n return options.weeks === 1 ? `1 week` : `${options.weeks} weeks`;\n }\n\n if (\"months\" in options) {\n return options.months === 1 ? `1 month` : `${options.months} months`;\n }\n\n if (\"years\" in options) {\n return options.years === 1 ? `1 year` : `${options.years} years`;\n }\n\n return \"NaN\";\n}\n\nfunction calculateDurationInMs(options: WaitOptions): number {\n if (\"seconds\" in options) {\n return options.seconds * 1000;\n }\n\n if (\"minutes\" in options) {\n return options.minutes * 1000 * 60;\n }\n\n if (\"hours\" in options) {\n return options.hours * 1000 * 60 * 60;\n }\n\n if (\"days\" in options) {\n return options.days * 1000 * 60 * 60 * 24;\n }\n\n if (\"weeks\" in options) {\n return options.weeks * 1000 * 60 * 60 * 24 * 7;\n }\n\n if (\"months\" in options) {\n return options.months * 1000 * 60 * 60 * 24 * 30;\n }\n\n if (\"years\" in options) {\n return options.years * 1000 * 60 * 60 * 24 * 365;\n }\n\n throw new Error(\"Invalid options\");\n}\n\ntype RequestOptions = {\n to: (url: string) => Promise<void>;\n timeout: WaitOptions;\n};\n","import { usage as usageApi, taskContext } from \"@trigger.dev/core/v3\";\n\nexport type ComputeUsage = {\n costInCents: number;\n durationMs: number;\n};\n\n// What about run start cost and what should we call that? Some better names\nexport type CurrentUsage = {\n compute: {\n attempt: ComputeUsage;\n total: ComputeUsage;\n };\n baseCostInCents: number;\n totalCostInCents: number;\n};\n\nexport const usage = {\n /**\n * Get the current running usage of this task run.\n *\n * @example\n *\n * ```typescript\n * import { usage, task } from \"@trigger.dev/sdk/v3\";\n *\n * export const myTask = task({\n * id: \"my-task\",\n * run: async (payload, { ctx }) => {\n * // ... Do a bunch of work\n *\n * const currentUsage = usage.getCurrent();\n *\n * // You have access to the current compute cost and duration up to this point\n * console.log(\"Current attempt compute cost and duration\", {\n * cost: currentUsage.compute.attempt.costInCents,\n * duration: currentUsage.compute.attempt.durationMs,\n * });\n *\n * // You also can see the total compute cost and duration up to this point in the run, across all attempts\n * console.log(\"Current total compute cost and duration\", {\n * cost: currentUsage.compute.total.costInCents,\n * duration: currentUsage.compute.total.durationMs,\n * });\n *\n * // You can see the base cost of the run, which is the cost of the run before any compute costs\n * console.log(\"Total cost\", {\n * cost: currentUsage.totalCostInCents,\n * baseCost: currentUsage.baseCostInCents,\n * });\n * },\n * });\n * ```\n */\n getCurrent: (): CurrentUsage => {\n const sample = usageApi.sample();\n const machine = taskContext.ctx?.machine;\n const run = taskContext.ctx?.run;\n\n if (!sample) {\n return {\n compute: {\n attempt: {\n costInCents: 0,\n durationMs: 0,\n },\n total: {\n costInCents: run?.costInCents ?? 0,\n durationMs: run?.durationMs ?? 0,\n },\n },\n baseCostInCents: run?.baseCostInCents ?? 0,\n totalCostInCents: (run?.costInCents ?? 0) + (run?.baseCostInCents ?? 0),\n };\n }\n\n const currentCostInCents = machine?.centsPerMs ? sample.cpuTime * machine.centsPerMs : 0;\n\n return {\n compute: {\n attempt: {\n costInCents: currentCostInCents,\n durationMs: sample.cpuTime,\n },\n total: {\n costInCents: (run?.costInCents ?? 0) + currentCostInCents,\n durationMs: (run?.durationMs ?? 0) + sample.cpuTime,\n },\n },\n baseCostInCents: run?.baseCostInCents ?? 0,\n totalCostInCents: (run?.costInCents ?? 0) + currentCostInCents + (run?.baseCostInCents ?? 0),\n };\n },\n /**\n * Measure the cost and duration of a function.\n *\n * @example\n *\n * ```typescript\n * import { usage } from \"@trigger.dev/sdk/v3\";\n *\n * export const myTask = task({\n * id: \"my-task\",\n * run: async (payload, { ctx }) => {\n * const { result, compute } = await usage.measure(async () => {\n * // Do some work\n * return \"result\";\n * });\n *\n * console.log(\"Result\", result);\n * console.log(\"Cost and duration\", { cost: compute.costInCents, duration: compute.durationMs });\n * },\n * });\n * ```\n */\n measure: async <T>(cb: () => Promise<T>): Promise<{ result: T; compute: ComputeUsage }> => {\n const measurement = usageApi.start();\n\n const result = await cb();\n\n const sample = usageApi.stop(measurement);\n const machine = taskContext.ctx?.machine;\n\n const costInCents = machine?.centsPerMs ? sample.cpuTime * machine.centsPerMs : 0;\n\n return {\n result,\n compute: {\n costInCents,\n durationMs: sample.cpuTime,\n },\n };\n },\n};\n","export * from \"./cache\";\nexport * from \"./config\";\nexport { retry, type RetryOptions } from \"./retry\";\nexport { queue } from \"./shared\";\nexport * from \"./tasks\";\nexport * from \"./wait\";\nexport * from \"./usage\";\nexport type { Context };\n\nimport type { Context } from \"./shared\";\n\nimport type { ApiClientConfiguration } from \"@trigger.dev/core/v3\";\nimport { apiClientManager } from \"@trigger.dev/core/v3\";\n\nexport type { ApiClientConfiguration };\n\nexport {\n ApiError,\n AuthenticationError,\n BadRequestError,\n ConflictError,\n InternalServerError,\n NotFoundError,\n PermissionDeniedError,\n RateLimitError,\n UnprocessableEntityError,\n logger,\n type LogLevel,\n} from \"@trigger.dev/core/v3\";\n\nexport { runs } from \"./runs\";\nexport * as schedules from \"./schedules\";\nexport * as envvars from \"./envvars\";\nexport type { ImportEnvironmentVariablesParams } from \"./envvars\";\n\n/**\n * Register the global API client configuration. Alternatively, you can set the `TRIGGER_SECRET_KEY` and `TRIGGER_API_URL` environment variables.\n * @param options The API client configuration.\n * @param options.baseURL The base URL of the Trigger API. (default: `https://api.trigger.dev`)\n * @param options.secretKey The secret key to authenticate with the Trigger API. (default: `process.env.TRIGGER_SECRET_KEY`) This can be found in your Trigger.dev project \"API Keys\" settings.\n *\n * @example\n *\n * ```typescript\n * import { configure } from \"@trigger.dev/sdk/v3\";\n *\n * configure({\n * baseURL: \"https://api.trigger.dev\",\n * secretKey: \"tr_dev_1234567890\"\n * });\n * ```\n */\nexport function configure(options: ApiClientConfiguration) {\n apiClientManager.setGlobalAPIClientConfiguration(options);\n}\n","import {\n ApiPromise,\n CanceledRunResponse,\n ListRunResponseItem,\n ReplayRunResponse,\n RetrieveRunResponse,\n apiClientManager,\n CursorPagePromise,\n} from \"@trigger.dev/core/v3\";\nimport type { ListProjectRunsQueryParams, ListRunsQueryParams } from \"@trigger.dev/core/v3\";\nimport { apiClientMissingError } from \"./shared\";\n\nexport type RetrieveRunResult = RetrieveRunResponse;\n\nexport const runs = {\n replay: replayRun,\n cancel: cancelRun,\n retrieve: retrieveRun,\n list: listRuns,\n};\n\nexport type ListRunsItem = ListRunResponseItem;\n\nfunction listRuns(\n projectRef: string,\n params?: ListProjectRunsQueryParams\n): CursorPagePromise<typeof ListRunResponseItem>;\nfunction listRuns(params?: ListRunsQueryParams): CursorPagePromise<typeof ListRunResponseItem>;\nfunction listRuns(\n paramsOrProjectRef?: ListRunsQueryParams | string,\n params?: ListRunsQueryParams | ListProjectRunsQueryParams\n): CursorPagePromise<typeof ListRunResponseItem> {\n const apiClient = apiClientManager.client;\n\n if (!apiClient) {\n throw apiClientMissingError();\n }\n\n if (typeof paramsOrProjectRef === \"string\") {\n return apiClient.listProjectRuns(paramsOrProjectRef, params);\n }\n\n return apiClient.listRuns(params);\n}\n\nfunction retrieveRun(runId: string): ApiPromise<RetrieveRunResult> {\n const apiClient = apiClientManager.client;\n\n if (!apiClient) {\n throw apiClientMissingError();\n }\n\n return apiClient.retrieveRun(runId);\n}\n\nfunction replayRun(runId: string): ApiPromise<ReplayRunResponse> {\n const apiClient = apiClientManager.client;\n\n if (!apiClient) {\n throw apiClientMissingError();\n }\n\n return apiClient.replayRun(runId);\n}\n\nfunction cancelRun(runId: string): ApiPromise<CanceledRunResponse> {\n const apiClient = apiClientManager.client;\n\n if (!apiClient) {\n throw apiClientMissingError();\n }\n\n return apiClient.cancelRun(runId);\n}\n","import {\n ApiPromise,\n DeletedScheduleObject,\n InitOutput,\n OffsetLimitPagePromise,\n ScheduleObject,\n TimezonesResult,\n apiClientManager,\n taskCatalog,\n} from \"@trigger.dev/core/v3\";\nimport { zodfetch } from \"@trigger.dev/core/v3/zodfetch\";\nimport { Task, TaskOptions, apiClientMissingError, createTask } from \"../shared\";\nimport * as SchedulesAPI from \"./api\";\n\nexport function task<TOutput, TInitOutput extends InitOutput>(\n params: TaskOptions<SchedulesAPI.ScheduledTaskPayload, TOutput, TInitOutput>\n): Task<SchedulesAPI.ScheduledTaskPayload, TOutput> {\n const task = createTask(params);\n\n taskCatalog.updateTaskMetadata(task.id, {\n triggerSource: \"schedule\",\n });\n\n return task;\n}\n\n/**\n * Creates a new schedule\n * @param options\n * @param options.task - The identifier of the task to be scheduled (Must already exist and be a scheduled task)\n * @param options.cron - The cron expression for the schedule (e.g. `0 0 * * *`)\n * @param options.timezone - An optional timezone for the schedule in the IANA format (e.g. `America/Los_Angeles`). Defaults to \"UTC\".\n * @param options.externalId - An optional external identifier for the schedule\n * @param options.deduplicationKey - An optional deduplication key for the schedule\n * @returns The created schedule\n */\nexport function create(options: SchedulesAPI.CreateScheduleOptions): ApiPromise<ScheduleObject> {\n const apiClient = apiClientManager.client;\n\n if (!apiClient) {\n throw apiClientMissingError();\n }\n\n return apiClient.createSchedule(options);\n}\n\n/**\n * Retrieves a schedule\n * @param scheduleId - The ID of the schedule to retrieve\n * @returns The retrieved schedule\n */\nexport function retrieve(scheduleId: string): ApiPromise<ScheduleObject> {\n const apiClient = apiClientManager.client;\n\n if (!apiClient) {\n throw apiClientMissingError();\n }\n\n return apiClient.retrieveSchedule(scheduleId);\n}\n\n/**\n * Updates a schedule\n * @param scheduleId - The ID of the schedule to update\n * @param options - The updated schedule options\n * @param options.task - The identifier of the task to be scheduled (Must already exist and be a scheduled task)\n * @param options.cron - The cron expression for the schedule (e.g. `0 0 * * *`)\n * @param options.timezone - An optional timezone for the schedule in the IANA format (e.g. `America/Los_Angeles`). Defaults to \"UTC\".\n * @param options.externalId - An optional external identifier for the schedule\n * @returns The updated schedule\n */\nexport function update(\n scheduleId: string,\n options: SchedulesAPI.UpdateScheduleOptions\n): ApiPromise<ScheduleObject> {\n const apiClient = apiClientManager.client;\n\n if (!apiClient) {\n throw apiClientMissingError();\n }\n\n return apiClient.updateSchedule(scheduleId, options);\n}\n\n/**\n * Deletes a schedule\n * @param scheduleId - The ID of the schedule to delete\n */\nexport function del(scheduleId: string): ApiPromise<DeletedScheduleObject> {\n const apiClient = apiClientManager.client;\n\n if (!apiClient) {\n throw apiClientMissingError();\n }\n\n return apiClient.deleteSchedule(scheduleId);\n}\n\n/**\n * Deactivates a schedule\n * @param scheduleId - The ID of the schedule to deactivate\n */\nexport function deactivate(scheduleId: string): ApiPromise<ScheduleObject> {\n const apiClient = apiClientManager.client;\n\n if (!apiClient) {\n throw apiClientMissingError();\n }\n\n return apiClient.deactivateSchedule(scheduleId);\n}\n\n/**\n * Activates a schedule\n * @param scheduleId - The ID of the schedule to activate\n */\nexport function activate(scheduleId: string): ApiPromise<ScheduleObject> {\n const apiClient = apiClientManager.client;\n\n if (!apiClient) {\n throw apiClientMissingError();\n }\n\n return apiClient.activateSchedule(scheduleId);\n}\n\n/**\n * Lists schedules\n * @param options - The list options\n * @param options.page - The page number\n * @param options.perPage - The number of schedules per page\n * @returns The list of schedules\n */\nexport function list(\n options?: SchedulesAPI.ListScheduleOptions\n): OffsetLimitPagePromise<typeof ScheduleObject> {\n const apiClient = apiClientManager.client;\n\n if (!apiClient) {\n throw apiClientMissingError();\n }\n\n return apiClient.listSchedules(options);\n}\n\n/**\n * Lists the possible timezones we support\n * @param excludeUtc - By default \"UTC\" is included and is first. If true, \"UTC\" will be excluded.\n */\nexport function timezones(options?: { excludeUtc?: boolean }) {\n const baseUrl = apiClientManager.baseURL;\n\n if (!baseUrl) {\n throw apiClientMissingError();\n }\n\n return zodfetch(\n TimezonesResult,\n `${baseUrl}/api/v1/timezones${options?.excludeUtc === true ? \"?excludeUtc=true\" : \"\"}`,\n {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n }\n );\n}\n","import type {\n ApiPromise,\n CreateEnvironmentVariableParams,\n EnvironmentVariableResponseBody,\n EnvironmentVariableValue,\n EnvironmentVariables,\n ImportEnvironmentVariablesParams,\n UpdateEnvironmentVariableParams,\n} from \"@trigger.dev/core/v3\";\nimport { apiClientManager, taskContext } from \"@trigger.dev/core/v3\";\nimport { apiClientMissingError } from \"./shared\";\n\nexport type { CreateEnvironmentVariableParams, ImportEnvironmentVariablesParams };\n\nexport function upload(\n projectRef: string,\n slug: string,\n params: ImportEnvironmentVariablesParams\n): ApiPromise<EnvironmentVariableResponseBody>;\nexport function upload(\n params: ImportEnvironmentVariablesParams\n): ApiPromise<EnvironmentVariableResponseBody>;\nexport function upload(\n projectRefOrParams: string | ImportEnvironmentVariablesParams,\n slug?: string,\n params?: ImportEnvironmentVariablesParams\n): ApiPromise<EnvironmentVariableResponseBody> {\n let $projectRef: string;\n let $params: ImportEnvironmentVariablesParams;\n let $slug: string;\n\n if (taskContext.ctx) {\n if (typeof projectRefOrParams === \"string\") {\n $projectRef = projectRefOrParams;\n $slug = slug ?? taskContext.ctx.environment.slug;\n\n if (!params) {\n throw new Error(\"params is required\");\n }\n\n $params = params;\n } else {\n $params = projectRefOrParams;\n $projectRef = taskContext.ctx.project.ref;\n $slug = taskContext.ctx.environment.slug;\n }\n } else {\n if (typeof projectRefOrParams !== \"string\") {\n throw new Error(\"projectRef is required\");\n }\n\n if (!slug) {\n throw new Error(\"slug is required\");\n }\n\n if (!params) {\n throw new Error(\"params is required\");\n }\n\n $projectRef = projectRefOrParams;\n $slug = slug;\n $params = params;\n }\n\n const apiClient = apiClientManager.client;\n\n if (!apiClient) {\n throw apiClientMissingError();\n }\n\n return apiClient.importEnvVars($projectRef, $slug, $params);\n}\n\nexport function list(projectRef: string, slug: string): ApiPromise<EnvironmentVariables>;\nexport function list(): ApiPromise<EnvironmentVariables>;\nexport function list(projectRef?: string, slug?: string): ApiPromise<EnvironmentVariables> {\n const $projectRef = projectRef ?? taskContext.ctx?.project.ref;\n const $slug = slug ?? taskContext.ctx?.environment.slug;\n\n if (!$projectRef) {\n throw new Error(\"projectRef is required\");\n }\n\n if (!$slug) {\n throw new Error(\"slug is required\");\n }\n\n const apiClient = apiClientManager.client;\n\n if (!apiClient) {\n throw apiClientMissingError();\n }\n\n return apiClient.listEnvVars($projectRef, $slug);\n}\n\nexport function create(\n projectRef: string,\n slug: string,\n params: CreateEnvironmentVariableParams\n): ApiPromise<EnvironmentVariableResponseBody>;\nexport function create(\n params: CreateEnvironmentVariableParams\n): ApiPromise<EnvironmentVariableResponseBody>;\nexport function create(\n projectRefOrParams: string | CreateEnvironmentVariableParams,\n slug?: string,\n params?: CreateEnvironmentVariableParams\n): ApiPromise<EnvironmentVariableResponseBody> {\n let $projectRef: string;\n let $slug: string;\n let $params: CreateEnvironmentVariableParams;\n\n if (taskContext.ctx) {\n if (typeof projectRefOrParams === \"string\") {\n $projectRef = projectRefOrParams;\n $slug = slug ?? taskContext.ctx.environment.slug;\n\n if (!params) {\n throw new Error(\"params is required\");\n }\n\n $params = params;\n } else {\n $params = projectRefOrParams;\n $projectRef = taskContext.ctx.project.ref;\n $slug = taskContext.ctx.environment.slug;\n }\n } else {\n if (typeof projectRefOrParams !== \"string\") {\n throw new Error(\"projectRef is required\");\n }\n\n if (!slug) {\n throw new Error(\"slug is required\");\n }\n\n if (!params) {\n throw new Error(\"params is required\");\n }\n\n $projectRef = projectRefOrParams;\n $slug = slug;\n $params = params;\n }\n\n const apiClient = apiClientManager.client;\n\n if (!apiClient) {\n throw apiClientMissingError();\n }\n\n return apiClient.createEnvVar($projectRef, $slug, $params);\n}\n\nexport function retrieve(\n projectRef: string,\n slug: string,\n name: string\n): ApiPromise<EnvironmentVariableValue>;\nexport function retrieve(name: string): ApiPromise<EnvironmentVariableValue>;\nexport function retrieve(\n projectRefOrName: string,\n slug?: string,\n name?: string\n): ApiPromise<EnvironmentVariableValue> {\n let $projectRef: string;\n let $slug: string;\n let $name: string;\n\n if (typeof name === \"string\") {\n $projectRef = projectRefOrName;\n $slug = slug!;\n $name = name;\n } else {\n $projectRef = taskContext.ctx?.project.ref!;\n $slug = taskContext.ctx?.environment.slug!;\n $name = projectRefOrName;\n }\n\n if (!$projectRef) {\n throw new Error(\"projectRef is required\");\n }\n\n if (!$slug) {\n throw new Error(\"slug is required\");\n }\n\n const apiClient = apiClientManager.client;\n\n if (!apiClient) {\n throw apiClientMissingError();\n }\n\n return apiClient.retrieveEnvVar($projectRef, $slug, $name);\n}\n\nexport function del(\n projectRef: string,\n slug: string,\n name: string\n): ApiPromise<EnvironmentVariableResponseBody>;\nexport function del(name: string): ApiPromise<EnvironmentVariableResponseBody>;\nexport function del(\n projectRefOrName: string,\n slug?: string,\n name?: string\n): ApiPromise<EnvironmentVariableResponseBody> {\n let $projectRef: string;\n let $slug: string;\n let $name: string;\n\n if (typeof name === \"string\") {\n $projectRef = projectRefOrName;\n $slug = slug!;\n $name = name;\n } else {\n $projectRef = taskContext.ctx?.project.ref!;\n $slug = taskContext.ctx?.environment.slug!;\n $name = projectRefOrName;\n }\n\n if (!$projectRef) {\n throw new Error(\"projectRef is required\");\n }\n\n if (!$slug) {\n throw new Error(\"slug is required\");\n }\n\n const apiClient = apiClientManager.client;\n\n if (!apiClient) {\n throw apiClientMissingError();\n }\n\n return apiClient.deleteEnvVar($projectRef, $slug, $name);\n}\n\nexport function update(\n projectRef: string,\n slug: string,\n name: string,\n params: UpdateEnvironmentVariableParams\n): ApiPromise<EnvironmentVariableResponseBody>;\nexport function update(\n name: string,\n params: UpdateEnvironmentVariableParams\n): ApiPromise<EnvironmentVariableResponseBody>;\nexport function update(\n projectRefOrName: string,\n slugOrParams: string | UpdateEnvironmentVariableParams,\n name?: string,\n params?: UpdateEnvironmentVariableParams\n): ApiPromise<EnvironmentVariableResponseBody> {\n let $projectRef: string;\n let $slug: string;\n let $name: string;\n let $params: UpdateEnvironmentVariableParams;\n\n if (taskContext.ctx) {\n if (typeof slugOrParams === \"string\") {\n $projectRef = slugOrParams;\n $slug = slugOrParams ?? taskContext.ctx.environment.slug;\n $name = name!;\n\n if (!params) {\n throw new Error(\"params is required\");\n }\n\n $params = params;\n } else {\n $params = slugOrParams;\n $projectRef = taskContext.ctx.project.ref;\n $slug = taskContext.ctx.environment.slug;\n $name = projectRefOrName;\n }\n } else {\n if (typeof slugOrParams !== \"string\") {\n throw new Error(\"slug is required\");\n }\n\n if (!projectRefOrName) {\n throw new Error(\"projectRef is required\");\n }\n\n if (!params) {\n throw new Error(\"params is required\");\n }\n\n $projectRef = projectRefOrName;\n $slug = slugOrParams;\n $name = name!;\n $params = params;\n }\n\n const apiClient = apiClientManager.client;\n\n if (!apiClient) {\n throw apiClientMissingError();\n }\n\n return apiClient.updateEnvVar($projectRef, $slug, $name, $params);\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trigger.dev/sdk",
3
- "version": "3.0.0-beta.4",
3
+ "version": "3.0.0-beta.40",
4
4
  "description": "trigger.dev Node.JS SDK",
5
5
  "license": "MIT",
6
6
  "main": "./dist/index.js",
@@ -42,8 +42,8 @@
42
42
  "@opentelemetry/api": "^1.8.0",
43
43
  "@opentelemetry/api-logs": "^0.48.0",
44
44
  "@opentelemetry/semantic-conventions": "^1.22.0",
45
- "@trigger.dev/core": "^3.0.0-beta.4",
46
- "@trigger.dev/core-backend": "^3.0.0-beta.4",
45
+ "@trigger.dev/core": "3.0.0-beta.40",
46
+ "@trigger.dev/core-backend": "3.0.0-beta.40",
47
47
  "chalk": "^5.2.0",
48
48
  "cronstrue": "^2.21.0",
49
49
  "debug": "^4.3.4",
@@ -56,7 +56,8 @@
56
56
  "ulid": "^2.3.0",
57
57
  "uuid": "^9.0.0",
58
58
  "ws": "^8.11.0",
59
- "zod": "3.22.3"
59
+ "zod": "3.22.3",
60
+ "msw": "^2.2.1"
60
61
  },
61
62
  "devDependencies": {
62
63
  "@types/debug": "^4.1.7",
@@ -70,16 +71,8 @@
70
71
  "tsup": "^8.0.1",
71
72
  "typed-emitter": "^2.1.0",
72
73
  "typescript": "^5.3.0",
73
- "@trigger.dev/tsconfig": "0.0.0",
74
- "@trigger.dev/tsup": "0.0.0"
75
- },
76
- "peerDependencies": {
77
- "msw": "^2.2.1"
78
- },
79
- "peerDependenciesMeta": {
80
- "msw": {
81
- "optional": true
82
- }
74
+ "@trigger.dev/tsup": "0.0.0",
75
+ "@trigger.dev/tsconfig": "0.0.0"
83
76
  },
84
77
  "engines": {
85
78
  "node": ">=18.0.0"