@catmint/adapter-vercel 0.0.0-prealpha.4 → 0.0.0-prealpha.6
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/dist/function-gen.d.ts +1 -1
- package/dist/function-gen.d.ts.map +1 -1
- package/dist/function-gen.js +116 -15
- package/dist/function-gen.js.map +1 -1
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/function-gen.d.ts
CHANGED
|
@@ -36,6 +36,6 @@ export declare function generateVcConfig(runtime: "nodejs" | "edge", regions?: s
|
|
|
36
36
|
* function registers a platform cache adapter that delegates invalidation
|
|
37
37
|
* to Vercel's on-demand ISR revalidation API.
|
|
38
38
|
*/
|
|
39
|
-
export declare function generateServerlessFunction(manifest: AppManifest, runtime: "nodejs" | "edge"): string;
|
|
39
|
+
export declare function generateServerlessFunction(manifest: AppManifest, runtime: "nodejs" | "edge", maxBodySize: number, headerPreset: "baseline" | "none"): string;
|
|
40
40
|
export {};
|
|
41
41
|
//# sourceMappingURL=function-gen.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"function-gen.d.ts","sourceRoot":"","sources":["../src/function-gen.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD;;GAEG;AACH,UAAU,cAAc;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,QAAQ,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,UAAU,YAAY;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,KAAK,QAAQ,GAAG,cAAc,GAAG,YAAY,CAAC;AAmF9C;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,QAAQ,GAAG,MAAM,EAC1B,OAAO,CAAC,EAAE,MAAM,EAAE,GACjB,QAAQ,CAqBV;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,WAAW,EACrB,OAAO,EAAE,QAAQ,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"function-gen.d.ts","sourceRoot":"","sources":["../src/function-gen.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD;;GAEG;AACH,UAAU,cAAc;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,QAAQ,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,UAAU,YAAY;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,KAAK,QAAQ,GAAG,cAAc,GAAG,YAAY,CAAC;AAmF9C;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,QAAQ,GAAG,MAAM,EAC1B,OAAO,CAAC,EAAE,MAAM,EAAE,GACjB,QAAQ,CAqBV;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,WAAW,EACrB,OAAO,EAAE,QAAQ,GAAG,MAAM,EAC1B,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,UAAU,GAAG,MAAM,GAChC,MAAM,CAKR"}
|
package/dist/function-gen.js
CHANGED
|
@@ -112,22 +112,32 @@ export function generateVcConfig(runtime, regions) {
|
|
|
112
112
|
* function registers a platform cache adapter that delegates invalidation
|
|
113
113
|
* to Vercel's on-demand ISR revalidation API.
|
|
114
114
|
*/
|
|
115
|
-
export function generateServerlessFunction(manifest, runtime) {
|
|
115
|
+
export function generateServerlessFunction(manifest, runtime, maxBodySize, headerPreset) {
|
|
116
116
|
if (runtime === "edge") {
|
|
117
|
-
return generateEdgeFunction(manifest);
|
|
117
|
+
return generateEdgeFunction(manifest, maxBodySize, headerPreset);
|
|
118
118
|
}
|
|
119
|
-
return generateNodejsFunction(manifest);
|
|
119
|
+
return generateNodejsFunction(manifest, maxBodySize, headerPreset);
|
|
120
120
|
}
|
|
121
|
-
function generateNodejsFunction(manifest) {
|
|
121
|
+
function generateNodejsFunction(manifest, maxBodySize, headerPreset) {
|
|
122
122
|
const cacheAdapterSetup = generateCacheAdapterSetup(manifest);
|
|
123
123
|
return `// Auto-generated by @catmint/adapter-vercel (Node.js runtime) — do not edit
|
|
124
124
|
import * as rscEntry from "./rsc/index.js";
|
|
125
125
|
import * as ssrEntry from "./ssr/index.js";
|
|
126
126
|
${cacheAdapterSetup}
|
|
127
127
|
function collectBody(req) {
|
|
128
|
+
const MAX_BODY_SIZE = ${maxBodySize};
|
|
128
129
|
return new Promise((resolve, reject) => {
|
|
129
130
|
const chunks = [];
|
|
130
|
-
|
|
131
|
+
let totalLength = 0;
|
|
132
|
+
req.on("data", (chunk) => {
|
|
133
|
+
totalLength += chunk.length;
|
|
134
|
+
if (totalLength > MAX_BODY_SIZE) {
|
|
135
|
+
req.destroy();
|
|
136
|
+
reject(new Error("Request body too large"));
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
chunks.push(chunk);
|
|
140
|
+
});
|
|
131
141
|
req.on("end", () => resolve(Buffer.concat(chunks)));
|
|
132
142
|
req.on("error", reject);
|
|
133
143
|
});
|
|
@@ -216,6 +226,13 @@ function __catmintErrorPage(statusCode, detail) {
|
|
|
216
226
|
}
|
|
217
227
|
|
|
218
228
|
export default async function handler(req, res) {
|
|
229
|
+
${headerPreset === "baseline"
|
|
230
|
+
? ` // Baseline security headers
|
|
231
|
+
res.setHeader("X-Content-Type-Options", "nosniff");
|
|
232
|
+
res.setHeader("Referrer-Policy", "strict-origin-when-cross-origin");
|
|
233
|
+
res.setHeader("X-Frame-Options", "SAMEORIGIN");
|
|
234
|
+
`
|
|
235
|
+
: ""}
|
|
219
236
|
const url = new URL(req.url || "/", \`https://\${req.headers.host || "localhost"}\`);
|
|
220
237
|
const pathname = url.pathname;
|
|
221
238
|
const method = (req.method || "GET").toUpperCase();
|
|
@@ -223,6 +240,35 @@ export default async function handler(req, res) {
|
|
|
223
240
|
try {
|
|
224
241
|
// 1. Handle server function RPC calls (/__catmint/fn/*)
|
|
225
242
|
if (pathname.startsWith("/__catmint/fn/") && ssrEntry.handleServerFn) {
|
|
243
|
+
// Enforce POST method
|
|
244
|
+
if (method !== "POST") {
|
|
245
|
+
res.statusCode = 405;
|
|
246
|
+
res.setHeader("Content-Type", "application/json");
|
|
247
|
+
res.end(JSON.stringify({ error: "Method " + method + " not allowed, expected POST" }));
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
// Enforce Content-Type: application/json
|
|
252
|
+
const ct = (req.headers["content-type"] || "").toLowerCase();
|
|
253
|
+
if (ct && !ct.startsWith("application/json")) {
|
|
254
|
+
res.statusCode = 415;
|
|
255
|
+
res.setHeader("Content-Type", "application/json");
|
|
256
|
+
res.end(JSON.stringify({ error: "Unsupported Content-Type, expected application/json" }));
|
|
257
|
+
return;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
// Validate Origin header
|
|
261
|
+
const origin = req.headers["origin"];
|
|
262
|
+
if (origin) {
|
|
263
|
+
const expectedHost = req.headers.host || "localhost";
|
|
264
|
+
if (origin !== \`https://\${expectedHost}\` && origin !== \`http://\${expectedHost}\`) {
|
|
265
|
+
res.statusCode = 403;
|
|
266
|
+
res.setHeader("Content-Type", "application/json");
|
|
267
|
+
res.end(JSON.stringify({ error: "Origin not allowed" }));
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
226
272
|
const body = await collectBody(req);
|
|
227
273
|
let parsed;
|
|
228
274
|
try {
|
|
@@ -336,7 +382,7 @@ export default async function handler(req, res) {
|
|
|
336
382
|
}
|
|
337
383
|
`;
|
|
338
384
|
}
|
|
339
|
-
function generateEdgeFunction(manifest) {
|
|
385
|
+
function generateEdgeFunction(manifest, maxBodySize, headerPreset) {
|
|
340
386
|
const cacheAdapterSetup = generateCacheAdapterSetup(manifest);
|
|
341
387
|
return `// Auto-generated by @catmint/adapter-vercel (Edge runtime) — do not edit
|
|
342
388
|
import * as rscEntry from "./rsc/index.js";
|
|
@@ -407,27 +453,82 @@ export default async function handler(request) {
|
|
|
407
453
|
const pathname = url.pathname;
|
|
408
454
|
const method = request.method.toUpperCase();
|
|
409
455
|
|
|
456
|
+
// Helper to create responses${headerPreset === "baseline" ? " with baseline security headers" : ""}
|
|
457
|
+
function secureResponse(body, init = {}) {
|
|
458
|
+
const headers = new Headers(init.headers || {});
|
|
459
|
+
${headerPreset === "baseline"
|
|
460
|
+
? ` headers.set("X-Content-Type-Options", "nosniff");
|
|
461
|
+
headers.set("Referrer-Policy", "strict-origin-when-cross-origin");
|
|
462
|
+
headers.set("X-Frame-Options", "SAMEORIGIN");
|
|
463
|
+
`
|
|
464
|
+
: ""} return new Response(body, { ...init, headers });
|
|
465
|
+
}
|
|
466
|
+
|
|
410
467
|
try {
|
|
411
468
|
// 1. Handle server function RPC calls (/__catmint/fn/*)
|
|
412
469
|
if (pathname.startsWith("/__catmint/fn/") && ssrEntry.handleServerFn) {
|
|
470
|
+
// Enforce POST method
|
|
471
|
+
if (method !== "POST") {
|
|
472
|
+
return secureResponse(
|
|
473
|
+
JSON.stringify({ error: "Method " + method + " not allowed, expected POST" }),
|
|
474
|
+
{ status: 405, headers: { "Content-Type": "application/json" } },
|
|
475
|
+
);
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
// Enforce Content-Type: application/json
|
|
479
|
+
const ct = (request.headers.get("content-type") || "").toLowerCase();
|
|
480
|
+
if (ct && !ct.startsWith("application/json")) {
|
|
481
|
+
return secureResponse(
|
|
482
|
+
JSON.stringify({ error: "Unsupported Content-Type, expected application/json" }),
|
|
483
|
+
{ status: 415, headers: { "Content-Type": "application/json" } },
|
|
484
|
+
);
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
// Validate Origin header
|
|
488
|
+
const origin = request.headers.get("origin");
|
|
489
|
+
if (origin) {
|
|
490
|
+
const expectedOrigin = url.origin;
|
|
491
|
+
if (origin !== expectedOrigin) {
|
|
492
|
+
return secureResponse(
|
|
493
|
+
JSON.stringify({ error: "Origin not allowed" }),
|
|
494
|
+
{ status: 403, headers: { "Content-Type": "application/json" } },
|
|
495
|
+
);
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
// Read body with size limit
|
|
500
|
+
const MAX_BODY_SIZE = ${maxBodySize};
|
|
501
|
+
const contentLength = parseInt(request.headers.get("content-length") || "0", 10);
|
|
502
|
+
if (contentLength > MAX_BODY_SIZE) {
|
|
503
|
+
return secureResponse(
|
|
504
|
+
JSON.stringify({ error: "Request body too large" }),
|
|
505
|
+
{ status: 413, headers: { "Content-Type": "application/json" } },
|
|
506
|
+
);
|
|
507
|
+
}
|
|
413
508
|
const bodyText = await request.text();
|
|
509
|
+
if (bodyText.length > MAX_BODY_SIZE) {
|
|
510
|
+
return secureResponse(
|
|
511
|
+
JSON.stringify({ error: "Request body too large" }),
|
|
512
|
+
{ status: 413, headers: { "Content-Type": "application/json" } },
|
|
513
|
+
);
|
|
514
|
+
}
|
|
414
515
|
let parsed;
|
|
415
516
|
try {
|
|
416
517
|
parsed = bodyText.length > 0 ? JSON.parse(bodyText) : undefined;
|
|
417
518
|
} catch {
|
|
418
|
-
return
|
|
519
|
+
return secureResponse(
|
|
419
520
|
JSON.stringify({ error: "Invalid JSON body" }),
|
|
420
521
|
{ status: 400, headers: { "Content-Type": "application/json" } },
|
|
421
522
|
);
|
|
422
523
|
}
|
|
423
524
|
const result = await ssrEntry.handleServerFn(pathname, parsed);
|
|
424
525
|
if (result) {
|
|
425
|
-
return
|
|
526
|
+
return secureResponse(JSON.stringify(result.result), {
|
|
426
527
|
status: 200,
|
|
427
528
|
headers: { "Content-Type": "application/json" },
|
|
428
529
|
});
|
|
429
530
|
}
|
|
430
|
-
return
|
|
531
|
+
return secureResponse(
|
|
431
532
|
JSON.stringify({ error: "Server function not found" }),
|
|
432
533
|
{ status: 404, headers: { "Content-Type": "application/json" } },
|
|
433
534
|
);
|
|
@@ -437,7 +538,7 @@ export default async function handler(request) {
|
|
|
437
538
|
if (pathname === "/__catmint/rsc" && method === "GET" && rscEntry.render) {
|
|
438
539
|
const targetPath = url.searchParams.get("path");
|
|
439
540
|
if (!targetPath) {
|
|
440
|
-
return
|
|
541
|
+
return secureResponse(
|
|
441
542
|
JSON.stringify({ error: "Missing ?path= parameter" }),
|
|
442
543
|
{ status: 400, headers: { "Content-Type": "application/json" } },
|
|
443
544
|
);
|
|
@@ -445,7 +546,7 @@ export default async function handler(request) {
|
|
|
445
546
|
try {
|
|
446
547
|
const rscResult = await rscEntry.render(targetPath);
|
|
447
548
|
if (rscResult) {
|
|
448
|
-
return
|
|
549
|
+
return secureResponse(rscResult.stream, {
|
|
449
550
|
status: 200,
|
|
450
551
|
headers: {
|
|
451
552
|
"Content-Type": "text/x-component; charset=utf-8",
|
|
@@ -453,13 +554,13 @@ export default async function handler(request) {
|
|
|
453
554
|
},
|
|
454
555
|
});
|
|
455
556
|
}
|
|
456
|
-
return
|
|
557
|
+
return secureResponse(
|
|
457
558
|
JSON.stringify({ error: "No matching route" }),
|
|
458
559
|
{ status: 404, headers: { "Content-Type": "application/json" } },
|
|
459
560
|
);
|
|
460
561
|
} catch (err) {
|
|
461
562
|
console.error("RSC navigation error:", err);
|
|
462
|
-
return
|
|
563
|
+
return secureResponse(
|
|
463
564
|
JSON.stringify({ error: "RSC navigation error" }),
|
|
464
565
|
{ status: 500, headers: { "Content-Type": "application/json" } },
|
|
465
566
|
);
|
|
@@ -474,7 +575,7 @@ export default async function handler(request) {
|
|
|
474
575
|
return result.response;
|
|
475
576
|
}
|
|
476
577
|
|
|
477
|
-
return
|
|
578
|
+
return secureResponse(\`Method \${method} not allowed\`, {
|
|
478
579
|
status: 405,
|
|
479
580
|
headers: { "Content-Type": "text/plain" },
|
|
480
581
|
});
|
|
@@ -485,7 +586,7 @@ export default async function handler(request) {
|
|
|
485
586
|
const rscResult = await rscEntry.render(pathname);
|
|
486
587
|
if (rscResult) {
|
|
487
588
|
const htmlStream = await ssrEntry.renderToHtml(rscResult.stream, rscResult.headConfig);
|
|
488
|
-
return
|
|
589
|
+
return secureResponse(htmlStream, {
|
|
489
590
|
status: 200,
|
|
490
591
|
headers: { "Content-Type": "text/html; charset=utf-8" },
|
|
491
592
|
});
|
package/dist/function-gen.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"function-gen.js","sourceRoot":"","sources":["../src/function-gen.ts"],"names":[],"mappings":"AAAA,kEAAkE;AA2BlE;;GAEG;AACH,SAAS,gBAAgB,CAAC,QAAqB;IAC7C,MAAM,WAAW,GAA6B,EAAE,CAAC;IACjD,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QACpC,IAAI,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC;YACtB,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBACnC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;oBACtB,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;gBACxB,CAAC;gBACD,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,yBAAyB,CAAC,QAAqB;IACtD,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,WAAW,CAAC;IAC9D,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAE7D,IAAI,CAAC,WAAW,IAAI,CAAC,eAAe,EAAE,CAAC;QACrC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,WAAW,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC/C,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAE7D,OAAO;;;;yBAIgB,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;0BAC1B,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoCxC,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,OAA0B,EAC1B,OAAkB;IAElB,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,MAAM,MAAM,GAAiB;YAC3B,OAAO,EAAE,MAAM;YACf,UAAU,EAAE,YAAY;SACzB,CAAC;QACF,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;YACpB,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;QAC3B,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,MAAM,GAAmB;QAC7B,OAAO,EAAE,YAAY;QACrB,OAAO,EAAE,YAAY;QACrB,YAAY,EAAE,QAAQ;KACvB,CAAC;IACF,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;QACpB,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,0BAA0B,CACxC,QAAqB,EACrB,OAA0B;
|
|
1
|
+
{"version":3,"file":"function-gen.js","sourceRoot":"","sources":["../src/function-gen.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -7,6 +7,13 @@ export interface VercelAdapterOptions {
|
|
|
7
7
|
runtime?: "nodejs" | "edge";
|
|
8
8
|
/** Vercel regions to deploy to */
|
|
9
9
|
regions?: string[];
|
|
10
|
+
/**
|
|
11
|
+
* Maximum allowed request body size in bytes.
|
|
12
|
+
* Applies to server function RPC calls and API endpoints.
|
|
13
|
+
*
|
|
14
|
+
* @default 1_048_576 (1 MB)
|
|
15
|
+
*/
|
|
16
|
+
maxBodySize?: number;
|
|
10
17
|
}
|
|
11
18
|
/**
|
|
12
19
|
* Create a Vercel adapter for Catmint.
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,cAAc,EAGf,MAAM,gBAAgB,CAAC;AAoBxB;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,0DAA0D;IAC1D,OAAO,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC5B,kCAAkC;IAClC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,OAAO,UAAU,aAAa,CACnC,OAAO,CAAC,EAAE,oBAAoB,GAC7B,cAAc,CAgKhB"}
|
package/dist/index.js
CHANGED
|
@@ -20,6 +20,7 @@ import { generateServerlessFunction, generateVcConfig, } from "./function-gen.js
|
|
|
20
20
|
export default function vercelAdapter(options) {
|
|
21
21
|
const runtime = options?.runtime ?? "nodejs";
|
|
22
22
|
const regions = options?.regions;
|
|
23
|
+
const maxBodySize = options?.maxBodySize ?? 1_048_576;
|
|
23
24
|
return {
|
|
24
25
|
name: "@catmint/adapter-vercel",
|
|
25
26
|
async adapt(context) {
|
|
@@ -55,7 +56,7 @@ export default function vercelAdapter(options) {
|
|
|
55
56
|
// Generate the serverless function entry as handler.js.
|
|
56
57
|
// This imports from ./ssr/index.js and ./rsc/index.js and wraps
|
|
57
58
|
// them with the Vercel serverless function handler signature.
|
|
58
|
-
const functionEntry = generateServerlessFunction(manifest, runtime);
|
|
59
|
+
const functionEntry = generateServerlessFunction(manifest, runtime, maxBodySize, manifest.config.security.headerPreset);
|
|
59
60
|
await context.writeFile(join(funcDir, "handler.js"), functionEntry);
|
|
60
61
|
// Add package.json with "type": "module" so Node.js treats .js as ESM.
|
|
61
62
|
// The function directory is isolated from the project root, so without
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sDAAsD;
|
|
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": "@catmint/adapter-vercel",
|
|
3
|
-
"version": "0.0.0-prealpha.
|
|
3
|
+
"version": "0.0.0-prealpha.6",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"private": false,
|
|
6
6
|
"license": "MIT",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
}
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"catmint": "0.0.0-prealpha.
|
|
17
|
+
"catmint": "0.0.0-prealpha.6"
|
|
18
18
|
},
|
|
19
19
|
"devDependencies": {
|
|
20
20
|
"typescript": "^5.7.0"
|