@beignet/next 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 +33 -0
- package/README.md +75 -4
- package/dist/index.d.ts +210 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +150 -35
- package/dist/index.js.map +1 -1
- package/package.json +2 -1
- package/src/index.ts +384 -40
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,38 @@
|
|
|
1
1
|
# @beignet/next
|
|
2
2
|
|
|
3
|
+
## 0.0.3
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 254ef6d: Add scoped route hooks for route and route-group policy, update auth hooks to expose public/optional/required route-hook factories, and teach CLI route inspection about curried route groups.
|
|
8
|
+
- 4cb1784: Add first-class upload router primitives, a typed browser upload client, a
|
|
9
|
+
React upload adapter, Next.js upload route helper, S3-compatible direct upload
|
|
10
|
+
signing, devtools upload watcher support, an upload generator, and a
|
|
11
|
+
first-class `beignet make feature` command with optional policy, event, job,
|
|
12
|
+
and upload artifacts for the standard vertical slice. Add first-class job retry
|
|
13
|
+
helpers, outbox retry policy integration, and job retry/dead-letter devtools
|
|
14
|
+
events. Add a Next.js outbox drain route helper and doctor warnings for
|
|
15
|
+
serverless background-work footguns.
|
|
16
|
+
- 8bd9085: Add `@beignet/web` as a framework-neutral Web Fetch adapter, include a `@beignet/web/testing` route test harness, and have `@beignet/next` reuse the Web adapter for standard Request/Response handling.
|
|
17
|
+
- Updated dependencies [3160184]
|
|
18
|
+
- Updated dependencies [254ef6d]
|
|
19
|
+
- Updated dependencies [4cb1784]
|
|
20
|
+
- Updated dependencies [8bd9085]
|
|
21
|
+
- @beignet/core@0.0.3
|
|
22
|
+
- @beignet/web@0.0.3
|
|
23
|
+
|
|
24
|
+
## 0.0.2
|
|
25
|
+
|
|
26
|
+
### Patch Changes
|
|
27
|
+
|
|
28
|
+
- 90b29ad: Add pagination primitives and generate list responses with `items` and `page`.
|
|
29
|
+
- Updated dependencies [90b29ad]
|
|
30
|
+
- Updated dependencies [07fa19c]
|
|
31
|
+
- Updated dependencies [08bae67]
|
|
32
|
+
- Updated dependencies [730a818]
|
|
33
|
+
- Updated dependencies [a79f60c]
|
|
34
|
+
- @beignet/core@0.0.2
|
|
35
|
+
|
|
3
36
|
## 0.0.1
|
|
4
37
|
|
|
5
38
|
- Initial Beignet release under the `@beignet` npm scope.
|
package/README.md
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
# @beignet/next
|
|
2
2
|
|
|
3
|
-
Next.js adapter for the framework-agnostic `@beignet/core/server` runtime. It
|
|
3
|
+
Next.js adapter for the framework-agnostic `@beignet/core/server` runtime. It
|
|
4
|
+
builds on `@beignet/web` for standard `Request`/`Response` handling and adds
|
|
5
|
+
Next-specific helpers for App Router handlers, Server Component context,
|
|
6
|
+
OpenAPI routes, Swagger UI, uploads, outbox drains, storage routes, and client
|
|
7
|
+
base URLs.
|
|
4
8
|
|
|
5
9
|
## Installation
|
|
6
10
|
|
|
@@ -429,6 +433,67 @@ export const { GET, HEAD } = createStorageRoute(server.ports.storage, {
|
|
|
429
433
|
Served responses preserve object `Content-Type`, `Cache-Control`,
|
|
430
434
|
`Content-Length`, and `Last-Modified` headers when available.
|
|
431
435
|
|
|
436
|
+
## Upload routes
|
|
437
|
+
|
|
438
|
+
Use `createUploadRoute` to expose a Beignet upload router from a focused App
|
|
439
|
+
Router route:
|
|
440
|
+
|
|
441
|
+
```typescript
|
|
442
|
+
// app/api/uploads/[uploadName]/[action]/route.ts
|
|
443
|
+
import { createUploadRouter } from "@beignet/core/uploads";
|
|
444
|
+
import { createUploadRoute } from "@beignet/next";
|
|
445
|
+
import { postUploads } from "@/features/posts/uploads";
|
|
446
|
+
import { server } from "@/server";
|
|
447
|
+
|
|
448
|
+
const uploadRouter = createUploadRouter({
|
|
449
|
+
uploads: postUploads,
|
|
450
|
+
ctx: () => server.createContextFromNext(),
|
|
451
|
+
storage: server.ports.storage,
|
|
452
|
+
instrumentation: server.ports.devtools,
|
|
453
|
+
});
|
|
454
|
+
|
|
455
|
+
export const { POST } = createUploadRoute(uploadRouter);
|
|
456
|
+
```
|
|
457
|
+
|
|
458
|
+
The `action` segment must be `prepare`, `upload`, or `complete`.
|
|
459
|
+
|
|
460
|
+
## Outbox drain routes
|
|
461
|
+
|
|
462
|
+
Use `createOutboxDrainRoute` to expose durable outbox delivery from a cron or
|
|
463
|
+
scheduled serverless route. The helper requires a bearer secret, drains one
|
|
464
|
+
bounded batch with `@beignet/core/outbox`, records a devtools event when
|
|
465
|
+
available, and returns a JSON summary.
|
|
466
|
+
|
|
467
|
+
```typescript
|
|
468
|
+
// app/api/cron/outbox/drain/route.ts
|
|
469
|
+
import { createOutboxDrainRoute } from "@beignet/next";
|
|
470
|
+
import { env } from "@/lib/env";
|
|
471
|
+
import { server } from "@/server";
|
|
472
|
+
import { outboxRegistry } from "@/server/outbox";
|
|
473
|
+
|
|
474
|
+
export const runtime = "nodejs";
|
|
475
|
+
|
|
476
|
+
export const { GET, POST } = createOutboxDrainRoute({
|
|
477
|
+
server,
|
|
478
|
+
registry: outboxRegistry,
|
|
479
|
+
secret: env.CRON_SECRET,
|
|
480
|
+
batchSize: 100,
|
|
481
|
+
});
|
|
482
|
+
```
|
|
483
|
+
|
|
484
|
+
Export both `GET` and `POST` when you want the route to work with schedulers
|
|
485
|
+
that call either method. Export only the method your scheduler uses when you
|
|
486
|
+
want a narrower route surface.
|
|
487
|
+
|
|
488
|
+
Call the route from your scheduler with:
|
|
489
|
+
|
|
490
|
+
```http
|
|
491
|
+
Authorization: Bearer <CRON_SECRET>
|
|
492
|
+
```
|
|
493
|
+
|
|
494
|
+
Do not start long-running outbox polling loops from provider lifecycle hooks in
|
|
495
|
+
serverless apps.
|
|
496
|
+
|
|
432
497
|
## Client creation
|
|
433
498
|
|
|
434
499
|
Use `createNextClient` when a client may run in both browser and server environments. Browser calls default to same-origin relative URLs. Server calls use `NEXT_PUBLIC_API_URL`, then `VERCEL_URL`, then `http://localhost:${PORT || 3000}`.
|
|
@@ -555,11 +620,17 @@ Creates a Next.js route handler that serves Swagger UI for an OpenAPI endpoint.
|
|
|
555
620
|
|
|
556
621
|
### `toRequestLike(req: Request): HttpRequestLike`
|
|
557
622
|
|
|
558
|
-
Converts a
|
|
623
|
+
Re-export from `@beignet/web`. Converts a standard `Request` to the
|
|
624
|
+
framework-agnostic `HttpRequestLike` shape.
|
|
625
|
+
|
|
626
|
+
### `toWebResponse(res: HttpResponseLike): Response`
|
|
627
|
+
|
|
628
|
+
Re-export from `@beignet/web`. Converts an `HttpResponseLike` to a standard
|
|
629
|
+
`Response`.
|
|
559
630
|
|
|
560
631
|
### `toNextResponse(res: HttpResponseLike): Response`
|
|
561
632
|
|
|
562
|
-
|
|
633
|
+
Next-named alias for `toWebResponse(...)`.
|
|
563
634
|
|
|
564
635
|
These are used internally by the adapter but can be used directly if needed.
|
|
565
636
|
|
|
@@ -698,7 +769,7 @@ export default async function TodosPage() {
|
|
|
698
769
|
<div>
|
|
699
770
|
<h1>Todos</h1>
|
|
700
771
|
<ul>
|
|
701
|
-
{result.
|
|
772
|
+
{result.items.map(todo => (
|
|
702
773
|
<li key={todo.id}>{todo.title}</li>
|
|
703
774
|
))}
|
|
704
775
|
</ul>
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,26 @@
|
|
|
1
1
|
import type { ClientConfig } from "@beignet/core/client";
|
|
2
|
+
import { type DrainOutboxOptions, type OutboxRegistry } from "@beignet/core/outbox";
|
|
2
3
|
import type { AnyPorts, StoragePort } from "@beignet/core/ports";
|
|
3
4
|
import type { ProvidedPortsOfList, ServiceProvider } from "@beignet/core/providers";
|
|
4
|
-
import type { ContractLike, CreateServerOptions, Handler,
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
import type { ContractLike, CreateServerOptions, Handler, ResolveContract, RouteDef, StandardSchemaV1 } from "@beignet/core/server";
|
|
6
|
+
import type { UploadRouter } from "@beignet/core/uploads";
|
|
7
|
+
import { toWebResponse } from "@beignet/web";
|
|
8
|
+
/**
|
|
9
|
+
* Server types re-exported for Next.js apps.
|
|
10
|
+
*/
|
|
11
|
+
export type { CreateServerOptions, RouteDef, RouteGroup, RouteHook, ServerInstance, } from "@beignet/core/server";
|
|
12
|
+
/**
|
|
13
|
+
* Server helpers re-exported for Next.js apps.
|
|
14
|
+
*/
|
|
15
|
+
export { contractsFromRoutes, createServer, defineRoute, defineRouteGroup, defineRouteHook, defineRoutes, } from "@beignet/core/server";
|
|
16
|
+
/**
|
|
17
|
+
* Web Fetch adapter helpers re-exported for Next.js route helpers.
|
|
18
|
+
*/
|
|
19
|
+
export { createFetchHandler, toRequestLike, toWebResponse } from "@beignet/web";
|
|
7
20
|
type AnyProvider = ServiceProvider<unknown, StandardSchemaV1<any, any>, AnyPorts>;
|
|
21
|
+
/**
|
|
22
|
+
* Beignet client config with Next.js base URL defaults.
|
|
23
|
+
*/
|
|
8
24
|
export type NextClientConfig<TProvidedHeaders extends string = never> = Omit<ClientConfig<TProvidedHeaders>, "baseUrl"> & {
|
|
9
25
|
/**
|
|
10
26
|
* Explicit base URL for both browser and server calls.
|
|
@@ -18,24 +34,66 @@ export type NextClientConfig<TProvidedHeaders extends string = never> = Omit<Cli
|
|
|
18
34
|
*/
|
|
19
35
|
serverBaseUrl?: string | (() => string | undefined);
|
|
20
36
|
};
|
|
37
|
+
/**
|
|
38
|
+
* OpenAPI server object accepted by `createOpenAPIHandler(...)`.
|
|
39
|
+
*/
|
|
21
40
|
export type OpenAPIServer = {
|
|
41
|
+
/**
|
|
42
|
+
* Server URL.
|
|
43
|
+
*/
|
|
22
44
|
url: string;
|
|
45
|
+
/**
|
|
46
|
+
* Server description.
|
|
47
|
+
*/
|
|
23
48
|
description?: string;
|
|
49
|
+
/**
|
|
50
|
+
* Server URL variables.
|
|
51
|
+
*/
|
|
24
52
|
variables?: Record<string, {
|
|
25
53
|
default: string;
|
|
26
54
|
enum?: string[];
|
|
27
55
|
description?: string;
|
|
28
56
|
}>;
|
|
29
57
|
};
|
|
58
|
+
/**
|
|
59
|
+
* Options for the Next.js OpenAPI route handler.
|
|
60
|
+
*/
|
|
30
61
|
export type CreateOpenAPIHandlerOptions = {
|
|
62
|
+
/**
|
|
63
|
+
* API title.
|
|
64
|
+
*/
|
|
31
65
|
title: string;
|
|
66
|
+
/**
|
|
67
|
+
* API version.
|
|
68
|
+
*/
|
|
32
69
|
version: string;
|
|
70
|
+
/**
|
|
71
|
+
* API description.
|
|
72
|
+
*/
|
|
33
73
|
description?: string;
|
|
74
|
+
/**
|
|
75
|
+
* Static servers or a request-aware server factory.
|
|
76
|
+
*/
|
|
34
77
|
servers?: OpenAPIServer[] | ((req: Request) => OpenAPIServer[]);
|
|
78
|
+
/**
|
|
79
|
+
* JSON media type used for generated content.
|
|
80
|
+
*/
|
|
35
81
|
jsonMediaType?: string;
|
|
82
|
+
/**
|
|
83
|
+
* OpenAPI security schemes.
|
|
84
|
+
*/
|
|
36
85
|
securitySchemes?: Record<string, unknown>;
|
|
86
|
+
/**
|
|
87
|
+
* Global security requirements.
|
|
88
|
+
*/
|
|
37
89
|
security?: Array<Record<string, string[]>>;
|
|
90
|
+
/**
|
|
91
|
+
* Custom schema introspector for non-Zod schema libraries.
|
|
92
|
+
*/
|
|
38
93
|
schemaIntrospector?: unknown;
|
|
94
|
+
/**
|
|
95
|
+
* Additional response headers.
|
|
96
|
+
*/
|
|
39
97
|
headers?: HeadersInit | ((req: Request) => HeadersInit | undefined);
|
|
40
98
|
/**
|
|
41
99
|
* Add the current request origin as the OpenAPI server when `servers` is omitted.
|
|
@@ -44,11 +102,26 @@ export type CreateOpenAPIHandlerOptions = {
|
|
|
44
102
|
*/
|
|
45
103
|
inferServersFromRequest?: boolean;
|
|
46
104
|
};
|
|
105
|
+
/**
|
|
106
|
+
* Options for the Next.js Swagger UI route handler.
|
|
107
|
+
*/
|
|
47
108
|
export type CreateSwaggerUIHandlerOptions = {
|
|
109
|
+
/**
|
|
110
|
+
* HTML page title.
|
|
111
|
+
*/
|
|
48
112
|
title?: string;
|
|
113
|
+
/**
|
|
114
|
+
* URL of the OpenAPI JSON route.
|
|
115
|
+
*/
|
|
49
116
|
specUrl?: string | ((req: Request) => string);
|
|
117
|
+
/**
|
|
118
|
+
* Additional response headers.
|
|
119
|
+
*/
|
|
50
120
|
headers?: HeadersInit | ((req: Request) => HeadersInit | undefined);
|
|
51
121
|
};
|
|
122
|
+
/**
|
|
123
|
+
* Options for serving public storage objects through a Next.js route.
|
|
124
|
+
*/
|
|
52
125
|
export type CreateStorageRouteOptions = {
|
|
53
126
|
/**
|
|
54
127
|
* Public path prefix that maps to storage keys.
|
|
@@ -61,18 +134,122 @@ export type CreateStorageRouteOptions = {
|
|
|
61
134
|
*/
|
|
62
135
|
headers?: HeadersInit | ((req: Request) => HeadersInit | undefined);
|
|
63
136
|
};
|
|
137
|
+
/**
|
|
138
|
+
* Options for creating a Next.js upload route.
|
|
139
|
+
*/
|
|
140
|
+
export type CreateUploadRouteOptions = {
|
|
141
|
+
/**
|
|
142
|
+
* Static upload name. Omit when using a dynamic `[uploadName]` segment.
|
|
143
|
+
*/
|
|
144
|
+
uploadName?: string;
|
|
145
|
+
/**
|
|
146
|
+
* Static upload action. Omit when using a dynamic `[action]` segment.
|
|
147
|
+
*/
|
|
148
|
+
action?: "prepare" | "complete" | "upload";
|
|
149
|
+
};
|
|
150
|
+
type OutboxDrainLogger = {
|
|
151
|
+
error(message: string, metadata?: Record<string, unknown>): void;
|
|
152
|
+
};
|
|
153
|
+
type OutboxDrainDevtools = {
|
|
154
|
+
record(event: {
|
|
155
|
+
type: "custom";
|
|
156
|
+
watcher: string;
|
|
157
|
+
name: string;
|
|
158
|
+
label: string;
|
|
159
|
+
summary: string;
|
|
160
|
+
requestId?: string;
|
|
161
|
+
traceId?: string;
|
|
162
|
+
details: unknown;
|
|
163
|
+
}): unknown;
|
|
164
|
+
};
|
|
165
|
+
type OutboxDrainPorts = {
|
|
166
|
+
outbox: DrainOutboxOptions["outbox"];
|
|
167
|
+
eventBus?: DrainOutboxOptions["eventBus"];
|
|
168
|
+
jobs?: DrainOutboxOptions["jobs"];
|
|
169
|
+
logger?: OutboxDrainLogger;
|
|
170
|
+
devtools?: OutboxDrainDevtools;
|
|
171
|
+
};
|
|
172
|
+
type OutboxDrainContext = {
|
|
173
|
+
requestId?: string;
|
|
174
|
+
traceId?: string;
|
|
175
|
+
ports: OutboxDrainPorts;
|
|
176
|
+
};
|
|
177
|
+
/**
|
|
178
|
+
* Options for creating a serverless-safe outbox drain route.
|
|
179
|
+
*/
|
|
180
|
+
export type CreateOutboxDrainRouteOptions<Ctx extends OutboxDrainContext> = {
|
|
181
|
+
/**
|
|
182
|
+
* Beignet Next server that owns app context and ports.
|
|
183
|
+
*/
|
|
184
|
+
server: Pick<NextServer<Ctx, Ctx["ports"]>, "createContextFromNext">;
|
|
185
|
+
/**
|
|
186
|
+
* Registry of events and jobs that may be delivered from the outbox.
|
|
187
|
+
*/
|
|
188
|
+
registry: OutboxRegistry;
|
|
189
|
+
/**
|
|
190
|
+
* Shared secret expected in the `Authorization: Bearer <secret>` header.
|
|
191
|
+
*
|
|
192
|
+
* Missing secrets fail closed with a 500 response so deployments do not
|
|
193
|
+
* accidentally expose an unauthenticated drain route.
|
|
194
|
+
*/
|
|
195
|
+
secret?: string;
|
|
196
|
+
/**
|
|
197
|
+
* Maximum messages to claim in one drain pass.
|
|
198
|
+
*/
|
|
199
|
+
batchSize?: number;
|
|
200
|
+
/**
|
|
201
|
+
* Claim lease duration in milliseconds.
|
|
202
|
+
*/
|
|
203
|
+
leaseMs?: number;
|
|
204
|
+
/**
|
|
205
|
+
* Retry delay override passed through to `drainOutbox(...)`.
|
|
206
|
+
*/
|
|
207
|
+
retryDelayMs?: DrainOutboxOptions["retryDelayMs"];
|
|
208
|
+
/**
|
|
209
|
+
* Additional response headers.
|
|
210
|
+
*/
|
|
211
|
+
headers?: HeadersInit | ((req: Request) => HeadersInit | undefined);
|
|
212
|
+
};
|
|
213
|
+
type UploadRouteContext = {
|
|
214
|
+
params?: Promise<Record<string, string | string[] | undefined>> | Record<string, string | string[] | undefined>;
|
|
215
|
+
};
|
|
216
|
+
/**
|
|
217
|
+
* Beignet server adapted for Next.js route handlers and server components.
|
|
218
|
+
*/
|
|
64
219
|
export interface NextServer<Ctx, Ports extends AnyPorts = AnyPorts> {
|
|
220
|
+
/**
|
|
221
|
+
* Catch-all Next.js route handler.
|
|
222
|
+
*/
|
|
65
223
|
api: (req: Request) => Promise<Response>;
|
|
224
|
+
/**
|
|
225
|
+
* Register and build a single Next.js route handler imperatively.
|
|
226
|
+
*/
|
|
66
227
|
route: <CLike extends ContractLike>(contractLike: CLike) => {
|
|
67
228
|
handle: (fn: Handler<Ctx, ResolveContract<CLike>>) => (req: Request) => Promise<Response>;
|
|
68
229
|
};
|
|
230
|
+
/**
|
|
231
|
+
* Create app context from `next/headers` for Server Components.
|
|
232
|
+
*/
|
|
69
233
|
createContextFromNext: () => Promise<Ctx>;
|
|
234
|
+
/**
|
|
235
|
+
* Registered contract inputs.
|
|
236
|
+
*/
|
|
70
237
|
contracts: readonly ContractLike[];
|
|
238
|
+
/**
|
|
239
|
+
* Stop installed providers.
|
|
240
|
+
*/
|
|
71
241
|
stop: () => Promise<void>;
|
|
242
|
+
/**
|
|
243
|
+
* Final app ports after provider setup.
|
|
244
|
+
*/
|
|
72
245
|
ports: Ports;
|
|
73
246
|
}
|
|
74
|
-
|
|
75
|
-
|
|
247
|
+
/**
|
|
248
|
+
* Convert a Beignet response into a native `Response`.
|
|
249
|
+
*
|
|
250
|
+
* This is the Next-named alias for `toWebResponse(...)` from `@beignet/web`.
|
|
251
|
+
*/
|
|
252
|
+
export declare const toNextResponse: typeof toWebResponse;
|
|
76
253
|
/**
|
|
77
254
|
* Resolve the right Beignet client base URL for Next.js.
|
|
78
255
|
*
|
|
@@ -105,5 +282,33 @@ export declare function createStorageRoute(storage: StoragePort, options?: Creat
|
|
|
105
282
|
GET: (req: Request) => Promise<Response>;
|
|
106
283
|
HEAD: (req: Request) => Promise<Response>;
|
|
107
284
|
};
|
|
285
|
+
/**
|
|
286
|
+
* Create a Next.js POST handler for Beignet upload routes.
|
|
287
|
+
*
|
|
288
|
+
* Use this in a dynamic route such as
|
|
289
|
+
* `app/api/uploads/[uploadName]/[action]/route.ts`, where `action` is
|
|
290
|
+
* `prepare`, `complete`, or `upload`.
|
|
291
|
+
*/
|
|
292
|
+
export declare function createUploadRoute(router: UploadRouter, options?: CreateUploadRouteOptions): {
|
|
293
|
+
POST: (req: Request, ctx?: UploadRouteContext) => Promise<Response>;
|
|
294
|
+
};
|
|
295
|
+
/**
|
|
296
|
+
* Create Next.js route handlers that drain one durable outbox batch.
|
|
297
|
+
*
|
|
298
|
+
* This helper is intended for serverless cron routes. It performs bounded work
|
|
299
|
+
* and exits; do not start long-running outbox polling loops from provider
|
|
300
|
+
* lifecycle hooks in serverless apps.
|
|
301
|
+
*/
|
|
302
|
+
export declare function createOutboxDrainRoute<Ctx extends OutboxDrainContext>(options: CreateOutboxDrainRouteOptions<Ctx>): {
|
|
303
|
+
GET: (req: Request) => Promise<Response>;
|
|
304
|
+
POST: (req: Request) => Promise<Response>;
|
|
305
|
+
};
|
|
306
|
+
/**
|
|
307
|
+
* Create a Beignet server adapted for Next.js.
|
|
308
|
+
*
|
|
309
|
+
* The returned `api` handler is intended for a catch-all route. Focused routes
|
|
310
|
+
* such as OpenAPI, Swagger UI, devtools, and public storage can use their own
|
|
311
|
+
* route helpers.
|
|
312
|
+
*/
|
|
108
313
|
export declare function createNextServer<Ctx, Ports extends AnyPorts = AnyPorts, Routes extends readonly RouteDef<Ctx>[] = readonly RouteDef<Ctx>[], Providers extends readonly AnyProvider[] = readonly AnyProvider[]>(options: CreateServerOptions<Ctx, Ports, Routes, Providers>): Promise<NextServer<Ctx, Ports & ProvidedPortsOfList<Providers>>>;
|
|
109
314
|
//# 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,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,KAAK,EACV,mBAAmB,EACnB,eAAe,EAChB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,32 +1,21 @@
|
|
|
1
1
|
import { createClient } from "@beignet/core/client";
|
|
2
|
+
import { drainOutbox, } from "@beignet/core/outbox";
|
|
2
3
|
import { createServer } from "@beignet/core/server";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
export function toNextResponse(resLike) {
|
|
19
|
-
if (resLike instanceof Response) {
|
|
20
|
-
return resLike;
|
|
21
|
-
}
|
|
22
|
-
const headers = new Headers(resLike.headers);
|
|
23
|
-
const body = resLike.body;
|
|
24
|
-
if (body === undefined || body === null) {
|
|
25
|
-
return new Response(null, { status: resLike.status, headers });
|
|
26
|
-
}
|
|
27
|
-
// biome-ignore lint/suspicious/noExplicitAny: Body can be any JSON-serializable value
|
|
28
|
-
return Response.json(body, { status: resLike.status, headers });
|
|
29
|
-
}
|
|
4
|
+
import { createFetchHandler, toWebResponse } from "@beignet/web";
|
|
5
|
+
/**
|
|
6
|
+
* Server helpers re-exported for Next.js apps.
|
|
7
|
+
*/
|
|
8
|
+
export { contractsFromRoutes, createServer, defineRoute, defineRouteGroup, defineRouteHook, defineRoutes, } from "@beignet/core/server";
|
|
9
|
+
/**
|
|
10
|
+
* Web Fetch adapter helpers re-exported for Next.js route helpers.
|
|
11
|
+
*/
|
|
12
|
+
export { createFetchHandler, toRequestLike, toWebResponse } from "@beignet/web";
|
|
13
|
+
/**
|
|
14
|
+
* Convert a Beignet response into a native `Response`.
|
|
15
|
+
*
|
|
16
|
+
* This is the Next-named alias for `toWebResponse(...)` from `@beignet/web`.
|
|
17
|
+
*/
|
|
18
|
+
export const toNextResponse = toWebResponse;
|
|
30
19
|
function resolveConfigValue(value) {
|
|
31
20
|
return typeof value === "function" ? value() : value;
|
|
32
21
|
}
|
|
@@ -118,6 +107,9 @@ function keyFromStorageRequest(req, basePath) {
|
|
|
118
107
|
function storageNotFoundResponse() {
|
|
119
108
|
return new Response(null, { status: 404 });
|
|
120
109
|
}
|
|
110
|
+
function firstParam(value) {
|
|
111
|
+
return Array.isArray(value) ? value[0] : value;
|
|
112
|
+
}
|
|
121
113
|
async function storageResponse(storage, req, basePath, options, includeBody) {
|
|
122
114
|
const key = keyFromStorageRequest(req, basePath);
|
|
123
115
|
if (!key)
|
|
@@ -256,18 +248,141 @@ export function createStorageRoute(storage, options = {}) {
|
|
|
256
248
|
HEAD: (req) => storageResponse(storage, req, basePath, options, false),
|
|
257
249
|
};
|
|
258
250
|
}
|
|
251
|
+
/**
|
|
252
|
+
* Create a Next.js POST handler for Beignet upload routes.
|
|
253
|
+
*
|
|
254
|
+
* Use this in a dynamic route such as
|
|
255
|
+
* `app/api/uploads/[uploadName]/[action]/route.ts`, where `action` is
|
|
256
|
+
* `prepare`, `complete`, or `upload`.
|
|
257
|
+
*/
|
|
258
|
+
export function createUploadRoute(router, options = {}) {
|
|
259
|
+
return {
|
|
260
|
+
POST: async (req, ctx) => {
|
|
261
|
+
const params = await ctx?.params;
|
|
262
|
+
const uploadName = options.uploadName ?? firstParam(params?.uploadName ?? params?.upload);
|
|
263
|
+
const action = options.action ?? firstParam(params?.action);
|
|
264
|
+
if (!uploadName) {
|
|
265
|
+
return Response.json({
|
|
266
|
+
error: {
|
|
267
|
+
code: "UPLOAD_NOT_FOUND",
|
|
268
|
+
message: "Upload route is missing an upload name.",
|
|
269
|
+
},
|
|
270
|
+
}, { status: 404 });
|
|
271
|
+
}
|
|
272
|
+
if (action !== "prepare" &&
|
|
273
|
+
action !== "complete" &&
|
|
274
|
+
action !== "upload") {
|
|
275
|
+
return Response.json({
|
|
276
|
+
error: {
|
|
277
|
+
code: "INVALID_UPLOAD_ACTION",
|
|
278
|
+
message: 'Upload route action must be "prepare", "complete", or "upload".',
|
|
279
|
+
},
|
|
280
|
+
}, { status: 400 });
|
|
281
|
+
}
|
|
282
|
+
return router.handleRequest(req, {
|
|
283
|
+
uploadName,
|
|
284
|
+
action,
|
|
285
|
+
});
|
|
286
|
+
},
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
function outboxDrainJson(body, status, headers) {
|
|
290
|
+
return Response.json(body, {
|
|
291
|
+
status,
|
|
292
|
+
headers,
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Create Next.js route handlers that drain one durable outbox batch.
|
|
297
|
+
*
|
|
298
|
+
* This helper is intended for serverless cron routes. It performs bounded work
|
|
299
|
+
* and exits; do not start long-running outbox polling loops from provider
|
|
300
|
+
* lifecycle hooks in serverless apps.
|
|
301
|
+
*/
|
|
302
|
+
export function createOutboxDrainRoute(options) {
|
|
303
|
+
const drainPendingOutbox = async (req) => {
|
|
304
|
+
const headers = resolveHeaders(options.headers, req);
|
|
305
|
+
const secret = options.secret;
|
|
306
|
+
if (!secret) {
|
|
307
|
+
return outboxDrainJson({
|
|
308
|
+
ok: false,
|
|
309
|
+
error: "CRON_SECRET is not configured.",
|
|
310
|
+
}, 500, headers);
|
|
311
|
+
}
|
|
312
|
+
if (req.headers.get("authorization") !== `Bearer ${secret}`) {
|
|
313
|
+
return outboxDrainJson({ ok: false, error: "Unauthorized" }, 401, headers);
|
|
314
|
+
}
|
|
315
|
+
let ctx;
|
|
316
|
+
try {
|
|
317
|
+
ctx = await options.server.createContextFromNext();
|
|
318
|
+
const drainCtx = ctx;
|
|
319
|
+
const result = await drainOutbox({
|
|
320
|
+
outbox: drainCtx.ports.outbox,
|
|
321
|
+
registry: options.registry,
|
|
322
|
+
eventBus: drainCtx.ports.eventBus,
|
|
323
|
+
jobs: drainCtx.ports.jobs,
|
|
324
|
+
batchSize: options.batchSize,
|
|
325
|
+
leaseMs: options.leaseMs,
|
|
326
|
+
retryDelayMs: options.retryDelayMs,
|
|
327
|
+
instrumentation: drainCtx.ports.devtools,
|
|
328
|
+
onError(error, message) {
|
|
329
|
+
drainCtx.ports.logger?.error("Outbox delivery failed", {
|
|
330
|
+
error,
|
|
331
|
+
outboxMessageId: message.id,
|
|
332
|
+
kind: message.kind,
|
|
333
|
+
name: message.name,
|
|
334
|
+
attempts: message.attempts,
|
|
335
|
+
});
|
|
336
|
+
},
|
|
337
|
+
});
|
|
338
|
+
try {
|
|
339
|
+
await drainCtx.ports.devtools?.record({
|
|
340
|
+
type: "custom",
|
|
341
|
+
watcher: "outbox",
|
|
342
|
+
name: "outbox.drain",
|
|
343
|
+
label: "Outbox drain",
|
|
344
|
+
summary: `${result.delivered} delivered, ${result.retried} retried, ${result.deadLettered} dead-lettered`,
|
|
345
|
+
requestId: drainCtx.requestId,
|
|
346
|
+
traceId: drainCtx.traceId,
|
|
347
|
+
details: result,
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
catch (error) {
|
|
351
|
+
drainCtx.ports.logger?.error("Outbox drain devtools recording failed", {
|
|
352
|
+
error,
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
return outboxDrainJson({
|
|
356
|
+
ok: true,
|
|
357
|
+
result,
|
|
358
|
+
}, 200, headers);
|
|
359
|
+
}
|
|
360
|
+
catch (error) {
|
|
361
|
+
ctx?.ports.logger?.error("Outbox drain failed", { error });
|
|
362
|
+
return outboxDrainJson({
|
|
363
|
+
ok: false,
|
|
364
|
+
error: "Outbox drain failed.",
|
|
365
|
+
}, 500, headers);
|
|
366
|
+
}
|
|
367
|
+
};
|
|
368
|
+
return {
|
|
369
|
+
GET: drainPendingOutbox,
|
|
370
|
+
POST: drainPendingOutbox,
|
|
371
|
+
};
|
|
372
|
+
}
|
|
373
|
+
/**
|
|
374
|
+
* Create a Beignet server adapted for Next.js.
|
|
375
|
+
*
|
|
376
|
+
* The returned `api` handler is intended for a catch-all route. Focused routes
|
|
377
|
+
* such as OpenAPI, Swagger UI, devtools, and public storage can use their own
|
|
378
|
+
* route helpers.
|
|
379
|
+
*/
|
|
259
380
|
export async function createNextServer(options) {
|
|
260
381
|
const runtime = await createServer(options);
|
|
261
|
-
const wrap = (handler) => {
|
|
262
|
-
return async (req) => {
|
|
263
|
-
const res = await handler(toRequestLike(req));
|
|
264
|
-
return toNextResponse(res);
|
|
265
|
-
};
|
|
266
|
-
};
|
|
267
382
|
return {
|
|
268
|
-
api:
|
|
383
|
+
api: createFetchHandler(runtime),
|
|
269
384
|
route: (contract) => ({
|
|
270
|
-
handle: (fn) =>
|
|
385
|
+
handle: (fn) => createFetchHandler(runtime.route(contract).handle(fn)),
|
|
271
386
|
}),
|
|
272
387
|
createContextFromNext: async () => {
|
|
273
388
|
const { cookies, headers } = await import("next/headers");
|
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/next",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Next.js server-side handlers for Beignet",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -57,6 +57,7 @@
|
|
|
57
57
|
},
|
|
58
58
|
"dependencies": {
|
|
59
59
|
"@beignet/core": "*",
|
|
60
|
+
"@beignet/web": "*",
|
|
60
61
|
"@standard-schema/spec": "^1.0.0"
|
|
61
62
|
},
|
|
62
63
|
"devDependencies": {
|
package/src/index.ts
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import type { ClientConfig } from "@beignet/core/client";
|
|
2
2
|
import { createClient } from "@beignet/core/client";
|
|
3
|
+
import {
|
|
4
|
+
type DrainOutboxOptions,
|
|
5
|
+
drainOutbox,
|
|
6
|
+
type OutboxRegistry,
|
|
7
|
+
} from "@beignet/core/outbox";
|
|
3
8
|
import type { AnyPorts, StoragePort } from "@beignet/core/ports";
|
|
4
9
|
import type {
|
|
5
10
|
ProvidedPortsOfList,
|
|
@@ -10,25 +15,41 @@ import type {
|
|
|
10
15
|
CreateServerOptions,
|
|
11
16
|
Handler,
|
|
12
17
|
HttpRequestLike,
|
|
13
|
-
HttpResponse,
|
|
14
18
|
ResolveContract,
|
|
15
19
|
RouteDef,
|
|
16
20
|
StandardSchemaV1,
|
|
17
21
|
} from "@beignet/core/server";
|
|
18
22
|
import { createServer } from "@beignet/core/server";
|
|
23
|
+
import type { UploadRouter } from "@beignet/core/uploads";
|
|
24
|
+
import { createFetchHandler, toWebResponse } from "@beignet/web";
|
|
19
25
|
|
|
26
|
+
/**
|
|
27
|
+
* Server types re-exported for Next.js apps.
|
|
28
|
+
*/
|
|
20
29
|
export type {
|
|
21
30
|
CreateServerOptions,
|
|
31
|
+
RouteDef,
|
|
22
32
|
RouteGroup,
|
|
33
|
+
RouteHook,
|
|
23
34
|
ServerInstance,
|
|
24
35
|
} from "@beignet/core/server";
|
|
36
|
+
/**
|
|
37
|
+
* Server helpers re-exported for Next.js apps.
|
|
38
|
+
*/
|
|
25
39
|
export {
|
|
26
40
|
contractsFromRoutes,
|
|
27
41
|
createServer,
|
|
42
|
+
defineRoute,
|
|
28
43
|
defineRouteGroup,
|
|
44
|
+
defineRouteHook,
|
|
29
45
|
defineRoutes,
|
|
30
46
|
} from "@beignet/core/server";
|
|
31
47
|
|
|
48
|
+
/**
|
|
49
|
+
* Web Fetch adapter helpers re-exported for Next.js route helpers.
|
|
50
|
+
*/
|
|
51
|
+
export { createFetchHandler, toRequestLike, toWebResponse } from "@beignet/web";
|
|
52
|
+
|
|
32
53
|
type AnyProvider = ServiceProvider<
|
|
33
54
|
unknown,
|
|
34
55
|
// biome-ignore lint/suspicious/noExplicitAny: provider config types are erased at this level
|
|
@@ -36,6 +57,9 @@ type AnyProvider = ServiceProvider<
|
|
|
36
57
|
AnyPorts
|
|
37
58
|
>;
|
|
38
59
|
|
|
60
|
+
/**
|
|
61
|
+
* Beignet client config with Next.js base URL defaults.
|
|
62
|
+
*/
|
|
39
63
|
export type NextClientConfig<TProvidedHeaders extends string = never> = Omit<
|
|
40
64
|
ClientConfig<TProvidedHeaders>,
|
|
41
65
|
"baseUrl"
|
|
@@ -53,9 +77,21 @@ export type NextClientConfig<TProvidedHeaders extends string = never> = Omit<
|
|
|
53
77
|
serverBaseUrl?: string | (() => string | undefined);
|
|
54
78
|
};
|
|
55
79
|
|
|
80
|
+
/**
|
|
81
|
+
* OpenAPI server object accepted by `createOpenAPIHandler(...)`.
|
|
82
|
+
*/
|
|
56
83
|
export type OpenAPIServer = {
|
|
84
|
+
/**
|
|
85
|
+
* Server URL.
|
|
86
|
+
*/
|
|
57
87
|
url: string;
|
|
88
|
+
/**
|
|
89
|
+
* Server description.
|
|
90
|
+
*/
|
|
58
91
|
description?: string;
|
|
92
|
+
/**
|
|
93
|
+
* Server URL variables.
|
|
94
|
+
*/
|
|
59
95
|
variables?: Record<
|
|
60
96
|
string,
|
|
61
97
|
{
|
|
@@ -66,15 +102,45 @@ export type OpenAPIServer = {
|
|
|
66
102
|
>;
|
|
67
103
|
};
|
|
68
104
|
|
|
105
|
+
/**
|
|
106
|
+
* Options for the Next.js OpenAPI route handler.
|
|
107
|
+
*/
|
|
69
108
|
export type CreateOpenAPIHandlerOptions = {
|
|
109
|
+
/**
|
|
110
|
+
* API title.
|
|
111
|
+
*/
|
|
70
112
|
title: string;
|
|
113
|
+
/**
|
|
114
|
+
* API version.
|
|
115
|
+
*/
|
|
71
116
|
version: string;
|
|
117
|
+
/**
|
|
118
|
+
* API description.
|
|
119
|
+
*/
|
|
72
120
|
description?: string;
|
|
121
|
+
/**
|
|
122
|
+
* Static servers or a request-aware server factory.
|
|
123
|
+
*/
|
|
73
124
|
servers?: OpenAPIServer[] | ((req: Request) => OpenAPIServer[]);
|
|
125
|
+
/**
|
|
126
|
+
* JSON media type used for generated content.
|
|
127
|
+
*/
|
|
74
128
|
jsonMediaType?: string;
|
|
129
|
+
/**
|
|
130
|
+
* OpenAPI security schemes.
|
|
131
|
+
*/
|
|
75
132
|
securitySchemes?: Record<string, unknown>;
|
|
133
|
+
/**
|
|
134
|
+
* Global security requirements.
|
|
135
|
+
*/
|
|
76
136
|
security?: Array<Record<string, string[]>>;
|
|
137
|
+
/**
|
|
138
|
+
* Custom schema introspector for non-Zod schema libraries.
|
|
139
|
+
*/
|
|
77
140
|
schemaIntrospector?: unknown;
|
|
141
|
+
/**
|
|
142
|
+
* Additional response headers.
|
|
143
|
+
*/
|
|
78
144
|
headers?: HeadersInit | ((req: Request) => HeadersInit | undefined);
|
|
79
145
|
/**
|
|
80
146
|
* Add the current request origin as the OpenAPI server when `servers` is omitted.
|
|
@@ -84,12 +150,27 @@ export type CreateOpenAPIHandlerOptions = {
|
|
|
84
150
|
inferServersFromRequest?: boolean;
|
|
85
151
|
};
|
|
86
152
|
|
|
153
|
+
/**
|
|
154
|
+
* Options for the Next.js Swagger UI route handler.
|
|
155
|
+
*/
|
|
87
156
|
export type CreateSwaggerUIHandlerOptions = {
|
|
157
|
+
/**
|
|
158
|
+
* HTML page title.
|
|
159
|
+
*/
|
|
88
160
|
title?: string;
|
|
161
|
+
/**
|
|
162
|
+
* URL of the OpenAPI JSON route.
|
|
163
|
+
*/
|
|
89
164
|
specUrl?: string | ((req: Request) => string);
|
|
165
|
+
/**
|
|
166
|
+
* Additional response headers.
|
|
167
|
+
*/
|
|
90
168
|
headers?: HeadersInit | ((req: Request) => HeadersInit | undefined);
|
|
91
169
|
};
|
|
92
170
|
|
|
171
|
+
/**
|
|
172
|
+
* Options for serving public storage objects through a Next.js route.
|
|
173
|
+
*/
|
|
93
174
|
export type CreateStorageRouteOptions = {
|
|
94
175
|
/**
|
|
95
176
|
* Public path prefix that maps to storage keys.
|
|
@@ -103,8 +184,105 @@ export type CreateStorageRouteOptions = {
|
|
|
103
184
|
headers?: HeadersInit | ((req: Request) => HeadersInit | undefined);
|
|
104
185
|
};
|
|
105
186
|
|
|
187
|
+
/**
|
|
188
|
+
* Options for creating a Next.js upload route.
|
|
189
|
+
*/
|
|
190
|
+
export type CreateUploadRouteOptions = {
|
|
191
|
+
/**
|
|
192
|
+
* Static upload name. Omit when using a dynamic `[uploadName]` segment.
|
|
193
|
+
*/
|
|
194
|
+
uploadName?: string;
|
|
195
|
+
/**
|
|
196
|
+
* Static upload action. Omit when using a dynamic `[action]` segment.
|
|
197
|
+
*/
|
|
198
|
+
action?: "prepare" | "complete" | "upload";
|
|
199
|
+
};
|
|
200
|
+
|
|
201
|
+
type OutboxDrainLogger = {
|
|
202
|
+
error(message: string, metadata?: Record<string, unknown>): void;
|
|
203
|
+
};
|
|
204
|
+
|
|
205
|
+
type OutboxDrainDevtools = {
|
|
206
|
+
record(event: {
|
|
207
|
+
type: "custom";
|
|
208
|
+
watcher: string;
|
|
209
|
+
name: string;
|
|
210
|
+
label: string;
|
|
211
|
+
summary: string;
|
|
212
|
+
requestId?: string;
|
|
213
|
+
traceId?: string;
|
|
214
|
+
details: unknown;
|
|
215
|
+
}): unknown;
|
|
216
|
+
};
|
|
217
|
+
|
|
218
|
+
type OutboxDrainPorts = {
|
|
219
|
+
outbox: DrainOutboxOptions["outbox"];
|
|
220
|
+
eventBus?: DrainOutboxOptions["eventBus"];
|
|
221
|
+
jobs?: DrainOutboxOptions["jobs"];
|
|
222
|
+
logger?: OutboxDrainLogger;
|
|
223
|
+
devtools?: OutboxDrainDevtools;
|
|
224
|
+
};
|
|
225
|
+
|
|
226
|
+
type OutboxDrainContext = {
|
|
227
|
+
requestId?: string;
|
|
228
|
+
traceId?: string;
|
|
229
|
+
ports: OutboxDrainPorts;
|
|
230
|
+
};
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* Options for creating a serverless-safe outbox drain route.
|
|
234
|
+
*/
|
|
235
|
+
export type CreateOutboxDrainRouteOptions<Ctx extends OutboxDrainContext> = {
|
|
236
|
+
/**
|
|
237
|
+
* Beignet Next server that owns app context and ports.
|
|
238
|
+
*/
|
|
239
|
+
server: Pick<NextServer<Ctx, Ctx["ports"]>, "createContextFromNext">;
|
|
240
|
+
/**
|
|
241
|
+
* Registry of events and jobs that may be delivered from the outbox.
|
|
242
|
+
*/
|
|
243
|
+
registry: OutboxRegistry;
|
|
244
|
+
/**
|
|
245
|
+
* Shared secret expected in the `Authorization: Bearer <secret>` header.
|
|
246
|
+
*
|
|
247
|
+
* Missing secrets fail closed with a 500 response so deployments do not
|
|
248
|
+
* accidentally expose an unauthenticated drain route.
|
|
249
|
+
*/
|
|
250
|
+
secret?: string;
|
|
251
|
+
/**
|
|
252
|
+
* Maximum messages to claim in one drain pass.
|
|
253
|
+
*/
|
|
254
|
+
batchSize?: number;
|
|
255
|
+
/**
|
|
256
|
+
* Claim lease duration in milliseconds.
|
|
257
|
+
*/
|
|
258
|
+
leaseMs?: number;
|
|
259
|
+
/**
|
|
260
|
+
* Retry delay override passed through to `drainOutbox(...)`.
|
|
261
|
+
*/
|
|
262
|
+
retryDelayMs?: DrainOutboxOptions["retryDelayMs"];
|
|
263
|
+
/**
|
|
264
|
+
* Additional response headers.
|
|
265
|
+
*/
|
|
266
|
+
headers?: HeadersInit | ((req: Request) => HeadersInit | undefined);
|
|
267
|
+
};
|
|
268
|
+
|
|
269
|
+
type UploadRouteContext = {
|
|
270
|
+
params?:
|
|
271
|
+
| Promise<Record<string, string | string[] | undefined>>
|
|
272
|
+
| Record<string, string | string[] | undefined>;
|
|
273
|
+
};
|
|
274
|
+
|
|
275
|
+
/**
|
|
276
|
+
* Beignet server adapted for Next.js route handlers and server components.
|
|
277
|
+
*/
|
|
106
278
|
export interface NextServer<Ctx, Ports extends AnyPorts = AnyPorts> {
|
|
279
|
+
/**
|
|
280
|
+
* Catch-all Next.js route handler.
|
|
281
|
+
*/
|
|
107
282
|
api: (req: Request) => Promise<Response>;
|
|
283
|
+
/**
|
|
284
|
+
* Register and build a single Next.js route handler imperatively.
|
|
285
|
+
*/
|
|
108
286
|
route: <CLike extends ContractLike>(
|
|
109
287
|
contractLike: CLike,
|
|
110
288
|
) => {
|
|
@@ -112,42 +290,30 @@ export interface NextServer<Ctx, Ports extends AnyPorts = AnyPorts> {
|
|
|
112
290
|
fn: Handler<Ctx, ResolveContract<CLike>>,
|
|
113
291
|
) => (req: Request) => Promise<Response>;
|
|
114
292
|
};
|
|
293
|
+
/**
|
|
294
|
+
* Create app context from `next/headers` for Server Components.
|
|
295
|
+
*/
|
|
115
296
|
createContextFromNext: () => Promise<Ctx>;
|
|
297
|
+
/**
|
|
298
|
+
* Registered contract inputs.
|
|
299
|
+
*/
|
|
116
300
|
contracts: readonly ContractLike[];
|
|
301
|
+
/**
|
|
302
|
+
* Stop installed providers.
|
|
303
|
+
*/
|
|
117
304
|
stop: () => Promise<void>;
|
|
305
|
+
/**
|
|
306
|
+
* Final app ports after provider setup.
|
|
307
|
+
*/
|
|
118
308
|
ports: Ports;
|
|
119
309
|
}
|
|
120
310
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
json: () => req.json(),
|
|
128
|
-
text: () => req.text(),
|
|
129
|
-
arrayBuffer: () => req.arrayBuffer(),
|
|
130
|
-
blob: () => req.blob(),
|
|
131
|
-
formData: () => req.formData(),
|
|
132
|
-
clone: () => toRequestLike(req.clone()),
|
|
133
|
-
};
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
export function toNextResponse(resLike: HttpResponse): Response {
|
|
137
|
-
if (resLike instanceof Response) {
|
|
138
|
-
return resLike;
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
const headers = new Headers(resLike.headers);
|
|
142
|
-
const body = resLike.body;
|
|
143
|
-
|
|
144
|
-
if (body === undefined || body === null) {
|
|
145
|
-
return new Response(null, { status: resLike.status, headers });
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
// biome-ignore lint/suspicious/noExplicitAny: Body can be any JSON-serializable value
|
|
149
|
-
return Response.json(body as any, { status: resLike.status, headers });
|
|
150
|
-
}
|
|
311
|
+
/**
|
|
312
|
+
* Convert a Beignet response into a native `Response`.
|
|
313
|
+
*
|
|
314
|
+
* This is the Next-named alias for `toWebResponse(...)` from `@beignet/web`.
|
|
315
|
+
*/
|
|
316
|
+
export const toNextResponse = toWebResponse;
|
|
151
317
|
|
|
152
318
|
function resolveConfigValue(
|
|
153
319
|
value: string | (() => string | undefined) | undefined,
|
|
@@ -280,6 +446,10 @@ function storageNotFoundResponse(): Response {
|
|
|
280
446
|
return new Response(null, { status: 404 });
|
|
281
447
|
}
|
|
282
448
|
|
|
449
|
+
function firstParam(value: string | string[] | undefined): string | undefined {
|
|
450
|
+
return Array.isArray(value) ? value[0] : value;
|
|
451
|
+
}
|
|
452
|
+
|
|
283
453
|
async function storageResponse(
|
|
284
454
|
storage: StoragePort,
|
|
285
455
|
req: Request,
|
|
@@ -456,6 +626,187 @@ export function createStorageRoute(
|
|
|
456
626
|
};
|
|
457
627
|
}
|
|
458
628
|
|
|
629
|
+
/**
|
|
630
|
+
* Create a Next.js POST handler for Beignet upload routes.
|
|
631
|
+
*
|
|
632
|
+
* Use this in a dynamic route such as
|
|
633
|
+
* `app/api/uploads/[uploadName]/[action]/route.ts`, where `action` is
|
|
634
|
+
* `prepare`, `complete`, or `upload`.
|
|
635
|
+
*/
|
|
636
|
+
export function createUploadRoute(
|
|
637
|
+
router: UploadRouter,
|
|
638
|
+
options: CreateUploadRouteOptions = {},
|
|
639
|
+
): {
|
|
640
|
+
POST: (req: Request, ctx?: UploadRouteContext) => Promise<Response>;
|
|
641
|
+
} {
|
|
642
|
+
return {
|
|
643
|
+
POST: async (req, ctx) => {
|
|
644
|
+
const params = await ctx?.params;
|
|
645
|
+
const uploadName =
|
|
646
|
+
options.uploadName ?? firstParam(params?.uploadName ?? params?.upload);
|
|
647
|
+
const action = options.action ?? firstParam(params?.action);
|
|
648
|
+
|
|
649
|
+
if (!uploadName) {
|
|
650
|
+
return Response.json(
|
|
651
|
+
{
|
|
652
|
+
error: {
|
|
653
|
+
code: "UPLOAD_NOT_FOUND",
|
|
654
|
+
message: "Upload route is missing an upload name.",
|
|
655
|
+
},
|
|
656
|
+
},
|
|
657
|
+
{ status: 404 },
|
|
658
|
+
);
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
if (
|
|
662
|
+
action !== "prepare" &&
|
|
663
|
+
action !== "complete" &&
|
|
664
|
+
action !== "upload"
|
|
665
|
+
) {
|
|
666
|
+
return Response.json(
|
|
667
|
+
{
|
|
668
|
+
error: {
|
|
669
|
+
code: "INVALID_UPLOAD_ACTION",
|
|
670
|
+
message:
|
|
671
|
+
'Upload route action must be "prepare", "complete", or "upload".',
|
|
672
|
+
},
|
|
673
|
+
},
|
|
674
|
+
{ status: 400 },
|
|
675
|
+
);
|
|
676
|
+
}
|
|
677
|
+
|
|
678
|
+
return router.handleRequest(req, {
|
|
679
|
+
uploadName,
|
|
680
|
+
action,
|
|
681
|
+
});
|
|
682
|
+
},
|
|
683
|
+
};
|
|
684
|
+
}
|
|
685
|
+
|
|
686
|
+
function outboxDrainJson(
|
|
687
|
+
body: unknown,
|
|
688
|
+
status: number,
|
|
689
|
+
headers: HeadersInit | undefined,
|
|
690
|
+
): Response {
|
|
691
|
+
return Response.json(body, {
|
|
692
|
+
status,
|
|
693
|
+
headers,
|
|
694
|
+
});
|
|
695
|
+
}
|
|
696
|
+
|
|
697
|
+
/**
|
|
698
|
+
* Create Next.js route handlers that drain one durable outbox batch.
|
|
699
|
+
*
|
|
700
|
+
* This helper is intended for serverless cron routes. It performs bounded work
|
|
701
|
+
* and exits; do not start long-running outbox polling loops from provider
|
|
702
|
+
* lifecycle hooks in serverless apps.
|
|
703
|
+
*/
|
|
704
|
+
export function createOutboxDrainRoute<Ctx extends OutboxDrainContext>(
|
|
705
|
+
options: CreateOutboxDrainRouteOptions<Ctx>,
|
|
706
|
+
): {
|
|
707
|
+
GET: (req: Request) => Promise<Response>;
|
|
708
|
+
POST: (req: Request) => Promise<Response>;
|
|
709
|
+
} {
|
|
710
|
+
const drainPendingOutbox = async (req: Request): Promise<Response> => {
|
|
711
|
+
const headers = resolveHeaders(options.headers, req);
|
|
712
|
+
const secret = options.secret;
|
|
713
|
+
|
|
714
|
+
if (!secret) {
|
|
715
|
+
return outboxDrainJson(
|
|
716
|
+
{
|
|
717
|
+
ok: false,
|
|
718
|
+
error: "CRON_SECRET is not configured.",
|
|
719
|
+
},
|
|
720
|
+
500,
|
|
721
|
+
headers,
|
|
722
|
+
);
|
|
723
|
+
}
|
|
724
|
+
|
|
725
|
+
if (req.headers.get("authorization") !== `Bearer ${secret}`) {
|
|
726
|
+
return outboxDrainJson(
|
|
727
|
+
{ ok: false, error: "Unauthorized" },
|
|
728
|
+
401,
|
|
729
|
+
headers,
|
|
730
|
+
);
|
|
731
|
+
}
|
|
732
|
+
|
|
733
|
+
let ctx: Ctx | undefined;
|
|
734
|
+
|
|
735
|
+
try {
|
|
736
|
+
ctx = await options.server.createContextFromNext();
|
|
737
|
+
const drainCtx = ctx;
|
|
738
|
+
const result = await drainOutbox({
|
|
739
|
+
outbox: drainCtx.ports.outbox,
|
|
740
|
+
registry: options.registry,
|
|
741
|
+
eventBus: drainCtx.ports.eventBus,
|
|
742
|
+
jobs: drainCtx.ports.jobs,
|
|
743
|
+
batchSize: options.batchSize,
|
|
744
|
+
leaseMs: options.leaseMs,
|
|
745
|
+
retryDelayMs: options.retryDelayMs,
|
|
746
|
+
instrumentation: drainCtx.ports.devtools,
|
|
747
|
+
onError(error, message) {
|
|
748
|
+
drainCtx.ports.logger?.error("Outbox delivery failed", {
|
|
749
|
+
error,
|
|
750
|
+
outboxMessageId: message.id,
|
|
751
|
+
kind: message.kind,
|
|
752
|
+
name: message.name,
|
|
753
|
+
attempts: message.attempts,
|
|
754
|
+
});
|
|
755
|
+
},
|
|
756
|
+
});
|
|
757
|
+
|
|
758
|
+
try {
|
|
759
|
+
await drainCtx.ports.devtools?.record({
|
|
760
|
+
type: "custom",
|
|
761
|
+
watcher: "outbox",
|
|
762
|
+
name: "outbox.drain",
|
|
763
|
+
label: "Outbox drain",
|
|
764
|
+
summary: `${result.delivered} delivered, ${result.retried} retried, ${result.deadLettered} dead-lettered`,
|
|
765
|
+
requestId: drainCtx.requestId,
|
|
766
|
+
traceId: drainCtx.traceId,
|
|
767
|
+
details: result,
|
|
768
|
+
});
|
|
769
|
+
} catch (error) {
|
|
770
|
+
drainCtx.ports.logger?.error("Outbox drain devtools recording failed", {
|
|
771
|
+
error,
|
|
772
|
+
});
|
|
773
|
+
}
|
|
774
|
+
|
|
775
|
+
return outboxDrainJson(
|
|
776
|
+
{
|
|
777
|
+
ok: true,
|
|
778
|
+
result,
|
|
779
|
+
},
|
|
780
|
+
200,
|
|
781
|
+
headers,
|
|
782
|
+
);
|
|
783
|
+
} catch (error) {
|
|
784
|
+
ctx?.ports.logger?.error("Outbox drain failed", { error });
|
|
785
|
+
|
|
786
|
+
return outboxDrainJson(
|
|
787
|
+
{
|
|
788
|
+
ok: false,
|
|
789
|
+
error: "Outbox drain failed.",
|
|
790
|
+
},
|
|
791
|
+
500,
|
|
792
|
+
headers,
|
|
793
|
+
);
|
|
794
|
+
}
|
|
795
|
+
};
|
|
796
|
+
|
|
797
|
+
return {
|
|
798
|
+
GET: drainPendingOutbox,
|
|
799
|
+
POST: drainPendingOutbox,
|
|
800
|
+
};
|
|
801
|
+
}
|
|
802
|
+
|
|
803
|
+
/**
|
|
804
|
+
* Create a Beignet server adapted for Next.js.
|
|
805
|
+
*
|
|
806
|
+
* The returned `api` handler is intended for a catch-all route. Focused routes
|
|
807
|
+
* such as OpenAPI, Swagger UI, devtools, and public storage can use their own
|
|
808
|
+
* route helpers.
|
|
809
|
+
*/
|
|
459
810
|
export async function createNextServer<
|
|
460
811
|
Ctx,
|
|
461
812
|
Ports extends AnyPorts = AnyPorts,
|
|
@@ -466,17 +817,10 @@ export async function createNextServer<
|
|
|
466
817
|
): Promise<NextServer<Ctx, Ports & ProvidedPortsOfList<Providers>>> {
|
|
467
818
|
const runtime = await createServer(options);
|
|
468
819
|
|
|
469
|
-
const wrap = (handler: (req: HttpRequestLike) => Promise<HttpResponse>) => {
|
|
470
|
-
return async (req: Request) => {
|
|
471
|
-
const res = await handler(toRequestLike(req));
|
|
472
|
-
return toNextResponse(res);
|
|
473
|
-
};
|
|
474
|
-
};
|
|
475
|
-
|
|
476
820
|
return {
|
|
477
|
-
api:
|
|
821
|
+
api: createFetchHandler(runtime),
|
|
478
822
|
route: (contract) => ({
|
|
479
|
-
handle: (fn) =>
|
|
823
|
+
handle: (fn) => createFetchHandler(runtime.route(contract).handle(fn)),
|
|
480
824
|
}),
|
|
481
825
|
createContextFromNext: async () => {
|
|
482
826
|
const { cookies, headers } = await import("next/headers");
|