@beignet/core 0.0.23 → 0.0.25
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 +17 -0
- package/README.md +38 -6
- package/dist/client-only.d.ts +2 -0
- package/dist/client-only.d.ts.map +1 -1
- package/dist/client-only.js +2 -0
- package/dist/client-only.js.map +1 -1
- package/dist/providers/metadata.d.ts +2 -0
- package/dist/providers/metadata.d.ts.map +1 -1
- package/dist/providers/metadata.js +12 -0
- package/dist/providers/metadata.js.map +1 -1
- package/dist/server/hooks/cors.d.ts +4 -3
- package/dist/server/hooks/cors.d.ts.map +1 -1
- package/dist/server/hooks/cors.js +21 -16
- package/dist/server/hooks/cors.js.map +1 -1
- package/dist/server/hooks/rate-limit.d.ts +7 -6
- package/dist/server/hooks/rate-limit.d.ts.map +1 -1
- package/dist/server/hooks/rate-limit.js +4 -1
- package/dist/server/hooks/rate-limit.js.map +1 -1
- package/dist/server/server.d.ts +15 -0
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/server.js +82 -9
- package/dist/server/server.js.map +1 -1
- package/dist/server-only.d.ts +2 -0
- package/dist/server-only.d.ts.map +1 -1
- package/dist/server-only.js +2 -0
- package/dist/server-only.js.map +1 -1
- package/dist/uploads/index.d.ts +37 -1
- package/dist/uploads/index.d.ts.map +1 -1
- package/dist/uploads/index.js +127 -2
- package/dist/uploads/index.js.map +1 -1
- package/package.json +4 -2
- package/skills/app-architecture/SKILL.md +29 -2
- package/src/client-only.ts +2 -0
- package/src/providers/metadata.ts +23 -0
- package/src/server/hooks/cors.ts +36 -16
- package/src/server/hooks/rate-limit.ts +12 -6
- package/src/server/server.ts +130 -16
- package/src/server-only.ts +2 -0
- package/src/uploads/index.ts +209 -3
package/dist/uploads/index.js
CHANGED
|
@@ -27,6 +27,7 @@ export function defineUpload(name, options) {
|
|
|
27
27
|
maxFiles: options.file.maxFiles ?? 1,
|
|
28
28
|
visibility: options.file.visibility ?? "private",
|
|
29
29
|
},
|
|
30
|
+
access: options.access ?? "protected",
|
|
30
31
|
...(options.description !== undefined
|
|
31
32
|
? { description: options.description }
|
|
32
33
|
: {}),
|
|
@@ -110,6 +111,7 @@ export function createUploadRouter(options) {
|
|
|
110
111
|
providerName: "uploads",
|
|
111
112
|
watcher: "uploads",
|
|
112
113
|
});
|
|
114
|
+
const requestLimits = uploadRequestLimits(options.limits);
|
|
113
115
|
async function resolveCtx() {
|
|
114
116
|
return typeof options.ctx === "function"
|
|
115
117
|
? options.ctx()
|
|
@@ -366,6 +368,7 @@ export function createUploadRouter(options) {
|
|
|
366
368
|
const input = await readJsonBody(request, {
|
|
367
369
|
uploadName: requestOptions.uploadName,
|
|
368
370
|
action: "prepare",
|
|
371
|
+
maxBytes: requestLimits.jsonMaxBytes,
|
|
369
372
|
});
|
|
370
373
|
return jsonResponse(await prepare(requestOptions.uploadName, input));
|
|
371
374
|
}
|
|
@@ -373,9 +376,15 @@ export function createUploadRouter(options) {
|
|
|
373
376
|
const input = await readJsonBody(request, {
|
|
374
377
|
uploadName: requestOptions.uploadName,
|
|
375
378
|
action: "complete",
|
|
379
|
+
maxBytes: requestLimits.jsonMaxBytes,
|
|
376
380
|
});
|
|
377
381
|
return jsonResponse(await complete(requestOptions.uploadName, input));
|
|
378
382
|
}
|
|
383
|
+
assertUploadContentLengthWithinLimit(request.headers, {
|
|
384
|
+
uploadName: requestOptions.uploadName,
|
|
385
|
+
action: "upload",
|
|
386
|
+
maxBytes: requestLimits.multipartMaxBytes,
|
|
387
|
+
});
|
|
379
388
|
const formData = await request.formData();
|
|
380
389
|
return jsonResponse(await upload(requestOptions.uploadName, {
|
|
381
390
|
formData,
|
|
@@ -387,11 +396,95 @@ export function createUploadRouter(options) {
|
|
|
387
396
|
},
|
|
388
397
|
};
|
|
389
398
|
}
|
|
399
|
+
const DEFAULT_UPLOAD_JSON_MAX_BYTES = 256 * 1024;
|
|
400
|
+
const DEFAULT_UPLOAD_MULTIPART_MAX_BYTES = 25 * 1024 * 1024;
|
|
401
|
+
function uploadRequestLimits(limits) {
|
|
402
|
+
return {
|
|
403
|
+
jsonMaxBytes: positiveLimit(limits?.jsonMaxBytes, DEFAULT_UPLOAD_JSON_MAX_BYTES, "limits.jsonMaxBytes"),
|
|
404
|
+
multipartMaxBytes: positiveLimit(limits?.multipartMaxBytes, DEFAULT_UPLOAD_MULTIPART_MAX_BYTES, "limits.multipartMaxBytes"),
|
|
405
|
+
};
|
|
406
|
+
}
|
|
407
|
+
function positiveLimit(value, fallback, name) {
|
|
408
|
+
const limit = value ?? fallback;
|
|
409
|
+
if (!Number.isFinite(limit) || limit <= 0) {
|
|
410
|
+
throw new Error(`createUploadRouter ${name} must be a positive number.`);
|
|
411
|
+
}
|
|
412
|
+
return limit;
|
|
413
|
+
}
|
|
414
|
+
function assertUploadContentLengthWithinLimit(headers, context) {
|
|
415
|
+
const contentLength = headers.get("content-length");
|
|
416
|
+
if (contentLength === null)
|
|
417
|
+
return;
|
|
418
|
+
const actualBytes = Number(contentLength);
|
|
419
|
+
if (!Number.isFinite(actualBytes) || actualBytes < 0)
|
|
420
|
+
return;
|
|
421
|
+
if (actualBytes > context.maxBytes) {
|
|
422
|
+
throw new UploadError({
|
|
423
|
+
code: "UPLOAD_BODY_TOO_LARGE",
|
|
424
|
+
status: 413,
|
|
425
|
+
message: `Upload "${context.uploadName}" ${context.action} body is too large.`,
|
|
426
|
+
details: {
|
|
427
|
+
maxBytes: context.maxBytes,
|
|
428
|
+
actualBytes,
|
|
429
|
+
},
|
|
430
|
+
});
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
async function readLimitedRequestText(request, context) {
|
|
434
|
+
assertUploadContentLengthWithinLimit(request.headers, context);
|
|
435
|
+
if (!request.body) {
|
|
436
|
+
const text = await request.text();
|
|
437
|
+
const actualBytes = new TextEncoder().encode(text).byteLength;
|
|
438
|
+
if (actualBytes > context.maxBytes) {
|
|
439
|
+
throw new UploadError({
|
|
440
|
+
code: "UPLOAD_BODY_TOO_LARGE",
|
|
441
|
+
status: 413,
|
|
442
|
+
message: `Upload "${context.uploadName}" ${context.action} body is too large.`,
|
|
443
|
+
details: {
|
|
444
|
+
maxBytes: context.maxBytes,
|
|
445
|
+
actualBytes,
|
|
446
|
+
},
|
|
447
|
+
});
|
|
448
|
+
}
|
|
449
|
+
return text;
|
|
450
|
+
}
|
|
451
|
+
const reader = request.body.getReader();
|
|
452
|
+
const decoder = new TextDecoder();
|
|
453
|
+
let actualBytes = 0;
|
|
454
|
+
let text = "";
|
|
455
|
+
try {
|
|
456
|
+
while (true) {
|
|
457
|
+
const result = await reader.read();
|
|
458
|
+
if (result.done)
|
|
459
|
+
break;
|
|
460
|
+
actualBytes += result.value.byteLength;
|
|
461
|
+
if (actualBytes > context.maxBytes) {
|
|
462
|
+
throw new UploadError({
|
|
463
|
+
code: "UPLOAD_BODY_TOO_LARGE",
|
|
464
|
+
status: 413,
|
|
465
|
+
message: `Upload "${context.uploadName}" ${context.action} body is too large.`,
|
|
466
|
+
details: {
|
|
467
|
+
maxBytes: context.maxBytes,
|
|
468
|
+
actualBytes,
|
|
469
|
+
},
|
|
470
|
+
});
|
|
471
|
+
}
|
|
472
|
+
text += decoder.decode(result.value, { stream: true });
|
|
473
|
+
}
|
|
474
|
+
text += decoder.decode();
|
|
475
|
+
}
|
|
476
|
+
finally {
|
|
477
|
+
reader.releaseLock();
|
|
478
|
+
}
|
|
479
|
+
return text;
|
|
480
|
+
}
|
|
390
481
|
async function readJsonBody(request, context) {
|
|
391
482
|
try {
|
|
392
|
-
return await request
|
|
483
|
+
return JSON.parse(await readLimitedRequestText(request, context));
|
|
393
484
|
}
|
|
394
|
-
catch {
|
|
485
|
+
catch (error) {
|
|
486
|
+
if (error instanceof UploadError)
|
|
487
|
+
throw error;
|
|
395
488
|
throw new UploadError({
|
|
396
489
|
code: "INVALID_UPLOAD_BODY",
|
|
397
490
|
status: 400,
|
|
@@ -523,6 +616,15 @@ function assertFiles(upload, files) {
|
|
|
523
616
|
}
|
|
524
617
|
}
|
|
525
618
|
async function assertAuthorized(upload, args) {
|
|
619
|
+
if (!upload.authorize) {
|
|
620
|
+
if ((upload.access ?? "protected") === "public")
|
|
621
|
+
return;
|
|
622
|
+
throw new UploadError({
|
|
623
|
+
code: "UNAUTHORIZED_UPLOAD",
|
|
624
|
+
status: 403,
|
|
625
|
+
message: `Upload "${upload.name}" must declare authorize(...) or set access: "public".`,
|
|
626
|
+
});
|
|
627
|
+
}
|
|
526
628
|
const result = await upload.authorize?.(args);
|
|
527
629
|
const denied = result === false ||
|
|
528
630
|
(typeof result === "object" &&
|
|
@@ -541,6 +643,29 @@ async function assertAuthorized(upload, args) {
|
|
|
541
643
|
}
|
|
542
644
|
function assertStoredObject(upload, file, object) {
|
|
543
645
|
assertFiles(upload, [file]);
|
|
646
|
+
if (upload.file.maxSizeBytes !== undefined &&
|
|
647
|
+
object.size > upload.file.maxSizeBytes) {
|
|
648
|
+
throw new UploadError({
|
|
649
|
+
code: "INVALID_UPLOAD_FILE",
|
|
650
|
+
status: 413,
|
|
651
|
+
message: `Uploaded object "${object.key}" exceeds the maximum file size.`,
|
|
652
|
+
details: {
|
|
653
|
+
size: object.size,
|
|
654
|
+
maxSizeBytes: upload.file.maxSizeBytes,
|
|
655
|
+
},
|
|
656
|
+
});
|
|
657
|
+
}
|
|
658
|
+
if (object.size !== file.size) {
|
|
659
|
+
throw new UploadError({
|
|
660
|
+
code: "INVALID_UPLOAD_FILE",
|
|
661
|
+
status: 422,
|
|
662
|
+
message: `Uploaded object "${object.key}" size does not match the prepared file.`,
|
|
663
|
+
details: {
|
|
664
|
+
expected: file.size,
|
|
665
|
+
actual: object.size,
|
|
666
|
+
},
|
|
667
|
+
});
|
|
668
|
+
}
|
|
544
669
|
if (object.contentType &&
|
|
545
670
|
file.contentType &&
|
|
546
671
|
object.contentType !== file.contentType) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/uploads/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/uploads/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@beignet/core",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.25",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Core framework primitives for Beignet",
|
|
6
6
|
"exports": {
|
|
@@ -182,7 +182,9 @@
|
|
|
182
182
|
"bugs": "https://github.com/taylorbryant/beignet/issues",
|
|
183
183
|
"sideEffects": [
|
|
184
184
|
"./dist/client-only.js",
|
|
185
|
-
"./dist/server-only.js"
|
|
185
|
+
"./dist/server-only.js",
|
|
186
|
+
"./src/client-only.ts",
|
|
187
|
+
"./src/server-only.ts"
|
|
186
188
|
],
|
|
187
189
|
"publishConfig": {
|
|
188
190
|
"access": "public"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: app-architecture
|
|
3
|
-
description: "Build Beignet app feature slices with @beignet/core primitives: schemas, contracts, use cases, app errors, ports, policies, context, providers, jobs, schedules, tasks, outbox, mail, uploads, and
|
|
3
|
+
description: "Build Beignet app feature slices with @beignet/core primitives: schemas, contracts, use cases, app errors, ports, policies, context, providers, domain events, listeners, jobs, schedules, tasks, notifications, outbox, mail, uploads, seeds, tests, and explicit core subpath imports. Use when adding or fixing Beignet application behavior, dependency boundaries, app-facing ports, authorization, workflow primitives, or app-bound lib builders."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Beignet App Architecture
|
|
@@ -26,15 +26,25 @@ features/<feature>/
|
|
|
26
26
|
schemas.ts
|
|
27
27
|
routes.ts
|
|
28
28
|
use-cases/
|
|
29
|
+
domain/
|
|
29
30
|
ports.ts
|
|
30
31
|
policy.ts
|
|
31
32
|
client/
|
|
32
33
|
components/
|
|
34
|
+
jobs/
|
|
35
|
+
listeners/
|
|
36
|
+
notifications/
|
|
37
|
+
schedules/
|
|
38
|
+
tasks/
|
|
39
|
+
uploads/
|
|
40
|
+
seeds/
|
|
33
41
|
tests/
|
|
34
42
|
factories/
|
|
35
43
|
```
|
|
36
44
|
|
|
37
|
-
Small features do not need every file.
|
|
45
|
+
Small features do not need every file. The starter ships a lean subset;
|
|
46
|
+
workflow folders, `lib/` builders, and central registries appear when a
|
|
47
|
+
generator or deliberate feature change introduces that concern.
|
|
38
48
|
|
|
39
49
|
## Core Boundaries
|
|
40
50
|
|
|
@@ -129,17 +139,34 @@ feature client modules.
|
|
|
129
139
|
Feature-owned workflow definitions belong under the feature:
|
|
130
140
|
|
|
131
141
|
```txt
|
|
142
|
+
features/<feature>/domain/events/
|
|
132
143
|
features/<feature>/jobs/
|
|
144
|
+
features/<feature>/listeners/
|
|
133
145
|
features/<feature>/schedules/
|
|
134
146
|
features/<feature>/notifications/
|
|
135
147
|
features/<feature>/tasks/
|
|
136
148
|
features/<feature>/uploads/
|
|
149
|
+
features/<feature>/seeds/
|
|
137
150
|
```
|
|
138
151
|
|
|
139
152
|
Small existing apps may use feature-root `jobs.ts` or `schedules.ts`; follow
|
|
140
153
|
local style unless migrating deliberately. Central registries and service
|
|
141
154
|
contexts live under `server/`.
|
|
142
155
|
|
|
156
|
+
Context-free declarations stay top-level, such as `defineEvent(...)`.
|
|
157
|
+
Context-bound definitions should use app-bound builders created once in `lib/`,
|
|
158
|
+
for example `createJobs<AppContext>()`, `createListeners<AppContext>()`,
|
|
159
|
+
`createSchedules<AppContext>()`, `createNotifications<AppContext>()`, and
|
|
160
|
+
`createTasks<AppContext>()`.
|
|
161
|
+
|
|
162
|
+
Register workflow artifacts explicitly:
|
|
163
|
+
|
|
164
|
+
- listeners through `registerListeners(...)` in provider or infra wiring
|
|
165
|
+
- schedules in `server/schedules.ts`
|
|
166
|
+
- tasks in `server/tasks.ts`
|
|
167
|
+
- outbox events and jobs in `server/outbox.ts`
|
|
168
|
+
- seeds through the app's seed entrypoint, usually `infra/db/seed.ts`
|
|
169
|
+
|
|
143
170
|
Providers should not start unbounded background loops on server boot. Expose
|
|
144
171
|
cron routes, worker entrypoints, task runners, schedule runners, or outbox
|
|
145
172
|
drains instead.
|
package/src/client-only.ts
CHANGED
|
@@ -3,5 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Host frameworks may provide their own runtime-only enforcement. This marker
|
|
5
5
|
* is intentionally a no-op so Beignet can enforce intent through `beignet lint`.
|
|
6
|
+
* Import it for side effects at the top of client-only modules:
|
|
7
|
+
* `import "@beignet/core/client-only";`.
|
|
6
8
|
*/
|
|
7
9
|
export const beignetClientOnly = true;
|
|
@@ -24,6 +24,7 @@ export type ProviderPackageVariantMetadata = {
|
|
|
24
24
|
displayName?: string;
|
|
25
25
|
env?: readonly string[];
|
|
26
26
|
requiredEnv?: readonly string[];
|
|
27
|
+
requiredTables?: readonly string[];
|
|
27
28
|
registration?: ProviderPackageRegistrationMetadata;
|
|
28
29
|
};
|
|
29
30
|
|
|
@@ -33,6 +34,7 @@ export type ProviderPackageMetadata = {
|
|
|
33
34
|
appPorts?: readonly ProviderPackagePortMetadata[];
|
|
34
35
|
env?: readonly string[];
|
|
35
36
|
requiredEnv?: readonly string[];
|
|
37
|
+
requiredTables?: readonly string[];
|
|
36
38
|
registration?: ProviderPackageRegistrationMetadata;
|
|
37
39
|
variants?: readonly ProviderPackageVariantMetadata[];
|
|
38
40
|
watchers?: readonly string[];
|
|
@@ -100,6 +102,13 @@ export function parseProviderPackageMetadata(
|
|
|
100
102
|
}
|
|
101
103
|
}
|
|
102
104
|
|
|
105
|
+
const requiredTables = parseStringArray(
|
|
106
|
+
input.requiredTables,
|
|
107
|
+
"beignet.provider.requiredTables",
|
|
108
|
+
issues,
|
|
109
|
+
);
|
|
110
|
+
if (requiredTables !== undefined) metadata.requiredTables = requiredTables;
|
|
111
|
+
|
|
103
112
|
const watchers = parseStringArray(
|
|
104
113
|
input.watchers,
|
|
105
114
|
"beignet.provider.watchers",
|
|
@@ -135,6 +144,13 @@ export function parseProviderPackageMetadata(
|
|
|
135
144
|
"must not be set when beignet.provider.variants is present; declare registration on each variant instead",
|
|
136
145
|
});
|
|
137
146
|
}
|
|
147
|
+
if (input.requiredTables !== undefined) {
|
|
148
|
+
issues.push({
|
|
149
|
+
path: "beignet.provider.requiredTables",
|
|
150
|
+
message:
|
|
151
|
+
"must not be set when beignet.provider.variants is present; declare requiredTables on each variant instead",
|
|
152
|
+
});
|
|
153
|
+
}
|
|
138
154
|
}
|
|
139
155
|
|
|
140
156
|
if (issues.length > 0) {
|
|
@@ -275,6 +291,12 @@ function parseVariants(
|
|
|
275
291
|
}
|
|
276
292
|
}
|
|
277
293
|
|
|
294
|
+
const requiredTables = parseStringArray(
|
|
295
|
+
entry.requiredTables,
|
|
296
|
+
`${entryPath}.requiredTables`,
|
|
297
|
+
issues,
|
|
298
|
+
);
|
|
299
|
+
|
|
278
300
|
const registration = parseRegistration(
|
|
279
301
|
entry.registration,
|
|
280
302
|
issues,
|
|
@@ -286,6 +308,7 @@ function parseVariants(
|
|
|
286
308
|
if (displayName !== undefined) variant.displayName = displayName;
|
|
287
309
|
if (env !== undefined) variant.env = env;
|
|
288
310
|
if (requiredEnv !== undefined) variant.requiredEnv = requiredEnv;
|
|
311
|
+
if (requiredTables !== undefined) variant.requiredTables = requiredTables;
|
|
289
312
|
if (registration !== undefined) variant.registration = registration;
|
|
290
313
|
parsed.push(variant);
|
|
291
314
|
}
|
package/src/server/hooks/cors.ts
CHANGED
|
@@ -9,7 +9,8 @@ import type { HttpRequestLike, ServerHook } from "../types.js";
|
|
|
9
9
|
*/
|
|
10
10
|
export interface CorsConfig {
|
|
11
11
|
/**
|
|
12
|
-
* Allowed origins. Use `"*"`
|
|
12
|
+
* Allowed origins. Use `"*"` only for non-credentialed requests.
|
|
13
|
+
* Credentialed CORS requires an explicit origin allow-list.
|
|
13
14
|
*/
|
|
14
15
|
origins?: string[] | "*";
|
|
15
16
|
/**
|
|
@@ -33,6 +34,27 @@ const DEFAULT_CORS: Required<CorsConfig> = {
|
|
|
33
34
|
credentials: false,
|
|
34
35
|
};
|
|
35
36
|
|
|
37
|
+
function resolveCorsConfig(config: CorsConfig): Required<CorsConfig> {
|
|
38
|
+
const resolved = {
|
|
39
|
+
origins: config.origins ?? DEFAULT_CORS.origins,
|
|
40
|
+
methods: config.methods ?? DEFAULT_CORS.methods,
|
|
41
|
+
headers: config.headers ?? DEFAULT_CORS.headers,
|
|
42
|
+
credentials: config.credentials ?? DEFAULT_CORS.credentials,
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
if (
|
|
46
|
+
resolved.credentials &&
|
|
47
|
+
(resolved.origins === "*" ||
|
|
48
|
+
(Array.isArray(resolved.origins) && resolved.origins.includes("*")))
|
|
49
|
+
) {
|
|
50
|
+
throw new Error(
|
|
51
|
+
'Credentialed CORS cannot use a wildcard origin. Use origins: ["https://app.example.com"] with credentials: true.',
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
return resolved;
|
|
56
|
+
}
|
|
57
|
+
|
|
36
58
|
function appendVaryOrigin(headers: Record<string, string>): void {
|
|
37
59
|
const varyKey =
|
|
38
60
|
Object.keys(headers).find((key) => key.toLowerCase() === "vary") ?? "Vary";
|
|
@@ -46,26 +68,22 @@ function appendVaryOrigin(headers: Record<string, string>): void {
|
|
|
46
68
|
/**
|
|
47
69
|
* Apply CORS response headers to a mutable header record.
|
|
48
70
|
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
71
|
+
* Credentialed CORS rejects wildcard origins. Use an explicit origin allow-list
|
|
72
|
+
* when cookies or authorization headers are allowed cross-origin.
|
|
51
73
|
*/
|
|
52
74
|
export function applyCorsHeaders(
|
|
53
75
|
headers: Record<string, string>,
|
|
54
76
|
req: HttpRequestLike,
|
|
55
77
|
corsConfig: CorsConfig,
|
|
56
78
|
): void {
|
|
57
|
-
const
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
79
|
+
const {
|
|
80
|
+
origins,
|
|
81
|
+
methods,
|
|
82
|
+
headers: allowedHeaders,
|
|
83
|
+
credentials,
|
|
84
|
+
} = resolveCorsConfig(corsConfig);
|
|
61
85
|
|
|
62
|
-
if (
|
|
63
|
-
const requestOrigin = req.headers.get("Origin");
|
|
64
|
-
if (requestOrigin) {
|
|
65
|
-
headers["Access-Control-Allow-Origin"] = requestOrigin;
|
|
66
|
-
appendVaryOrigin(headers);
|
|
67
|
-
}
|
|
68
|
-
} else if (origins === "*") {
|
|
86
|
+
if (origins === "*") {
|
|
69
87
|
headers["Access-Control-Allow-Origin"] = "*";
|
|
70
88
|
} else if (Array.isArray(origins)) {
|
|
71
89
|
const requestOrigin = req.headers.get("Origin");
|
|
@@ -90,12 +108,14 @@ export function applyCorsHeaders(
|
|
|
90
108
|
* decorated in `beforeSend`.
|
|
91
109
|
*/
|
|
92
110
|
export function createCorsHooks<Ctx>(config: CorsConfig): ServerHook<Ctx> {
|
|
111
|
+
const corsConfig = resolveCorsConfig(config);
|
|
112
|
+
|
|
93
113
|
return {
|
|
94
114
|
name: "cors",
|
|
95
115
|
onRequest: ({ req }) => {
|
|
96
116
|
if (req.method !== "OPTIONS") return undefined;
|
|
97
117
|
const headers: Record<string, string> = {};
|
|
98
|
-
applyCorsHeaders(headers, req,
|
|
118
|
+
applyCorsHeaders(headers, req, corsConfig);
|
|
99
119
|
return {
|
|
100
120
|
status: 204,
|
|
101
121
|
headers,
|
|
@@ -104,7 +124,7 @@ export function createCorsHooks<Ctx>(config: CorsConfig): ServerHook<Ctx> {
|
|
|
104
124
|
},
|
|
105
125
|
beforeSend: ({ req, response }) => {
|
|
106
126
|
const headers = { ...(response.headers ?? {}) };
|
|
107
|
-
applyCorsHeaders(headers, req,
|
|
127
|
+
applyCorsHeaders(headers, req, corsConfig);
|
|
108
128
|
return {
|
|
109
129
|
...response,
|
|
110
130
|
headers,
|
|
@@ -31,9 +31,10 @@ type EarlyRateLimitScope = Exclude<RateLimitScope, "user">;
|
|
|
31
31
|
/**
|
|
32
32
|
* Strategy for resolving the client IP used by `ip`-scoped limits.
|
|
33
33
|
*
|
|
34
|
-
* - `"
|
|
35
|
-
*
|
|
36
|
-
*
|
|
34
|
+
* - `"none"` (default): do not trust request headers for IP resolution.
|
|
35
|
+
* - `"x-forwarded-for-last"`: the last `x-forwarded-for` entry. Use this only
|
|
36
|
+
* when the app is always behind a trusted reverse proxy that appends the
|
|
37
|
+
* socket address.
|
|
37
38
|
* - `"x-forwarded-for-first"`: the first `x-forwarded-for` entry. This value
|
|
38
39
|
* is client-controlled, so only use it when a trusted edge normalizes the
|
|
39
40
|
* header before it reaches the app.
|
|
@@ -41,6 +42,7 @@ type EarlyRateLimitScope = Exclude<RateLimitScope, "user">;
|
|
|
41
42
|
* platform-specific headers such as `cf-connecting-ip`.
|
|
42
43
|
*/
|
|
43
44
|
export type RateLimitIpSource =
|
|
45
|
+
| "none"
|
|
44
46
|
| "x-forwarded-for-last"
|
|
45
47
|
| "x-forwarded-for-first"
|
|
46
48
|
| ((req: HttpRequestLike) => string | undefined);
|
|
@@ -71,8 +73,8 @@ export interface RateLimitOptions<Ctx> {
|
|
|
71
73
|
/**
|
|
72
74
|
* Resolve the client IP for `ip`-scoped limits.
|
|
73
75
|
*
|
|
74
|
-
* Defaults to `"
|
|
75
|
-
*
|
|
76
|
+
* Defaults to `"none"`. Pass an explicit trusted proxy strategy or a
|
|
77
|
+
* function for platform-specific headers.
|
|
76
78
|
*/
|
|
77
79
|
ipSource?: RateLimitIpSource;
|
|
78
80
|
}
|
|
@@ -93,6 +95,10 @@ function resolveClientIp(
|
|
|
93
95
|
return ipSource(req) || undefined;
|
|
94
96
|
}
|
|
95
97
|
|
|
98
|
+
if (ipSource === "none") {
|
|
99
|
+
return undefined;
|
|
100
|
+
}
|
|
101
|
+
|
|
96
102
|
const entries = parseForwardedFor(req);
|
|
97
103
|
if (entries.length === 0) {
|
|
98
104
|
return undefined;
|
|
@@ -215,7 +221,7 @@ async function enforceRateLimit(
|
|
|
215
221
|
export function createRateLimitHooks<Ctx extends CtxWithRateLimit>(
|
|
216
222
|
options: RateLimitOptions<Ctx> = {},
|
|
217
223
|
): ServerHook<Ctx, RateLimitPorts> {
|
|
218
|
-
const ipSource = options.ipSource ?? "
|
|
224
|
+
const ipSource = options.ipSource ?? "none";
|
|
219
225
|
const getClientIp = (req: HttpRequestLike) => resolveClientIp(req, ipSource);
|
|
220
226
|
|
|
221
227
|
return {
|