@beignet/provider-inngest 0.0.2 → 0.0.4
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 +46 -0
- package/README.md +34 -14
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -7
- package/dist/index.js.map +1 -1
- package/package.json +31 -3
- package/src/index.ts +23 -7
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,51 @@
|
|
|
1
1
|
# @beignet/provider-inngest
|
|
2
2
|
|
|
3
|
+
## 0.0.4
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 8bcb31f: Mark package READMEs with Beignet's experimental alpha status and 0.0.x stability expectations.
|
|
8
|
+
- d137044: Declare `@beignet/core` as a peer dependency with a lockstep version range in
|
|
9
|
+
every integration and provider package instead of a regular `"*"` dependency.
|
|
10
|
+
Installs now always resolve a single shared copy of core, so `instanceof`
|
|
11
|
+
checks such as `isContractError` and upload error identity keep working, and
|
|
12
|
+
mixed Beignet versions fail loudly at install time instead of at runtime.
|
|
13
|
+
|
|
14
|
+
If your package manager does not install peer dependencies automatically, add
|
|
15
|
+
`@beignet/core` to your app alongside these packages. `@beignet/nuqs` now also
|
|
16
|
+
declares `@beignet/react-query` as a peer dependency, and
|
|
17
|
+
`@beignet/provider-storage-s3` now expects you to install
|
|
18
|
+
`@aws-sdk/client-s3` and `@aws-sdk/s3-request-presigner` yourself, matching
|
|
19
|
+
how other providers treat their SDKs.
|
|
20
|
+
|
|
21
|
+
- 603478f: Align package documentation with the canonical route registry and AppContext conventions.
|
|
22
|
+
- 1a79090: Emit Node-compatible ESM: all relative imports in published packages now carry explicit .js extensions, fixing ERR_MODULE_NOT_FOUND when running the CLI or importing package dist files under plain Node.
|
|
23
|
+
- 5a51869: Add schedule run attempt metadata and align durable workflow retry, backoff, terminal failure, and dead-letter documentation.
|
|
24
|
+
- 69b8c35: Stop declaring `INNGEST_APP_NAME` as required provider env metadata. The provider defaults the app name to `"beignet-app"`, so `beignet doctor` no longer warns when `INNGEST_APP_NAME` is absent from app env files.
|
|
25
|
+
- 44f1192: Move first-party provider diagnostics to package-owned `beignet.provider`
|
|
26
|
+
manifest metadata and have doctor read installed provider package manifests.
|
|
27
|
+
- 2aa77ca: Add static provider metadata and provider wiring diagnostics for generated apps.
|
|
28
|
+
- 03b1743: Document durable workflow provider conventions for retries, backoff, dead-letter state, and unsupported provider semantics.
|
|
29
|
+
- 8063d38: Rename the contract front door to `defineContract`/`defineContractGroup`, rename operational commands to tasks (`@beignet/core/tasks`, `defineTasks`, `runTask`, `beignet task run`, `beignet make task`, `server/tasks.ts`, `features/<feature>/tasks/`, `paths.tasks`), and standardize context binding: context-free declarations stay top-level (`defineEvent`), while context-bound definitions come from per-capability factories (`createListeners`, `createJobs`, `createSchedules`, `createNotifications`, `createTasks`) called once in `lib/`. Top-level context-generic `defineListener`, `defineJob`, `defineSchedule`, and `defineNotification` are removed.
|
|
30
|
+
|
|
31
|
+
## 0.0.3
|
|
32
|
+
|
|
33
|
+
### Patch Changes
|
|
34
|
+
|
|
35
|
+
- 4cb1784: Add first-class upload router primitives, a typed browser upload client, a
|
|
36
|
+
React upload adapter, Next.js upload route helper, S3-compatible direct upload
|
|
37
|
+
signing, devtools upload watcher support, an upload generator, and a
|
|
38
|
+
first-class `beignet make feature` command with optional policy, event, job,
|
|
39
|
+
and upload artifacts for the standard vertical slice. Add first-class job retry
|
|
40
|
+
helpers, outbox retry policy integration, and job retry/dead-letter devtools
|
|
41
|
+
events. Add a Next.js outbox drain route helper and doctor warnings for
|
|
42
|
+
serverless background-work footguns.
|
|
43
|
+
- Updated dependencies [3160184]
|
|
44
|
+
- Updated dependencies [254ef6d]
|
|
45
|
+
- Updated dependencies [4cb1784]
|
|
46
|
+
- Updated dependencies [8bd9085]
|
|
47
|
+
- @beignet/core@0.0.3
|
|
48
|
+
|
|
3
49
|
## 0.0.2
|
|
4
50
|
|
|
5
51
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
# @beignet/provider-inngest
|
|
2
2
|
|
|
3
|
+
> [!CAUTION]
|
|
4
|
+
> Beignet is experimental alpha software. The `0.0.x` package line is for early
|
|
5
|
+
> evaluation, and APIs may change between releases while the framework settles.
|
|
6
|
+
|
|
3
7
|
Inngest-backed `JobDispatcherPort` provider for Beignet applications.
|
|
4
8
|
|
|
5
9
|
The provider installs the app-facing `ctx.ports.jobs` dispatcher for durable
|
|
@@ -29,7 +33,7 @@ const appPorts = definePorts({});
|
|
|
29
33
|
export const server = await createNextServer({
|
|
30
34
|
ports: appPorts,
|
|
31
35
|
providers: [inngestProvider],
|
|
32
|
-
|
|
36
|
+
context: ({ ports }) => ({
|
|
33
37
|
ports,
|
|
34
38
|
}),
|
|
35
39
|
routes,
|
|
@@ -47,19 +51,19 @@ Define jobs with `@beignet/core/jobs`, then dispatch them through
|
|
|
47
51
|
`ctx.ports.jobs`:
|
|
48
52
|
|
|
49
53
|
```typescript
|
|
50
|
-
import {
|
|
54
|
+
import { createJobs, retry } from "@beignet/core/jobs";
|
|
51
55
|
import { z } from "zod";
|
|
52
56
|
|
|
53
|
-
const
|
|
57
|
+
const { defineJob } = createJobs<AppContext>();
|
|
54
58
|
|
|
55
|
-
export const SendInviteEmailJob =
|
|
59
|
+
export const SendInviteEmailJob = defineJob("mail.invite.send", {
|
|
56
60
|
payload: z.object({
|
|
57
61
|
inviteId: z.string(),
|
|
58
62
|
inviteeEmail: z.string().email(),
|
|
59
63
|
}),
|
|
60
|
-
retry: {
|
|
64
|
+
retry: retry.exponential({
|
|
61
65
|
attempts: 3,
|
|
62
|
-
},
|
|
66
|
+
}),
|
|
63
67
|
async handle({ payload, ctx }) {
|
|
64
68
|
await ctx.ports.mailer.send({
|
|
65
69
|
to: payload.inviteeEmail,
|
|
@@ -69,7 +73,7 @@ export const SendInviteEmailJob = jobs.defineJob("mail.invite.send", {
|
|
|
69
73
|
},
|
|
70
74
|
});
|
|
71
75
|
|
|
72
|
-
async function inviteUser(ctx:
|
|
76
|
+
async function inviteUser(ctx: AppContext, input: InviteUserInput) {
|
|
73
77
|
const invite = await ctx.ports.db.invites.create({
|
|
74
78
|
inviterId: ctx.actor.id,
|
|
75
79
|
inviteeEmail: input.email,
|
|
@@ -194,14 +198,14 @@ and dispatch the job from the listener:
|
|
|
194
198
|
|
|
195
199
|
```typescript
|
|
196
200
|
// features/users/listeners.ts
|
|
197
|
-
import {
|
|
201
|
+
import { createListeners } from "@beignet/core/events";
|
|
198
202
|
import { UserInvited } from "@/features/users/domain/events";
|
|
199
203
|
import { SendInviteEmailJob } from "@/features/users/jobs";
|
|
200
|
-
import type {
|
|
204
|
+
import type { AppContext } from "@/app-context";
|
|
201
205
|
|
|
202
|
-
const
|
|
206
|
+
const { defineListener } = createListeners<AppContext>();
|
|
203
207
|
|
|
204
|
-
export const sendInviteEmail =
|
|
208
|
+
export const sendInviteEmail = defineListener(UserInvited, {
|
|
205
209
|
name: "mail.send-invite-email",
|
|
206
210
|
async handle({ payload, ctx }) {
|
|
207
211
|
await ctx.ports.jobs.dispatch(SendInviteEmailJob, {
|
|
@@ -222,9 +226,25 @@ Use `createInngestJobFunction(...)` to turn a first-class Beignet job into
|
|
|
222
226
|
an Inngest function. The helper subscribes to `job.name`, validates incoming
|
|
223
227
|
event data with `parseJobPayload`, and then calls `job.handle(...)`.
|
|
224
228
|
|
|
225
|
-
If the job defines
|
|
226
|
-
function-level `retries` option. Inngest
|
|
227
|
-
|
|
229
|
+
If the job defines a retry policy, the helper maps Beignet's total
|
|
230
|
+
`retry.attempts` value to Inngest's function-level `retries` option. Inngest
|
|
231
|
+
supports retry values from `0` to `20`, so Beignet accepts total attempt counts
|
|
232
|
+
from `1` to `21` for Inngest-backed jobs.
|
|
233
|
+
|
|
234
|
+
Inngest-backed jobs support Beignet's retry attempt count only. Custom Beignet
|
|
235
|
+
backoff fields, jitter, and `retryIf` classification are outbox-worker
|
|
236
|
+
semantics; `createInngestJobFunction(...)` fails fast if a job policy includes
|
|
237
|
+
retry behavior that the adapter cannot honor.
|
|
238
|
+
|
|
239
|
+
The Beignet terms still apply: `attempts` is the maximum total attempts,
|
|
240
|
+
including the first try, while Inngest's `retries` setting is the number of
|
|
241
|
+
retries after the first try. Inngest owns backoff and terminal failure handling
|
|
242
|
+
for direct Inngest jobs. Use the Beignet outbox when the app needs Beignet-owned
|
|
243
|
+
backoff, retry classification, or dead-letter state.
|
|
244
|
+
|
|
245
|
+
This is the provider convention for external job systems: map the Beignet
|
|
246
|
+
semantics the provider can actually honor, document the mapping, and fail fast
|
|
247
|
+
for retry fields that would otherwise be silently ignored.
|
|
228
248
|
|
|
229
249
|
Define functions separately from your Beignet server, usually in a
|
|
230
250
|
serverless function or route handler:
|
package/dist/index.d.ts
CHANGED
|
@@ -147,8 +147,8 @@ export declare function createInngestJobDispatcher(client: Inngest, options?: In
|
|
|
147
147
|
* Create an Inngest function from a Beignet job definition.
|
|
148
148
|
*
|
|
149
149
|
* The function validates the incoming Inngest event data against the job payload
|
|
150
|
-
* schema before calling the job handler. `job.retry.attempts` is
|
|
151
|
-
*
|
|
150
|
+
* schema before calling the job handler. `job.retry.attempts` is the total
|
|
151
|
+
* attempt count and is mapped to Inngest retries.
|
|
152
152
|
*/
|
|
153
153
|
export declare function createInngestJobFunction<Ctx, J extends JobDef<string, StandardSchema, Ctx>>(options: CreateInngestJobFunctionOptions<J, Ctx>): InngestFunction.Any;
|
|
154
154
|
/**
|
|
@@ -177,6 +177,6 @@ export declare const inngestProvider: import("@beignet/core/providers").ServiceP
|
|
|
177
177
|
}, z.core.$strip>, {
|
|
178
178
|
inngest: InngestPort;
|
|
179
179
|
jobs: JobDispatcherPort;
|
|
180
|
-
}>;
|
|
180
|
+
}, unknown, void>;
|
|
181
181
|
export {};
|
|
182
182
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,KAAK,EAEV,MAAM,EACN,YAAY,EACZ,cAAc,EACf,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAGL,KAAK,6BAA6B,EACnC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,SAAS,CAAC;AACxD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;GAGG;AACH,QAAA,MAAM,mBAAmB;;;iBAYvB,CAAC;AAEH;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B;;;OAGG;IACH,MAAM,EAAE,OAAO,CAAC;IAEhB;;;;;;;;;;;OAWG;IACH,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,KAAK,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjE;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C;;OAEG;IACH,eAAe,CAAC,EAAE,6BAA6B,CAAC;CACjD;AAED;;GAEG;AACH,MAAM,MAAM,4BAA4B,GACpC,CAAC,GACD,CAAC,GACD,CAAC,GACD,CAAC,GACD,CAAC,GACD,CAAC,GACD,CAAC,GACD,CAAC,GACD,CAAC,GACD,CAAC,GACD,EAAE,GACF,EAAE,GACF,EAAE,GACF,EAAE,GACF,EAAE,GACF,EAAE,GACF,EAAE,GACF,EAAE,GACF,EAAE,GACF,EAAE,GACF,EAAE,CAAC;AAEP;;GAEG;AACH,MAAM,MAAM,yBAAyB,CAAC,GAAG,IACrC,GAAG,GACH,CAAC,CAAC,IAAI,EAAE,6BAA6B,KAAK,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;AAEjE;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C;;OAEG;IACH,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,OAAO,CAAC;KACf,CAAC;IACF;;OAEG;IACH,IAAI,EAAE,OAAO,CAAC;CACf;AAED;;GAEG;AACH,MAAM,MAAM,iCAAiC,GAAG,6BAA6B,CAAC;AAE9E;;GAEG;AACH,MAAM,WAAW,+BAA+B,CAC9C,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,CAAC,EAC7C,GAAG;IAEH;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;IAChB;;OAEG;IACH,GAAG,EAAE,CAAC,CAAC;IACP;;OAEG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,GAAG,CAAC,EAAE,yBAAyB,CAAC,GAAG,CAAC,CAAC;IACrC;;OAEG;IACH,eAAe,CAAC,EAAE,iCAAiC,CAAC;CACrD;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -68,13 +68,24 @@ function errorDetails(phase, error) {
|
|
|
68
68
|
};
|
|
69
69
|
}
|
|
70
70
|
function resolveRetryAttempts(job) {
|
|
71
|
-
const
|
|
72
|
-
|
|
71
|
+
const retry = job.retry;
|
|
72
|
+
const attempts = retry?.attempts;
|
|
73
|
+
if (!retry || attempts === undefined)
|
|
73
74
|
return undefined;
|
|
74
|
-
if (!Number.isInteger(attempts) || attempts <
|
|
75
|
-
throw new Error(`[provider-inngest] Job "${job.name}" retry.attempts must be an integer between
|
|
75
|
+
if (!Number.isInteger(attempts) || attempts < 1 || attempts > 21) {
|
|
76
|
+
throw new Error(`[provider-inngest] Job "${job.name}" retry.attempts must be an integer between 1 and 21.`);
|
|
76
77
|
}
|
|
77
|
-
|
|
78
|
+
const hasUnsupportedRetryBehavior = retry.strategy === "fixed" ||
|
|
79
|
+
retry.delay !== undefined ||
|
|
80
|
+
retry.initialDelay !== undefined ||
|
|
81
|
+
retry.maxDelay !== undefined ||
|
|
82
|
+
retry.factor !== undefined ||
|
|
83
|
+
retry.jitter !== undefined ||
|
|
84
|
+
retry.retryIf !== undefined;
|
|
85
|
+
if (hasUnsupportedRetryBehavior) {
|
|
86
|
+
throw new Error(`[provider-inngest] Job "${job.name}" uses retry behavior that Inngest cannot honor. Inngest-backed jobs support retry.attempts only; move custom backoff/classification to an outbox worker or provider-owned Inngest config.`);
|
|
87
|
+
}
|
|
88
|
+
return (attempts - 1);
|
|
78
89
|
}
|
|
79
90
|
/**
|
|
80
91
|
* Create a Beignet job dispatcher that schedules jobs through Inngest events.
|
|
@@ -111,8 +122,8 @@ export function createInngestJobDispatcher(client, options = {}) {
|
|
|
111
122
|
* Create an Inngest function from a Beignet job definition.
|
|
112
123
|
*
|
|
113
124
|
* The function validates the incoming Inngest event data against the job payload
|
|
114
|
-
* schema before calling the job handler. `job.retry.attempts` is
|
|
115
|
-
*
|
|
125
|
+
* schema before calling the job handler. `job.retry.attempts` is the total
|
|
126
|
+
* attempt count and is mapped to Inngest retries.
|
|
116
127
|
*/
|
|
117
128
|
export function createInngestJobFunction(options) {
|
|
118
129
|
const { client, job } = options;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAQH,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EACL,cAAc,EACd,6BAA6B,GAE9B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,OAAO,EAAwB,MAAM,SAAS,CAAC;AACxD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;GAGG;AACH,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC;;;OAGG;IACH,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC;IAE3C;;;OAGG;IACH,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC;AAuIH,KAAK,UAAU,iBAAiB,CAC9B,GAA+C,EAC/C,IAAmC;IAEnC,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE,CAAC;QAC9B,OAAQ,GAAkE,CACxE,IAAI,CACL,CAAC;IACJ,CAAC;IAED,OAAO,GAAU,CAAC;AACpB,CAAC;AAED,SAAS,YAAY,CAAC,KAA6B,EAAE,KAAc;IACjE,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO;YACL,KAAK;YACL,KAAK,EAAE;gBACL,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,KAAK,EAAE,KAAK,CAAC,KAAK;aACnB;SACF,CAAC;IACJ,CAAC;IAED,OAAO;QACL,KAAK;QACL,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;KACrB,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAC3B,GAAW;IAEX,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@beignet/provider-inngest",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.4",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Inngest provider for Beignet - adds inngest port for background jobs and events",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -54,11 +54,11 @@
|
|
|
54
54
|
"node": ">=18.0.0"
|
|
55
55
|
},
|
|
56
56
|
"peerDependencies": {
|
|
57
|
+
"@beignet/core": ">=0.0.3 <1.0.0",
|
|
57
58
|
"inngest": "^3.0.0"
|
|
58
59
|
},
|
|
59
60
|
"dependencies": {
|
|
60
|
-
"zod": "^4.0.0"
|
|
61
|
-
"@beignet/core": "*"
|
|
61
|
+
"zod": "^4.0.0"
|
|
62
62
|
},
|
|
63
63
|
"devDependencies": {
|
|
64
64
|
"@beignet/devtools": "*",
|
|
@@ -66,5 +66,33 @@
|
|
|
66
66
|
"@types/node": "^20.10.0",
|
|
67
67
|
"inngest": "^3.0.0",
|
|
68
68
|
"typescript": "^5.3.0"
|
|
69
|
+
},
|
|
70
|
+
"beignet": {
|
|
71
|
+
"provider": {
|
|
72
|
+
"displayName": "Inngest provider",
|
|
73
|
+
"ports": [
|
|
74
|
+
"inngest",
|
|
75
|
+
"jobs"
|
|
76
|
+
],
|
|
77
|
+
"appPorts": [
|
|
78
|
+
{
|
|
79
|
+
"name": "jobs",
|
|
80
|
+
"type": "JobDispatcherPort"
|
|
81
|
+
}
|
|
82
|
+
],
|
|
83
|
+
"env": [
|
|
84
|
+
"INNGEST_APP_NAME",
|
|
85
|
+
"INNGEST_EVENT_KEY"
|
|
86
|
+
],
|
|
87
|
+
"watchers": [
|
|
88
|
+
"jobs"
|
|
89
|
+
],
|
|
90
|
+
"registration": {
|
|
91
|
+
"required": true,
|
|
92
|
+
"tokens": [
|
|
93
|
+
"inngestProvider"
|
|
94
|
+
]
|
|
95
|
+
}
|
|
96
|
+
}
|
|
69
97
|
}
|
|
70
98
|
}
|
package/src/index.ts
CHANGED
|
@@ -227,16 +227,32 @@ function errorDetails(phase: "schedule" | "execute", error: unknown) {
|
|
|
227
227
|
function resolveRetryAttempts(
|
|
228
228
|
job: JobDef,
|
|
229
229
|
): InngestFunctionRetryAttempts | undefined {
|
|
230
|
-
const
|
|
231
|
-
|
|
230
|
+
const retry = job.retry;
|
|
231
|
+
const attempts = retry?.attempts;
|
|
232
|
+
if (!retry || attempts === undefined) return undefined;
|
|
232
233
|
|
|
233
|
-
if (!Number.isInteger(attempts) || attempts <
|
|
234
|
+
if (!Number.isInteger(attempts) || attempts < 1 || attempts > 21) {
|
|
234
235
|
throw new Error(
|
|
235
|
-
`[provider-inngest] Job "${job.name}" retry.attempts must be an integer between
|
|
236
|
+
`[provider-inngest] Job "${job.name}" retry.attempts must be an integer between 1 and 21.`,
|
|
236
237
|
);
|
|
237
238
|
}
|
|
238
239
|
|
|
239
|
-
|
|
240
|
+
const hasUnsupportedRetryBehavior =
|
|
241
|
+
retry.strategy === "fixed" ||
|
|
242
|
+
retry.delay !== undefined ||
|
|
243
|
+
retry.initialDelay !== undefined ||
|
|
244
|
+
retry.maxDelay !== undefined ||
|
|
245
|
+
retry.factor !== undefined ||
|
|
246
|
+
retry.jitter !== undefined ||
|
|
247
|
+
retry.retryIf !== undefined;
|
|
248
|
+
|
|
249
|
+
if (hasUnsupportedRetryBehavior) {
|
|
250
|
+
throw new Error(
|
|
251
|
+
`[provider-inngest] Job "${job.name}" uses retry behavior that Inngest cannot honor. Inngest-backed jobs support retry.attempts only; move custom backoff/classification to an outbox worker or provider-owned Inngest config.`,
|
|
252
|
+
);
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
return (attempts - 1) as InngestFunctionRetryAttempts;
|
|
240
256
|
}
|
|
241
257
|
|
|
242
258
|
/**
|
|
@@ -287,8 +303,8 @@ export function createInngestJobDispatcher(
|
|
|
287
303
|
* Create an Inngest function from a Beignet job definition.
|
|
288
304
|
*
|
|
289
305
|
* The function validates the incoming Inngest event data against the job payload
|
|
290
|
-
* schema before calling the job handler. `job.retry.attempts` is
|
|
291
|
-
*
|
|
306
|
+
* schema before calling the job handler. `job.retry.attempts` is the total
|
|
307
|
+
* attempt count and is mapped to Inngest retries.
|
|
292
308
|
*/
|
|
293
309
|
export function createInngestJobFunction<
|
|
294
310
|
Ctx,
|