@beignet/provider-inngest 0.0.1 → 0.0.3

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 CHANGED
@@ -1,5 +1,34 @@
1
1
  # @beignet/provider-inngest
2
2
 
3
+ ## 0.0.3
4
+
5
+ ### Patch Changes
6
+
7
+ - 4cb1784: Add first-class upload router primitives, a typed browser upload client, a
8
+ React upload adapter, Next.js upload route helper, S3-compatible direct upload
9
+ signing, devtools upload watcher support, an upload generator, and a
10
+ first-class `beignet make feature` command with optional policy, event, job,
11
+ and upload artifacts for the standard vertical slice. Add first-class job retry
12
+ helpers, outbox retry policy integration, and job retry/dead-letter devtools
13
+ events. Add a Next.js outbox drain route helper and doctor warnings for
14
+ serverless background-work footguns.
15
+ - Updated dependencies [3160184]
16
+ - Updated dependencies [254ef6d]
17
+ - Updated dependencies [4cb1784]
18
+ - Updated dependencies [8bd9085]
19
+ - @beignet/core@0.0.3
20
+
21
+ ## 0.0.2
22
+
23
+ ### Patch Changes
24
+
25
+ - Updated dependencies [90b29ad]
26
+ - Updated dependencies [07fa19c]
27
+ - Updated dependencies [08bae67]
28
+ - Updated dependencies [730a818]
29
+ - Updated dependencies [a79f60c]
30
+ - @beignet/core@0.0.2
31
+
3
32
  ## 0.0.1
4
33
 
5
34
  - Initial Beignet release under the `@beignet` npm scope.
package/README.md CHANGED
@@ -47,7 +47,7 @@ Define jobs with `@beignet/core/jobs`, then dispatch them through
47
47
  `ctx.ports.jobs`:
48
48
 
49
49
  ```typescript
50
- import { createJobHandlers } from "@beignet/core/jobs";
50
+ import { createJobHandlers, retry } from "@beignet/core/jobs";
51
51
  import { z } from "zod";
52
52
 
53
53
  const jobs = createJobHandlers<AppCtx>();
@@ -57,9 +57,9 @@ export const SendInviteEmailJob = jobs.defineJob("mail.invite.send", {
57
57
  inviteId: z.string(),
58
58
  inviteeEmail: z.string().email(),
59
59
  }),
60
- retry: {
60
+ retry: retry.exponential({
61
61
  attempts: 3,
62
- },
62
+ }),
63
63
  async handle({ payload, ctx }) {
64
64
  await ctx.ports.mailer.send({
65
65
  to: payload.inviteeEmail,
@@ -222,9 +222,15 @@ Use `createInngestJobFunction(...)` to turn a first-class Beignet job into
222
222
  an Inngest function. The helper subscribes to `job.name`, validates incoming
223
223
  event data with `parseJobPayload`, and then calls `job.handle(...)`.
224
224
 
225
- If the job defines `retry.attempts`, the helper maps it to Inngest's
226
- function-level `retries` option. Inngest supports integer values from `0` to
227
- `20`; values outside that range throw during function creation.
225
+ If the job defines a retry policy, the helper maps Beignet's total
226
+ `retry.attempts` value to Inngest's function-level `retries` option. Inngest
227
+ supports retry values from `0` to `20`, so Beignet accepts total attempt counts
228
+ from `1` to `21` for Inngest-backed jobs.
229
+
230
+ Inngest-backed jobs support Beignet's retry attempt count only. Custom Beignet
231
+ backoff fields, jitter, and `retryIf` classification are outbox-worker
232
+ semantics; `createInngestJobFunction(...)` fails fast if a job policy includes
233
+ retry behavior that the adapter cannot honor.
228
234
 
229
235
  Define functions separately from your Beignet server, usually in a
230
236
  serverless function or route handler:
package/dist/index.d.ts CHANGED
@@ -69,29 +69,87 @@ export interface InngestPort {
69
69
  data: TData;
70
70
  }): Promise<void>;
71
71
  }
72
+ /**
73
+ * Options for `createInngestJobDispatcher(...)`.
74
+ */
72
75
  export interface InngestJobDispatcherOptions {
76
+ /**
77
+ * Optional provider instrumentation target.
78
+ */
73
79
  instrumentation?: ProviderInstrumentationTarget;
74
80
  }
81
+ /**
82
+ * Retry attempts accepted by Inngest function definitions.
83
+ */
75
84
  export type InngestFunctionRetryAttempts = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20;
85
+ /**
86
+ * Static or request-aware context for an Inngest job function.
87
+ */
76
88
  export type InngestJobFunctionContext<Ctx> = Ctx | ((args: InngestJobFunctionContextArgs) => MaybePromise<Ctx>);
89
+ /**
90
+ * Arguments passed to an Inngest job function context factory.
91
+ */
77
92
  export interface InngestJobFunctionContextArgs {
93
+ /**
94
+ * Inngest event payload wrapper.
95
+ */
78
96
  event: {
79
97
  name: string;
80
98
  data: unknown;
81
99
  };
100
+ /**
101
+ * Raw Inngest step object.
102
+ */
82
103
  step: unknown;
83
104
  }
105
+ /**
106
+ * Instrumentation target for Inngest job functions.
107
+ */
84
108
  export type InngestJobFunctionInstrumentation = ProviderInstrumentationTarget;
109
+ /**
110
+ * Options for creating an Inngest function from a Beignet job definition.
111
+ */
85
112
  export interface CreateInngestJobFunctionOptions<J extends JobDef<string, StandardSchema, Ctx>, Ctx> {
113
+ /**
114
+ * Raw Inngest client.
115
+ */
86
116
  client: Inngest;
117
+ /**
118
+ * Beignet job definition.
119
+ */
87
120
  job: J;
121
+ /**
122
+ * Inngest function ID. Defaults to the job name.
123
+ */
88
124
  id?: string;
125
+ /**
126
+ * Inngest function display name. Defaults to the job name.
127
+ */
89
128
  name?: string;
129
+ /**
130
+ * Inngest function description. Defaults to the job description.
131
+ */
90
132
  description?: string;
133
+ /**
134
+ * Static app context or context factory evaluated for each function run.
135
+ */
91
136
  ctx?: InngestJobFunctionContext<Ctx>;
137
+ /**
138
+ * Optional provider instrumentation target.
139
+ */
92
140
  instrumentation?: InngestJobFunctionInstrumentation;
93
141
  }
142
+ /**
143
+ * Create a Beignet job dispatcher that schedules jobs through Inngest events.
144
+ */
94
145
  export declare function createInngestJobDispatcher(client: Inngest, options?: InngestJobDispatcherOptions): JobDispatcherPort;
146
+ /**
147
+ * Create an Inngest function from a Beignet job definition.
148
+ *
149
+ * The function validates the incoming Inngest event data against the job payload
150
+ * schema before calling the job handler. `job.retry.attempts` is the total
151
+ * attempt count and is mapped to Inngest retries.
152
+ */
95
153
  export declare function createInngestJobFunction<Ctx, J extends JobDef<string, StandardSchema, Ctx>>(options: CreateInngestJobFunctionOptions<J, Ctx>): InngestFunction.Any;
96
154
  /**
97
155
  * Inngest provider that extends ports with background job and event capabilities.
@@ -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,MAAM,WAAW,2BAA2B;IAC1C,eAAe,CAAC,EAAE,6BAA6B,CAAC;CACjD;AAED,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,MAAM,MAAM,yBAAyB,CAAC,GAAG,IACrC,GAAG,GACH,CAAC,CAAC,IAAI,EAAE,6BAA6B,KAAK,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;AAEjE,MAAM,WAAW,6BAA6B;IAC5C,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,OAAO,CAAC;KACf,CAAC;IACF,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,MAAM,iCAAiC,GAAG,6BAA6B,CAAC;AAE9E,MAAM,WAAW,+BAA+B,CAC9C,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,CAAC,EAC7C,GAAG;IAEH,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,EAAE,CAAC,CAAC;IACP,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,yBAAyB,CAAC,GAAG,CAAC,CAAC;IACrC,eAAe,CAAC,EAAE,iCAAiC,CAAC;CACrD;AAgDD,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,OAAO,EACf,OAAO,GAAE,2BAAgC,GACxC,iBAAiB,CAoCnB;AAED,wBAAgB,wBAAwB,CACtC,GAAG,EACH,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,CAAC,EAC7C,OAAO,EAAE,+BAA+B,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,eAAe,CAAC,GAAG,CAyDvE;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,eAAe;;;;;;EA4D1B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -68,14 +68,28 @@ function errorDetails(phase, error) {
68
68
  };
69
69
  }
70
70
  function resolveRetryAttempts(job) {
71
- const attempts = job.retry?.attempts;
72
- if (attempts === undefined)
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 < 0 || attempts > 20) {
75
- throw new Error(`[provider-inngest] Job "${job.name}" retry.attempts must be an integer between 0 and 20.`);
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
- return attempts;
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
  }
90
+ /**
91
+ * Create a Beignet job dispatcher that schedules jobs through Inngest events.
92
+ */
79
93
  export function createInngestJobDispatcher(client, options = {}) {
80
94
  const instrumentation = createProviderInstrumentation(options.instrumentation, {
81
95
  providerName: "inngest",
@@ -104,6 +118,13 @@ export function createInngestJobDispatcher(client, options = {}) {
104
118
  },
105
119
  };
106
120
  }
121
+ /**
122
+ * Create an Inngest function from a Beignet job definition.
123
+ *
124
+ * The function validates the incoming Inngest event data against the job payload
125
+ * schema before calling the job handler. `job.retry.attempts` is the total
126
+ * attempt count and is mapped to Inngest retries.
127
+ */
107
128
  export function createInngestJobFunction(options) {
108
129
  const { client, job } = options;
109
130
  const retries = resolveRetryAttempts(job);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
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.1",
3
+ "version": "0.0.3",
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",
package/src/index.ts CHANGED
@@ -91,10 +91,19 @@ export interface InngestPort {
91
91
  send<TData>(args: { name: string; data: TData }): Promise<void>;
92
92
  }
93
93
 
94
+ /**
95
+ * Options for `createInngestJobDispatcher(...)`.
96
+ */
94
97
  export interface InngestJobDispatcherOptions {
98
+ /**
99
+ * Optional provider instrumentation target.
100
+ */
95
101
  instrumentation?: ProviderInstrumentationTarget;
96
102
  }
97
103
 
104
+ /**
105
+ * Retry attempts accepted by Inngest function definitions.
106
+ */
98
107
  export type InngestFunctionRetryAttempts =
99
108
  | 0
100
109
  | 1
@@ -118,30 +127,69 @@ export type InngestFunctionRetryAttempts =
118
127
  | 19
119
128
  | 20;
120
129
 
130
+ /**
131
+ * Static or request-aware context for an Inngest job function.
132
+ */
121
133
  export type InngestJobFunctionContext<Ctx> =
122
134
  | Ctx
123
135
  | ((args: InngestJobFunctionContextArgs) => MaybePromise<Ctx>);
124
136
 
137
+ /**
138
+ * Arguments passed to an Inngest job function context factory.
139
+ */
125
140
  export interface InngestJobFunctionContextArgs {
141
+ /**
142
+ * Inngest event payload wrapper.
143
+ */
126
144
  event: {
127
145
  name: string;
128
146
  data: unknown;
129
147
  };
148
+ /**
149
+ * Raw Inngest step object.
150
+ */
130
151
  step: unknown;
131
152
  }
132
153
 
154
+ /**
155
+ * Instrumentation target for Inngest job functions.
156
+ */
133
157
  export type InngestJobFunctionInstrumentation = ProviderInstrumentationTarget;
134
158
 
159
+ /**
160
+ * Options for creating an Inngest function from a Beignet job definition.
161
+ */
135
162
  export interface CreateInngestJobFunctionOptions<
136
163
  J extends JobDef<string, StandardSchema, Ctx>,
137
164
  Ctx,
138
165
  > {
166
+ /**
167
+ * Raw Inngest client.
168
+ */
139
169
  client: Inngest;
170
+ /**
171
+ * Beignet job definition.
172
+ */
140
173
  job: J;
174
+ /**
175
+ * Inngest function ID. Defaults to the job name.
176
+ */
141
177
  id?: string;
178
+ /**
179
+ * Inngest function display name. Defaults to the job name.
180
+ */
142
181
  name?: string;
182
+ /**
183
+ * Inngest function description. Defaults to the job description.
184
+ */
143
185
  description?: string;
186
+ /**
187
+ * Static app context or context factory evaluated for each function run.
188
+ */
144
189
  ctx?: InngestJobFunctionContext<Ctx>;
190
+ /**
191
+ * Optional provider instrumentation target.
192
+ */
145
193
  instrumentation?: InngestJobFunctionInstrumentation;
146
194
  }
147
195
 
@@ -179,18 +227,37 @@ function errorDetails(phase: "schedule" | "execute", error: unknown) {
179
227
  function resolveRetryAttempts(
180
228
  job: JobDef,
181
229
  ): InngestFunctionRetryAttempts | undefined {
182
- const attempts = job.retry?.attempts;
183
- if (attempts === undefined) return undefined;
230
+ const retry = job.retry;
231
+ const attempts = retry?.attempts;
232
+ if (!retry || attempts === undefined) return undefined;
184
233
 
185
- if (!Number.isInteger(attempts) || attempts < 0 || attempts > 20) {
234
+ if (!Number.isInteger(attempts) || attempts < 1 || attempts > 21) {
186
235
  throw new Error(
187
- `[provider-inngest] Job "${job.name}" retry.attempts must be an integer between 0 and 20.`,
236
+ `[provider-inngest] Job "${job.name}" retry.attempts must be an integer between 1 and 21.`,
188
237
  );
189
238
  }
190
239
 
191
- return attempts as InngestFunctionRetryAttempts;
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;
192
256
  }
193
257
 
258
+ /**
259
+ * Create a Beignet job dispatcher that schedules jobs through Inngest events.
260
+ */
194
261
  export function createInngestJobDispatcher(
195
262
  client: Inngest,
196
263
  options: InngestJobDispatcherOptions = {},
@@ -232,6 +299,13 @@ export function createInngestJobDispatcher(
232
299
  };
233
300
  }
234
301
 
302
+ /**
303
+ * Create an Inngest function from a Beignet job definition.
304
+ *
305
+ * The function validates the incoming Inngest event data against the job payload
306
+ * schema before calling the job handler. `job.retry.attempts` is the total
307
+ * attempt count and is mapped to Inngest retries.
308
+ */
235
309
  export function createInngestJobFunction<
236
310
  Ctx,
237
311
  J extends JobDef<string, StandardSchema, Ctx>,