inngest 4.5.0 → 4.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/api/api.cjs +17 -0
  3. package/api/api.cjs.map +1 -1
  4. package/api/api.d.cts +9 -0
  5. package/api/api.d.cts.map +1 -1
  6. package/api/api.d.ts +9 -0
  7. package/api/api.d.ts.map +1 -1
  8. package/api/api.js +17 -0
  9. package/api/api.js.map +1 -1
  10. package/api/schema.d.cts +2 -2
  11. package/api/schema.d.cts.map +1 -1
  12. package/api/schema.d.ts +2 -2
  13. package/api/schema.d.ts.map +1 -1
  14. package/components/DeferredFunction.cjs +1 -1
  15. package/components/DeferredFunction.cjs.map +1 -1
  16. package/components/DeferredFunction.js +1 -1
  17. package/components/DeferredFunction.js.map +1 -1
  18. package/components/Inngest.d.cts +1 -1
  19. package/components/Inngest.d.ts +1 -1
  20. package/components/InngestCommHandler.cjs +9 -0
  21. package/components/InngestCommHandler.cjs.map +1 -1
  22. package/components/InngestCommHandler.d.cts.map +1 -1
  23. package/components/InngestCommHandler.d.ts.map +1 -1
  24. package/components/InngestCommHandler.js +9 -0
  25. package/components/InngestCommHandler.js.map +1 -1
  26. package/components/InngestStepTools.d.cts +1 -1
  27. package/components/InngestStepTools.d.ts +1 -1
  28. package/components/execution/InngestExecution.cjs.map +1 -1
  29. package/components/execution/InngestExecution.d.cts +19 -0
  30. package/components/execution/InngestExecution.d.cts.map +1 -1
  31. package/components/execution/InngestExecution.d.ts +19 -0
  32. package/components/execution/InngestExecution.d.ts.map +1 -1
  33. package/components/execution/InngestExecution.js.map +1 -1
  34. package/components/execution/engine.cjs +19 -3
  35. package/components/execution/engine.cjs.map +1 -1
  36. package/components/execution/engine.d.cts.map +1 -1
  37. package/components/execution/engine.d.ts.map +1 -1
  38. package/components/execution/engine.js +20 -4
  39. package/components/execution/engine.js.map +1 -1
  40. package/components/execution/otel/middleware.d.cts +6 -6
  41. package/components/execution/otel/middleware.d.ts +6 -6
  42. package/components/execution/otel/processor.cjs +7 -5
  43. package/components/execution/otel/processor.cjs.map +1 -1
  44. package/components/execution/otel/processor.d.cts.map +1 -1
  45. package/components/execution/otel/processor.d.ts.map +1 -1
  46. package/components/execution/otel/processor.js +7 -5
  47. package/components/execution/otel/processor.js.map +1 -1
  48. package/components/realtime/types.d.cts +4 -4
  49. package/components/realtime/types.d.cts.map +1 -1
  50. package/components/realtime/types.d.ts +4 -4
  51. package/components/realtime/types.d.ts.map +1 -1
  52. package/helpers/consts.cjs +1 -0
  53. package/helpers/consts.cjs.map +1 -1
  54. package/helpers/consts.d.cts +1 -0
  55. package/helpers/consts.d.cts.map +1 -1
  56. package/helpers/consts.d.ts +1 -0
  57. package/helpers/consts.d.ts.map +1 -1
  58. package/helpers/consts.js +1 -0
  59. package/helpers/consts.js.map +1 -1
  60. package/helpers/marker.cjs +5 -1
  61. package/helpers/marker.cjs.map +1 -1
  62. package/helpers/marker.d.cts +2 -1
  63. package/helpers/marker.d.cts.map +1 -1
  64. package/helpers/marker.d.ts +2 -1
  65. package/helpers/marker.d.ts.map +1 -1
  66. package/helpers/marker.js +5 -2
  67. package/helpers/marker.js.map +1 -1
  68. package/helpers/promises.cjs +1 -1
  69. package/helpers/promises.cjs.map +1 -1
  70. package/helpers/promises.d.cts.map +1 -1
  71. package/helpers/promises.d.ts.map +1 -1
  72. package/helpers/promises.js +1 -1
  73. package/helpers/promises.js.map +1 -1
  74. package/package.json +1 -1
  75. package/types.d.cts +1 -1
  76. package/types.d.ts +1 -1
  77. package/version.cjs +1 -1
  78. package/version.cjs.map +1 -1
  79. package/version.d.cts +1 -1
  80. package/version.d.ts +1 -1
  81. package/version.js +1 -1
  82. package/version.js.map +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # inngest
2
2
 
3
+ ## 4.5.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [#1551](https://github.com/inngest/inngest-js/pull/1551) [`0af90c3c`](https://github.com/inngest/inngest-js/commit/0af90c3cc98680bed38c1c1ec02a5461d28ce228) Thanks [@rhino1998](https://github.com/rhino1998)! - fix: Add step attribution attributes to all extended trace spans
8
+
9
+ - [#1556](https://github.com/inngest/inngest-js/pull/1556) [`5bd87775`](https://github.com/inngest/inngest-js/commit/5bd8777594a601e5cb08cd451fb47850ec9e8fe9) Thanks [@Linell](https://github.com/Linell)! - Update internal tracing values used for identifying checkpointed data.
10
+
11
+ - [#1548](https://github.com/inngest/inngest-js/pull/1548) [`7be1cee3`](https://github.com/inngest/inngest-js/commit/7be1cee32b8451fac9a1b88ab67431be0851ce71) Thanks [@amh4r](https://github.com/amh4r)! - Fix unnecessary outgoing Durable Endpoint request
12
+
13
+ - [#1511](https://github.com/inngest/inngest-js/pull/1511) [`79558be2`](https://github.com/inngest/inngest-js/commit/79558be210b784b95ea26b36d1f70798548e7707) Thanks [@Linell](https://github.com/Linell)! - Fix duplicate execution when response terminates early
14
+
3
15
  ## 4.5.0
4
16
 
5
17
  ### Minor Changes
package/api/api.cjs CHANGED
@@ -2,11 +2,24 @@ const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
2
2
  const require_errors = require('../helpers/errors.cjs');
3
3
  const require_types = require('../types.cjs');
4
4
  const require_schema = require('./schema.cjs');
5
+ const require_marker = require('../helpers/marker.cjs');
5
6
  const require_strings = require('../helpers/strings.cjs');
6
7
  const require_net = require('../helpers/net.cjs');
7
8
  let zod_v3 = require("zod/v3");
8
9
 
9
10
  //#region src/api/api.ts
11
+ /**
12
+ * Thrown when the executor has already requeued the current run. Returning
13
+ * buffered ops after this would let the executor memoize them as canonical and
14
+ * chain the next dispatch off this dead invocation, producing duplicates.
15
+ */
16
+ var StaleDispatchError = class extends Error {
17
+ constructor(message) {
18
+ super(message);
19
+ this.name = "StaleDispatchError";
20
+ }
21
+ [require_marker.markerKey] = { kind: "StaleDispatchError" };
22
+ };
10
23
  const realtimeSubscriptionTokenSchema = zod_v3.z.object({ jwt: zod_v3.z.string() });
11
24
  const sendSignalSuccessResponseSchema = zod_v3.z.object({ data: zod_v3.z.object({ run_id: zod_v3.z.string().min(1) }) });
12
25
  const checkpointNewRunResponseSchema = zod_v3.z.object({ data: zod_v3.z.object({
@@ -277,6 +290,9 @@ var InngestApi = class {
277
290
  run_id: args.runId,
278
291
  fn_id: args.fnId,
279
292
  qi_id: args.queueItemId,
293
+ request_id: args.requestId,
294
+ generation_id: args.generationId,
295
+ request_started_at: args.requestStartedAt,
280
296
  steps: args.steps,
281
297
  ts: (/* @__PURE__ */ new Date()).valueOf()
282
298
  });
@@ -286,6 +302,7 @@ var InngestApi = class {
286
302
  });
287
303
  if (!result.ok) throw new Error(require_errors.getErrorMessage(result.error, "Unknown error checkpointing async"));
288
304
  const res = result.value;
305
+ if (res.status === 409) throw new StaleDispatchError(`Stale dispatch: checkpoint returned 409 (run ${args.runId})`);
289
306
  if (!res.ok) throw new Error(`Failed to checkpoint async: ${res.status} ${res.statusText} - ${await res.text()}`);
290
307
  }
291
308
  /**
package/api/api.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.cjs","names":["z","hashSigningKey","finalUrl: URL","ok","fetchWithAuthFallback","err","data: unknown","stepSchema","errorSchema","getErrorMessage","batchSchema","json: unknown","rawData: unknown"],"sources":["../../src/api/api.ts"],"sourcesContent":["import type { fetch } from \"cross-fetch\";\nimport { z } from \"zod/v3\";\nimport type { ExecutionVersion } from \"../helpers/consts.ts\";\nimport { getErrorMessage } from \"../helpers/errors.ts\";\nimport { fetchWithAuthFallback } from \"../helpers/net.ts\";\nimport { hashSigningKey } from \"../helpers/strings.ts\";\nimport {\n type APIStepPayload,\n err,\n type MetadataTarget,\n type OutgoingOp,\n ok,\n type Result,\n} from \"../types.ts\";\nimport {\n type BatchResponse,\n batchSchema,\n type ErrorResponse,\n errorSchema,\n type StepsResponse,\n stepSchema,\n} from \"./schema.ts\";\n\ntype FetchT = typeof fetch;\n\nconst realtimeSubscriptionTokenSchema = z.object({\n jwt: z.string(),\n});\n\nconst sendSignalSuccessResponseSchema = z.object({\n data: z.object({\n run_id: z.string().min(1),\n }),\n});\n\nconst checkpointNewRunResponseSchema = z.object({\n data: z.object({\n fn_id: z.string().min(1),\n app_id: z.string().min(1),\n run_id: z.string().min(1),\n token: z.string().min(1).optional(),\n realtime_token: z.string().min(1),\n }),\n});\n\nexport namespace InngestApi {\n export interface Options {\n baseUrl: () => string | undefined;\n signingKey: () => string | undefined;\n signingKeyFallback: () => string | undefined;\n fetch: () => FetchT;\n }\n\n export interface Subscription {\n topics: string[];\n channel: string;\n }\n\n export interface PublishOptions extends Subscription {\n runId?: string;\n }\n\n export interface SendSignalOptions {\n signal: string;\n data?: unknown;\n }\n\n export interface SendSignalResponse {\n /**\n * The ID of the run that was signaled.\n *\n * If this is undefined, the signal could not be matched to a run.\n */\n runId: string | undefined;\n }\n}\n\nexport class InngestApi {\n private readonly _signingKey: () => string | undefined;\n private readonly _signingKeyFallback: () => string | undefined;\n private readonly _apiBaseUrl: () => string | undefined;\n private readonly _fetch: () => FetchT;\n\n constructor({\n baseUrl,\n signingKey,\n signingKeyFallback,\n fetch,\n }: InngestApi.Options) {\n this._apiBaseUrl = baseUrl;\n this._signingKey = signingKey;\n this._signingKeyFallback = signingKeyFallback;\n this._fetch = fetch;\n }\n\n private get apiBaseUrl(): string | undefined {\n return this._apiBaseUrl();\n }\n\n private get signingKey(): string | undefined {\n return this._signingKey();\n }\n\n private get signingKeyFallback(): string | undefined {\n return this._signingKeyFallback();\n }\n\n private get hashedKey(): string {\n return hashSigningKey(this.signingKey);\n }\n\n private get hashedFallbackKey(): string | undefined {\n if (!this.signingKeyFallback) {\n return;\n }\n\n return hashSigningKey(this.signingKeyFallback);\n }\n\n private async getTargetUrl(path: string): Promise<URL> {\n return new URL(path, this.apiBaseUrl);\n }\n\n private async req(\n url: string | URL,\n options?: RequestInit,\n ): Promise<Result<Response, unknown>> {\n const finalUrl: URL =\n typeof url === \"string\" ? await this.getTargetUrl(url) : url;\n\n try {\n const res = await fetchWithAuthFallback({\n authToken: this.hashedKey,\n authTokenFallback: this.hashedFallbackKey,\n fetch: this._fetch(),\n url: finalUrl,\n options: {\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options?.headers,\n },\n },\n });\n\n return ok(res);\n } catch (error) {\n return err(error);\n }\n }\n\n async getRunSteps(\n runId: string,\n ): Promise<Result<StepsResponse, ErrorResponse>> {\n const result = await this.req(\n `/v0/runs/${encodeURIComponent(runId)}/actions`,\n );\n if (result.ok) {\n const res = result.value;\n const data: unknown = await res.json();\n\n if (res.ok) {\n return ok(stepSchema.parse(data));\n }\n\n return err(errorSchema.parse(data));\n }\n\n return err({\n error: getErrorMessage(\n result.error,\n \"Unknown error retrieving step data\",\n ),\n status: 500,\n });\n }\n\n async getRunBatch(\n runId: string,\n ): Promise<Result<BatchResponse, ErrorResponse>> {\n const result = await this.req(\n `/v0/runs/${encodeURIComponent(runId)}/batch`,\n );\n if (result.ok) {\n const res = result.value;\n const data: unknown = await res.json();\n\n if (res.ok) {\n return ok(batchSchema.parse(data));\n }\n\n return err(errorSchema.parse(data));\n }\n\n return err({\n error: getErrorMessage(\n result.error,\n \"Unknown error retrieving event batch\",\n ),\n status: 500,\n });\n }\n\n async publish(\n publishOptions: InngestApi.PublishOptions,\n // biome-ignore lint/suspicious/noExplicitAny: anything is acceptable\n data: any,\n ): Promise<Result<void, ErrorResponse>> {\n // todo it may not be a \"text/stream\"\n const isStream = data instanceof ReadableStream;\n\n const url = await this.getTargetUrl(\"/v1/realtime/publish\");\n url.searchParams.set(\"channel\", publishOptions.channel || \"\");\n if (publishOptions.runId) {\n url.searchParams.set(\"run_id\", publishOptions.runId);\n }\n for (const topic of publishOptions.topics) {\n url.searchParams.append(\"topic\", topic);\n }\n\n const result = await this.req(url, {\n body: isStream\n ? data\n : typeof data === \"string\"\n ? data\n : JSON.stringify(data),\n method: \"POST\",\n headers: {\n \"Content-Type\": isStream ? \"text/stream\" : \"application/json\",\n },\n ...(isStream ? { duplex: \"half\" } : {}),\n });\n if (result.ok) {\n const res = result.value;\n if (!res.ok) {\n throw new Error(\n `Failed to publish event: ${res.status} ${res.statusText}`,\n );\n }\n\n return ok<void>(undefined);\n }\n\n return err({\n error: getErrorMessage(result.error, \"Unknown error publishing event\"),\n status: 500,\n });\n }\n\n async sendSignal(\n signalOptions: InngestApi.SendSignalOptions,\n options?: {\n headers?: Record<string, string>;\n },\n ): Promise<Result<InngestApi.SendSignalResponse, ErrorResponse>> {\n const url = await this.getTargetUrl(\"/v1/signals\");\n\n const body = {\n signal: signalOptions.signal,\n data: signalOptions.data,\n };\n\n return fetchWithAuthFallback({\n authToken: this.hashedKey,\n authTokenFallback: this.hashedFallbackKey,\n fetch: this._fetch(),\n url,\n options: {\n method: \"POST\",\n body: JSON.stringify(body),\n headers: {\n \"Content-Type\": \"application/json\",\n ...options?.headers,\n },\n },\n })\n .then(async (res) => {\n // A 404 is valid if the signal was not found.\n if (res.status === 404) {\n return ok<InngestApi.SendSignalResponse>({\n runId: undefined,\n });\n }\n\n // Save a clone of the response we can use to get the text of if we fail\n // to parse the JSON.\n const resClone = res.clone();\n\n // JSON!\n let json: unknown;\n try {\n json = await res.json();\n } catch {\n // res.json() failed so not a valid JSON response\n return err({\n error: `Failed to send signal: ${res.status} ${\n res.statusText\n } - ${await resClone.text()}`,\n status: res.status,\n });\n }\n\n // If we're not 2xx, something went wrong.\n if (!res.ok) {\n try {\n return err(errorSchema.parse(json));\n } catch {\n // schema parse failed\n return err({\n error: `Failed to send signal: ${res.status} ${\n res.statusText\n } - ${await res.text()}`,\n status: res.status,\n });\n }\n }\n\n // If we are 2xx, we should have a run_id.\n const parseRes = sendSignalSuccessResponseSchema.safeParse(json);\n if (!parseRes.success) {\n return err({\n error: `Successfully sent signal, but response parsing failed: ${\n res.status\n } ${res.statusText} - ${await resClone.text()}`,\n status: res.status,\n });\n }\n\n return ok({\n runId: parseRes.data.data.run_id,\n });\n })\n .catch((error) => {\n // Catch-all if various things go wrong\n return err({\n error: getErrorMessage(error, \"Unknown error sending signal\"),\n status: 500,\n });\n });\n }\n\n async getSubscriptionToken(\n channel: string,\n topics: string[],\n ): Promise<string> {\n const url = await this.getTargetUrl(\"/v1/realtime/token\");\n\n const body = topics.map((topic) => ({\n channel,\n name: topic,\n kind: \"run\",\n }));\n\n return fetchWithAuthFallback({\n authToken: this.hashedKey,\n authTokenFallback: this.hashedFallbackKey,\n fetch: this._fetch(),\n url,\n options: {\n method: \"POST\",\n body: JSON.stringify(body),\n headers: {\n \"Content-Type\": \"application/json\",\n },\n },\n })\n .then(async (res) => {\n if (!res.ok) {\n throw new Error(\n `Failed to get subscription token: ${res.status} ${\n res.statusText\n } - ${await res.text()}`,\n );\n }\n\n const data = realtimeSubscriptionTokenSchema.parse(await res.json());\n\n return data.jwt;\n })\n .catch((error) => {\n throw new Error(\n getErrorMessage(error, \"Unknown error getting subscription token\"),\n );\n });\n }\n\n async updateMetadata(\n args: {\n target: MetadataTarget;\n metadata: Array<{\n kind: string;\n op: string;\n values: Record<string, unknown>;\n }>;\n },\n options?: {\n headers?: Record<string, string>;\n },\n ): Promise<Result<void, ErrorResponse>> {\n const payload = { target: args.target, metadata: args.metadata };\n\n const result = await this.req(\n `/v1/runs/${encodeURIComponent(args.target.run_id)}/metadata`,\n {\n method: \"POST\",\n body: JSON.stringify(payload),\n headers: options?.headers,\n },\n );\n\n if (!result.ok) {\n return err({\n error: getErrorMessage(result.error, \"Unknown error updating metadata\"),\n status: 500,\n });\n }\n\n const res = result.value;\n if (res.ok) {\n return ok<void>(undefined);\n }\n\n const resClone = res.clone();\n\n let json: unknown;\n try {\n json = await res.json();\n } catch {\n return err({\n error: `Failed to update metadata: ${res.status} ${\n res.statusText\n } - ${await resClone.text()}`,\n status: res.status,\n });\n }\n\n try {\n return err(errorSchema.parse(json));\n } catch {\n return err({\n error: `Failed to update metadata: ${res.status} ${res.statusText}`,\n status: res.status,\n });\n }\n }\n\n /**\n * Start a new run, optionally passing in a number of steps to initialize the\n * run with.\n */\n async checkpointNewRun(args: {\n runId: string;\n event: APIStepPayload;\n executionVersion: ExecutionVersion;\n retries: number;\n steps?: OutgoingOp[];\n }): Promise<z.output<typeof checkpointNewRunResponseSchema>> {\n const body = JSON.stringify({\n run_id: args.runId,\n event: args.event,\n steps: args.steps,\n ts: new Date().valueOf(),\n request_version: args.executionVersion,\n retries: args.retries,\n });\n\n const result = await this.req(\"/v1/checkpoint\", {\n method: \"POST\",\n body,\n });\n\n if (!result.ok) {\n throw new Error(\n getErrorMessage(result.error, \"Unknown error checkpointing new run\"),\n );\n }\n\n const res = result.value;\n if (res.ok) {\n const rawData: unknown = await res.json();\n const data = checkpointNewRunResponseSchema.parse(rawData);\n\n return data;\n }\n\n throw new Error(\n `Failed to checkpoint new run: ${res.status} ${\n res.statusText\n } - ${await res.text()}`,\n );\n }\n\n /**\n * Checkpoint steps for a given sync run.\n */\n async checkpointSteps(args: {\n runId: string;\n fnId: string;\n appId: string;\n steps: OutgoingOp[];\n }): Promise<void> {\n const body = JSON.stringify({\n fn_id: args.fnId,\n app_id: args.appId,\n run_id: args.runId,\n steps: args.steps,\n ts: new Date().valueOf(),\n });\n\n const result = await this.req(\n `/v1/checkpoint/${encodeURIComponent(args.runId)}/steps`,\n {\n method: \"POST\",\n body,\n },\n );\n\n if (!result.ok) {\n throw new Error(\n getErrorMessage(result.error, \"Unknown error checkpointing steps\"),\n );\n }\n\n const res = result.value;\n if (!res.ok) {\n throw new Error(\n `Failed to checkpoint steps: ${res.status} ${\n res.statusText\n } - ${await res.text()}`,\n );\n }\n }\n\n /**\n * Checkpoint steps for a given async run.\n */\n async checkpointStepsAsync(args: {\n runId: string;\n fnId: string;\n queueItemId: string;\n steps: OutgoingOp[];\n }): Promise<void> {\n const body = JSON.stringify({\n run_id: args.runId,\n fn_id: args.fnId,\n qi_id: args.queueItemId,\n steps: args.steps,\n ts: new Date().valueOf(),\n });\n\n const result = await this.req(\n `/v1/checkpoint/${encodeURIComponent(args.runId)}/async`,\n {\n method: \"POST\",\n body,\n },\n );\n\n if (!result.ok) {\n throw new Error(\n getErrorMessage(result.error, \"Unknown error checkpointing async\"),\n );\n }\n\n const res = result.value;\n if (!res.ok) {\n throw new Error(\n `Failed to checkpoint async: ${res.status} ${\n res.statusText\n } - ${await res.text()}`,\n );\n }\n }\n\n /**\n * POST stream data to the realtime publish/tee endpoint, forwarding raw\n * bytes to all subscribers via the broadcaster.\n */\n async checkpointStream(args: {\n runId: string;\n body: ReadableStream;\n }): Promise<void> {\n const url = await this.getTargetUrl(\n `/v1/realtime/publish/tee?channel=${encodeURIComponent(args.runId)}`,\n );\n\n const res = await fetchWithAuthFallback({\n authToken: this.hashedKey,\n authTokenFallback: this.hashedFallbackKey,\n fetch: this._fetch(),\n url,\n options: {\n method: \"POST\",\n body: args.body,\n headers: {\n \"Content-Type\": \"application/octet-stream\",\n },\n // Required for streaming request bodies\n // @ts-expect-error duplex not in RequestInit types yet\n duplex: \"half\",\n },\n });\n\n if (!res.ok) {\n throw new Error(\n `Failed to stream checkpoint: ${res.status} ${\n res.statusText\n } - ${await res.text()}`,\n );\n }\n }\n\n /**\n * Build the full SSE URL for a run's stream channel using the given token.\n */\n async getRealtimeStreamRedirect(token: string): Promise<{ url: string }> {\n const sseUrl = await this.getTargetUrl(\"/v1/realtime/sse\");\n sseUrl.searchParams.set(\"token\", token);\n\n return { url: sseUrl.toString() };\n }\n\n /**\n * Fetch the output of a completed run using a token.\n *\n * This uses token-based auth (not signing key) and is intended for use by\n * proxy endpoints that fetch results on behalf of users.\n *\n * @param runId - The ID of the run to fetch output for\n * @param token - The token used to authenticate the request\n * @returns The raw Response from the API\n */\n async getRunOutput(runId: string, token: string): Promise<Response> {\n const url = await this.getTargetUrl(\n `/v1/http/runs/${encodeURIComponent(runId)}/output`,\n );\n url.searchParams.set(\"token\", token);\n\n return this._fetch()(url.toString(), {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\" },\n });\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"api.cjs","names":["markerKey","z","hashSigningKey","finalUrl: URL","ok","fetchWithAuthFallback","err","data: unknown","stepSchema","errorSchema","getErrorMessage","batchSchema","json: unknown","rawData: unknown"],"sources":["../../src/api/api.ts"],"sourcesContent":["import type { fetch } from \"cross-fetch\";\nimport { z } from \"zod/v3\";\nimport type { ExecutionVersion } from \"../helpers/consts.ts\";\nimport { getErrorMessage } from \"../helpers/errors.ts\";\nimport { type Marker, markerKey } from \"../helpers/marker.ts\";\nimport { fetchWithAuthFallback } from \"../helpers/net.ts\";\nimport { hashSigningKey } from \"../helpers/strings.ts\";\nimport {\n type APIStepPayload,\n err,\n type MetadataTarget,\n type OutgoingOp,\n ok,\n type Result,\n} from \"../types.ts\";\nimport {\n type BatchResponse,\n batchSchema,\n type ErrorResponse,\n errorSchema,\n type StepsResponse,\n stepSchema,\n} from \"./schema.ts\";\n\ntype FetchT = typeof fetch;\n\n/**\n * Thrown when the executor has already requeued the current run. Returning\n * buffered ops after this would let the executor memoize them as canonical and\n * chain the next dispatch off this dead invocation, producing duplicates.\n */\nexport class StaleDispatchError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"StaleDispatchError\";\n }\n\n readonly [markerKey]: Marker = { kind: \"StaleDispatchError\" };\n}\n\nconst realtimeSubscriptionTokenSchema = z.object({\n jwt: z.string(),\n});\n\nconst sendSignalSuccessResponseSchema = z.object({\n data: z.object({\n run_id: z.string().min(1),\n }),\n});\n\nconst checkpointNewRunResponseSchema = z.object({\n data: z.object({\n fn_id: z.string().min(1),\n app_id: z.string().min(1),\n run_id: z.string().min(1),\n token: z.string().min(1).optional(),\n realtime_token: z.string().min(1),\n }),\n});\n\nexport namespace InngestApi {\n export interface Options {\n baseUrl: () => string | undefined;\n signingKey: () => string | undefined;\n signingKeyFallback: () => string | undefined;\n fetch: () => FetchT;\n }\n\n export interface Subscription {\n topics: string[];\n channel: string;\n }\n\n export interface PublishOptions extends Subscription {\n runId?: string;\n }\n\n export interface SendSignalOptions {\n signal: string;\n data?: unknown;\n }\n\n export interface SendSignalResponse {\n /**\n * The ID of the run that was signaled.\n *\n * If this is undefined, the signal could not be matched to a run.\n */\n runId: string | undefined;\n }\n}\n\nexport class InngestApi {\n private readonly _signingKey: () => string | undefined;\n private readonly _signingKeyFallback: () => string | undefined;\n private readonly _apiBaseUrl: () => string | undefined;\n private readonly _fetch: () => FetchT;\n\n constructor({\n baseUrl,\n signingKey,\n signingKeyFallback,\n fetch,\n }: InngestApi.Options) {\n this._apiBaseUrl = baseUrl;\n this._signingKey = signingKey;\n this._signingKeyFallback = signingKeyFallback;\n this._fetch = fetch;\n }\n\n private get apiBaseUrl(): string | undefined {\n return this._apiBaseUrl();\n }\n\n private get signingKey(): string | undefined {\n return this._signingKey();\n }\n\n private get signingKeyFallback(): string | undefined {\n return this._signingKeyFallback();\n }\n\n private get hashedKey(): string {\n return hashSigningKey(this.signingKey);\n }\n\n private get hashedFallbackKey(): string | undefined {\n if (!this.signingKeyFallback) {\n return;\n }\n\n return hashSigningKey(this.signingKeyFallback);\n }\n\n private async getTargetUrl(path: string): Promise<URL> {\n return new URL(path, this.apiBaseUrl);\n }\n\n private async req(\n url: string | URL,\n options?: RequestInit,\n ): Promise<Result<Response, unknown>> {\n const finalUrl: URL =\n typeof url === \"string\" ? await this.getTargetUrl(url) : url;\n\n try {\n const res = await fetchWithAuthFallback({\n authToken: this.hashedKey,\n authTokenFallback: this.hashedFallbackKey,\n fetch: this._fetch(),\n url: finalUrl,\n options: {\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options?.headers,\n },\n },\n });\n\n return ok(res);\n } catch (error) {\n return err(error);\n }\n }\n\n async getRunSteps(\n runId: string,\n ): Promise<Result<StepsResponse, ErrorResponse>> {\n const result = await this.req(\n `/v0/runs/${encodeURIComponent(runId)}/actions`,\n );\n if (result.ok) {\n const res = result.value;\n const data: unknown = await res.json();\n\n if (res.ok) {\n return ok(stepSchema.parse(data));\n }\n\n return err(errorSchema.parse(data));\n }\n\n return err({\n error: getErrorMessage(\n result.error,\n \"Unknown error retrieving step data\",\n ),\n status: 500,\n });\n }\n\n async getRunBatch(\n runId: string,\n ): Promise<Result<BatchResponse, ErrorResponse>> {\n const result = await this.req(\n `/v0/runs/${encodeURIComponent(runId)}/batch`,\n );\n if (result.ok) {\n const res = result.value;\n const data: unknown = await res.json();\n\n if (res.ok) {\n return ok(batchSchema.parse(data));\n }\n\n return err(errorSchema.parse(data));\n }\n\n return err({\n error: getErrorMessage(\n result.error,\n \"Unknown error retrieving event batch\",\n ),\n status: 500,\n });\n }\n\n async publish(\n publishOptions: InngestApi.PublishOptions,\n // biome-ignore lint/suspicious/noExplicitAny: anything is acceptable\n data: any,\n ): Promise<Result<void, ErrorResponse>> {\n // todo it may not be a \"text/stream\"\n const isStream = data instanceof ReadableStream;\n\n const url = await this.getTargetUrl(\"/v1/realtime/publish\");\n url.searchParams.set(\"channel\", publishOptions.channel || \"\");\n if (publishOptions.runId) {\n url.searchParams.set(\"run_id\", publishOptions.runId);\n }\n for (const topic of publishOptions.topics) {\n url.searchParams.append(\"topic\", topic);\n }\n\n const result = await this.req(url, {\n body: isStream\n ? data\n : typeof data === \"string\"\n ? data\n : JSON.stringify(data),\n method: \"POST\",\n headers: {\n \"Content-Type\": isStream ? \"text/stream\" : \"application/json\",\n },\n ...(isStream ? { duplex: \"half\" } : {}),\n });\n if (result.ok) {\n const res = result.value;\n if (!res.ok) {\n throw new Error(\n `Failed to publish event: ${res.status} ${res.statusText}`,\n );\n }\n\n return ok<void>(undefined);\n }\n\n return err({\n error: getErrorMessage(result.error, \"Unknown error publishing event\"),\n status: 500,\n });\n }\n\n async sendSignal(\n signalOptions: InngestApi.SendSignalOptions,\n options?: {\n headers?: Record<string, string>;\n },\n ): Promise<Result<InngestApi.SendSignalResponse, ErrorResponse>> {\n const url = await this.getTargetUrl(\"/v1/signals\");\n\n const body = {\n signal: signalOptions.signal,\n data: signalOptions.data,\n };\n\n return fetchWithAuthFallback({\n authToken: this.hashedKey,\n authTokenFallback: this.hashedFallbackKey,\n fetch: this._fetch(),\n url,\n options: {\n method: \"POST\",\n body: JSON.stringify(body),\n headers: {\n \"Content-Type\": \"application/json\",\n ...options?.headers,\n },\n },\n })\n .then(async (res) => {\n // A 404 is valid if the signal was not found.\n if (res.status === 404) {\n return ok<InngestApi.SendSignalResponse>({\n runId: undefined,\n });\n }\n\n // Save a clone of the response we can use to get the text of if we fail\n // to parse the JSON.\n const resClone = res.clone();\n\n // JSON!\n let json: unknown;\n try {\n json = await res.json();\n } catch {\n // res.json() failed so not a valid JSON response\n return err({\n error: `Failed to send signal: ${res.status} ${\n res.statusText\n } - ${await resClone.text()}`,\n status: res.status,\n });\n }\n\n // If we're not 2xx, something went wrong.\n if (!res.ok) {\n try {\n return err(errorSchema.parse(json));\n } catch {\n // schema parse failed\n return err({\n error: `Failed to send signal: ${res.status} ${\n res.statusText\n } - ${await res.text()}`,\n status: res.status,\n });\n }\n }\n\n // If we are 2xx, we should have a run_id.\n const parseRes = sendSignalSuccessResponseSchema.safeParse(json);\n if (!parseRes.success) {\n return err({\n error: `Successfully sent signal, but response parsing failed: ${\n res.status\n } ${res.statusText} - ${await resClone.text()}`,\n status: res.status,\n });\n }\n\n return ok({\n runId: parseRes.data.data.run_id,\n });\n })\n .catch((error) => {\n // Catch-all if various things go wrong\n return err({\n error: getErrorMessage(error, \"Unknown error sending signal\"),\n status: 500,\n });\n });\n }\n\n async getSubscriptionToken(\n channel: string,\n topics: string[],\n ): Promise<string> {\n const url = await this.getTargetUrl(\"/v1/realtime/token\");\n\n const body = topics.map((topic) => ({\n channel,\n name: topic,\n kind: \"run\",\n }));\n\n return fetchWithAuthFallback({\n authToken: this.hashedKey,\n authTokenFallback: this.hashedFallbackKey,\n fetch: this._fetch(),\n url,\n options: {\n method: \"POST\",\n body: JSON.stringify(body),\n headers: {\n \"Content-Type\": \"application/json\",\n },\n },\n })\n .then(async (res) => {\n if (!res.ok) {\n throw new Error(\n `Failed to get subscription token: ${res.status} ${\n res.statusText\n } - ${await res.text()}`,\n );\n }\n\n const data = realtimeSubscriptionTokenSchema.parse(await res.json());\n\n return data.jwt;\n })\n .catch((error) => {\n throw new Error(\n getErrorMessage(error, \"Unknown error getting subscription token\"),\n );\n });\n }\n\n async updateMetadata(\n args: {\n target: MetadataTarget;\n metadata: Array<{\n kind: string;\n op: string;\n values: Record<string, unknown>;\n }>;\n },\n options?: {\n headers?: Record<string, string>;\n },\n ): Promise<Result<void, ErrorResponse>> {\n const payload = { target: args.target, metadata: args.metadata };\n\n const result = await this.req(\n `/v1/runs/${encodeURIComponent(args.target.run_id)}/metadata`,\n {\n method: \"POST\",\n body: JSON.stringify(payload),\n headers: options?.headers,\n },\n );\n\n if (!result.ok) {\n return err({\n error: getErrorMessage(result.error, \"Unknown error updating metadata\"),\n status: 500,\n });\n }\n\n const res = result.value;\n if (res.ok) {\n return ok<void>(undefined);\n }\n\n const resClone = res.clone();\n\n let json: unknown;\n try {\n json = await res.json();\n } catch {\n return err({\n error: `Failed to update metadata: ${res.status} ${\n res.statusText\n } - ${await resClone.text()}`,\n status: res.status,\n });\n }\n\n try {\n return err(errorSchema.parse(json));\n } catch {\n return err({\n error: `Failed to update metadata: ${res.status} ${res.statusText}`,\n status: res.status,\n });\n }\n }\n\n /**\n * Start a new run, optionally passing in a number of steps to initialize the\n * run with.\n */\n async checkpointNewRun(args: {\n runId: string;\n event: APIStepPayload;\n executionVersion: ExecutionVersion;\n retries: number;\n steps?: OutgoingOp[];\n }): Promise<z.output<typeof checkpointNewRunResponseSchema>> {\n const body = JSON.stringify({\n run_id: args.runId,\n event: args.event,\n steps: args.steps,\n ts: new Date().valueOf(),\n request_version: args.executionVersion,\n retries: args.retries,\n });\n\n const result = await this.req(\"/v1/checkpoint\", {\n method: \"POST\",\n body,\n });\n\n if (!result.ok) {\n throw new Error(\n getErrorMessage(result.error, \"Unknown error checkpointing new run\"),\n );\n }\n\n const res = result.value;\n if (res.ok) {\n const rawData: unknown = await res.json();\n const data = checkpointNewRunResponseSchema.parse(rawData);\n\n return data;\n }\n\n throw new Error(\n `Failed to checkpoint new run: ${res.status} ${\n res.statusText\n } - ${await res.text()}`,\n );\n }\n\n /**\n * Checkpoint steps for a given sync run.\n */\n async checkpointSteps(args: {\n runId: string;\n fnId: string;\n appId: string;\n steps: OutgoingOp[];\n }): Promise<void> {\n const body = JSON.stringify({\n fn_id: args.fnId,\n app_id: args.appId,\n run_id: args.runId,\n steps: args.steps,\n ts: new Date().valueOf(),\n });\n\n const result = await this.req(\n `/v1/checkpoint/${encodeURIComponent(args.runId)}/steps`,\n {\n method: \"POST\",\n body,\n },\n );\n\n if (!result.ok) {\n throw new Error(\n getErrorMessage(result.error, \"Unknown error checkpointing steps\"),\n );\n }\n\n const res = result.value;\n if (!res.ok) {\n throw new Error(\n `Failed to checkpoint steps: ${res.status} ${\n res.statusText\n } - ${await res.text()}`,\n );\n }\n }\n\n /**\n * Checkpoint steps for a given async run.\n */\n async checkpointStepsAsync(args: {\n runId: string;\n fnId: string;\n queueItemId: string;\n generationId: number | undefined;\n requestId: string | undefined;\n requestStartedAt: number | undefined;\n steps: OutgoingOp[];\n }): Promise<void> {\n const body = JSON.stringify({\n run_id: args.runId,\n fn_id: args.fnId,\n qi_id: args.queueItemId,\n request_id: args.requestId,\n generation_id: args.generationId,\n request_started_at: args.requestStartedAt,\n steps: args.steps,\n ts: new Date().valueOf(),\n });\n\n const result = await this.req(\n `/v1/checkpoint/${encodeURIComponent(args.runId)}/async`,\n {\n method: \"POST\",\n body,\n },\n );\n\n if (!result.ok) {\n throw new Error(\n getErrorMessage(result.error, \"Unknown error checkpointing async\"),\n );\n }\n\n const res = result.value;\n // 409 means the executor has already requeued. Halt rather than returning\n // buffered ops, which would let the executor memoize them as canonical and\n // chain the next dispatch off this dead invocation. See EXE-1552.\n if (res.status === 409) {\n throw new StaleDispatchError(\n `Stale dispatch: checkpoint returned 409 (run ${args.runId})`,\n );\n }\n if (!res.ok) {\n throw new Error(\n `Failed to checkpoint async: ${res.status} ${\n res.statusText\n } - ${await res.text()}`,\n );\n }\n }\n\n /**\n * POST stream data to the realtime publish/tee endpoint, forwarding raw\n * bytes to all subscribers via the broadcaster.\n */\n async checkpointStream(args: {\n runId: string;\n body: ReadableStream;\n }): Promise<void> {\n const url = await this.getTargetUrl(\n `/v1/realtime/publish/tee?channel=${encodeURIComponent(args.runId)}`,\n );\n\n const res = await fetchWithAuthFallback({\n authToken: this.hashedKey,\n authTokenFallback: this.hashedFallbackKey,\n fetch: this._fetch(),\n url,\n options: {\n method: \"POST\",\n body: args.body,\n headers: {\n \"Content-Type\": \"application/octet-stream\",\n },\n // Required for streaming request bodies\n // @ts-expect-error duplex not in RequestInit types yet\n duplex: \"half\",\n },\n });\n\n if (!res.ok) {\n throw new Error(\n `Failed to stream checkpoint: ${res.status} ${\n res.statusText\n } - ${await res.text()}`,\n );\n }\n }\n\n /**\n * Build the full SSE URL for a run's stream channel using the given token.\n */\n async getRealtimeStreamRedirect(token: string): Promise<{ url: string }> {\n const sseUrl = await this.getTargetUrl(\"/v1/realtime/sse\");\n sseUrl.searchParams.set(\"token\", token);\n\n return { url: sseUrl.toString() };\n }\n\n /**\n * Fetch the output of a completed run using a token.\n *\n * This uses token-based auth (not signing key) and is intended for use by\n * proxy endpoints that fetch results on behalf of users.\n *\n * @param runId - The ID of the run to fetch output for\n * @param token - The token used to authenticate the request\n * @returns The raw Response from the API\n */\n async getRunOutput(runId: string, token: string): Promise<Response> {\n const url = await this.getTargetUrl(\n `/v1/http/runs/${encodeURIComponent(runId)}/output`,\n );\n url.searchParams.set(\"token\", token);\n\n return this._fetch()(url.toString(), {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\" },\n });\n }\n}\n"],"mappings":"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"}
package/api/api.d.cts CHANGED
@@ -6,6 +6,12 @@ import { fetch } from "cross-fetch";
6
6
 
7
7
  //#region src/api/api.d.ts
8
8
  type FetchT = typeof fetch;
9
+ /**
10
+ * Thrown when the executor has already requeued the current run. Returning
11
+ * buffered ops after this would let the executor memoize them as canonical and
12
+ * chain the next dispatch off this dead invocation, producing duplicates.
13
+ */
14
+
9
15
  declare const checkpointNewRunResponseSchema: z.ZodObject<{
10
16
  data: z.ZodObject<{
11
17
  fn_id: z.ZodString;
@@ -132,6 +138,9 @@ declare class InngestApi {
132
138
  runId: string;
133
139
  fnId: string;
134
140
  queueItemId: string;
141
+ generationId: number | undefined;
142
+ requestId: string | undefined;
143
+ requestStartedAt: number | undefined;
135
144
  steps: OutgoingOp[];
136
145
  }): Promise<void>;
137
146
  /**
package/api/api.d.cts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.cts","names":[],"sources":["../../src/api/api.ts"],"sourcesContent":[],"mappings":";;;;;;;KAuBK,MAAA,UAAgB;cAYf,gCAA8B,CAAA,CAAA;EAZ/B,IAAA,aAAM,CAAA;IAYL,KAAA,aAAA;IAQJ,MAAA,aAAA;;;;;;;;;;KARkC;IAAA,MAAA,EAAA,MAAA;IAUnB,KAAA,EAAA,MAAU;IAAA,MAAA,EAAA,MAAA;IAKV,cAAA,EAAA,MAAA;IAQyB,KAAA,CAAA,EAAA,MAAA,GAAA,SAAA;EAAY,CAAA,CAAA;AAmBtD,CAAA,EAAA,OAAa,cAAU,EAAA;EAAA,IAAA,EAAA;IAOnB,MAAA,EAAA,MAAA;IACA,KAAA,EAAA,MAAA;IACA,MAAA,EAAA,MAAA;IACA,cAAA,EAAA,MAAA;IACC,KAAA,CAAA,EAAA,MAAW,GAAA,SAAA;;;MAiEH,EAAA;IAAR,MAAA,EAAA,MAAA;IA0Be,KAAA,EAAA,MAAA;IAAe,MAAA,EAAA,MAAA;IAAtB,cAAA,EAAA,MAAA;IAAR,KAAA,CAAA,EAAA,MAAA,GAAA,SAAA;;;AA4BQ,kBAlKI,UAAA,CAkKJ;YAAR,OAAA,CAAA;IA2Cc,OAAA,EAAA,GAAW,GAAA,MAAA,GAAA,SAAA;IAEd,UAAA,EAAA,GAAA,GAAA,MAAA,GAAA,SAAA;IAEI,kBAAW,EAAA,GAAA,GAAA,MAAA,GAAA,SAAA;IAAoB,KAAA,EAAA,GAAA,GA5MlC,MA4MkC;;YAA9C,YAAA,CAAA;IA0FA,MAAA,EAAA,MAAA,EAAA;IA4CS,OAAA,EAAA,MAAA;;YACE,cAAA,SA3U0B,YA2U1B,CAAA;IAOA,KAAA,CAAA,EAAA,MAAA;;YAEH,iBAAA,CAAA;IAAR,MAAA,EAAA,MAAA;IAsDM,IAAA,CAAA,EAAA,OAAA;;YAGC,kBAAA,CAAA;IACkB;;;;;IAoFnB,KAAA,EAAA,MAAA,GAAA,SAAA;;;AAyCL,cAxfO,UAAA,CAwfP;mBAkC4C,WAAA;mBAiBU,mBAAA;mBAAR,WAAA;EAAO,iBAAA,MAAA;;;;;;KAhiBtD,UAAA,CAAW;;;;;;;;8BAiEX,QAAQ,OAAO,eAAe;8BA0B9B,QAAQ,OAAO,eAAe;0BAyBf,UAAA,CAAW,4BAG1B,QAAQ,aAAa;4BA2CP,UAAA,CAAW;cAEd;MAEX,QAAQ,OAAO,UAAA,CAAW,oBAAoB;2DA0F9C;;YA4CS;cACE;;;cAGA;;;cAIA;MAEX,QAAQ,aAAa;;;;;;;WAsDf;sBACW;;YAEV;MACN,QAAQ,CAAA,CAAE,cAAc;;;;;;;;WA2CnB;MACL;;;;;;;;WAwCK;MACL;;;;;;;UAuCI;MACJ;;;;4CAkC4C;;;;;;;;;;;;;8CAiBE,QAAQ"}
1
+ {"version":3,"file":"api.d.cts","names":[],"sources":["../../src/api/api.ts"],"sourcesContent":[],"mappings":";;;;;;;KAwBK,MAAA,UAAgB;AAFA;AAgBpB;;;;;cAYK,gCAA8B,CAAA,CAAA;;;IAAA,MAAA,aAAA;IAAA,MAAA,aAAA;IAUnB,KAAA,eAAU,YAAA,CAAA;IAAA,cAAA,aAAA;KAKV,OAAA,cAAA,EAAA;IAQyB,MAAA,EAAA,MAAA;IAAY,KAAA,EAAA,MAAA;IAmBzC,MAAA,EAAA,MAAU;IAAA,cAAA,EAAA,MAAA;IAOnB,KAAA,CAAA,EAAA,MAAA,GAAA,SAAA;KACA;IACA,MAAA,EAAA,MAAA;IACA,KAAA,EAAA,MAAA;IACC,MAAA,EAAA,MAAW;IAiEI,cAAA,EAAA,MAAA;IAAe,KAAA,CAAA,EAAA,MAAA,GAAA,SAAA;;UAA9B,cAAA,EAAA;MA0Be,EAAA;IAAe,MAAA,EAAA,MAAA;IAAtB,KAAA,EAAA,MAAA;IAAR,MAAA,EAAA,MAAA;IAyBe,cAAW,EAAA,MAAA;IAGL,KAAA,CAAA,EAAA,MAAA,GAAA,SAAA;;;MA2CP,EAAA;IAEH,MAAA,EAAA,MAAA;IAEI,KAAA,EAAA,MAAW;IAAoB,MAAA,EAAA,MAAA;IAAtC,cAAA,EAAA,MAAA;IAAR,KAAA,CAAA,EAAA,MAAA,GAAA,SAAA;;;AA0IW,kBA3VC,UAAA,CA2VD;YAHA,OAAA,CAAA;IAOA,OAAA,EAAA,GAAA,GAAA,MAAA,GAAA,SAAA;IAEU,UAAA,EAAA,GAAA,GAAA,MAAA,GAAA,SAAA;IAAb,kBAAA,EAAA,GAAA,GAAA,MAAA,GAAA,SAAA;IAAR,KAAA,EAAA,GAAA,GA5VY,MA4VZ;;YAuDiB,YAAA,CAAA;IAEV,MAAA,EAAA,MAAA,EAAA;IACkB,OAAA,EAAA,MAAA;;YAAxB,cAAA,SA9YoC,YA8YpC,CAAA;IA2CK,KAAA,CAAA,EAAA,MAAA;;YA4CA,iBAAA,CAAA;IACL,MAAA,EAAA,MAAA;IAkDI,IAAA,CAAA,EAAA,OAAA;;YAmCwC,kBAAA,CAAA;IAiBU;;;;;;;;cAzjB/C,UAAA;;;;;;;;;;KAWR,UAAA,CAAW;;;;;;;;8BAiEX,QAAQ,OAAO,eAAe;8BA0B9B,QAAQ,OAAO,eAAe;0BAyBf,UAAA,CAAW,4BAG1B,QAAQ,aAAa;4BA2CP,UAAA,CAAW;cAEd;MAEX,QAAQ,OAAO,UAAA,CAAW,oBAAoB;2DA0F9C;;YA4CS;cACE;;;cAGA;;;cAIA;MAEX,QAAQ,aAAa;;;;;;;WAsDf;sBACW;;YAEV;MACN,QAAQ,CAAA,CAAE,cAAc;;;;;;;;WA2CnB;MACL;;;;;;;;;;;WA2CK;MACL;;;;;;;UAkDI;MACJ;;;;4CAkC4C;;;;;;;;;;;;;8CAiBE,QAAQ"}
package/api/api.d.ts CHANGED
@@ -6,6 +6,12 @@ import { fetch } from "cross-fetch";
6
6
 
7
7
  //#region src/api/api.d.ts
8
8
  type FetchT = typeof fetch;
9
+ /**
10
+ * Thrown when the executor has already requeued the current run. Returning
11
+ * buffered ops after this would let the executor memoize them as canonical and
12
+ * chain the next dispatch off this dead invocation, producing duplicates.
13
+ */
14
+
9
15
  declare const checkpointNewRunResponseSchema: z.ZodObject<{
10
16
  data: z.ZodObject<{
11
17
  fn_id: z.ZodString;
@@ -132,6 +138,9 @@ declare class InngestApi {
132
138
  runId: string;
133
139
  fnId: string;
134
140
  queueItemId: string;
141
+ generationId: number | undefined;
142
+ requestId: string | undefined;
143
+ requestStartedAt: number | undefined;
135
144
  steps: OutgoingOp[];
136
145
  }): Promise<void>;
137
146
  /**
package/api/api.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","names":[],"sources":["../../src/api/api.ts"],"sourcesContent":[],"mappings":";;;;;;;KAuBK,MAAA,UAAgB;cAYf,gCAA8B,CAAA,CAAA;EAZ/B,IAAA,aAAM,CAAA;IAYL,KAAA,aAAA;IAQJ,MAAA,aAAA;;;;;;;;;;KARkC;IAAA,MAAA,EAAA,MAAA;IAUnB,KAAA,EAAA,MAAU;IAAA,MAAA,EAAA,MAAA;IAKV,cAAA,EAAA,MAAA;IAQyB,KAAA,CAAA,EAAA,MAAA,GAAA,SAAA;EAAY,CAAA,CAAA;AAmBtD,CAAA,EAAA,OAAa,cAAU,EAAA;EAAA,IAAA,EAAA;IAOnB,MAAA,EAAA,MAAA;IACA,KAAA,EAAA,MAAA;IACA,MAAA,EAAA,MAAA;IACA,cAAA,EAAA,MAAA;IACC,KAAA,CAAA,EAAA,MAAW,GAAA,SAAA;;;MAiEH,EAAA;IAAR,MAAA,EAAA,MAAA;IA0Be,KAAA,EAAA,MAAA;IAAe,MAAA,EAAA,MAAA;IAAtB,cAAA,EAAA,MAAA;IAAR,KAAA,CAAA,EAAA,MAAA,GAAA,SAAA;;;AA4BQ,kBAlKI,UAAA,CAkKJ;YAAR,OAAA,CAAA;IA2Cc,OAAA,EAAA,GAAW,GAAA,MAAA,GAAA,SAAA;IAEd,UAAA,EAAA,GAAA,GAAA,MAAA,GAAA,SAAA;IAEI,kBAAW,EAAA,GAAA,GAAA,MAAA,GAAA,SAAA;IAAoB,KAAA,EAAA,GAAA,GA5MlC,MA4MkC;;YAA9C,YAAA,CAAA;IA0FA,MAAA,EAAA,MAAA,EAAA;IA4CS,OAAA,EAAA,MAAA;;YACE,cAAA,SA3U0B,YA2U1B,CAAA;IAOA,KAAA,CAAA,EAAA,MAAA;;YAEH,iBAAA,CAAA;IAAR,MAAA,EAAA,MAAA;IAsDM,IAAA,CAAA,EAAA,OAAA;;YAGC,kBAAA,CAAA;IACkB;;;;;IAoFnB,KAAA,EAAA,MAAA,GAAA,SAAA;;;AAyCL,cAxfO,UAAA,CAwfP;mBAkC4C,WAAA;mBAiBU,mBAAA;mBAAR,WAAA;EAAO,iBAAA,MAAA;;;;;;KAhiBtD,UAAA,CAAW;;;;;;;;8BAiEX,QAAQ,OAAO,eAAe;8BA0B9B,QAAQ,OAAO,eAAe;0BAyBf,UAAA,CAAW,4BAG1B,QAAQ,aAAa;4BA2CP,UAAA,CAAW;cAEd;MAEX,QAAQ,OAAO,UAAA,CAAW,oBAAoB;2DA0F9C;;YA4CS;cACE;;;cAGA;;;cAIA;MAEX,QAAQ,aAAa;;;;;;;WAsDf;sBACW;;YAEV;MACN,QAAQ,CAAA,CAAE,cAAc;;;;;;;;WA2CnB;MACL;;;;;;;;WAwCK;MACL;;;;;;;UAuCI;MACJ;;;;4CAkC4C;;;;;;;;;;;;;8CAiBE,QAAQ"}
1
+ {"version":3,"file":"api.d.ts","names":[],"sources":["../../src/api/api.ts"],"sourcesContent":[],"mappings":";;;;;;;KAwBK,MAAA,UAAgB;AAFA;AAgBpB;;;;;cAYK,gCAA8B,CAAA,CAAA;;;IAAA,MAAA,aAAA;IAAA,MAAA,aAAA;IAUnB,KAAA,eAAU,YAAA,CAAA;IAAA,cAAA,aAAA;KAKV,OAAA,cAAA,EAAA;IAQyB,MAAA,EAAA,MAAA;IAAY,KAAA,EAAA,MAAA;IAmBzC,MAAA,EAAA,MAAU;IAAA,cAAA,EAAA,MAAA;IAOnB,KAAA,CAAA,EAAA,MAAA,GAAA,SAAA;KACA;IACA,MAAA,EAAA,MAAA;IACA,KAAA,EAAA,MAAA;IACC,MAAA,EAAA,MAAW;IAiEI,cAAA,EAAA,MAAA;IAAe,KAAA,CAAA,EAAA,MAAA,GAAA,SAAA;;UAA9B,cAAA,EAAA;MA0Be,EAAA;IAAe,MAAA,EAAA,MAAA;IAAtB,KAAA,EAAA,MAAA;IAAR,MAAA,EAAA,MAAA;IAyBe,cAAW,EAAA,MAAA;IAGL,KAAA,CAAA,EAAA,MAAA,GAAA,SAAA;;;MA2CP,EAAA;IAEH,MAAA,EAAA,MAAA;IAEI,KAAA,EAAA,MAAW;IAAoB,MAAA,EAAA,MAAA;IAAtC,cAAA,EAAA,MAAA;IAAR,KAAA,CAAA,EAAA,MAAA,GAAA,SAAA;;;AA0IW,kBA3VC,UAAA,CA2VD;YAHA,OAAA,CAAA;IAOA,OAAA,EAAA,GAAA,GAAA,MAAA,GAAA,SAAA;IAEU,UAAA,EAAA,GAAA,GAAA,MAAA,GAAA,SAAA;IAAb,kBAAA,EAAA,GAAA,GAAA,MAAA,GAAA,SAAA;IAAR,KAAA,EAAA,GAAA,GA5VY,MA4VZ;;YAuDiB,YAAA,CAAA;IAEV,MAAA,EAAA,MAAA,EAAA;IACkB,OAAA,EAAA,MAAA;;YAAxB,cAAA,SA9YoC,YA8YpC,CAAA;IA2CK,KAAA,CAAA,EAAA,MAAA;;YA4CA,iBAAA,CAAA;IACL,MAAA,EAAA,MAAA;IAkDI,IAAA,CAAA,EAAA,OAAA;;YAmCwC,kBAAA,CAAA;IAiBU;;;;;;;;cAzjB/C,UAAA;;;;;;;;;;KAWR,UAAA,CAAW;;;;;;;;8BAiEX,QAAQ,OAAO,eAAe;8BA0B9B,QAAQ,OAAO,eAAe;0BAyBf,UAAA,CAAW,4BAG1B,QAAQ,aAAa;4BA2CP,UAAA,CAAW;cAEd;MAEX,QAAQ,OAAO,UAAA,CAAW,oBAAoB;2DA0F9C;;YA4CS;cACE;;;cAGA;;;cAIA;MAEX,QAAQ,aAAa;;;;;;;WAsDf;sBACW;;YAEV;MACN,QAAQ,CAAA,CAAE,cAAc;;;;;;;;WA2CnB;MACL;;;;;;;;;;;WA2CK;MACL;;;;;;;UAkDI;MACJ;;;;4CAkC4C;;;;;;;;;;;;;8CAiBE,QAAQ"}
package/api/api.js CHANGED
@@ -1,11 +1,24 @@
1
1
  import { getErrorMessage } from "../helpers/errors.js";
2
2
  import { err, ok } from "../types.js";
3
3
  import { batchSchema, errorSchema, stepSchema } from "./schema.js";
4
+ import { markerKey } from "../helpers/marker.js";
4
5
  import { hashSigningKey } from "../helpers/strings.js";
5
6
  import { fetchWithAuthFallback } from "../helpers/net.js";
6
7
  import { z } from "zod/v3";
7
8
 
8
9
  //#region src/api/api.ts
10
+ /**
11
+ * Thrown when the executor has already requeued the current run. Returning
12
+ * buffered ops after this would let the executor memoize them as canonical and
13
+ * chain the next dispatch off this dead invocation, producing duplicates.
14
+ */
15
+ var StaleDispatchError = class extends Error {
16
+ constructor(message) {
17
+ super(message);
18
+ this.name = "StaleDispatchError";
19
+ }
20
+ [markerKey] = { kind: "StaleDispatchError" };
21
+ };
9
22
  const realtimeSubscriptionTokenSchema = z.object({ jwt: z.string() });
10
23
  const sendSignalSuccessResponseSchema = z.object({ data: z.object({ run_id: z.string().min(1) }) });
11
24
  const checkpointNewRunResponseSchema = z.object({ data: z.object({
@@ -276,6 +289,9 @@ var InngestApi = class {
276
289
  run_id: args.runId,
277
290
  fn_id: args.fnId,
278
291
  qi_id: args.queueItemId,
292
+ request_id: args.requestId,
293
+ generation_id: args.generationId,
294
+ request_started_at: args.requestStartedAt,
279
295
  steps: args.steps,
280
296
  ts: (/* @__PURE__ */ new Date()).valueOf()
281
297
  });
@@ -285,6 +301,7 @@ var InngestApi = class {
285
301
  });
286
302
  if (!result.ok) throw new Error(getErrorMessage(result.error, "Unknown error checkpointing async"));
287
303
  const res = result.value;
304
+ if (res.status === 409) throw new StaleDispatchError(`Stale dispatch: checkpoint returned 409 (run ${args.runId})`);
288
305
  if (!res.ok) throw new Error(`Failed to checkpoint async: ${res.status} ${res.statusText} - ${await res.text()}`);
289
306
  }
290
307
  /**
package/api/api.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","names":["finalUrl: URL","data: unknown","json: unknown","rawData: unknown"],"sources":["../../src/api/api.ts"],"sourcesContent":["import type { fetch } from \"cross-fetch\";\nimport { z } from \"zod/v3\";\nimport type { ExecutionVersion } from \"../helpers/consts.ts\";\nimport { getErrorMessage } from \"../helpers/errors.ts\";\nimport { fetchWithAuthFallback } from \"../helpers/net.ts\";\nimport { hashSigningKey } from \"../helpers/strings.ts\";\nimport {\n type APIStepPayload,\n err,\n type MetadataTarget,\n type OutgoingOp,\n ok,\n type Result,\n} from \"../types.ts\";\nimport {\n type BatchResponse,\n batchSchema,\n type ErrorResponse,\n errorSchema,\n type StepsResponse,\n stepSchema,\n} from \"./schema.ts\";\n\ntype FetchT = typeof fetch;\n\nconst realtimeSubscriptionTokenSchema = z.object({\n jwt: z.string(),\n});\n\nconst sendSignalSuccessResponseSchema = z.object({\n data: z.object({\n run_id: z.string().min(1),\n }),\n});\n\nconst checkpointNewRunResponseSchema = z.object({\n data: z.object({\n fn_id: z.string().min(1),\n app_id: z.string().min(1),\n run_id: z.string().min(1),\n token: z.string().min(1).optional(),\n realtime_token: z.string().min(1),\n }),\n});\n\nexport namespace InngestApi {\n export interface Options {\n baseUrl: () => string | undefined;\n signingKey: () => string | undefined;\n signingKeyFallback: () => string | undefined;\n fetch: () => FetchT;\n }\n\n export interface Subscription {\n topics: string[];\n channel: string;\n }\n\n export interface PublishOptions extends Subscription {\n runId?: string;\n }\n\n export interface SendSignalOptions {\n signal: string;\n data?: unknown;\n }\n\n export interface SendSignalResponse {\n /**\n * The ID of the run that was signaled.\n *\n * If this is undefined, the signal could not be matched to a run.\n */\n runId: string | undefined;\n }\n}\n\nexport class InngestApi {\n private readonly _signingKey: () => string | undefined;\n private readonly _signingKeyFallback: () => string | undefined;\n private readonly _apiBaseUrl: () => string | undefined;\n private readonly _fetch: () => FetchT;\n\n constructor({\n baseUrl,\n signingKey,\n signingKeyFallback,\n fetch,\n }: InngestApi.Options) {\n this._apiBaseUrl = baseUrl;\n this._signingKey = signingKey;\n this._signingKeyFallback = signingKeyFallback;\n this._fetch = fetch;\n }\n\n private get apiBaseUrl(): string | undefined {\n return this._apiBaseUrl();\n }\n\n private get signingKey(): string | undefined {\n return this._signingKey();\n }\n\n private get signingKeyFallback(): string | undefined {\n return this._signingKeyFallback();\n }\n\n private get hashedKey(): string {\n return hashSigningKey(this.signingKey);\n }\n\n private get hashedFallbackKey(): string | undefined {\n if (!this.signingKeyFallback) {\n return;\n }\n\n return hashSigningKey(this.signingKeyFallback);\n }\n\n private async getTargetUrl(path: string): Promise<URL> {\n return new URL(path, this.apiBaseUrl);\n }\n\n private async req(\n url: string | URL,\n options?: RequestInit,\n ): Promise<Result<Response, unknown>> {\n const finalUrl: URL =\n typeof url === \"string\" ? await this.getTargetUrl(url) : url;\n\n try {\n const res = await fetchWithAuthFallback({\n authToken: this.hashedKey,\n authTokenFallback: this.hashedFallbackKey,\n fetch: this._fetch(),\n url: finalUrl,\n options: {\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options?.headers,\n },\n },\n });\n\n return ok(res);\n } catch (error) {\n return err(error);\n }\n }\n\n async getRunSteps(\n runId: string,\n ): Promise<Result<StepsResponse, ErrorResponse>> {\n const result = await this.req(\n `/v0/runs/${encodeURIComponent(runId)}/actions`,\n );\n if (result.ok) {\n const res = result.value;\n const data: unknown = await res.json();\n\n if (res.ok) {\n return ok(stepSchema.parse(data));\n }\n\n return err(errorSchema.parse(data));\n }\n\n return err({\n error: getErrorMessage(\n result.error,\n \"Unknown error retrieving step data\",\n ),\n status: 500,\n });\n }\n\n async getRunBatch(\n runId: string,\n ): Promise<Result<BatchResponse, ErrorResponse>> {\n const result = await this.req(\n `/v0/runs/${encodeURIComponent(runId)}/batch`,\n );\n if (result.ok) {\n const res = result.value;\n const data: unknown = await res.json();\n\n if (res.ok) {\n return ok(batchSchema.parse(data));\n }\n\n return err(errorSchema.parse(data));\n }\n\n return err({\n error: getErrorMessage(\n result.error,\n \"Unknown error retrieving event batch\",\n ),\n status: 500,\n });\n }\n\n async publish(\n publishOptions: InngestApi.PublishOptions,\n // biome-ignore lint/suspicious/noExplicitAny: anything is acceptable\n data: any,\n ): Promise<Result<void, ErrorResponse>> {\n // todo it may not be a \"text/stream\"\n const isStream = data instanceof ReadableStream;\n\n const url = await this.getTargetUrl(\"/v1/realtime/publish\");\n url.searchParams.set(\"channel\", publishOptions.channel || \"\");\n if (publishOptions.runId) {\n url.searchParams.set(\"run_id\", publishOptions.runId);\n }\n for (const topic of publishOptions.topics) {\n url.searchParams.append(\"topic\", topic);\n }\n\n const result = await this.req(url, {\n body: isStream\n ? data\n : typeof data === \"string\"\n ? data\n : JSON.stringify(data),\n method: \"POST\",\n headers: {\n \"Content-Type\": isStream ? \"text/stream\" : \"application/json\",\n },\n ...(isStream ? { duplex: \"half\" } : {}),\n });\n if (result.ok) {\n const res = result.value;\n if (!res.ok) {\n throw new Error(\n `Failed to publish event: ${res.status} ${res.statusText}`,\n );\n }\n\n return ok<void>(undefined);\n }\n\n return err({\n error: getErrorMessage(result.error, \"Unknown error publishing event\"),\n status: 500,\n });\n }\n\n async sendSignal(\n signalOptions: InngestApi.SendSignalOptions,\n options?: {\n headers?: Record<string, string>;\n },\n ): Promise<Result<InngestApi.SendSignalResponse, ErrorResponse>> {\n const url = await this.getTargetUrl(\"/v1/signals\");\n\n const body = {\n signal: signalOptions.signal,\n data: signalOptions.data,\n };\n\n return fetchWithAuthFallback({\n authToken: this.hashedKey,\n authTokenFallback: this.hashedFallbackKey,\n fetch: this._fetch(),\n url,\n options: {\n method: \"POST\",\n body: JSON.stringify(body),\n headers: {\n \"Content-Type\": \"application/json\",\n ...options?.headers,\n },\n },\n })\n .then(async (res) => {\n // A 404 is valid if the signal was not found.\n if (res.status === 404) {\n return ok<InngestApi.SendSignalResponse>({\n runId: undefined,\n });\n }\n\n // Save a clone of the response we can use to get the text of if we fail\n // to parse the JSON.\n const resClone = res.clone();\n\n // JSON!\n let json: unknown;\n try {\n json = await res.json();\n } catch {\n // res.json() failed so not a valid JSON response\n return err({\n error: `Failed to send signal: ${res.status} ${\n res.statusText\n } - ${await resClone.text()}`,\n status: res.status,\n });\n }\n\n // If we're not 2xx, something went wrong.\n if (!res.ok) {\n try {\n return err(errorSchema.parse(json));\n } catch {\n // schema parse failed\n return err({\n error: `Failed to send signal: ${res.status} ${\n res.statusText\n } - ${await res.text()}`,\n status: res.status,\n });\n }\n }\n\n // If we are 2xx, we should have a run_id.\n const parseRes = sendSignalSuccessResponseSchema.safeParse(json);\n if (!parseRes.success) {\n return err({\n error: `Successfully sent signal, but response parsing failed: ${\n res.status\n } ${res.statusText} - ${await resClone.text()}`,\n status: res.status,\n });\n }\n\n return ok({\n runId: parseRes.data.data.run_id,\n });\n })\n .catch((error) => {\n // Catch-all if various things go wrong\n return err({\n error: getErrorMessage(error, \"Unknown error sending signal\"),\n status: 500,\n });\n });\n }\n\n async getSubscriptionToken(\n channel: string,\n topics: string[],\n ): Promise<string> {\n const url = await this.getTargetUrl(\"/v1/realtime/token\");\n\n const body = topics.map((topic) => ({\n channel,\n name: topic,\n kind: \"run\",\n }));\n\n return fetchWithAuthFallback({\n authToken: this.hashedKey,\n authTokenFallback: this.hashedFallbackKey,\n fetch: this._fetch(),\n url,\n options: {\n method: \"POST\",\n body: JSON.stringify(body),\n headers: {\n \"Content-Type\": \"application/json\",\n },\n },\n })\n .then(async (res) => {\n if (!res.ok) {\n throw new Error(\n `Failed to get subscription token: ${res.status} ${\n res.statusText\n } - ${await res.text()}`,\n );\n }\n\n const data = realtimeSubscriptionTokenSchema.parse(await res.json());\n\n return data.jwt;\n })\n .catch((error) => {\n throw new Error(\n getErrorMessage(error, \"Unknown error getting subscription token\"),\n );\n });\n }\n\n async updateMetadata(\n args: {\n target: MetadataTarget;\n metadata: Array<{\n kind: string;\n op: string;\n values: Record<string, unknown>;\n }>;\n },\n options?: {\n headers?: Record<string, string>;\n },\n ): Promise<Result<void, ErrorResponse>> {\n const payload = { target: args.target, metadata: args.metadata };\n\n const result = await this.req(\n `/v1/runs/${encodeURIComponent(args.target.run_id)}/metadata`,\n {\n method: \"POST\",\n body: JSON.stringify(payload),\n headers: options?.headers,\n },\n );\n\n if (!result.ok) {\n return err({\n error: getErrorMessage(result.error, \"Unknown error updating metadata\"),\n status: 500,\n });\n }\n\n const res = result.value;\n if (res.ok) {\n return ok<void>(undefined);\n }\n\n const resClone = res.clone();\n\n let json: unknown;\n try {\n json = await res.json();\n } catch {\n return err({\n error: `Failed to update metadata: ${res.status} ${\n res.statusText\n } - ${await resClone.text()}`,\n status: res.status,\n });\n }\n\n try {\n return err(errorSchema.parse(json));\n } catch {\n return err({\n error: `Failed to update metadata: ${res.status} ${res.statusText}`,\n status: res.status,\n });\n }\n }\n\n /**\n * Start a new run, optionally passing in a number of steps to initialize the\n * run with.\n */\n async checkpointNewRun(args: {\n runId: string;\n event: APIStepPayload;\n executionVersion: ExecutionVersion;\n retries: number;\n steps?: OutgoingOp[];\n }): Promise<z.output<typeof checkpointNewRunResponseSchema>> {\n const body = JSON.stringify({\n run_id: args.runId,\n event: args.event,\n steps: args.steps,\n ts: new Date().valueOf(),\n request_version: args.executionVersion,\n retries: args.retries,\n });\n\n const result = await this.req(\"/v1/checkpoint\", {\n method: \"POST\",\n body,\n });\n\n if (!result.ok) {\n throw new Error(\n getErrorMessage(result.error, \"Unknown error checkpointing new run\"),\n );\n }\n\n const res = result.value;\n if (res.ok) {\n const rawData: unknown = await res.json();\n const data = checkpointNewRunResponseSchema.parse(rawData);\n\n return data;\n }\n\n throw new Error(\n `Failed to checkpoint new run: ${res.status} ${\n res.statusText\n } - ${await res.text()}`,\n );\n }\n\n /**\n * Checkpoint steps for a given sync run.\n */\n async checkpointSteps(args: {\n runId: string;\n fnId: string;\n appId: string;\n steps: OutgoingOp[];\n }): Promise<void> {\n const body = JSON.stringify({\n fn_id: args.fnId,\n app_id: args.appId,\n run_id: args.runId,\n steps: args.steps,\n ts: new Date().valueOf(),\n });\n\n const result = await this.req(\n `/v1/checkpoint/${encodeURIComponent(args.runId)}/steps`,\n {\n method: \"POST\",\n body,\n },\n );\n\n if (!result.ok) {\n throw new Error(\n getErrorMessage(result.error, \"Unknown error checkpointing steps\"),\n );\n }\n\n const res = result.value;\n if (!res.ok) {\n throw new Error(\n `Failed to checkpoint steps: ${res.status} ${\n res.statusText\n } - ${await res.text()}`,\n );\n }\n }\n\n /**\n * Checkpoint steps for a given async run.\n */\n async checkpointStepsAsync(args: {\n runId: string;\n fnId: string;\n queueItemId: string;\n steps: OutgoingOp[];\n }): Promise<void> {\n const body = JSON.stringify({\n run_id: args.runId,\n fn_id: args.fnId,\n qi_id: args.queueItemId,\n steps: args.steps,\n ts: new Date().valueOf(),\n });\n\n const result = await this.req(\n `/v1/checkpoint/${encodeURIComponent(args.runId)}/async`,\n {\n method: \"POST\",\n body,\n },\n );\n\n if (!result.ok) {\n throw new Error(\n getErrorMessage(result.error, \"Unknown error checkpointing async\"),\n );\n }\n\n const res = result.value;\n if (!res.ok) {\n throw new Error(\n `Failed to checkpoint async: ${res.status} ${\n res.statusText\n } - ${await res.text()}`,\n );\n }\n }\n\n /**\n * POST stream data to the realtime publish/tee endpoint, forwarding raw\n * bytes to all subscribers via the broadcaster.\n */\n async checkpointStream(args: {\n runId: string;\n body: ReadableStream;\n }): Promise<void> {\n const url = await this.getTargetUrl(\n `/v1/realtime/publish/tee?channel=${encodeURIComponent(args.runId)}`,\n );\n\n const res = await fetchWithAuthFallback({\n authToken: this.hashedKey,\n authTokenFallback: this.hashedFallbackKey,\n fetch: this._fetch(),\n url,\n options: {\n method: \"POST\",\n body: args.body,\n headers: {\n \"Content-Type\": \"application/octet-stream\",\n },\n // Required for streaming request bodies\n // @ts-expect-error duplex not in RequestInit types yet\n duplex: \"half\",\n },\n });\n\n if (!res.ok) {\n throw new Error(\n `Failed to stream checkpoint: ${res.status} ${\n res.statusText\n } - ${await res.text()}`,\n );\n }\n }\n\n /**\n * Build the full SSE URL for a run's stream channel using the given token.\n */\n async getRealtimeStreamRedirect(token: string): Promise<{ url: string }> {\n const sseUrl = await this.getTargetUrl(\"/v1/realtime/sse\");\n sseUrl.searchParams.set(\"token\", token);\n\n return { url: sseUrl.toString() };\n }\n\n /**\n * Fetch the output of a completed run using a token.\n *\n * This uses token-based auth (not signing key) and is intended for use by\n * proxy endpoints that fetch results on behalf of users.\n *\n * @param runId - The ID of the run to fetch output for\n * @param token - The token used to authenticate the request\n * @returns The raw Response from the API\n */\n async getRunOutput(runId: string, token: string): Promise<Response> {\n const url = await this.getTargetUrl(\n `/v1/http/runs/${encodeURIComponent(runId)}/output`,\n );\n url.searchParams.set(\"token\", token);\n\n return this._fetch()(url.toString(), {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\" },\n });\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"api.js","names":["finalUrl: URL","data: unknown","json: unknown","rawData: unknown"],"sources":["../../src/api/api.ts"],"sourcesContent":["import type { fetch } from \"cross-fetch\";\nimport { z } from \"zod/v3\";\nimport type { ExecutionVersion } from \"../helpers/consts.ts\";\nimport { getErrorMessage } from \"../helpers/errors.ts\";\nimport { type Marker, markerKey } from \"../helpers/marker.ts\";\nimport { fetchWithAuthFallback } from \"../helpers/net.ts\";\nimport { hashSigningKey } from \"../helpers/strings.ts\";\nimport {\n type APIStepPayload,\n err,\n type MetadataTarget,\n type OutgoingOp,\n ok,\n type Result,\n} from \"../types.ts\";\nimport {\n type BatchResponse,\n batchSchema,\n type ErrorResponse,\n errorSchema,\n type StepsResponse,\n stepSchema,\n} from \"./schema.ts\";\n\ntype FetchT = typeof fetch;\n\n/**\n * Thrown when the executor has already requeued the current run. Returning\n * buffered ops after this would let the executor memoize them as canonical and\n * chain the next dispatch off this dead invocation, producing duplicates.\n */\nexport class StaleDispatchError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"StaleDispatchError\";\n }\n\n readonly [markerKey]: Marker = { kind: \"StaleDispatchError\" };\n}\n\nconst realtimeSubscriptionTokenSchema = z.object({\n jwt: z.string(),\n});\n\nconst sendSignalSuccessResponseSchema = z.object({\n data: z.object({\n run_id: z.string().min(1),\n }),\n});\n\nconst checkpointNewRunResponseSchema = z.object({\n data: z.object({\n fn_id: z.string().min(1),\n app_id: z.string().min(1),\n run_id: z.string().min(1),\n token: z.string().min(1).optional(),\n realtime_token: z.string().min(1),\n }),\n});\n\nexport namespace InngestApi {\n export interface Options {\n baseUrl: () => string | undefined;\n signingKey: () => string | undefined;\n signingKeyFallback: () => string | undefined;\n fetch: () => FetchT;\n }\n\n export interface Subscription {\n topics: string[];\n channel: string;\n }\n\n export interface PublishOptions extends Subscription {\n runId?: string;\n }\n\n export interface SendSignalOptions {\n signal: string;\n data?: unknown;\n }\n\n export interface SendSignalResponse {\n /**\n * The ID of the run that was signaled.\n *\n * If this is undefined, the signal could not be matched to a run.\n */\n runId: string | undefined;\n }\n}\n\nexport class InngestApi {\n private readonly _signingKey: () => string | undefined;\n private readonly _signingKeyFallback: () => string | undefined;\n private readonly _apiBaseUrl: () => string | undefined;\n private readonly _fetch: () => FetchT;\n\n constructor({\n baseUrl,\n signingKey,\n signingKeyFallback,\n fetch,\n }: InngestApi.Options) {\n this._apiBaseUrl = baseUrl;\n this._signingKey = signingKey;\n this._signingKeyFallback = signingKeyFallback;\n this._fetch = fetch;\n }\n\n private get apiBaseUrl(): string | undefined {\n return this._apiBaseUrl();\n }\n\n private get signingKey(): string | undefined {\n return this._signingKey();\n }\n\n private get signingKeyFallback(): string | undefined {\n return this._signingKeyFallback();\n }\n\n private get hashedKey(): string {\n return hashSigningKey(this.signingKey);\n }\n\n private get hashedFallbackKey(): string | undefined {\n if (!this.signingKeyFallback) {\n return;\n }\n\n return hashSigningKey(this.signingKeyFallback);\n }\n\n private async getTargetUrl(path: string): Promise<URL> {\n return new URL(path, this.apiBaseUrl);\n }\n\n private async req(\n url: string | URL,\n options?: RequestInit,\n ): Promise<Result<Response, unknown>> {\n const finalUrl: URL =\n typeof url === \"string\" ? await this.getTargetUrl(url) : url;\n\n try {\n const res = await fetchWithAuthFallback({\n authToken: this.hashedKey,\n authTokenFallback: this.hashedFallbackKey,\n fetch: this._fetch(),\n url: finalUrl,\n options: {\n ...options,\n headers: {\n \"Content-Type\": \"application/json\",\n ...options?.headers,\n },\n },\n });\n\n return ok(res);\n } catch (error) {\n return err(error);\n }\n }\n\n async getRunSteps(\n runId: string,\n ): Promise<Result<StepsResponse, ErrorResponse>> {\n const result = await this.req(\n `/v0/runs/${encodeURIComponent(runId)}/actions`,\n );\n if (result.ok) {\n const res = result.value;\n const data: unknown = await res.json();\n\n if (res.ok) {\n return ok(stepSchema.parse(data));\n }\n\n return err(errorSchema.parse(data));\n }\n\n return err({\n error: getErrorMessage(\n result.error,\n \"Unknown error retrieving step data\",\n ),\n status: 500,\n });\n }\n\n async getRunBatch(\n runId: string,\n ): Promise<Result<BatchResponse, ErrorResponse>> {\n const result = await this.req(\n `/v0/runs/${encodeURIComponent(runId)}/batch`,\n );\n if (result.ok) {\n const res = result.value;\n const data: unknown = await res.json();\n\n if (res.ok) {\n return ok(batchSchema.parse(data));\n }\n\n return err(errorSchema.parse(data));\n }\n\n return err({\n error: getErrorMessage(\n result.error,\n \"Unknown error retrieving event batch\",\n ),\n status: 500,\n });\n }\n\n async publish(\n publishOptions: InngestApi.PublishOptions,\n // biome-ignore lint/suspicious/noExplicitAny: anything is acceptable\n data: any,\n ): Promise<Result<void, ErrorResponse>> {\n // todo it may not be a \"text/stream\"\n const isStream = data instanceof ReadableStream;\n\n const url = await this.getTargetUrl(\"/v1/realtime/publish\");\n url.searchParams.set(\"channel\", publishOptions.channel || \"\");\n if (publishOptions.runId) {\n url.searchParams.set(\"run_id\", publishOptions.runId);\n }\n for (const topic of publishOptions.topics) {\n url.searchParams.append(\"topic\", topic);\n }\n\n const result = await this.req(url, {\n body: isStream\n ? data\n : typeof data === \"string\"\n ? data\n : JSON.stringify(data),\n method: \"POST\",\n headers: {\n \"Content-Type\": isStream ? \"text/stream\" : \"application/json\",\n },\n ...(isStream ? { duplex: \"half\" } : {}),\n });\n if (result.ok) {\n const res = result.value;\n if (!res.ok) {\n throw new Error(\n `Failed to publish event: ${res.status} ${res.statusText}`,\n );\n }\n\n return ok<void>(undefined);\n }\n\n return err({\n error: getErrorMessage(result.error, \"Unknown error publishing event\"),\n status: 500,\n });\n }\n\n async sendSignal(\n signalOptions: InngestApi.SendSignalOptions,\n options?: {\n headers?: Record<string, string>;\n },\n ): Promise<Result<InngestApi.SendSignalResponse, ErrorResponse>> {\n const url = await this.getTargetUrl(\"/v1/signals\");\n\n const body = {\n signal: signalOptions.signal,\n data: signalOptions.data,\n };\n\n return fetchWithAuthFallback({\n authToken: this.hashedKey,\n authTokenFallback: this.hashedFallbackKey,\n fetch: this._fetch(),\n url,\n options: {\n method: \"POST\",\n body: JSON.stringify(body),\n headers: {\n \"Content-Type\": \"application/json\",\n ...options?.headers,\n },\n },\n })\n .then(async (res) => {\n // A 404 is valid if the signal was not found.\n if (res.status === 404) {\n return ok<InngestApi.SendSignalResponse>({\n runId: undefined,\n });\n }\n\n // Save a clone of the response we can use to get the text of if we fail\n // to parse the JSON.\n const resClone = res.clone();\n\n // JSON!\n let json: unknown;\n try {\n json = await res.json();\n } catch {\n // res.json() failed so not a valid JSON response\n return err({\n error: `Failed to send signal: ${res.status} ${\n res.statusText\n } - ${await resClone.text()}`,\n status: res.status,\n });\n }\n\n // If we're not 2xx, something went wrong.\n if (!res.ok) {\n try {\n return err(errorSchema.parse(json));\n } catch {\n // schema parse failed\n return err({\n error: `Failed to send signal: ${res.status} ${\n res.statusText\n } - ${await res.text()}`,\n status: res.status,\n });\n }\n }\n\n // If we are 2xx, we should have a run_id.\n const parseRes = sendSignalSuccessResponseSchema.safeParse(json);\n if (!parseRes.success) {\n return err({\n error: `Successfully sent signal, but response parsing failed: ${\n res.status\n } ${res.statusText} - ${await resClone.text()}`,\n status: res.status,\n });\n }\n\n return ok({\n runId: parseRes.data.data.run_id,\n });\n })\n .catch((error) => {\n // Catch-all if various things go wrong\n return err({\n error: getErrorMessage(error, \"Unknown error sending signal\"),\n status: 500,\n });\n });\n }\n\n async getSubscriptionToken(\n channel: string,\n topics: string[],\n ): Promise<string> {\n const url = await this.getTargetUrl(\"/v1/realtime/token\");\n\n const body = topics.map((topic) => ({\n channel,\n name: topic,\n kind: \"run\",\n }));\n\n return fetchWithAuthFallback({\n authToken: this.hashedKey,\n authTokenFallback: this.hashedFallbackKey,\n fetch: this._fetch(),\n url,\n options: {\n method: \"POST\",\n body: JSON.stringify(body),\n headers: {\n \"Content-Type\": \"application/json\",\n },\n },\n })\n .then(async (res) => {\n if (!res.ok) {\n throw new Error(\n `Failed to get subscription token: ${res.status} ${\n res.statusText\n } - ${await res.text()}`,\n );\n }\n\n const data = realtimeSubscriptionTokenSchema.parse(await res.json());\n\n return data.jwt;\n })\n .catch((error) => {\n throw new Error(\n getErrorMessage(error, \"Unknown error getting subscription token\"),\n );\n });\n }\n\n async updateMetadata(\n args: {\n target: MetadataTarget;\n metadata: Array<{\n kind: string;\n op: string;\n values: Record<string, unknown>;\n }>;\n },\n options?: {\n headers?: Record<string, string>;\n },\n ): Promise<Result<void, ErrorResponse>> {\n const payload = { target: args.target, metadata: args.metadata };\n\n const result = await this.req(\n `/v1/runs/${encodeURIComponent(args.target.run_id)}/metadata`,\n {\n method: \"POST\",\n body: JSON.stringify(payload),\n headers: options?.headers,\n },\n );\n\n if (!result.ok) {\n return err({\n error: getErrorMessage(result.error, \"Unknown error updating metadata\"),\n status: 500,\n });\n }\n\n const res = result.value;\n if (res.ok) {\n return ok<void>(undefined);\n }\n\n const resClone = res.clone();\n\n let json: unknown;\n try {\n json = await res.json();\n } catch {\n return err({\n error: `Failed to update metadata: ${res.status} ${\n res.statusText\n } - ${await resClone.text()}`,\n status: res.status,\n });\n }\n\n try {\n return err(errorSchema.parse(json));\n } catch {\n return err({\n error: `Failed to update metadata: ${res.status} ${res.statusText}`,\n status: res.status,\n });\n }\n }\n\n /**\n * Start a new run, optionally passing in a number of steps to initialize the\n * run with.\n */\n async checkpointNewRun(args: {\n runId: string;\n event: APIStepPayload;\n executionVersion: ExecutionVersion;\n retries: number;\n steps?: OutgoingOp[];\n }): Promise<z.output<typeof checkpointNewRunResponseSchema>> {\n const body = JSON.stringify({\n run_id: args.runId,\n event: args.event,\n steps: args.steps,\n ts: new Date().valueOf(),\n request_version: args.executionVersion,\n retries: args.retries,\n });\n\n const result = await this.req(\"/v1/checkpoint\", {\n method: \"POST\",\n body,\n });\n\n if (!result.ok) {\n throw new Error(\n getErrorMessage(result.error, \"Unknown error checkpointing new run\"),\n );\n }\n\n const res = result.value;\n if (res.ok) {\n const rawData: unknown = await res.json();\n const data = checkpointNewRunResponseSchema.parse(rawData);\n\n return data;\n }\n\n throw new Error(\n `Failed to checkpoint new run: ${res.status} ${\n res.statusText\n } - ${await res.text()}`,\n );\n }\n\n /**\n * Checkpoint steps for a given sync run.\n */\n async checkpointSteps(args: {\n runId: string;\n fnId: string;\n appId: string;\n steps: OutgoingOp[];\n }): Promise<void> {\n const body = JSON.stringify({\n fn_id: args.fnId,\n app_id: args.appId,\n run_id: args.runId,\n steps: args.steps,\n ts: new Date().valueOf(),\n });\n\n const result = await this.req(\n `/v1/checkpoint/${encodeURIComponent(args.runId)}/steps`,\n {\n method: \"POST\",\n body,\n },\n );\n\n if (!result.ok) {\n throw new Error(\n getErrorMessage(result.error, \"Unknown error checkpointing steps\"),\n );\n }\n\n const res = result.value;\n if (!res.ok) {\n throw new Error(\n `Failed to checkpoint steps: ${res.status} ${\n res.statusText\n } - ${await res.text()}`,\n );\n }\n }\n\n /**\n * Checkpoint steps for a given async run.\n */\n async checkpointStepsAsync(args: {\n runId: string;\n fnId: string;\n queueItemId: string;\n generationId: number | undefined;\n requestId: string | undefined;\n requestStartedAt: number | undefined;\n steps: OutgoingOp[];\n }): Promise<void> {\n const body = JSON.stringify({\n run_id: args.runId,\n fn_id: args.fnId,\n qi_id: args.queueItemId,\n request_id: args.requestId,\n generation_id: args.generationId,\n request_started_at: args.requestStartedAt,\n steps: args.steps,\n ts: new Date().valueOf(),\n });\n\n const result = await this.req(\n `/v1/checkpoint/${encodeURIComponent(args.runId)}/async`,\n {\n method: \"POST\",\n body,\n },\n );\n\n if (!result.ok) {\n throw new Error(\n getErrorMessage(result.error, \"Unknown error checkpointing async\"),\n );\n }\n\n const res = result.value;\n // 409 means the executor has already requeued. Halt rather than returning\n // buffered ops, which would let the executor memoize them as canonical and\n // chain the next dispatch off this dead invocation. See EXE-1552.\n if (res.status === 409) {\n throw new StaleDispatchError(\n `Stale dispatch: checkpoint returned 409 (run ${args.runId})`,\n );\n }\n if (!res.ok) {\n throw new Error(\n `Failed to checkpoint async: ${res.status} ${\n res.statusText\n } - ${await res.text()}`,\n );\n }\n }\n\n /**\n * POST stream data to the realtime publish/tee endpoint, forwarding raw\n * bytes to all subscribers via the broadcaster.\n */\n async checkpointStream(args: {\n runId: string;\n body: ReadableStream;\n }): Promise<void> {\n const url = await this.getTargetUrl(\n `/v1/realtime/publish/tee?channel=${encodeURIComponent(args.runId)}`,\n );\n\n const res = await fetchWithAuthFallback({\n authToken: this.hashedKey,\n authTokenFallback: this.hashedFallbackKey,\n fetch: this._fetch(),\n url,\n options: {\n method: \"POST\",\n body: args.body,\n headers: {\n \"Content-Type\": \"application/octet-stream\",\n },\n // Required for streaming request bodies\n // @ts-expect-error duplex not in RequestInit types yet\n duplex: \"half\",\n },\n });\n\n if (!res.ok) {\n throw new Error(\n `Failed to stream checkpoint: ${res.status} ${\n res.statusText\n } - ${await res.text()}`,\n );\n }\n }\n\n /**\n * Build the full SSE URL for a run's stream channel using the given token.\n */\n async getRealtimeStreamRedirect(token: string): Promise<{ url: string }> {\n const sseUrl = await this.getTargetUrl(\"/v1/realtime/sse\");\n sseUrl.searchParams.set(\"token\", token);\n\n return { url: sseUrl.toString() };\n }\n\n /**\n * Fetch the output of a completed run using a token.\n *\n * This uses token-based auth (not signing key) and is intended for use by\n * proxy endpoints that fetch results on behalf of users.\n *\n * @param runId - The ID of the run to fetch output for\n * @param token - The token used to authenticate the request\n * @returns The raw Response from the API\n */\n async getRunOutput(runId: string, token: string): Promise<Response> {\n const url = await this.getTargetUrl(\n `/v1/http/runs/${encodeURIComponent(runId)}/output`,\n );\n url.searchParams.set(\"token\", token);\n\n return this._fetch()(url.toString(), {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\" },\n });\n }\n}\n"],"mappings":"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"}
package/api/schema.d.cts CHANGED
@@ -6,11 +6,11 @@ declare const errorSchema: z.ZodObject<{
6
6
  error: z.ZodString;
7
7
  status: z.ZodNumber;
8
8
  }, "strip", z.ZodTypeAny, {
9
- error: string;
10
9
  status: number;
11
- }, {
12
10
  error: string;
11
+ }, {
13
12
  status: number;
13
+ error: string;
14
14
  }>;
15
15
  type ErrorResponse = z.infer<typeof errorSchema>;
16
16
  declare const stepSchema: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodUnion<[z.ZodUnion<[z.ZodObject<{
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.cts","names":[],"sources":["../../src/api/schema.ts"],"sourcesContent":[],"mappings":";;;;cAGa,aAAW,CAAA,CAAA;;EAAX,MAAA,aAGX;CAAA,EAAA,OAAA,cAAA,EAAA;;;;OAHsB,EAAA,MAAA;EAAA,MAAA,EAAA,MAAA;AAIxB,CAAA,CAAA;AAAyB,KAAb,aAAA,GAAgB,CAAA,CAAE,KAAL,CAAA,OAAkB,WAAlB,CAAA;AAAkB,cAE9B,UAF8B,EAEpB,CAAA,CAAA,UAFoB,CAEpB,CAAA,CAAA,SAFoB,CAEpB,CAAA,CAAA,SAFoB,EAEpB,CAAA,CAAA,QAFoB,CAAA,CAEpB,CAAA,CAAA,QAFoB,CAAA,CAEpB,CAAA,CAAA,QAFoB,CAAA,CAEpB,CAAA,CAAA,SAFoB,CAAA;MAAf,cAAE,cAAA,aAAA,CAAA,MAAA,CAAA,CAAA,CAAA;EAAK,IAAA,cAAA,SAAA,EAAA,GAAA,EAAA,GAAA,CAAA;AAEnC,CAAA,EAAA,QAAa,cAuCC,EAAA;EAAA,IAAA,EAAA,MAAA;MAvCS,CAAA,EAAA,GAAA;;;;;;;WAAA,cAAA,EAAA;;;;;;;;;;;;;;;;;;MAAA;;;IAAA,KAAA,CAAA,EAAA,OAAA;;MAAA,CAAA,EAAA,OAAA,GAAA,SAAA;CAAA,CAAA,CAAA,CAAA,aAAA,CAAA;EAyCX,IAAA,cAAa,cAAA,aAAA,CAAA,OAAA,CAAA,CAAA,CAAA;EAAA,KAAA,cAAA,SAAA,EAAA,GAAA,EAAA,GAAA,CAAA;WAAkB,cAAA,EAAA;MAAf,EAAE,OAAA;EAAK,KAAA,CAAA,EAAA,GAAA;AAEnC,CAAA,EAAA;EAEC,IAAA,CAAA,EAAA,OAAA,GAAA,SAAA;OAFuB,CAAA,EAAA,GAAA;kBAAA,SAAA,EAAA;MAAA,EAAA,MAAA;MAAA,EAAA,GAAA;OAAA,CAAA,CAAA,CAAA,CAAA;AAAA,KAFZ,aAAA,GAAgB,CAAA,CAAE,KAEN,CAAA,OAFmB,UAEnB,CAAA;AAAA,cAAX,WAAW,EAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CAAA,UAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,SAAA,EAAA,CAAA,CAAA,MAAA,CAAA,EAAA,YAAA,CAAA,GAAA,CAAA,EAAA,MAAA,CAAA,MAAA,EAAA,GAAA,CAAA,CAAA,EAAA,MAAA,CAAA;AAAA,KAGZ,aAAA,GAAgB,CAAA,CAAE,KAHN,CAAA,OAGmB,WAHnB,CAAA"}
1
+ {"version":3,"file":"schema.d.cts","names":[],"sources":["../../src/api/schema.ts"],"sourcesContent":[],"mappings":";;;;cAGa,aAAW,CAAA,CAAA;;EAAX,MAAA,aAGX;CAAA,EAAA,OAAA,cAAA,EAAA;;;;QAHsB,EAAA,MAAA;EAAA,KAAA,EAAA,MAAA;AAIxB,CAAA,CAAA;AAAyB,KAAb,aAAA,GAAgB,CAAA,CAAE,KAAL,CAAA,OAAkB,WAAlB,CAAA;AAAkB,cAE9B,UAF8B,EAEpB,CAAA,CAAA,UAFoB,CAEpB,CAAA,CAAA,SAFoB,CAEpB,CAAA,CAAA,SAFoB,EAEpB,CAAA,CAAA,QAFoB,CAAA,CAEpB,CAAA,CAAA,QAFoB,CAAA,CAEpB,CAAA,CAAA,QAFoB,CAAA,CAEpB,CAAA,CAAA,SAFoB,CAAA;MAAf,cAAE,cAAA,aAAA,CAAA,MAAA,CAAA,CAAA,CAAA;EAAK,IAAA,cAAA,SAAA,EAAA,GAAA,EAAA,GAAA,CAAA;AAEnC,CAAA,EAAA,QAAa,cAuCC,EAAA;EAAA,IAAA,EAAA,MAAA;MAvCS,CAAA,EAAA,GAAA;;;;;;;WAAA,cAAA,EAAA;;;;;;;;;;;;;;;;;;MAAA;;;IAAA,KAAA,CAAA,EAAA,OAAA;;MAAA,CAAA,EAAA,OAAA,GAAA,SAAA;CAAA,CAAA,CAAA,CAAA,aAAA,CAAA;EAyCX,IAAA,cAAa,cAAA,aAAA,CAAA,OAAA,CAAA,CAAA,CAAA;EAAA,KAAA,cAAA,SAAA,EAAA,GAAA,EAAA,GAAA,CAAA;WAAkB,cAAA,EAAA;MAAf,EAAE,OAAA;EAAK,KAAA,CAAA,EAAA,GAAA;AAEnC,CAAA,EAAA;EAEC,IAAA,CAAA,EAAA,OAAA,GAAA,SAAA;OAFuB,CAAA,EAAA,GAAA;kBAAA,SAAA,EAAA;MAAA,EAAA,MAAA;MAAA,EAAA,GAAA;OAAA,CAAA,CAAA,CAAA,CAAA;AAAA,KAFZ,aAAA,GAAgB,CAAA,CAAE,KAEN,CAAA,OAFmB,UAEnB,CAAA;AAAA,cAAX,WAAW,EAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CAAA,UAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,SAAA,EAAA,CAAA,CAAA,MAAA,CAAA,EAAA,YAAA,CAAA,GAAA,CAAA,EAAA,MAAA,CAAA,MAAA,EAAA,GAAA,CAAA,CAAA,EAAA,MAAA,CAAA;AAAA,KAGZ,aAAA,GAAgB,CAAA,CAAE,KAHN,CAAA,OAGmB,WAHnB,CAAA"}
package/api/schema.d.ts CHANGED
@@ -6,11 +6,11 @@ declare const errorSchema: z.ZodObject<{
6
6
  error: z.ZodString;
7
7
  status: z.ZodNumber;
8
8
  }, "strip", z.ZodTypeAny, {
9
- error: string;
10
9
  status: number;
11
- }, {
12
10
  error: string;
11
+ }, {
13
12
  status: number;
13
+ error: string;
14
14
  }>;
15
15
  type ErrorResponse = z.infer<typeof errorSchema>;
16
16
  declare const stepSchema: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnion<[z.ZodUnion<[z.ZodUnion<[z.ZodObject<{
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","names":[],"sources":["../../src/api/schema.ts"],"sourcesContent":[],"mappings":";;;;cAGa,aAAW,CAAA,CAAA;;EAAX,MAAA,aAGX;CAAA,EAAA,OAAA,cAAA,EAAA;;;;OAHsB,EAAA,MAAA;EAAA,MAAA,EAAA,MAAA;AAIxB,CAAA,CAAA;AAAyB,KAAb,aAAA,GAAgB,CAAA,CAAE,KAAL,CAAA,OAAkB,WAAlB,CAAA;AAAkB,cAE9B,UAF8B,EAEpB,CAAA,CAAA,UAFoB,CAEpB,CAAA,CAAA,SAFoB,CAEpB,CAAA,CAAA,SAFoB,EAEpB,CAAA,CAAA,QAFoB,CAAA,CAEpB,CAAA,CAAA,QAFoB,CAAA,CAEpB,CAAA,CAAA,QAFoB,CAAA,CAEpB,CAAA,CAAA,SAFoB,CAAA;MAAf,cAAE,cAAA,aAAA,CAAA,MAAA,CAAA,CAAA,CAAA;EAAK,IAAA,cAAA,SAAA,EAAA,GAAA,EAAA,GAAA,CAAA;AAEnC,CAAA,EAAA,QAAa,cAuCC,EAAA;EAAA,IAAA,EAAA,MAAA;MAvCS,CAAA,EAAA,GAAA;;;;;;;WAAA,cAAA,EAAA;;;;;;;;;;;;;;;;;;MAAA;;;IAAA,KAAA,CAAA,EAAA,OAAA;;MAAA,CAAA,EAAA,OAAA,GAAA,SAAA;CAAA,CAAA,CAAA,CAAA,aAAA,CAAA;EAyCX,IAAA,cAAa,cAAA,aAAA,CAAA,OAAA,CAAA,CAAA,CAAA;EAAA,KAAA,cAAA,SAAA,EAAA,GAAA,EAAA,GAAA,CAAA;WAAkB,cAAA,EAAA;MAAf,EAAE,OAAA;EAAK,KAAA,CAAA,EAAA,GAAA;AAEnC,CAAA,EAAA;EAEC,IAAA,CAAA,EAAA,OAAA,GAAA,SAAA;OAFuB,CAAA,EAAA,GAAA;kBAAA,SAAA,EAAA;MAAA,EAAA,MAAA;MAAA,EAAA,GAAA;OAAA,CAAA,CAAA,CAAA,CAAA;AAAA,KAFZ,aAAA,GAAgB,CAAA,CAAE,KAEN,CAAA,OAFmB,UAEnB,CAAA;AAAA,cAAX,WAAW,EAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CAAA,UAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,SAAA,EAAA,CAAA,CAAA,MAAA,CAAA,EAAA,YAAA,CAAA,GAAA,CAAA,EAAA,MAAA,CAAA,MAAA,EAAA,GAAA,CAAA,CAAA,EAAA,MAAA,CAAA;AAAA,KAGZ,aAAA,GAAgB,CAAA,CAAE,KAHN,CAAA,OAGmB,WAHnB,CAAA"}
1
+ {"version":3,"file":"schema.d.ts","names":[],"sources":["../../src/api/schema.ts"],"sourcesContent":[],"mappings":";;;;cAGa,aAAW,CAAA,CAAA;;EAAX,MAAA,aAGX;CAAA,EAAA,OAAA,cAAA,EAAA;;;;QAHsB,EAAA,MAAA;EAAA,KAAA,EAAA,MAAA;AAIxB,CAAA,CAAA;AAAyB,KAAb,aAAA,GAAgB,CAAA,CAAE,KAAL,CAAA,OAAkB,WAAlB,CAAA;AAAkB,cAE9B,UAF8B,EAEpB,CAAA,CAAA,UAFoB,CAEpB,CAAA,CAAA,SAFoB,CAEpB,CAAA,CAAA,SAFoB,EAEpB,CAAA,CAAA,QAFoB,CAAA,CAEpB,CAAA,CAAA,QAFoB,CAAA,CAEpB,CAAA,CAAA,QAFoB,CAAA,CAEpB,CAAA,CAAA,SAFoB,CAAA;MAAf,cAAE,cAAA,aAAA,CAAA,MAAA,CAAA,CAAA,CAAA;EAAK,IAAA,cAAA,SAAA,EAAA,GAAA,EAAA,GAAA,CAAA;AAEnC,CAAA,EAAA,QAAa,cAuCC,EAAA;EAAA,IAAA,EAAA,MAAA;MAvCS,CAAA,EAAA,GAAA;;;;;;;WAAA,cAAA,EAAA;;;;;;;;;;;;;;;;;;MAAA;;;IAAA,KAAA,CAAA,EAAA,OAAA;;MAAA,CAAA,EAAA,OAAA,GAAA,SAAA;CAAA,CAAA,CAAA,CAAA,aAAA,CAAA;EAyCX,IAAA,cAAa,cAAA,aAAA,CAAA,OAAA,CAAA,CAAA,CAAA;EAAA,KAAA,cAAA,SAAA,EAAA,GAAA,EAAA,GAAA,CAAA;WAAkB,cAAA,EAAA;MAAf,EAAE,OAAA;EAAK,KAAA,CAAA,EAAA,GAAA;AAEnC,CAAA,EAAA;EAEC,IAAA,CAAA,EAAA,OAAA,GAAA,SAAA;OAFuB,CAAA,EAAA,GAAA;kBAAA,SAAA,EAAA;MAAA,EAAA,MAAA;MAAA,EAAA,GAAA;OAAA,CAAA,CAAA,CAAA,CAAA;AAAA,KAFZ,aAAA,GAAgB,CAAA,CAAE,KAEN,CAAA,OAFmB,UAEnB,CAAA;AAAA,cAAX,WAAW,EAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CAAA,UAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,CAAA,SAAA,EAAA,CAAA,CAAA,MAAA,CAAA,EAAA,YAAA,CAAA,GAAA,CAAA,EAAA,MAAA,CAAA,MAAA,EAAA,GAAA,CAAA,CAAA,EAAA,MAAA,CAAA;AAAA,KAGZ,aAAA,GAAgB,CAAA,CAAE,KAHN,CAAA,OAGmB,WAHnB,CAAA"}
@@ -22,7 +22,7 @@ const idDenyRegex = /['\\\n\r]/;
22
22
  */
23
23
  var DeferredFunction = class extends require_InngestFunction.InngestFunction {
24
24
  schema;
25
- [require_marker.markerKey] = { kind: "deferredFunction" };
25
+ [require_marker.markerKey] = { kind: "DeferredFunction" };
26
26
  constructor(client, opts, handler, schema) {
27
27
  if (idDenyRegex.test(opts.id)) throw new Error(`invalid id "${opts.id}"; must match ${idDenyRegex.source}`);
28
28
  super(client, {
@@ -1 +1 @@
1
- {"version":3,"file":"DeferredFunction.cjs","names":["InngestFunction","markerKey","internalEvents"],"sources":["../../src/components/DeferredFunction.ts"],"sourcesContent":["import type { StandardSchemaV1 } from \"@standard-schema/spec\";\nimport { internalEvents } from \"../helpers/consts.ts\";\nimport { type Marker, markerKey } from \"../helpers/marker.ts\";\nimport type {\n ApplyAllMiddlewareCtxExtensions,\n ApplyAllMiddlewareStepExtensions,\n BaseContext,\n FunctionConfig,\n Handler,\n} from \"../types.ts\";\nimport type {\n builtInMiddleware,\n ClientOptionsFromInngest,\n Inngest,\n} from \"./Inngest.ts\";\nimport { InngestFunction } from \"./InngestFunction.ts\";\nimport type { createStepTools } from \"./InngestStepTools.ts\";\nimport type { Middleware } from \"./middleware/index.ts\";\n\nconst idDenyRegex = /['\\\\\\n\\r]/;\n\n/**\n * EXPERIMENTAL: This API is not yet stable and may change in the future without\n * a major version bump.\n *\n * A defer (companion) function created via `createDefer(...)`. Real\n * `InngestFunction` at runtime, but with the trigger pinned to\n * `inngest/deferred.schedule` (see `getConfigTriggers`), `triggers` and\n * `onFailure` disallowed, and the schema carried as a typed instance\n * property so callers of `defer(id, { function, data })` can extract it.\n *\n * Identify a defer function at runtime via `isDeferredFunction(value)` from\n * `helpers/marker.ts`. Prefer that over `instanceof`, which fails across\n * duplicate SDK copies in the same process.\n *\n * @public\n */\nexport class DeferredFunction<\n TSchema extends\n | StandardSchemaV1<Record<string, unknown>>\n | undefined = undefined,\n> extends InngestFunction<\n InngestFunction.Options<[], never>,\n Handler.Any,\n never,\n Inngest.Any,\n []\n> {\n readonly schema: TSchema;\n readonly [markerKey]: Marker = { kind: \"deferredFunction\" };\n\n constructor(\n client: Inngest.Any,\n opts: DeferredFunction.Options,\n handler: Handler.Any,\n schema: TSchema,\n ) {\n // The id is interpolated into a CEL trigger expression\n // (`event.data._inngest.fn_slug == '${fnId}'`). Reject characters that\n // would break the single-quoted string literal.\n if (idDenyRegex.test(opts.id)) {\n throw new Error(\n `invalid id \"${opts.id}\"; must match ${idDenyRegex.source}`,\n );\n }\n super(\n client,\n { ...opts, triggers: [] } as InngestFunction.Options<[], never>,\n handler,\n );\n this.schema = schema;\n }\n\n protected override getConfigTriggers(\n fnId: string,\n ): FunctionConfig[\"triggers\"] {\n return [\n {\n event: internalEvents.DeferredSchedule,\n expression: `event.data._inngest.fn_slug == '${fnId}'`,\n },\n ];\n }\n}\n\n/**\n * @public\n */\nexport namespace DeferredFunction {\n /**\n * Matches any `DeferredFunction` regardless of its schema. Use as the\n * constraint for the `function` argument of `defer()`.\n */\n // biome-ignore lint/suspicious/noExplicitAny: widest schema constraint for inference\n export type Any = DeferredFunction<StandardSchemaV1<any> | undefined>;\n\n /**\n * The user-facing options accepted by `createDefer(client, opts, handler)`.\n * Mirrors `InngestFunction.Options` minus `triggers` (implicit), `onFailure`\n * (not yet supported), and `batchEvents` (each `defer(...)` is its own run).\n */\n export type Options = Omit<\n InngestFunction.Options<[], never>,\n \"triggers\" | \"onFailure\" | \"batchEvents\"\n >;\n}\n\n/**\n * The `event` shape a defer handler receives. With a schema, `data`\n * narrows to its inferred type; without one, it falls back to\n * `Record<string, any>`.\n */\ntype DeferEvent<TSchema> = {\n name: internalEvents.DeferredSchedule;\n data: TSchema extends StandardSchemaV1<\n infer D extends Record<string, unknown>\n >\n ? D\n : // biome-ignore lint/suspicious/noExplicitAny: no schema = any\n Record<string, any>;\n};\n\n/**\n * Base ctx shape for a defer handler: the standard function context\n * (`runId`, `attempt`, `group`, `step` with middleware step extensions)\n * with `event`/`events` pinned to `inngest/deferred.schedule` and the\n * schema-typed payload.\n */\ntype BaseDeferCtx<\n TClient extends Inngest.Any,\n TFnMiddleware extends Middleware.Class[] | undefined,\n TSchema extends StandardSchemaV1<Record<string, unknown>> | undefined,\n> = Omit<BaseContext<TClient>, \"event\" | \"events\" | \"step\"> & {\n event: DeferEvent<TSchema>;\n events: [DeferEvent<TSchema>];\n step: ReturnType<typeof createStepTools<TClient, TFnMiddleware>> &\n ApplyAllMiddlewareStepExtensions<\n ClientOptionsFromInngest<TClient>[\"middleware\"]\n > &\n ApplyAllMiddlewareStepExtensions<TFnMiddleware>;\n};\n\n/**\n * Input type for `createDefer`. Same shape as `DeferredFunction.Options`\n * plus `schema` (the StandardSchema describing `event.data` that flows\n * to caller `defer(id, { function, data })` call sites) and `middleware`.\n */\nexport type CreateDeferInput<\n TFnMiddleware extends Middleware.Class[] | undefined,\n TSchema extends StandardSchemaV1<Record<string, unknown>> | undefined,\n> = DeferredFunction.Options & {\n schema?: TSchema;\n middleware?: TFnMiddleware;\n};\n\n/**\n * EXPERIMENTAL: This API is not yet stable and may change in the future without\n * a major version bump.\n *\n * Create a typed defer function. One `createDefer` call = one Inngest\n * function. Returns a `DeferredFunction<TSchema>` so callers of `defer(id,\n * { function, data })` get the data type inferred from the schema.\n *\n * Mirrors `inngest.createFunction(opts, handler)`, with three differences:\n * the client is the first positional arg, `triggers` is not accepted (the\n * SDK emits an implicit `inngest/deferred.schedule` trigger), and `schema`\n * describes the payload that callers will send via `defer(id, { function,\n * data })`.\n *\n * Pass the result to `serve()` alongside regular functions so the SDK\n * registers it.\n */\nexport function createDefer<\n TClient extends Inngest.Any,\n TSchema extends\n | StandardSchemaV1<Record<string, unknown>>\n | undefined = undefined,\n const TFnMiddleware extends Middleware.Class[] | undefined = undefined,\n THandler extends Handler.Any = (\n ctx: BaseDeferCtx<TClient, TFnMiddleware, TSchema> &\n ApplyAllMiddlewareCtxExtensions<\n [...ReturnType<typeof builtInMiddleware>]\n > &\n ApplyAllMiddlewareCtxExtensions<\n ClientOptionsFromInngest<TClient>[\"middleware\"]\n > &\n ApplyAllMiddlewareCtxExtensions<TFnMiddleware>,\n ) => unknown,\n>(\n client: TClient,\n options: CreateDeferInput<TFnMiddleware, TSchema>,\n handler: THandler,\n): DeferredFunction<TSchema> {\n const { schema, ...rest } = options;\n return new DeferredFunction<TSchema>(\n client,\n rest,\n handler as Handler.Any,\n schema as TSchema,\n );\n}\n"],"mappings":";;;;;AAmBA,MAAM,cAAc;;;;;;;;;;;;;;;;;AAkBpB,IAAa,mBAAb,cAIUA,wCAMR;CACA,AAAS;CACT,CAAUC,4BAAqB,EAAE,MAAM,oBAAoB;CAE3D,YACE,QACA,MACA,SACA,QACA;AAIA,MAAI,YAAY,KAAK,KAAK,GAAG,CAC3B,OAAM,IAAI,MACR,eAAe,KAAK,GAAG,gBAAgB,YAAY,SACpD;AAEH,QACE,QACA;GAAE,GAAG;GAAM,UAAU,EAAE;GAAE,EACzB,QACD;AACD,OAAK,SAAS;;CAGhB,AAAmB,kBACjB,MAC4B;AAC5B,SAAO,CACL;GACE,OAAOC,8BAAe;GACtB,YAAY,mCAAmC,KAAK;GACrD,CACF;;;;;;;;;;;;;;;;;;;;AA2FL,SAAgB,YAiBd,QACA,SACA,SAC2B;CAC3B,MAAM,EAAE,QAAQ,GAAG,SAAS;AAC5B,QAAO,IAAI,iBACT,QACA,MACA,SACA,OACD"}
1
+ {"version":3,"file":"DeferredFunction.cjs","names":["InngestFunction","markerKey","internalEvents"],"sources":["../../src/components/DeferredFunction.ts"],"sourcesContent":["import type { StandardSchemaV1 } from \"@standard-schema/spec\";\nimport { internalEvents } from \"../helpers/consts.ts\";\nimport { type Marker, markerKey } from \"../helpers/marker.ts\";\nimport type {\n ApplyAllMiddlewareCtxExtensions,\n ApplyAllMiddlewareStepExtensions,\n BaseContext,\n FunctionConfig,\n Handler,\n} from \"../types.ts\";\nimport type {\n builtInMiddleware,\n ClientOptionsFromInngest,\n Inngest,\n} from \"./Inngest.ts\";\nimport { InngestFunction } from \"./InngestFunction.ts\";\nimport type { createStepTools } from \"./InngestStepTools.ts\";\nimport type { Middleware } from \"./middleware/index.ts\";\n\nconst idDenyRegex = /['\\\\\\n\\r]/;\n\n/**\n * EXPERIMENTAL: This API is not yet stable and may change in the future without\n * a major version bump.\n *\n * A defer (companion) function created via `createDefer(...)`. Real\n * `InngestFunction` at runtime, but with the trigger pinned to\n * `inngest/deferred.schedule` (see `getConfigTriggers`), `triggers` and\n * `onFailure` disallowed, and the schema carried as a typed instance\n * property so callers of `defer(id, { function, data })` can extract it.\n *\n * Identify a defer function at runtime via `isDeferredFunction(value)` from\n * `helpers/marker.ts`. Prefer that over `instanceof`, which fails across\n * duplicate SDK copies in the same process.\n *\n * @public\n */\nexport class DeferredFunction<\n TSchema extends\n | StandardSchemaV1<Record<string, unknown>>\n | undefined = undefined,\n> extends InngestFunction<\n InngestFunction.Options<[], never>,\n Handler.Any,\n never,\n Inngest.Any,\n []\n> {\n readonly schema: TSchema;\n readonly [markerKey]: Marker = { kind: \"DeferredFunction\" };\n\n constructor(\n client: Inngest.Any,\n opts: DeferredFunction.Options,\n handler: Handler.Any,\n schema: TSchema,\n ) {\n // The id is interpolated into a CEL trigger expression\n // (`event.data._inngest.fn_slug == '${fnId}'`). Reject characters that\n // would break the single-quoted string literal.\n if (idDenyRegex.test(opts.id)) {\n throw new Error(\n `invalid id \"${opts.id}\"; must match ${idDenyRegex.source}`,\n );\n }\n super(\n client,\n { ...opts, triggers: [] } as InngestFunction.Options<[], never>,\n handler,\n );\n this.schema = schema;\n }\n\n protected override getConfigTriggers(\n fnId: string,\n ): FunctionConfig[\"triggers\"] {\n return [\n {\n event: internalEvents.DeferredSchedule,\n expression: `event.data._inngest.fn_slug == '${fnId}'`,\n },\n ];\n }\n}\n\n/**\n * @public\n */\nexport namespace DeferredFunction {\n /**\n * Matches any `DeferredFunction` regardless of its schema. Use as the\n * constraint for the `function` argument of `defer()`.\n */\n // biome-ignore lint/suspicious/noExplicitAny: widest schema constraint for inference\n export type Any = DeferredFunction<StandardSchemaV1<any> | undefined>;\n\n /**\n * The user-facing options accepted by `createDefer(client, opts, handler)`.\n * Mirrors `InngestFunction.Options` minus `triggers` (implicit), `onFailure`\n * (not yet supported), and `batchEvents` (each `defer(...)` is its own run).\n */\n export type Options = Omit<\n InngestFunction.Options<[], never>,\n \"triggers\" | \"onFailure\" | \"batchEvents\"\n >;\n}\n\n/**\n * The `event` shape a defer handler receives. With a schema, `data`\n * narrows to its inferred type; without one, it falls back to\n * `Record<string, any>`.\n */\ntype DeferEvent<TSchema> = {\n name: internalEvents.DeferredSchedule;\n data: TSchema extends StandardSchemaV1<\n infer D extends Record<string, unknown>\n >\n ? D\n : // biome-ignore lint/suspicious/noExplicitAny: no schema = any\n Record<string, any>;\n};\n\n/**\n * Base ctx shape for a defer handler: the standard function context\n * (`runId`, `attempt`, `group`, `step` with middleware step extensions)\n * with `event`/`events` pinned to `inngest/deferred.schedule` and the\n * schema-typed payload.\n */\ntype BaseDeferCtx<\n TClient extends Inngest.Any,\n TFnMiddleware extends Middleware.Class[] | undefined,\n TSchema extends StandardSchemaV1<Record<string, unknown>> | undefined,\n> = Omit<BaseContext<TClient>, \"event\" | \"events\" | \"step\"> & {\n event: DeferEvent<TSchema>;\n events: [DeferEvent<TSchema>];\n step: ReturnType<typeof createStepTools<TClient, TFnMiddleware>> &\n ApplyAllMiddlewareStepExtensions<\n ClientOptionsFromInngest<TClient>[\"middleware\"]\n > &\n ApplyAllMiddlewareStepExtensions<TFnMiddleware>;\n};\n\n/**\n * Input type for `createDefer`. Same shape as `DeferredFunction.Options`\n * plus `schema` (the StandardSchema describing `event.data` that flows\n * to caller `defer(id, { function, data })` call sites) and `middleware`.\n */\nexport type CreateDeferInput<\n TFnMiddleware extends Middleware.Class[] | undefined,\n TSchema extends StandardSchemaV1<Record<string, unknown>> | undefined,\n> = DeferredFunction.Options & {\n schema?: TSchema;\n middleware?: TFnMiddleware;\n};\n\n/**\n * EXPERIMENTAL: This API is not yet stable and may change in the future without\n * a major version bump.\n *\n * Create a typed defer function. One `createDefer` call = one Inngest\n * function. Returns a `DeferredFunction<TSchema>` so callers of `defer(id,\n * { function, data })` get the data type inferred from the schema.\n *\n * Mirrors `inngest.createFunction(opts, handler)`, with three differences:\n * the client is the first positional arg, `triggers` is not accepted (the\n * SDK emits an implicit `inngest/deferred.schedule` trigger), and `schema`\n * describes the payload that callers will send via `defer(id, { function,\n * data })`.\n *\n * Pass the result to `serve()` alongside regular functions so the SDK\n * registers it.\n */\nexport function createDefer<\n TClient extends Inngest.Any,\n TSchema extends\n | StandardSchemaV1<Record<string, unknown>>\n | undefined = undefined,\n const TFnMiddleware extends Middleware.Class[] | undefined = undefined,\n THandler extends Handler.Any = (\n ctx: BaseDeferCtx<TClient, TFnMiddleware, TSchema> &\n ApplyAllMiddlewareCtxExtensions<\n [...ReturnType<typeof builtInMiddleware>]\n > &\n ApplyAllMiddlewareCtxExtensions<\n ClientOptionsFromInngest<TClient>[\"middleware\"]\n > &\n ApplyAllMiddlewareCtxExtensions<TFnMiddleware>,\n ) => unknown,\n>(\n client: TClient,\n options: CreateDeferInput<TFnMiddleware, TSchema>,\n handler: THandler,\n): DeferredFunction<TSchema> {\n const { schema, ...rest } = options;\n return new DeferredFunction<TSchema>(\n client,\n rest,\n handler as Handler.Any,\n schema as TSchema,\n );\n}\n"],"mappings":";;;;;AAmBA,MAAM,cAAc;;;;;;;;;;;;;;;;;AAkBpB,IAAa,mBAAb,cAIUA,wCAMR;CACA,AAAS;CACT,CAAUC,4BAAqB,EAAE,MAAM,oBAAoB;CAE3D,YACE,QACA,MACA,SACA,QACA;AAIA,MAAI,YAAY,KAAK,KAAK,GAAG,CAC3B,OAAM,IAAI,MACR,eAAe,KAAK,GAAG,gBAAgB,YAAY,SACpD;AAEH,QACE,QACA;GAAE,GAAG;GAAM,UAAU,EAAE;GAAE,EACzB,QACD;AACD,OAAK,SAAS;;CAGhB,AAAmB,kBACjB,MAC4B;AAC5B,SAAO,CACL;GACE,OAAOC,8BAAe;GACtB,YAAY,mCAAmC,KAAK;GACrD,CACF;;;;;;;;;;;;;;;;;;;;AA2FL,SAAgB,YAiBd,QACA,SACA,SAC2B;CAC3B,MAAM,EAAE,QAAQ,GAAG,SAAS;AAC5B,QAAO,IAAI,iBACT,QACA,MACA,SACA,OACD"}
@@ -22,7 +22,7 @@ const idDenyRegex = /['\\\n\r]/;
22
22
  */
23
23
  var DeferredFunction = class extends InngestFunction {
24
24
  schema;
25
- [markerKey] = { kind: "deferredFunction" };
25
+ [markerKey] = { kind: "DeferredFunction" };
26
26
  constructor(client, opts, handler, schema) {
27
27
  if (idDenyRegex.test(opts.id)) throw new Error(`invalid id "${opts.id}"; must match ${idDenyRegex.source}`);
28
28
  super(client, {
@@ -1 +1 @@
1
- {"version":3,"file":"DeferredFunction.js","names":[],"sources":["../../src/components/DeferredFunction.ts"],"sourcesContent":["import type { StandardSchemaV1 } from \"@standard-schema/spec\";\nimport { internalEvents } from \"../helpers/consts.ts\";\nimport { type Marker, markerKey } from \"../helpers/marker.ts\";\nimport type {\n ApplyAllMiddlewareCtxExtensions,\n ApplyAllMiddlewareStepExtensions,\n BaseContext,\n FunctionConfig,\n Handler,\n} from \"../types.ts\";\nimport type {\n builtInMiddleware,\n ClientOptionsFromInngest,\n Inngest,\n} from \"./Inngest.ts\";\nimport { InngestFunction } from \"./InngestFunction.ts\";\nimport type { createStepTools } from \"./InngestStepTools.ts\";\nimport type { Middleware } from \"./middleware/index.ts\";\n\nconst idDenyRegex = /['\\\\\\n\\r]/;\n\n/**\n * EXPERIMENTAL: This API is not yet stable and may change in the future without\n * a major version bump.\n *\n * A defer (companion) function created via `createDefer(...)`. Real\n * `InngestFunction` at runtime, but with the trigger pinned to\n * `inngest/deferred.schedule` (see `getConfigTriggers`), `triggers` and\n * `onFailure` disallowed, and the schema carried as a typed instance\n * property so callers of `defer(id, { function, data })` can extract it.\n *\n * Identify a defer function at runtime via `isDeferredFunction(value)` from\n * `helpers/marker.ts`. Prefer that over `instanceof`, which fails across\n * duplicate SDK copies in the same process.\n *\n * @public\n */\nexport class DeferredFunction<\n TSchema extends\n | StandardSchemaV1<Record<string, unknown>>\n | undefined = undefined,\n> extends InngestFunction<\n InngestFunction.Options<[], never>,\n Handler.Any,\n never,\n Inngest.Any,\n []\n> {\n readonly schema: TSchema;\n readonly [markerKey]: Marker = { kind: \"deferredFunction\" };\n\n constructor(\n client: Inngest.Any,\n opts: DeferredFunction.Options,\n handler: Handler.Any,\n schema: TSchema,\n ) {\n // The id is interpolated into a CEL trigger expression\n // (`event.data._inngest.fn_slug == '${fnId}'`). Reject characters that\n // would break the single-quoted string literal.\n if (idDenyRegex.test(opts.id)) {\n throw new Error(\n `invalid id \"${opts.id}\"; must match ${idDenyRegex.source}`,\n );\n }\n super(\n client,\n { ...opts, triggers: [] } as InngestFunction.Options<[], never>,\n handler,\n );\n this.schema = schema;\n }\n\n protected override getConfigTriggers(\n fnId: string,\n ): FunctionConfig[\"triggers\"] {\n return [\n {\n event: internalEvents.DeferredSchedule,\n expression: `event.data._inngest.fn_slug == '${fnId}'`,\n },\n ];\n }\n}\n\n/**\n * @public\n */\nexport namespace DeferredFunction {\n /**\n * Matches any `DeferredFunction` regardless of its schema. Use as the\n * constraint for the `function` argument of `defer()`.\n */\n // biome-ignore lint/suspicious/noExplicitAny: widest schema constraint for inference\n export type Any = DeferredFunction<StandardSchemaV1<any> | undefined>;\n\n /**\n * The user-facing options accepted by `createDefer(client, opts, handler)`.\n * Mirrors `InngestFunction.Options` minus `triggers` (implicit), `onFailure`\n * (not yet supported), and `batchEvents` (each `defer(...)` is its own run).\n */\n export type Options = Omit<\n InngestFunction.Options<[], never>,\n \"triggers\" | \"onFailure\" | \"batchEvents\"\n >;\n}\n\n/**\n * The `event` shape a defer handler receives. With a schema, `data`\n * narrows to its inferred type; without one, it falls back to\n * `Record<string, any>`.\n */\ntype DeferEvent<TSchema> = {\n name: internalEvents.DeferredSchedule;\n data: TSchema extends StandardSchemaV1<\n infer D extends Record<string, unknown>\n >\n ? D\n : // biome-ignore lint/suspicious/noExplicitAny: no schema = any\n Record<string, any>;\n};\n\n/**\n * Base ctx shape for a defer handler: the standard function context\n * (`runId`, `attempt`, `group`, `step` with middleware step extensions)\n * with `event`/`events` pinned to `inngest/deferred.schedule` and the\n * schema-typed payload.\n */\ntype BaseDeferCtx<\n TClient extends Inngest.Any,\n TFnMiddleware extends Middleware.Class[] | undefined,\n TSchema extends StandardSchemaV1<Record<string, unknown>> | undefined,\n> = Omit<BaseContext<TClient>, \"event\" | \"events\" | \"step\"> & {\n event: DeferEvent<TSchema>;\n events: [DeferEvent<TSchema>];\n step: ReturnType<typeof createStepTools<TClient, TFnMiddleware>> &\n ApplyAllMiddlewareStepExtensions<\n ClientOptionsFromInngest<TClient>[\"middleware\"]\n > &\n ApplyAllMiddlewareStepExtensions<TFnMiddleware>;\n};\n\n/**\n * Input type for `createDefer`. Same shape as `DeferredFunction.Options`\n * plus `schema` (the StandardSchema describing `event.data` that flows\n * to caller `defer(id, { function, data })` call sites) and `middleware`.\n */\nexport type CreateDeferInput<\n TFnMiddleware extends Middleware.Class[] | undefined,\n TSchema extends StandardSchemaV1<Record<string, unknown>> | undefined,\n> = DeferredFunction.Options & {\n schema?: TSchema;\n middleware?: TFnMiddleware;\n};\n\n/**\n * EXPERIMENTAL: This API is not yet stable and may change in the future without\n * a major version bump.\n *\n * Create a typed defer function. One `createDefer` call = one Inngest\n * function. Returns a `DeferredFunction<TSchema>` so callers of `defer(id,\n * { function, data })` get the data type inferred from the schema.\n *\n * Mirrors `inngest.createFunction(opts, handler)`, with three differences:\n * the client is the first positional arg, `triggers` is not accepted (the\n * SDK emits an implicit `inngest/deferred.schedule` trigger), and `schema`\n * describes the payload that callers will send via `defer(id, { function,\n * data })`.\n *\n * Pass the result to `serve()` alongside regular functions so the SDK\n * registers it.\n */\nexport function createDefer<\n TClient extends Inngest.Any,\n TSchema extends\n | StandardSchemaV1<Record<string, unknown>>\n | undefined = undefined,\n const TFnMiddleware extends Middleware.Class[] | undefined = undefined,\n THandler extends Handler.Any = (\n ctx: BaseDeferCtx<TClient, TFnMiddleware, TSchema> &\n ApplyAllMiddlewareCtxExtensions<\n [...ReturnType<typeof builtInMiddleware>]\n > &\n ApplyAllMiddlewareCtxExtensions<\n ClientOptionsFromInngest<TClient>[\"middleware\"]\n > &\n ApplyAllMiddlewareCtxExtensions<TFnMiddleware>,\n ) => unknown,\n>(\n client: TClient,\n options: CreateDeferInput<TFnMiddleware, TSchema>,\n handler: THandler,\n): DeferredFunction<TSchema> {\n const { schema, ...rest } = options;\n return new DeferredFunction<TSchema>(\n client,\n rest,\n handler as Handler.Any,\n schema as TSchema,\n );\n}\n"],"mappings":";;;;;AAmBA,MAAM,cAAc;;;;;;;;;;;;;;;;;AAkBpB,IAAa,mBAAb,cAIU,gBAMR;CACA,AAAS;CACT,CAAU,aAAqB,EAAE,MAAM,oBAAoB;CAE3D,YACE,QACA,MACA,SACA,QACA;AAIA,MAAI,YAAY,KAAK,KAAK,GAAG,CAC3B,OAAM,IAAI,MACR,eAAe,KAAK,GAAG,gBAAgB,YAAY,SACpD;AAEH,QACE,QACA;GAAE,GAAG;GAAM,UAAU,EAAE;GAAE,EACzB,QACD;AACD,OAAK,SAAS;;CAGhB,AAAmB,kBACjB,MAC4B;AAC5B,SAAO,CACL;GACE,OAAO,eAAe;GACtB,YAAY,mCAAmC,KAAK;GACrD,CACF;;;;;;;;;;;;;;;;;;;;AA2FL,SAAgB,YAiBd,QACA,SACA,SAC2B;CAC3B,MAAM,EAAE,QAAQ,GAAG,SAAS;AAC5B,QAAO,IAAI,iBACT,QACA,MACA,SACA,OACD"}
1
+ {"version":3,"file":"DeferredFunction.js","names":[],"sources":["../../src/components/DeferredFunction.ts"],"sourcesContent":["import type { StandardSchemaV1 } from \"@standard-schema/spec\";\nimport { internalEvents } from \"../helpers/consts.ts\";\nimport { type Marker, markerKey } from \"../helpers/marker.ts\";\nimport type {\n ApplyAllMiddlewareCtxExtensions,\n ApplyAllMiddlewareStepExtensions,\n BaseContext,\n FunctionConfig,\n Handler,\n} from \"../types.ts\";\nimport type {\n builtInMiddleware,\n ClientOptionsFromInngest,\n Inngest,\n} from \"./Inngest.ts\";\nimport { InngestFunction } from \"./InngestFunction.ts\";\nimport type { createStepTools } from \"./InngestStepTools.ts\";\nimport type { Middleware } from \"./middleware/index.ts\";\n\nconst idDenyRegex = /['\\\\\\n\\r]/;\n\n/**\n * EXPERIMENTAL: This API is not yet stable and may change in the future without\n * a major version bump.\n *\n * A defer (companion) function created via `createDefer(...)`. Real\n * `InngestFunction` at runtime, but with the trigger pinned to\n * `inngest/deferred.schedule` (see `getConfigTriggers`), `triggers` and\n * `onFailure` disallowed, and the schema carried as a typed instance\n * property so callers of `defer(id, { function, data })` can extract it.\n *\n * Identify a defer function at runtime via `isDeferredFunction(value)` from\n * `helpers/marker.ts`. Prefer that over `instanceof`, which fails across\n * duplicate SDK copies in the same process.\n *\n * @public\n */\nexport class DeferredFunction<\n TSchema extends\n | StandardSchemaV1<Record<string, unknown>>\n | undefined = undefined,\n> extends InngestFunction<\n InngestFunction.Options<[], never>,\n Handler.Any,\n never,\n Inngest.Any,\n []\n> {\n readonly schema: TSchema;\n readonly [markerKey]: Marker = { kind: \"DeferredFunction\" };\n\n constructor(\n client: Inngest.Any,\n opts: DeferredFunction.Options,\n handler: Handler.Any,\n schema: TSchema,\n ) {\n // The id is interpolated into a CEL trigger expression\n // (`event.data._inngest.fn_slug == '${fnId}'`). Reject characters that\n // would break the single-quoted string literal.\n if (idDenyRegex.test(opts.id)) {\n throw new Error(\n `invalid id \"${opts.id}\"; must match ${idDenyRegex.source}`,\n );\n }\n super(\n client,\n { ...opts, triggers: [] } as InngestFunction.Options<[], never>,\n handler,\n );\n this.schema = schema;\n }\n\n protected override getConfigTriggers(\n fnId: string,\n ): FunctionConfig[\"triggers\"] {\n return [\n {\n event: internalEvents.DeferredSchedule,\n expression: `event.data._inngest.fn_slug == '${fnId}'`,\n },\n ];\n }\n}\n\n/**\n * @public\n */\nexport namespace DeferredFunction {\n /**\n * Matches any `DeferredFunction` regardless of its schema. Use as the\n * constraint for the `function` argument of `defer()`.\n */\n // biome-ignore lint/suspicious/noExplicitAny: widest schema constraint for inference\n export type Any = DeferredFunction<StandardSchemaV1<any> | undefined>;\n\n /**\n * The user-facing options accepted by `createDefer(client, opts, handler)`.\n * Mirrors `InngestFunction.Options` minus `triggers` (implicit), `onFailure`\n * (not yet supported), and `batchEvents` (each `defer(...)` is its own run).\n */\n export type Options = Omit<\n InngestFunction.Options<[], never>,\n \"triggers\" | \"onFailure\" | \"batchEvents\"\n >;\n}\n\n/**\n * The `event` shape a defer handler receives. With a schema, `data`\n * narrows to its inferred type; without one, it falls back to\n * `Record<string, any>`.\n */\ntype DeferEvent<TSchema> = {\n name: internalEvents.DeferredSchedule;\n data: TSchema extends StandardSchemaV1<\n infer D extends Record<string, unknown>\n >\n ? D\n : // biome-ignore lint/suspicious/noExplicitAny: no schema = any\n Record<string, any>;\n};\n\n/**\n * Base ctx shape for a defer handler: the standard function context\n * (`runId`, `attempt`, `group`, `step` with middleware step extensions)\n * with `event`/`events` pinned to `inngest/deferred.schedule` and the\n * schema-typed payload.\n */\ntype BaseDeferCtx<\n TClient extends Inngest.Any,\n TFnMiddleware extends Middleware.Class[] | undefined,\n TSchema extends StandardSchemaV1<Record<string, unknown>> | undefined,\n> = Omit<BaseContext<TClient>, \"event\" | \"events\" | \"step\"> & {\n event: DeferEvent<TSchema>;\n events: [DeferEvent<TSchema>];\n step: ReturnType<typeof createStepTools<TClient, TFnMiddleware>> &\n ApplyAllMiddlewareStepExtensions<\n ClientOptionsFromInngest<TClient>[\"middleware\"]\n > &\n ApplyAllMiddlewareStepExtensions<TFnMiddleware>;\n};\n\n/**\n * Input type for `createDefer`. Same shape as `DeferredFunction.Options`\n * plus `schema` (the StandardSchema describing `event.data` that flows\n * to caller `defer(id, { function, data })` call sites) and `middleware`.\n */\nexport type CreateDeferInput<\n TFnMiddleware extends Middleware.Class[] | undefined,\n TSchema extends StandardSchemaV1<Record<string, unknown>> | undefined,\n> = DeferredFunction.Options & {\n schema?: TSchema;\n middleware?: TFnMiddleware;\n};\n\n/**\n * EXPERIMENTAL: This API is not yet stable and may change in the future without\n * a major version bump.\n *\n * Create a typed defer function. One `createDefer` call = one Inngest\n * function. Returns a `DeferredFunction<TSchema>` so callers of `defer(id,\n * { function, data })` get the data type inferred from the schema.\n *\n * Mirrors `inngest.createFunction(opts, handler)`, with three differences:\n * the client is the first positional arg, `triggers` is not accepted (the\n * SDK emits an implicit `inngest/deferred.schedule` trigger), and `schema`\n * describes the payload that callers will send via `defer(id, { function,\n * data })`.\n *\n * Pass the result to `serve()` alongside regular functions so the SDK\n * registers it.\n */\nexport function createDefer<\n TClient extends Inngest.Any,\n TSchema extends\n | StandardSchemaV1<Record<string, unknown>>\n | undefined = undefined,\n const TFnMiddleware extends Middleware.Class[] | undefined = undefined,\n THandler extends Handler.Any = (\n ctx: BaseDeferCtx<TClient, TFnMiddleware, TSchema> &\n ApplyAllMiddlewareCtxExtensions<\n [...ReturnType<typeof builtInMiddleware>]\n > &\n ApplyAllMiddlewareCtxExtensions<\n ClientOptionsFromInngest<TClient>[\"middleware\"]\n > &\n ApplyAllMiddlewareCtxExtensions<TFnMiddleware>,\n ) => unknown,\n>(\n client: TClient,\n options: CreateDeferInput<TFnMiddleware, TSchema>,\n handler: THandler,\n): DeferredFunction<TSchema> {\n const { schema, ...rest } = options;\n return new DeferredFunction<TSchema>(\n client,\n rest,\n handler as Handler.Any,\n schema as TSchema,\n );\n}\n"],"mappings":";;;;;AAmBA,MAAM,cAAc;;;;;;;;;;;;;;;;;AAkBpB,IAAa,mBAAb,cAIU,gBAMR;CACA,AAAS;CACT,CAAU,aAAqB,EAAE,MAAM,oBAAoB;CAE3D,YACE,QACA,MACA,SACA,QACA;AAIA,MAAI,YAAY,KAAK,KAAK,GAAG,CAC3B,OAAM,IAAI,MACR,eAAe,KAAK,GAAG,gBAAgB,YAAY,SACpD;AAEH,QACE,QACA;GAAE,GAAG;GAAM,UAAU,EAAE;GAAE,EACzB,QACD;AACD,OAAK,SAAS;;CAGhB,AAAmB,kBACjB,MAC4B;AAC5B,SAAO,CACL;GACE,OAAO,eAAe;GACtB,YAAY,mCAAmC,KAAK;GACrD,CACF;;;;;;;;;;;;;;;;;;;;AA2FL,SAAgB,YAiBd,QACA,SACA,SAC2B;CAC3B,MAAM,EAAE,QAAQ,GAAG,SAAS;AAC5B,QAAO,IAAI,iBACT,QACA,MACA,SACA,OACD"}
@@ -1,6 +1,6 @@
1
+ import { InngestApi } from "../api/api.cjs";
1
2
  import { AsArray, IsNever, MaybePromise, SendEventPayload, SimplifyDeep, SingleOrArray } from "../helpers/types.cjs";
2
3
  import { Logger, ProxyLogger } from "../middleware/logger.cjs";
3
- import { InngestApi } from "../api/api.cjs";
4
4
  import { Jsonify } from "../helpers/jsonify.cjs";
5
5
  import { Middleware } from "./middleware/middleware.cjs";
6
6
  import { Realtime } from "./realtime/types.cjs";
@@ -1,6 +1,6 @@
1
+ import { InngestApi } from "../api/api.js";
1
2
  import { AsArray, IsNever, MaybePromise, SendEventPayload, SimplifyDeep, SingleOrArray } from "../helpers/types.js";
2
3
  import { Logger, ProxyLogger } from "../middleware/logger.js";
3
- import { InngestApi } from "../api/api.js";
4
4
  import { Jsonify } from "../helpers/jsonify.js";
5
5
  import { Middleware } from "./middleware/middleware.js";
6
6
  import { Realtime } from "./realtime/types.js";