@catmint/adapter-vercel 0.0.0-prealpha.10 → 0.0.0-prealpha.12
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.js +133 -19
- package/dist/function-gen.js.map +1 -1
- package/package.json +2 -2
package/dist/function-gen.js
CHANGED
|
@@ -126,6 +126,20 @@ import * as ssrEntry from "./ssr/index.js";
|
|
|
126
126
|
import { readFile, stat } from "node:fs/promises";
|
|
127
127
|
import { join, extname } from "node:path";
|
|
128
128
|
import { fileURLToPath } from "node:url";
|
|
129
|
+
import { createHash } from "node:crypto";
|
|
130
|
+
|
|
131
|
+
function __isClientSafeErrorLike(err) {
|
|
132
|
+
return err != null && typeof err === "object" && err.constructor && err.constructor.name === "ClientSafeError" && typeof err.statusCode === "number";
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
function __isRedirectErrorLike(err) {
|
|
136
|
+
return err != null && typeof err === "object" && err.constructor && err.constructor.name === "RedirectError" && typeof err.url === "string" && typeof err.status === "number";
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
function __errorRef(err) {
|
|
140
|
+
var msg = (err && typeof err === "object" && err.message) ? String(err.message) : "unknown";
|
|
141
|
+
return createHash("sha256").update(msg + Date.now()).digest("hex").slice(0, 8);
|
|
142
|
+
}
|
|
129
143
|
|
|
130
144
|
const __dirname = fileURLToPath(new URL(".", import.meta.url));
|
|
131
145
|
const PRERENDERED_DIR = join(__dirname, "prerendered");
|
|
@@ -355,17 +369,58 @@ ${headerPreset === "baseline"
|
|
|
355
369
|
res.end(JSON.stringify({ error: "Invalid JSON body" }));
|
|
356
370
|
return;
|
|
357
371
|
}
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
372
|
+
try {
|
|
373
|
+
const result = await ssrEntry.handleServerFn(pathname, parsed);
|
|
374
|
+
if (result) {
|
|
375
|
+
// Check if the result IS a ClientSafeError (returned, not thrown)
|
|
376
|
+
if (__isClientSafeErrorLike(result.result)) {
|
|
377
|
+
applyMiddlewareHeaders();
|
|
378
|
+
res.statusCode = 200;
|
|
379
|
+
res.setHeader("Content-Type", "application/json");
|
|
380
|
+
res.end(JSON.stringify({
|
|
381
|
+
__clientSafeError: true,
|
|
382
|
+
error: result.result.message,
|
|
383
|
+
statusCode: result.result.statusCode,
|
|
384
|
+
data: result.result.data,
|
|
385
|
+
}));
|
|
386
|
+
return;
|
|
387
|
+
}
|
|
388
|
+
applyMiddlewareHeaders();
|
|
389
|
+
res.statusCode = 200;
|
|
390
|
+
res.setHeader("Content-Type", "application/json");
|
|
391
|
+
res.end(JSON.stringify(result.result));
|
|
392
|
+
return;
|
|
393
|
+
}
|
|
394
|
+
res.statusCode = 404;
|
|
362
395
|
res.setHeader("Content-Type", "application/json");
|
|
363
|
-
res.end(JSON.stringify(
|
|
364
|
-
|
|
396
|
+
res.end(JSON.stringify({ error: "Server function not found" }));
|
|
397
|
+
} catch (err) {
|
|
398
|
+
// Always log full error server-side
|
|
399
|
+
console.error("[catmint] Server function error:", err);
|
|
400
|
+
|
|
401
|
+
// RedirectError — send redirect envelope
|
|
402
|
+
if (__isRedirectErrorLike(err)) {
|
|
403
|
+
res.statusCode = 200;
|
|
404
|
+
res.setHeader("Content-Type", "application/json");
|
|
405
|
+
res.end(JSON.stringify({ __redirect: true, url: err.url, status: err.status }));
|
|
406
|
+
return;
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
// ClientSafeError — developer opted in, expose to client
|
|
410
|
+
if (__isClientSafeErrorLike(err)) {
|
|
411
|
+
res.statusCode = err.statusCode;
|
|
412
|
+
res.setHeader("Content-Type", "application/json");
|
|
413
|
+
res.end(JSON.stringify({ error: err.message, data: err.data }));
|
|
414
|
+
return;
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
// Default: sanitize — generic message with correlation hash
|
|
418
|
+
const ref = __errorRef(err);
|
|
419
|
+
console.error("[catmint] Error reference [ref: " + ref + "] — see above for full error");
|
|
420
|
+
res.statusCode = 500;
|
|
421
|
+
res.setHeader("Content-Type", "application/json");
|
|
422
|
+
res.end(JSON.stringify({ error: "Internal Server Error [ref: " + ref + "]" }));
|
|
365
423
|
}
|
|
366
|
-
res.statusCode = 404;
|
|
367
|
-
res.setHeader("Content-Type", "application/json");
|
|
368
|
-
res.end(JSON.stringify({ error: "Server function not found" }));
|
|
369
424
|
return;
|
|
370
425
|
}
|
|
371
426
|
|
|
@@ -500,6 +555,24 @@ import * as rscEntry from "./rsc/index.js";
|
|
|
500
555
|
import * as ssrEntry from "./ssr/index.js";
|
|
501
556
|
${hasMiddlewareProtected ? 'import { prerenderedPages } from "./prerendered.js";' : ""}
|
|
502
557
|
${cacheAdapterSetup}
|
|
558
|
+
function __isClientSafeErrorLike(err) {
|
|
559
|
+
return err != null && typeof err === "object" && err.constructor && err.constructor.name === "ClientSafeError" && typeof err.statusCode === "number";
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
function __isRedirectErrorLike(err) {
|
|
563
|
+
return err != null && typeof err === "object" && err.constructor && err.constructor.name === "RedirectError" && typeof err.url === "string" && typeof err.status === "number";
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
async function __errorRef(err) {
|
|
567
|
+
var msg = (err && typeof err === "object" && err.message) ? String(err.message) : "unknown";
|
|
568
|
+
var data = new TextEncoder().encode(msg + Date.now());
|
|
569
|
+
var buf = await crypto.subtle.digest("SHA-256", data);
|
|
570
|
+
var arr = new Uint8Array(buf);
|
|
571
|
+
var hex = "";
|
|
572
|
+
for (var i = 0; i < arr.length; i++) hex += arr[i].toString(16).padStart(2, "0");
|
|
573
|
+
return hex.slice(0, 8);
|
|
574
|
+
}
|
|
575
|
+
|
|
503
576
|
async function statusPageResponse(statusCode, pathname) {
|
|
504
577
|
if (rscEntry.renderStatusPage && ssrEntry.renderToHtml) {
|
|
505
578
|
try {
|
|
@@ -674,17 +747,58 @@ ${headerPreset === "baseline"
|
|
|
674
747
|
{ status: 400, headers: { "Content-Type": "application/json" } },
|
|
675
748
|
);
|
|
676
749
|
}
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
750
|
+
try {
|
|
751
|
+
const result = await ssrEntry.handleServerFn(pathname, parsed);
|
|
752
|
+
if (result) {
|
|
753
|
+
// Check if the result IS a ClientSafeError (returned, not thrown)
|
|
754
|
+
if (__isClientSafeErrorLike(result.result)) {
|
|
755
|
+
return applyMiddlewareHeaders(secureResponse(JSON.stringify({
|
|
756
|
+
__clientSafeError: true,
|
|
757
|
+
error: result.result.message,
|
|
758
|
+
statusCode: result.result.statusCode,
|
|
759
|
+
data: result.result.data,
|
|
760
|
+
}), {
|
|
761
|
+
status: 200,
|
|
762
|
+
headers: { "Content-Type": "application/json" },
|
|
763
|
+
}));
|
|
764
|
+
}
|
|
765
|
+
return applyMiddlewareHeaders(secureResponse(JSON.stringify(result.result), {
|
|
766
|
+
status: 200,
|
|
767
|
+
headers: { "Content-Type": "application/json" },
|
|
768
|
+
}));
|
|
769
|
+
}
|
|
770
|
+
return secureResponse(
|
|
771
|
+
JSON.stringify({ error: "Server function not found" }),
|
|
772
|
+
{ status: 404, headers: { "Content-Type": "application/json" } },
|
|
773
|
+
);
|
|
774
|
+
} catch (err) {
|
|
775
|
+
// Always log full error server-side
|
|
776
|
+
console.error("[catmint] Server function error:", err);
|
|
777
|
+
|
|
778
|
+
// RedirectError — send redirect envelope
|
|
779
|
+
if (__isRedirectErrorLike(err)) {
|
|
780
|
+
return secureResponse(
|
|
781
|
+
JSON.stringify({ __redirect: true, url: err.url, status: err.status }),
|
|
782
|
+
{ status: 200, headers: { "Content-Type": "application/json" } },
|
|
783
|
+
);
|
|
784
|
+
}
|
|
785
|
+
|
|
786
|
+
// ClientSafeError — developer opted in, expose to client
|
|
787
|
+
if (__isClientSafeErrorLike(err)) {
|
|
788
|
+
return secureResponse(
|
|
789
|
+
JSON.stringify({ error: err.message, data: err.data }),
|
|
790
|
+
{ status: err.statusCode, headers: { "Content-Type": "application/json" } },
|
|
791
|
+
);
|
|
792
|
+
}
|
|
793
|
+
|
|
794
|
+
// Default: sanitize — generic message with correlation hash
|
|
795
|
+
const ref = await __errorRef(err);
|
|
796
|
+
console.error("[catmint] Error reference [ref: " + ref + "] — see above for full error");
|
|
797
|
+
return secureResponse(
|
|
798
|
+
JSON.stringify({ error: "Internal Server Error [ref: " + ref + "]" }),
|
|
799
|
+
{ status: 500, headers: { "Content-Type": "application/json" } },
|
|
800
|
+
);
|
|
683
801
|
}
|
|
684
|
-
return secureResponse(
|
|
685
|
-
JSON.stringify({ error: "Server function not found" }),
|
|
686
|
-
{ status: 404, headers: { "Content-Type": "application/json" } },
|
|
687
|
-
);
|
|
688
802
|
}
|
|
689
803
|
|
|
690
804
|
// 3. RSC flight stream for client-side navigation (/__catmint/rsc?path=...)
|
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,EAC1B,WAAmB,EACnB,YAAiC;IAEjC,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,OAAO,oBAAoB,CAAC,QAAQ,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,sBAAsB,CAAC,QAAQ,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,sBAAsB,CAC7B,QAAqB,EACrB,WAAmB,EACnB,YAAiC;IAEjC,MAAM,iBAAiB,GAAG,yBAAyB,CAAC,QAAQ,CAAC,CAAC;IAE9D,OAAO
|
|
1
|
+
{"version":3,"file":"function-gen.js","sourceRoot":"","sources":["../src/function-gen.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.12",
|
|
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.12"
|
|
18
18
|
},
|
|
19
19
|
"devDependencies": {
|
|
20
20
|
"typescript": "^5.7.0"
|