inngest 4.2.6 → 4.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +24 -0
- package/api/schema.d.cts +2 -2
- package/api/schema.d.cts.map +1 -1
- package/api/schema.d.ts +2 -2
- package/api/schema.d.ts.map +1 -1
- package/components/DeferredFunction.cjs +66 -0
- package/components/DeferredFunction.cjs.map +1 -0
- package/components/DeferredFunction.d.cts +99 -0
- package/components/DeferredFunction.d.cts.map +1 -0
- package/components/DeferredFunction.d.ts +99 -0
- package/components/DeferredFunction.d.ts.map +1 -0
- package/components/DeferredFunction.js +65 -0
- package/components/DeferredFunction.js.map +1 -0
- package/components/Inngest.cjs +5 -2
- package/components/Inngest.cjs.map +1 -1
- package/components/Inngest.d.cts +11 -4
- package/components/Inngest.d.cts.map +1 -1
- package/components/Inngest.d.ts +11 -4
- package/components/Inngest.d.ts.map +1 -1
- package/components/Inngest.js +5 -2
- package/components/Inngest.js.map +1 -1
- package/components/InngestCommHandler.cjs +28 -23
- package/components/InngestCommHandler.cjs.map +1 -1
- package/components/InngestCommHandler.d.cts +9 -4
- package/components/InngestCommHandler.d.cts.map +1 -1
- package/components/InngestCommHandler.d.ts +9 -4
- package/components/InngestCommHandler.d.ts.map +1 -1
- package/components/InngestCommHandler.js +28 -23
- package/components/InngestCommHandler.js.map +1 -1
- package/components/InngestFunction.cjs +27 -19
- package/components/InngestFunction.cjs.map +1 -1
- package/components/InngestFunction.d.cts +6 -1
- package/components/InngestFunction.d.cts.map +1 -1
- package/components/InngestFunction.d.ts +6 -1
- package/components/InngestFunction.d.ts.map +1 -1
- package/components/InngestFunction.js +27 -19
- package/components/InngestFunction.js.map +1 -1
- package/components/InngestGroupTools.cjs +1 -1
- package/components/InngestGroupTools.cjs.map +1 -1
- package/components/InngestGroupTools.js +1 -1
- package/components/InngestGroupTools.js.map +1 -1
- package/components/InngestStepTools.cjs +3 -7
- package/components/InngestStepTools.cjs.map +1 -1
- package/components/InngestStepTools.d.cts +10 -7
- package/components/InngestStepTools.d.cts.map +1 -1
- package/components/InngestStepTools.d.ts +10 -7
- package/components/InngestStepTools.d.ts.map +1 -1
- package/components/InngestStepTools.js +3 -7
- package/components/InngestStepTools.js.map +1 -1
- package/components/connect/config.cjs +2 -0
- package/components/connect/config.cjs.map +1 -1
- package/components/connect/config.js +2 -0
- package/components/connect/config.js.map +1 -1
- package/components/connect/strategies/core/connection.cjs +91 -11
- package/components/connect/strategies/core/connection.cjs.map +1 -1
- package/components/connect/strategies/core/connection.js +91 -11
- package/components/connect/strategies/core/connection.js.map +1 -1
- package/components/connect/strategies/core/heartbeat.cjs +2 -1
- package/components/connect/strategies/core/heartbeat.cjs.map +1 -1
- package/components/connect/strategies/core/heartbeat.js +2 -1
- package/components/connect/strategies/core/heartbeat.js.map +1 -1
- package/components/connect/strategies/core/requestProcessor.cjs +27 -4
- package/components/connect/strategies/core/requestProcessor.cjs.map +1 -1
- package/components/connect/strategies/core/requestProcessor.js +27 -4
- package/components/connect/strategies/core/requestProcessor.js.map +1 -1
- package/components/connect/strategies/core/types.cjs +21 -0
- package/components/connect/strategies/core/types.cjs.map +1 -0
- package/components/connect/strategies/core/types.js +20 -0
- package/components/connect/strategies/core/types.js.map +1 -0
- package/components/connect/types.cjs.map +1 -1
- package/components/connect/types.d.cts +18 -0
- package/components/connect/types.d.cts.map +1 -1
- package/components/connect/types.d.ts +18 -0
- package/components/connect/types.d.ts.map +1 -1
- package/components/connect/types.js.map +1 -1
- package/components/execution/InngestExecution.cjs.map +1 -1
- package/components/execution/InngestExecution.d.cts +19 -2
- package/components/execution/InngestExecution.d.cts.map +1 -1
- package/components/execution/InngestExecution.d.ts +19 -2
- package/components/execution/InngestExecution.d.ts.map +1 -1
- package/components/execution/InngestExecution.js.map +1 -1
- package/components/execution/engine.cjs +233 -28
- package/components/execution/engine.cjs.map +1 -1
- package/components/execution/engine.d.cts +14 -0
- package/components/execution/engine.d.cts.map +1 -1
- package/components/execution/engine.d.ts +14 -0
- package/components/execution/engine.d.ts.map +1 -1
- package/components/execution/engine.js +233 -28
- package/components/execution/engine.js.map +1 -1
- package/components/execution/lazyOps.cjs +64 -0
- package/components/execution/lazyOps.cjs.map +1 -0
- package/components/execution/lazyOps.d.cts +42 -0
- package/components/execution/lazyOps.d.cts.map +1 -0
- package/components/execution/lazyOps.d.ts +42 -0
- package/components/execution/lazyOps.d.ts.map +1 -0
- package/components/execution/lazyOps.js +63 -0
- package/components/execution/lazyOps.js.map +1 -0
- package/components/execution/otel/middleware.d.cts +14 -5
- package/components/execution/otel/middleware.d.cts.map +1 -1
- package/components/execution/otel/middleware.d.ts +14 -5
- package/components/execution/otel/middleware.d.ts.map +1 -1
- package/components/middleware/manager.cjs +1 -1
- package/components/middleware/manager.cjs.map +1 -1
- package/components/middleware/manager.js +2 -2
- package/components/middleware/manager.js.map +1 -1
- package/components/middleware/middleware.cjs.map +1 -1
- package/components/middleware/middleware.d.cts +1 -1
- package/components/middleware/middleware.d.cts.map +1 -1
- package/components/middleware/middleware.d.ts +1 -1
- package/components/middleware/middleware.d.ts.map +1 -1
- package/components/middleware/middleware.js.map +1 -1
- package/components/middleware/utils.cjs +5 -3
- package/components/middleware/utils.cjs.map +1 -1
- package/components/middleware/utils.js +5 -3
- package/components/middleware/utils.js.map +1 -1
- package/components/triggers/typeHelpers.cjs.map +1 -1
- package/components/triggers/typeHelpers.d.cts +11 -0
- package/components/triggers/typeHelpers.d.cts.map +1 -1
- package/components/triggers/typeHelpers.d.ts +11 -0
- package/components/triggers/typeHelpers.d.ts.map +1 -1
- package/components/triggers/typeHelpers.js.map +1 -1
- package/experimental.cjs +3 -0
- package/experimental.d.cts +2 -1
- package/experimental.d.ts +2 -1
- package/experimental.js +2 -1
- package/helpers/consts.cjs +6 -0
- package/helpers/consts.cjs.map +1 -1
- package/helpers/consts.d.cts +6 -0
- package/helpers/consts.d.cts.map +1 -1
- package/helpers/consts.d.ts +6 -0
- package/helpers/consts.d.ts.map +1 -1
- package/helpers/consts.js +6 -0
- package/helpers/consts.js.map +1 -1
- package/helpers/functions.cjs +1 -0
- package/helpers/functions.cjs.map +1 -1
- package/helpers/functions.js +1 -0
- package/helpers/functions.js.map +1 -1
- package/helpers/marker.cjs +21 -0
- package/helpers/marker.cjs.map +1 -0
- package/helpers/marker.d.cts +12 -0
- package/helpers/marker.d.cts.map +1 -0
- package/helpers/marker.d.ts +12 -0
- package/helpers/marker.d.ts.map +1 -0
- package/helpers/marker.js +19 -0
- package/helpers/marker.js.map +1 -0
- package/helpers/strings.cjs +10 -4
- package/helpers/strings.cjs.map +1 -1
- package/helpers/strings.d.cts.map +1 -1
- package/helpers/strings.d.ts.map +1 -1
- package/helpers/strings.js +10 -4
- package/helpers/strings.js.map +1 -1
- package/helpers/temporal.cjs +2 -0
- package/helpers/temporal.d.ts +3 -0
- package/helpers/temporal.d.ts.map +1 -1
- package/helpers/temporal.js +1 -1
- package/package.json +2 -2
- package/proto/src/components/connect/protobuf/connect.cjs +11 -2
- package/proto/src/components/connect/protobuf/connect.cjs.map +1 -1
- package/proto/src/components/connect/protobuf/connect.js +11 -2
- package/proto/src/components/connect/protobuf/connect.js.map +1 -1
- package/react.d.cts.map +1 -1
- package/types.cjs +2 -0
- package/types.cjs.map +1 -1
- package/types.d.cts +43 -8
- package/types.d.cts.map +1 -1
- package/types.d.ts +43 -8
- package/types.d.ts.map +1 -1
- package/types.js +2 -0
- package/types.js.map +1 -1
- package/version.cjs +1 -1
- package/version.cjs.map +1 -1
- package/version.d.cts +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
- package/version.js.map +1 -1
package/helpers/strings.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"strings.cjs","names":["hashjs","milliseconds: number","timeStr"],"sources":["../../src/helpers/strings.ts"],"sourcesContent":["import hashjs from \"hash.js\";\nimport { default as safeStringify } from \"json-stringify-safe\";\nimport ms from \"ms\";\nimport type { TimeStr } from \"../types.ts\";\n\nconst { sha256 } = hashjs;\n\n/**\n * Constant-time equality check for two strings. Returns `false` immediately if\n * lengths differ; otherwise XOR-accumulates every char code so the total time\n * is independent of where (or whether) the strings diverge.\n *\n * Used for HMAC signature verification — `===`/`!==` short-circuit on the\n * first mismatched character and leak the matching-prefix length via timing.\n */\nexport function timingSafeEqual(a: string, b: string): boolean {\n if (a.length !== b.length) {\n return false;\n }\n\n let diff = 0;\n for (let i = 0; i < a.length; i++) {\n diff |= a.charCodeAt(i) ^ b.charCodeAt(i);\n }\n return diff === 0;\n}\n\n/**\n * Safely `JSON.stringify()` an `input`, handling circular refernences and\n * removing `BigInt` values.\n */\n// biome-ignore lint/suspicious/noExplicitAny: intentional\nexport const stringify = (input: any): string => {\n return safeStringify(input, (_key, value) => {\n if (typeof value !== \"bigint\") {\n return value;\n }\n });\n};\n\n/**\n * Returns a slugified string used to generate consistent IDs.\n *\n * This can be used to generate a consistent ID for a function when migrating\n * from v2 to v3 of the SDK.\n *\n * @public\n */\nexport const slugify = (str: string): string => {\n const join = \"-\";\n return str\n .toLowerCase()\n .replace(/[^a-z0-9-]+/g, join)\n .replace(/-+/g, join)\n .split(join)\n .filter(Boolean)\n .join(join);\n};\n\nconst millisecond = 1;\nconst second = millisecond * 1000;\nconst minute = second * 60;\nconst hour = minute * 60;\nconst day = hour * 24;\nconst week = day * 7;\n\n/**\n * A collection of periods in milliseconds and their suffixes used when creating\n * time strings.\n */\nconst periods = [\n [\"w\", week],\n [\"d\", day],\n [\"h\", hour],\n [\"m\", minute],\n [\"s\", second],\n] as const;\n\n/**\n * Convert a given `Date`, `number`, or `ms`-compatible `string` to a\n * Inngest sleep-compatible time string (e.g. `\"1d\"` or `\"2h3010s\"`).\n
|
|
1
|
+
{"version":3,"file":"strings.cjs","names":["hashjs","isTemporalInstant","isTemporalZonedDateTime","getISOString","milliseconds: number","isTemporalDuration","Temporal","timeStr"],"sources":["../../src/helpers/strings.ts"],"sourcesContent":["import hashjs from \"hash.js\";\nimport { default as safeStringify } from \"json-stringify-safe\";\nimport ms from \"ms\";\nimport { Temporal } from \"temporal-polyfill\";\nimport type { TimeStr } from \"../types.ts\";\nimport {\n type DurationLike,\n getISOString,\n type InstantLike,\n isTemporalDuration,\n isTemporalInstant,\n isTemporalZonedDateTime,\n type ZonedDateTimeLike,\n} from \"./temporal.ts\";\n\nconst { sha256 } = hashjs;\n\n/**\n * Constant-time equality check for two strings. Returns `false` immediately if\n * lengths differ; otherwise XOR-accumulates every char code so the total time\n * is independent of where (or whether) the strings diverge.\n *\n * Used for HMAC signature verification — `===`/`!==` short-circuit on the\n * first mismatched character and leak the matching-prefix length via timing.\n */\nexport function timingSafeEqual(a: string, b: string): boolean {\n if (a.length !== b.length) {\n return false;\n }\n\n let diff = 0;\n for (let i = 0; i < a.length; i++) {\n diff |= a.charCodeAt(i) ^ b.charCodeAt(i);\n }\n return diff === 0;\n}\n\n/**\n * Safely `JSON.stringify()` an `input`, handling circular refernences and\n * removing `BigInt` values.\n */\n// biome-ignore lint/suspicious/noExplicitAny: intentional\nexport const stringify = (input: any): string => {\n return safeStringify(input, (_key, value) => {\n if (typeof value !== \"bigint\") {\n return value;\n }\n });\n};\n\n/**\n * Returns a slugified string used to generate consistent IDs.\n *\n * This can be used to generate a consistent ID for a function when migrating\n * from v2 to v3 of the SDK.\n *\n * @public\n */\nexport const slugify = (str: string): string => {\n const join = \"-\";\n return str\n .toLowerCase()\n .replace(/[^a-z0-9-]+/g, join)\n .replace(/-+/g, join)\n .split(join)\n .filter(Boolean)\n .join(join);\n};\n\nconst millisecond = 1;\nconst second = millisecond * 1000;\nconst minute = second * 60;\nconst hour = minute * 60;\nconst day = hour * 24;\nconst week = day * 7;\n\n/**\n * A collection of periods in milliseconds and their suffixes used when creating\n * time strings.\n */\nconst periods = [\n [\"w\", week],\n [\"d\", day],\n [\"h\", hour],\n [\"m\", minute],\n [\"s\", second],\n] as const;\n\n/**\n * Convert a given `Date`, `number`, or `ms`-compatible `string` to a\n * Inngest sleep-compatible time string (e.g. `\"1d\"` or `\"2h3010s\"`).\n */\nexport const timeStr = (\n /**\n * The future date to use to convert to a time string.\n */\n input:\n | string\n | number\n | Date\n | DurationLike\n | InstantLike\n | ZonedDateTimeLike,\n): string => {\n if (input instanceof Date) {\n return input.toISOString();\n }\n\n if (isTemporalInstant(input) || isTemporalZonedDateTime(input)) {\n return getISOString(input);\n }\n\n let milliseconds: number;\n if (isTemporalDuration(input)) {\n // `relativeTo` is required for calendar units (months/years/weeks). We\n // pass it as an ISO string rather than a Temporal object so this works\n // regardless of which Temporal implementation the user's Duration came\n // from (temporal-polyfill, @js-temporal/polyfill, native Temporal):\n // ISO strings are spec-defined and parsed by every implementation;\n // cross-polyfill object passing is not.\n milliseconds = input.total({\n unit: \"milliseconds\",\n relativeTo: Temporal.Now.plainDateTimeISO(\"UTC\").toString(),\n });\n } else if (typeof input === \"string\") {\n milliseconds = ms(input as `${number}`);\n } else {\n milliseconds = input as number;\n }\n\n const [, timeStr] = periods.reduce<[number, string]>(\n ([num, str], [suffix, period]) => {\n const numPeriods = Math.floor(num / period);\n\n if (numPeriods > 0) {\n return [num % period, `${str}${numPeriods}${suffix}`];\n }\n\n return [num, str];\n },\n [milliseconds, \"\"],\n );\n\n return timeStr as TimeStr;\n};\n\n/**\n * Given an unknown input, stringify it if it's a boolean, a number, or a\n * string, else return `undefined`.\n */\nexport const stringifyUnknown = (input: unknown): string | undefined => {\n if (\n typeof input === \"boolean\" ||\n typeof input === \"number\" ||\n typeof input === \"string\"\n ) {\n return input.toString();\n }\n\n return;\n};\n\nexport const hashEventKey = (eventKey: string): string => {\n return sha256().update(eventKey).digest(\"hex\");\n};\n\nexport const hashSigningKey = (signingKey: string | undefined): string => {\n if (!signingKey) {\n return \"\";\n }\n\n const prefix = signingKey.match(/^signkey-[\\w]+-/)?.shift() || \"\";\n const key = removeSigningKeyPrefix(signingKey);\n\n // Decode the key from its hex representation into a bytestream\n return `${prefix}${sha256().update(key, \"hex\").digest(\"hex\")}`;\n};\n\nexport function removeSigningKeyPrefix(signingKey: string): string {\n return signingKey.replace(/^signkey-[\\w]+-/, \"\");\n}\n"],"mappings":";;;;;;;;;;;AAeA,MAAM,EAAE,WAAWA;;;;;;;;;AAUnB,SAAgB,gBAAgB,GAAW,GAAoB;AAC7D,KAAI,EAAE,WAAW,EAAE,OACjB,QAAO;CAGT,IAAI,OAAO;AACX,MAAK,IAAI,IAAI,GAAG,IAAI,EAAE,QAAQ,IAC5B,SAAQ,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE;AAE3C,QAAO,SAAS;;;;;;AAQlB,MAAa,aAAa,UAAuB;AAC/C,yCAAqB,QAAQ,MAAM,UAAU;AAC3C,MAAI,OAAO,UAAU,SACnB,QAAO;GAET;;;;;;;;;;AAWJ,MAAa,WAAW,QAAwB;CAC9C,MAAM,OAAO;AACb,QAAO,IACJ,aAAa,CACb,QAAQ,gBAAgB,KAAK,CAC7B,QAAQ,OAAO,KAAK,CACpB,MAAM,KAAK,CACX,OAAO,QAAQ,CACf,KAAK,KAAK;;AAIf,MAAM,SADc,IACS;AAC7B,MAAM,SAAS,SAAS;AACxB,MAAM,OAAO,SAAS;AACtB,MAAM,MAAM,OAAO;;;;;AAOnB,MAAM,UAAU;CACd,CAAC,KAPU,MAAM,EAON;CACX,CAAC,KAAK,IAAI;CACV,CAAC,KAAK,KAAK;CACX,CAAC,KAAK,OAAO;CACb,CAAC,KAAK,OAAO;CACd;;;;;AAMD,MAAa,WAIX,UAOW;AACX,KAAI,iBAAiB,KACnB,QAAO,MAAM,aAAa;AAG5B,KAAIC,mCAAkB,MAAM,IAAIC,yCAAwB,MAAM,CAC5D,QAAOC,8BAAa,MAAM;CAG5B,IAAIC;AACJ,KAAIC,oCAAmB,MAAM,CAO3B,gBAAe,MAAM,MAAM;EACzB,MAAM;EACN,YAAYC,2BAAS,IAAI,iBAAiB,MAAM,CAAC,UAAU;EAC5D,CAAC;UACO,OAAO,UAAU,SAC1B,gCAAkB,MAAqB;KAEvC,gBAAe;CAGjB,MAAM,GAAGC,aAAW,QAAQ,QACzB,CAAC,KAAK,MAAM,CAAC,QAAQ,YAAY;EAChC,MAAM,aAAa,KAAK,MAAM,MAAM,OAAO;AAE3C,MAAI,aAAa,EACf,QAAO,CAAC,MAAM,QAAQ,GAAG,MAAM,aAAa,SAAS;AAGvD,SAAO,CAAC,KAAK,IAAI;IAEnB,CAAC,cAAc,GAAG,CACnB;AAED,QAAOA;;AAmBT,MAAa,gBAAgB,aAA6B;AACxD,QAAO,QAAQ,CAAC,OAAO,SAAS,CAAC,OAAO,MAAM;;AAGhD,MAAa,kBAAkB,eAA2C;AACxE,KAAI,CAAC,WACH,QAAO;CAGT,MAAM,SAAS,WAAW,MAAM,kBAAkB,EAAE,OAAO,IAAI;CAC/D,MAAM,MAAM,uBAAuB,WAAW;AAG9C,QAAO,GAAG,SAAS,QAAQ,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO,MAAM;;AAG9D,SAAgB,uBAAuB,YAA4B;AACjE,QAAO,WAAW,QAAQ,mBAAmB,GAAG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"strings.d.cts","names":[],"sources":["../../src/helpers/strings.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"strings.d.cts","names":[],"sources":["../../src/helpers/strings.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;cA0Da"}
|
package/helpers/strings.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"strings.d.ts","names":[],"sources":["../../src/helpers/strings.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"strings.d.ts","names":[],"sources":["../../src/helpers/strings.ts"],"sourcesContent":[],"mappings":";;;;;;;;;;cA0Da"}
|
package/helpers/strings.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import { getISOString, isTemporalDuration, isTemporalInstant, isTemporalZonedDateTime } from "./temporal.js";
|
|
1
2
|
import stringify from "json-stringify-safe";
|
|
2
3
|
import hashjs from "hash.js";
|
|
3
4
|
import ms from "ms";
|
|
5
|
+
import { Temporal } from "temporal-polyfill";
|
|
4
6
|
|
|
5
7
|
//#region src/helpers/strings.ts
|
|
6
8
|
const { sha256 } = hashjs;
|
|
@@ -57,13 +59,17 @@ const periods = [
|
|
|
57
59
|
/**
|
|
58
60
|
* Convert a given `Date`, `number`, or `ms`-compatible `string` to a
|
|
59
61
|
* Inngest sleep-compatible time string (e.g. `"1d"` or `"2h3010s"`).
|
|
60
|
-
*
|
|
61
|
-
* Can optionally provide a `now` date to use as the base for the calculation,
|
|
62
|
-
* otherwise a new date will be created on invocation.
|
|
63
62
|
*/
|
|
64
63
|
const timeStr = (input) => {
|
|
65
64
|
if (input instanceof Date) return input.toISOString();
|
|
66
|
-
|
|
65
|
+
if (isTemporalInstant(input) || isTemporalZonedDateTime(input)) return getISOString(input);
|
|
66
|
+
let milliseconds;
|
|
67
|
+
if (isTemporalDuration(input)) milliseconds = input.total({
|
|
68
|
+
unit: "milliseconds",
|
|
69
|
+
relativeTo: Temporal.Now.plainDateTimeISO("UTC").toString()
|
|
70
|
+
});
|
|
71
|
+
else if (typeof input === "string") milliseconds = ms(input);
|
|
72
|
+
else milliseconds = input;
|
|
67
73
|
const [, timeStr$1] = periods.reduce(([num, str], [suffix, period]) => {
|
|
68
74
|
const numPeriods = Math.floor(num / period);
|
|
69
75
|
if (numPeriods > 0) return [num % period, `${str}${numPeriods}${suffix}`];
|
package/helpers/strings.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"strings.js","names":["stringify","safeStringify","milliseconds: number","timeStr"],"sources":["../../src/helpers/strings.ts"],"sourcesContent":["import hashjs from \"hash.js\";\nimport { default as safeStringify } from \"json-stringify-safe\";\nimport ms from \"ms\";\nimport type { TimeStr } from \"../types.ts\";\n\nconst { sha256 } = hashjs;\n\n/**\n * Constant-time equality check for two strings. Returns `false` immediately if\n * lengths differ; otherwise XOR-accumulates every char code so the total time\n * is independent of where (or whether) the strings diverge.\n *\n * Used for HMAC signature verification — `===`/`!==` short-circuit on the\n * first mismatched character and leak the matching-prefix length via timing.\n */\nexport function timingSafeEqual(a: string, b: string): boolean {\n if (a.length !== b.length) {\n return false;\n }\n\n let diff = 0;\n for (let i = 0; i < a.length; i++) {\n diff |= a.charCodeAt(i) ^ b.charCodeAt(i);\n }\n return diff === 0;\n}\n\n/**\n * Safely `JSON.stringify()` an `input`, handling circular refernences and\n * removing `BigInt` values.\n */\n// biome-ignore lint/suspicious/noExplicitAny: intentional\nexport const stringify = (input: any): string => {\n return safeStringify(input, (_key, value) => {\n if (typeof value !== \"bigint\") {\n return value;\n }\n });\n};\n\n/**\n * Returns a slugified string used to generate consistent IDs.\n *\n * This can be used to generate a consistent ID for a function when migrating\n * from v2 to v3 of the SDK.\n *\n * @public\n */\nexport const slugify = (str: string): string => {\n const join = \"-\";\n return str\n .toLowerCase()\n .replace(/[^a-z0-9-]+/g, join)\n .replace(/-+/g, join)\n .split(join)\n .filter(Boolean)\n .join(join);\n};\n\nconst millisecond = 1;\nconst second = millisecond * 1000;\nconst minute = second * 60;\nconst hour = minute * 60;\nconst day = hour * 24;\nconst week = day * 7;\n\n/**\n * A collection of periods in milliseconds and their suffixes used when creating\n * time strings.\n */\nconst periods = [\n [\"w\", week],\n [\"d\", day],\n [\"h\", hour],\n [\"m\", minute],\n [\"s\", second],\n] as const;\n\n/**\n * Convert a given `Date`, `number`, or `ms`-compatible `string` to a\n * Inngest sleep-compatible time string (e.g. `\"1d\"` or `\"2h3010s\"`).\n
|
|
1
|
+
{"version":3,"file":"strings.js","names":["stringify","safeStringify","milliseconds: number","timeStr"],"sources":["../../src/helpers/strings.ts"],"sourcesContent":["import hashjs from \"hash.js\";\nimport { default as safeStringify } from \"json-stringify-safe\";\nimport ms from \"ms\";\nimport { Temporal } from \"temporal-polyfill\";\nimport type { TimeStr } from \"../types.ts\";\nimport {\n type DurationLike,\n getISOString,\n type InstantLike,\n isTemporalDuration,\n isTemporalInstant,\n isTemporalZonedDateTime,\n type ZonedDateTimeLike,\n} from \"./temporal.ts\";\n\nconst { sha256 } = hashjs;\n\n/**\n * Constant-time equality check for two strings. Returns `false` immediately if\n * lengths differ; otherwise XOR-accumulates every char code so the total time\n * is independent of where (or whether) the strings diverge.\n *\n * Used for HMAC signature verification — `===`/`!==` short-circuit on the\n * first mismatched character and leak the matching-prefix length via timing.\n */\nexport function timingSafeEqual(a: string, b: string): boolean {\n if (a.length !== b.length) {\n return false;\n }\n\n let diff = 0;\n for (let i = 0; i < a.length; i++) {\n diff |= a.charCodeAt(i) ^ b.charCodeAt(i);\n }\n return diff === 0;\n}\n\n/**\n * Safely `JSON.stringify()` an `input`, handling circular refernences and\n * removing `BigInt` values.\n */\n// biome-ignore lint/suspicious/noExplicitAny: intentional\nexport const stringify = (input: any): string => {\n return safeStringify(input, (_key, value) => {\n if (typeof value !== \"bigint\") {\n return value;\n }\n });\n};\n\n/**\n * Returns a slugified string used to generate consistent IDs.\n *\n * This can be used to generate a consistent ID for a function when migrating\n * from v2 to v3 of the SDK.\n *\n * @public\n */\nexport const slugify = (str: string): string => {\n const join = \"-\";\n return str\n .toLowerCase()\n .replace(/[^a-z0-9-]+/g, join)\n .replace(/-+/g, join)\n .split(join)\n .filter(Boolean)\n .join(join);\n};\n\nconst millisecond = 1;\nconst second = millisecond * 1000;\nconst minute = second * 60;\nconst hour = minute * 60;\nconst day = hour * 24;\nconst week = day * 7;\n\n/**\n * A collection of periods in milliseconds and their suffixes used when creating\n * time strings.\n */\nconst periods = [\n [\"w\", week],\n [\"d\", day],\n [\"h\", hour],\n [\"m\", minute],\n [\"s\", second],\n] as const;\n\n/**\n * Convert a given `Date`, `number`, or `ms`-compatible `string` to a\n * Inngest sleep-compatible time string (e.g. `\"1d\"` or `\"2h3010s\"`).\n */\nexport const timeStr = (\n /**\n * The future date to use to convert to a time string.\n */\n input:\n | string\n | number\n | Date\n | DurationLike\n | InstantLike\n | ZonedDateTimeLike,\n): string => {\n if (input instanceof Date) {\n return input.toISOString();\n }\n\n if (isTemporalInstant(input) || isTemporalZonedDateTime(input)) {\n return getISOString(input);\n }\n\n let milliseconds: number;\n if (isTemporalDuration(input)) {\n // `relativeTo` is required for calendar units (months/years/weeks). We\n // pass it as an ISO string rather than a Temporal object so this works\n // regardless of which Temporal implementation the user's Duration came\n // from (temporal-polyfill, @js-temporal/polyfill, native Temporal):\n // ISO strings are spec-defined and parsed by every implementation;\n // cross-polyfill object passing is not.\n milliseconds = input.total({\n unit: \"milliseconds\",\n relativeTo: Temporal.Now.plainDateTimeISO(\"UTC\").toString(),\n });\n } else if (typeof input === \"string\") {\n milliseconds = ms(input as `${number}`);\n } else {\n milliseconds = input as number;\n }\n\n const [, timeStr] = periods.reduce<[number, string]>(\n ([num, str], [suffix, period]) => {\n const numPeriods = Math.floor(num / period);\n\n if (numPeriods > 0) {\n return [num % period, `${str}${numPeriods}${suffix}`];\n }\n\n return [num, str];\n },\n [milliseconds, \"\"],\n );\n\n return timeStr as TimeStr;\n};\n\n/**\n * Given an unknown input, stringify it if it's a boolean, a number, or a\n * string, else return `undefined`.\n */\nexport const stringifyUnknown = (input: unknown): string | undefined => {\n if (\n typeof input === \"boolean\" ||\n typeof input === \"number\" ||\n typeof input === \"string\"\n ) {\n return input.toString();\n }\n\n return;\n};\n\nexport const hashEventKey = (eventKey: string): string => {\n return sha256().update(eventKey).digest(\"hex\");\n};\n\nexport const hashSigningKey = (signingKey: string | undefined): string => {\n if (!signingKey) {\n return \"\";\n }\n\n const prefix = signingKey.match(/^signkey-[\\w]+-/)?.shift() || \"\";\n const key = removeSigningKeyPrefix(signingKey);\n\n // Decode the key from its hex representation into a bytestream\n return `${prefix}${sha256().update(key, \"hex\").digest(\"hex\")}`;\n};\n\nexport function removeSigningKeyPrefix(signingKey: string): string {\n return signingKey.replace(/^signkey-[\\w]+-/, \"\");\n}\n"],"mappings":";;;;;;;AAeA,MAAM,EAAE,WAAW;;;;;;;;;AAUnB,SAAgB,gBAAgB,GAAW,GAAoB;AAC7D,KAAI,EAAE,WAAW,EAAE,OACjB,QAAO;CAGT,IAAI,OAAO;AACX,MAAK,IAAI,IAAI,GAAG,IAAI,EAAE,QAAQ,IAC5B,SAAQ,EAAE,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE;AAE3C,QAAO,SAAS;;;;;;AAQlB,MAAaA,eAAa,UAAuB;AAC/C,QAAOC,UAAc,QAAQ,MAAM,UAAU;AAC3C,MAAI,OAAO,UAAU,SACnB,QAAO;GAET;;;;;;;;;;AAWJ,MAAa,WAAW,QAAwB;CAC9C,MAAM,OAAO;AACb,QAAO,IACJ,aAAa,CACb,QAAQ,gBAAgB,KAAK,CAC7B,QAAQ,OAAO,KAAK,CACpB,MAAM,KAAK,CACX,OAAO,QAAQ,CACf,KAAK,KAAK;;AAIf,MAAM,SADc,IACS;AAC7B,MAAM,SAAS,SAAS;AACxB,MAAM,OAAO,SAAS;AACtB,MAAM,MAAM,OAAO;;;;;AAOnB,MAAM,UAAU;CACd,CAAC,KAPU,MAAM,EAON;CACX,CAAC,KAAK,IAAI;CACV,CAAC,KAAK,KAAK;CACX,CAAC,KAAK,OAAO;CACb,CAAC,KAAK,OAAO;CACd;;;;;AAMD,MAAa,WAIX,UAOW;AACX,KAAI,iBAAiB,KACnB,QAAO,MAAM,aAAa;AAG5B,KAAI,kBAAkB,MAAM,IAAI,wBAAwB,MAAM,CAC5D,QAAO,aAAa,MAAM;CAG5B,IAAIC;AACJ,KAAI,mBAAmB,MAAM,CAO3B,gBAAe,MAAM,MAAM;EACzB,MAAM;EACN,YAAY,SAAS,IAAI,iBAAiB,MAAM,CAAC,UAAU;EAC5D,CAAC;UACO,OAAO,UAAU,SAC1B,gBAAe,GAAG,MAAqB;KAEvC,gBAAe;CAGjB,MAAM,GAAGC,aAAW,QAAQ,QACzB,CAAC,KAAK,MAAM,CAAC,QAAQ,YAAY;EAChC,MAAM,aAAa,KAAK,MAAM,MAAM,OAAO;AAE3C,MAAI,aAAa,EACf,QAAO,CAAC,MAAM,QAAQ,GAAG,MAAM,aAAa,SAAS;AAGvD,SAAO,CAAC,KAAK,IAAI;IAEnB,CAAC,cAAc,GAAG,CACnB;AAED,QAAOA;;AAmBT,MAAa,gBAAgB,aAA6B;AACxD,QAAO,QAAQ,CAAC,OAAO,SAAS,CAAC,OAAO,MAAM;;AAGhD,MAAa,kBAAkB,eAA2C;AACxE,KAAI,CAAC,WACH,QAAO;CAGT,MAAM,SAAS,WAAW,MAAM,kBAAkB,EAAE,OAAO,IAAI;CAC/D,MAAM,MAAM,uBAAuB,WAAW;AAG9C,QAAO,GAAG,SAAS,QAAQ,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO,MAAM;;AAG9D,SAAgB,uBAAuB,YAA4B;AACjE,QAAO,WAAW,QAAQ,mBAAmB,GAAG"}
|
package/helpers/temporal.cjs
CHANGED
|
@@ -45,4 +45,6 @@ const getISOString = (time) => {
|
|
|
45
45
|
//#endregion
|
|
46
46
|
exports.getISOString = getISOString;
|
|
47
47
|
exports.isTemporalDuration = isTemporalDuration;
|
|
48
|
+
exports.isTemporalInstant = isTemporalInstant;
|
|
49
|
+
exports.isTemporalZonedDateTime = isTemporalZonedDateTime;
|
|
48
50
|
//# sourceMappingURL=temporal.cjs.map
|
package/helpers/temporal.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"temporal.d.ts","names":[],"sources":["../../src/helpers/temporal.ts"],"sourcesContent":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"temporal.d.ts","names":[],"sources":["../../src/helpers/temporal.ts"],"sourcesContent":[],"mappings":";;;;;;AAWA;AAaA;AAaA;;;;;KA1BY,WAAA;YACA,MAAA,CAAO,WAAA;;;;;;;;;;;KAYP,YAAA;YACA,MAAA,CAAO,WAAA;;;;;;;;;;;KAYP,iBAAA;YACA,MAAA,CAAO,WAAA"}
|
package/helpers/temporal.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "inngest",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.4.0",
|
|
4
4
|
"description": "Official SDK for Inngest.com. Inngest is the reliability layer for modern applications. Inngest combines durable execution, events, and queues into a zero-infra platform with built-in observability.",
|
|
5
5
|
"main": "./index.cjs",
|
|
6
6
|
"module": "./index.js",
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"test:integration": "vitest run --config vitest.config.integration.ts",
|
|
19
19
|
"itest": "tsx scripts/integrationTestRunner.ts",
|
|
20
20
|
"test:examples": "vitest run --dir src/test/functions",
|
|
21
|
-
"test:types": "tsc --noEmit --project tsconfig.types.json
|
|
21
|
+
"test:types": "tsc --noEmit --project tsconfig.types.json",
|
|
22
22
|
"test:dist": "tsc --noEmit dist/**/*.d.ts",
|
|
23
23
|
"test:deps": "tsx scripts/checkDependencies.ts",
|
|
24
24
|
"test:composite": "pnpm run local:pack && (cd test/composite_project && npm i ../../inngest.tgz && npm run test)",
|
|
@@ -603,7 +603,8 @@ function createBaseGatewayExecutorRequestData() {
|
|
|
603
603
|
systemTraceCtx: new Uint8Array(0),
|
|
604
604
|
userTraceCtx: new Uint8Array(0),
|
|
605
605
|
runId: "",
|
|
606
|
-
leaseId: ""
|
|
606
|
+
leaseId: "",
|
|
607
|
+
jobId: ""
|
|
607
608
|
};
|
|
608
609
|
}
|
|
609
610
|
const GatewayExecutorRequestData = {
|
|
@@ -621,6 +622,7 @@ const GatewayExecutorRequestData = {
|
|
|
621
622
|
if (message.userTraceCtx.length !== 0) writer.uint32(90).bytes(message.userTraceCtx);
|
|
622
623
|
if (message.runId !== "") writer.uint32(98).string(message.runId);
|
|
623
624
|
if (message.leaseId !== "") writer.uint32(106).string(message.leaseId);
|
|
625
|
+
if (message.jobId !== "") writer.uint32(114).string(message.jobId);
|
|
624
626
|
return writer;
|
|
625
627
|
},
|
|
626
628
|
decode(input, length) {
|
|
@@ -682,6 +684,10 @@ const GatewayExecutorRequestData = {
|
|
|
682
684
|
if (tag !== 106) break;
|
|
683
685
|
message.leaseId = reader.string();
|
|
684
686
|
continue;
|
|
687
|
+
case 14:
|
|
688
|
+
if (tag !== 114) break;
|
|
689
|
+
message.jobId = reader.string();
|
|
690
|
+
continue;
|
|
685
691
|
}
|
|
686
692
|
if ((tag & 7) === 4 || tag === 0) break;
|
|
687
693
|
reader.skip(tag & 7);
|
|
@@ -702,7 +708,8 @@ const GatewayExecutorRequestData = {
|
|
|
702
708
|
systemTraceCtx: isSet(object.systemTraceCtx) ? bytesFromBase64(object.systemTraceCtx) : new Uint8Array(0),
|
|
703
709
|
userTraceCtx: isSet(object.userTraceCtx) ? bytesFromBase64(object.userTraceCtx) : new Uint8Array(0),
|
|
704
710
|
runId: isSet(object.runId) ? globalThis.String(object.runId) : "",
|
|
705
|
-
leaseId: isSet(object.leaseId) ? globalThis.String(object.leaseId) : ""
|
|
711
|
+
leaseId: isSet(object.leaseId) ? globalThis.String(object.leaseId) : "",
|
|
712
|
+
jobId: isSet(object.jobId) ? globalThis.String(object.jobId) : ""
|
|
706
713
|
};
|
|
707
714
|
},
|
|
708
715
|
toJSON(message) {
|
|
@@ -720,6 +727,7 @@ const GatewayExecutorRequestData = {
|
|
|
720
727
|
if (message.userTraceCtx.length !== 0) obj.userTraceCtx = base64FromBytes(message.userTraceCtx);
|
|
721
728
|
if (message.runId !== "") obj.runId = message.runId;
|
|
722
729
|
if (message.leaseId !== "") obj.leaseId = message.leaseId;
|
|
730
|
+
if (message.jobId !== "") obj.jobId = message.jobId;
|
|
723
731
|
return obj;
|
|
724
732
|
},
|
|
725
733
|
create(base) {
|
|
@@ -740,6 +748,7 @@ const GatewayExecutorRequestData = {
|
|
|
740
748
|
message.userTraceCtx = object.userTraceCtx ?? new Uint8Array(0);
|
|
741
749
|
message.runId = object.runId ?? "";
|
|
742
750
|
message.leaseId = object.leaseId ?? "";
|
|
751
|
+
message.jobId = object.jobId ?? "";
|
|
743
752
|
return message;
|
|
744
753
|
}
|
|
745
754
|
};
|