@riverbankcms/sdk 0.7.4 → 0.8.0
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/README.md +88 -1
- package/dist/cli/index.js +3693 -39
- package/dist/cli/index.js.map +1 -1
- package/dist/client/client.d.mts +2 -2
- package/dist/client/client.d.ts +2 -2
- package/dist/client/client.js +167 -4
- package/dist/client/client.js.map +1 -1
- package/dist/client/client.mjs +167 -4
- package/dist/client/client.mjs.map +1 -1
- package/dist/client/hooks.d.mts +2 -2
- package/dist/client/hooks.d.ts +2 -2
- package/dist/client/usePage-CdnO2CP5.d.mts +6875 -0
- package/dist/client/usePage-_ksKXlUF.d.ts +6875 -0
- package/dist/server/{Layout-qWLdVm5-.d.mts → Layout-D4J009eS.d.mts} +1 -1
- package/dist/server/{Layout-Yluyb6sK.d.ts → Layout-l2v4Qa6E.d.ts} +1 -1
- package/dist/server/{chunk-74XUVNOO.mjs → chunk-4YQJUL5W.mjs} +4 -2
- package/dist/server/{chunk-74XUVNOO.mjs.map → chunk-4YQJUL5W.mjs.map} +1 -1
- package/dist/server/{chunk-JNU7ZS2V.mjs → chunk-65A5HAUZ.mjs} +168 -5
- package/dist/server/chunk-65A5HAUZ.mjs.map +1 -0
- package/dist/server/{chunk-JWRNMNWI.js → chunk-EIJ27EZQ.js} +4 -2
- package/dist/server/chunk-EIJ27EZQ.js.map +1 -0
- package/dist/server/{chunk-6Z4MQG47.js → chunk-WM646WI3.js} +168 -5
- package/dist/server/chunk-WM646WI3.js.map +1 -0
- package/dist/server/{components-Di5ME6He.d.ts → components-D2uCKCj7.d.ts} +3 -3
- package/dist/server/{components-DNHfSCML.d.mts → components-vtYEmmPF.d.mts} +3 -3
- package/dist/server/components.d.mts +5 -5
- package/dist/server/components.d.ts +5 -5
- package/dist/server/config-validation.d.mts +2 -2
- package/dist/server/config-validation.d.ts +2 -2
- package/dist/server/config.d.mts +3 -3
- package/dist/server/config.d.ts +3 -3
- package/dist/server/data.d.mts +2 -2
- package/dist/server/data.d.ts +2 -2
- package/dist/server/{index-Clm3skz_.d.mts → index-2qnY7VH_.d.mts} +1 -1
- package/dist/server/{index-DLvNddi-.d.ts → index-BxrAuL9K.d.ts} +1 -1
- package/dist/server/{index-C9Ra8dza.d.ts → index-CH_dvF6n.d.ts} +2 -2
- package/dist/server/{index--Oyunk_B.d.mts → index-DfWg1Qle.d.mts} +2 -2
- package/dist/server/index.d.mts +13 -5
- package/dist/server/index.d.ts +13 -5
- package/dist/server/index.js +10 -10
- package/dist/server/index.mjs +1 -1
- package/dist/server/{loadContent-D7LQwI0o.d.ts → loadContent-DECnsp4k.d.ts} +3 -3
- package/dist/server/{loadContent-DVfuBLiZ.d.mts → loadContent-Du5kS8UM.d.mts} +3 -3
- package/dist/server/{loadPage-BmYJCe_V.d.ts → loadPage-BZohBxxf.d.ts} +2 -2
- package/dist/server/{loadPage-BucnLHmE.d.mts → loadPage-VBorKlWv.d.mts} +2 -2
- package/dist/server/metadata.d.mts +4 -4
- package/dist/server/metadata.d.ts +4 -4
- package/dist/server/navigation.d.mts +2 -2
- package/dist/server/navigation.d.ts +2 -2
- package/dist/server/next.d.mts +38 -7
- package/dist/server/next.d.ts +38 -7
- package/dist/server/next.js +35 -17
- package/dist/server/next.js.map +1 -1
- package/dist/server/next.mjs +30 -12
- package/dist/server/next.mjs.map +1 -1
- package/dist/server/rendering/server.d.mts +4 -4
- package/dist/server/rendering/server.d.ts +4 -4
- package/dist/server/rendering.d.mts +7 -7
- package/dist/server/rendering.d.ts +7 -7
- package/dist/server/rendering.js +2 -2
- package/dist/server/rendering.mjs +1 -1
- package/dist/server/routing.d.mts +4 -4
- package/dist/server/routing.d.ts +4 -4
- package/dist/server/server.d.mts +5 -5
- package/dist/server/server.d.ts +5 -5
- package/dist/server/server.js +3 -3
- package/dist/server/server.mjs +2 -2
- package/dist/server/{types-C-LShyIg.d.mts → types-BRQ_6yOc.d.mts} +43 -1
- package/dist/server/{types-BjgZt8xJ.d.mts → types-CJfJwcuL.d.mts} +37 -0
- package/dist/server/{types-Dt98DeYa.d.ts → types-CgSO0yxg.d.ts} +8 -0
- package/dist/server/{types-BRQyLrQU.d.ts → types-D0rPF8l5.d.ts} +43 -1
- package/dist/server/{types-DLBhEPSt.d.ts → types-D8XqwoVd.d.ts} +37 -0
- package/dist/server/{types-BSV6Vc-P.d.mts → types-DT30Qy7x.d.mts} +8 -0
- package/dist/server/{validation-DU2YE7u5.d.ts → validation-D1LaY1kQ.d.ts} +1 -1
- package/dist/server/{validation-BGuRo8P1.d.mts → validation-Pv3Zs6dP.d.mts} +1 -1
- package/package.json +2 -1
- package/dist/server/chunk-6Z4MQG47.js.map +0 -1
- package/dist/server/chunk-JNU7ZS2V.mjs.map +0 -1
- package/dist/server/chunk-JWRNMNWI.js.map +0 -1
|
@@ -1268,6 +1268,15 @@ var ENDPOINT_DEFINITIONS = {
|
|
|
1268
1268
|
auth: "user",
|
|
1269
1269
|
responseKind: "json"
|
|
1270
1270
|
},
|
|
1271
|
+
// Public routable content for SDK SSG
|
|
1272
|
+
getPublicRoutableContent: {
|
|
1273
|
+
path: "/public/sites/{siteId}/routable-content",
|
|
1274
|
+
method: "GET",
|
|
1275
|
+
revalidate: 60,
|
|
1276
|
+
tags: ["site-{siteId}", "routable-content-{siteId}"],
|
|
1277
|
+
auth: "public",
|
|
1278
|
+
responseKind: "json"
|
|
1279
|
+
},
|
|
1271
1280
|
// Generic public content preview (preferred)
|
|
1272
1281
|
getPublishedEntryPreview: {
|
|
1273
1282
|
path: "/public/content/{siteId}/{type}/{slug}/preview",
|
|
@@ -2331,13 +2340,16 @@ var SimpleCache = class {
|
|
|
2331
2340
|
};
|
|
2332
2341
|
|
|
2333
2342
|
// src/version.ts
|
|
2334
|
-
var SDK_VERSION = "0.
|
|
2343
|
+
var SDK_VERSION = "0.8.0";
|
|
2335
2344
|
|
|
2336
2345
|
// src/client/error.ts
|
|
2337
2346
|
var RiverbankApiError = class _RiverbankApiError extends Error {
|
|
2338
2347
|
constructor(apiError) {
|
|
2339
2348
|
super(apiError.message);
|
|
2340
2349
|
this.name = "RiverbankApiError";
|
|
2350
|
+
if ("cause" in apiError && apiError.cause) {
|
|
2351
|
+
this.cause = apiError.cause;
|
|
2352
|
+
}
|
|
2341
2353
|
this.code = apiError.code;
|
|
2342
2354
|
this.requestId = apiError.requestId;
|
|
2343
2355
|
this.status = apiError.status;
|
|
@@ -2424,6 +2436,54 @@ var RiverbankApiError = class _RiverbankApiError extends Error {
|
|
|
2424
2436
|
isServerError() {
|
|
2425
2437
|
return this.code.startsWith("server:");
|
|
2426
2438
|
}
|
|
2439
|
+
/**
|
|
2440
|
+
* Returns a human-readable string representation of the error.
|
|
2441
|
+
* Includes all key details for debugging.
|
|
2442
|
+
*
|
|
2443
|
+
* @example
|
|
2444
|
+
* "RiverbankApiError: Content keys cannot access preview content | Code: auth:forbidden | Status: 401 | RequestId: req-abc123"
|
|
2445
|
+
*/
|
|
2446
|
+
toString() {
|
|
2447
|
+
const parts = [`RiverbankApiError: ${this.message}`];
|
|
2448
|
+
if (this.code) parts.push(`Code: ${this.code}`);
|
|
2449
|
+
if (this.status) parts.push(`Status: ${this.status}`);
|
|
2450
|
+
if (this.requestId) parts.push(`RequestId: ${this.requestId}`);
|
|
2451
|
+
return parts.join(" | ");
|
|
2452
|
+
}
|
|
2453
|
+
/**
|
|
2454
|
+
* Custom Node.js inspect output for better console.log display.
|
|
2455
|
+
* This ensures that console.log(error) shows all relevant details
|
|
2456
|
+
* instead of just "[Object]" for nested properties.
|
|
2457
|
+
*/
|
|
2458
|
+
[Symbol.for("nodejs.util.inspect.custom")]() {
|
|
2459
|
+
return this.toDetailedString();
|
|
2460
|
+
}
|
|
2461
|
+
/**
|
|
2462
|
+
* Returns a detailed multi-line string for debugging.
|
|
2463
|
+
* Used by the Node.js inspect symbol for console output.
|
|
2464
|
+
*/
|
|
2465
|
+
toDetailedString() {
|
|
2466
|
+
const lines = [
|
|
2467
|
+
`RiverbankApiError: ${this.message}`,
|
|
2468
|
+
` Code: ${this.code}`,
|
|
2469
|
+
` Status: ${this.status}`,
|
|
2470
|
+
` RequestId: ${this.requestId}`,
|
|
2471
|
+
` Timestamp: ${this.timestamp}`
|
|
2472
|
+
];
|
|
2473
|
+
if (this.isRetryable) {
|
|
2474
|
+
lines.push(` Retryable: true`);
|
|
2475
|
+
if (this.retryAfterMs) {
|
|
2476
|
+
lines.push(` RetryAfter: ${this.retryAfterMs}ms`);
|
|
2477
|
+
}
|
|
2478
|
+
}
|
|
2479
|
+
if (this.fieldErrors && this.fieldErrors.length > 0) {
|
|
2480
|
+
lines.push(" FieldErrors:");
|
|
2481
|
+
this.fieldErrors.forEach((fe) => {
|
|
2482
|
+
lines.push(` - ${fe.field}: ${fe.message}`);
|
|
2483
|
+
});
|
|
2484
|
+
}
|
|
2485
|
+
return lines.join("\n");
|
|
2486
|
+
}
|
|
2427
2487
|
};
|
|
2428
2488
|
|
|
2429
2489
|
// src/client/resilience.ts
|
|
@@ -2438,13 +2498,75 @@ var DEFAULT_CIRCUIT_BREAKER_CONFIG = {
|
|
|
2438
2498
|
resetTimeoutMs: 3e4,
|
|
2439
2499
|
halfOpenMaxRequests: 2
|
|
2440
2500
|
};
|
|
2501
|
+
var PERMANENT_NETWORK_ERROR_CODES = /* @__PURE__ */ new Set([
|
|
2502
|
+
"ECONNREFUSED",
|
|
2503
|
+
// Server is not running / port not listening
|
|
2504
|
+
"ENOTFOUND",
|
|
2505
|
+
// DNS lookup failed - hostname doesn't exist
|
|
2506
|
+
"EAI_AGAIN"
|
|
2507
|
+
// DNS lookup timeout (usually permanent for invalid hosts)
|
|
2508
|
+
]);
|
|
2509
|
+
var TRANSIENT_NETWORK_ERROR_CODES = /* @__PURE__ */ new Set([
|
|
2510
|
+
"ECONNRESET",
|
|
2511
|
+
// Connection was reset mid-request (server dropped it)
|
|
2512
|
+
"EPIPE",
|
|
2513
|
+
// Broken pipe (connection closed while writing)
|
|
2514
|
+
"ETIMEDOUT",
|
|
2515
|
+
// Connection timed out (could be temporary congestion)
|
|
2516
|
+
"ESOCKETTIMEDOUT"
|
|
2517
|
+
// Socket timeout
|
|
2518
|
+
]);
|
|
2519
|
+
var NODE_NETWORK_ERROR_CODES = /* @__PURE__ */ new Set([
|
|
2520
|
+
// Permanent
|
|
2521
|
+
"ECONNREFUSED",
|
|
2522
|
+
"ENOTFOUND",
|
|
2523
|
+
"EAI_AGAIN",
|
|
2524
|
+
// Transient
|
|
2525
|
+
"ECONNRESET",
|
|
2526
|
+
"EPIPE",
|
|
2527
|
+
"ETIMEDOUT",
|
|
2528
|
+
"ESOCKETTIMEDOUT"
|
|
2529
|
+
]);
|
|
2530
|
+
function isNodeNetworkErrorCode(code) {
|
|
2531
|
+
return !code.includes(":") && NODE_NETWORK_ERROR_CODES.has(code);
|
|
2532
|
+
}
|
|
2533
|
+
function getErrorCodeFromCause(error) {
|
|
2534
|
+
let current = error;
|
|
2535
|
+
while (current) {
|
|
2536
|
+
const nodeError = current;
|
|
2537
|
+
if (nodeError.code && typeof nodeError.code === "string") {
|
|
2538
|
+
if (isNodeNetworkErrorCode(nodeError.code)) {
|
|
2539
|
+
return nodeError.code;
|
|
2540
|
+
}
|
|
2541
|
+
}
|
|
2542
|
+
const errorWithCause = current;
|
|
2543
|
+
current = errorWithCause.cause;
|
|
2544
|
+
}
|
|
2545
|
+
return void 0;
|
|
2546
|
+
}
|
|
2441
2547
|
function isTransientError(error) {
|
|
2442
2548
|
if (error instanceof RiverbankApiError) {
|
|
2549
|
+
const errorCode = getErrorCodeFromCause(error);
|
|
2550
|
+
if (errorCode && PERMANENT_NETWORK_ERROR_CODES.has(errorCode)) {
|
|
2551
|
+
return false;
|
|
2552
|
+
}
|
|
2443
2553
|
if (error.status === 0) return true;
|
|
2444
2554
|
if (error.status === 429) return true;
|
|
2445
2555
|
if (error.status >= 500) return true;
|
|
2446
2556
|
return false;
|
|
2447
2557
|
}
|
|
2558
|
+
if (error instanceof TypeError) {
|
|
2559
|
+
const errorCode = getErrorCodeFromCause(error);
|
|
2560
|
+
if (errorCode) {
|
|
2561
|
+
if (PERMANENT_NETWORK_ERROR_CODES.has(errorCode)) {
|
|
2562
|
+
return false;
|
|
2563
|
+
}
|
|
2564
|
+
if (TRANSIENT_NETWORK_ERROR_CODES.has(errorCode)) {
|
|
2565
|
+
return true;
|
|
2566
|
+
}
|
|
2567
|
+
}
|
|
2568
|
+
return true;
|
|
2569
|
+
}
|
|
2448
2570
|
return true;
|
|
2449
2571
|
}
|
|
2450
2572
|
function calculateBackoff(attempt, config) {
|
|
@@ -2581,7 +2703,19 @@ async function fetchWithTimeoutAndRetry(fetcher, config) {
|
|
|
2581
2703
|
}
|
|
2582
2704
|
throw lastError;
|
|
2583
2705
|
}
|
|
2706
|
+
function isAbortError(error) {
|
|
2707
|
+
if (typeof DOMException !== "undefined" && error instanceof DOMException && error.name === "AbortError") {
|
|
2708
|
+
return true;
|
|
2709
|
+
}
|
|
2710
|
+
if (error instanceof Error && error.name === "AbortError") {
|
|
2711
|
+
return true;
|
|
2712
|
+
}
|
|
2713
|
+
return false;
|
|
2714
|
+
}
|
|
2584
2715
|
function shouldRetryError(error, customRetryOn) {
|
|
2716
|
+
if (isAbortError(error)) {
|
|
2717
|
+
return false;
|
|
2718
|
+
}
|
|
2585
2719
|
if (customRetryOn) {
|
|
2586
2720
|
const statusCode = error instanceof RiverbankApiError ? error.status : void 0;
|
|
2587
2721
|
return customRetryOn(error, statusCode);
|
|
@@ -2625,7 +2759,7 @@ var DEFAULT_SERVER_TIMEOUT_MS = 8e3;
|
|
|
2625
2759
|
function generateRequestId2() {
|
|
2626
2760
|
return `req-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
|
|
2627
2761
|
}
|
|
2628
|
-
function
|
|
2762
|
+
function isAbortError2(error) {
|
|
2629
2763
|
if (error instanceof DOMException && error.name === "AbortError") {
|
|
2630
2764
|
return true;
|
|
2631
2765
|
}
|
|
@@ -2663,7 +2797,7 @@ function getNetworkErrorCode(error) {
|
|
|
2663
2797
|
return "network:connection_error";
|
|
2664
2798
|
}
|
|
2665
2799
|
function convertToTypedError(error) {
|
|
2666
|
-
if (
|
|
2800
|
+
if (isAbortError2(error)) {
|
|
2667
2801
|
throw error;
|
|
2668
2802
|
}
|
|
2669
2803
|
if (error instanceof ApiEnvelopeError) {
|
|
@@ -2693,12 +2827,23 @@ function convertToTypedError(error) {
|
|
|
2693
2827
|
message: networkError.message || "Network request failed",
|
|
2694
2828
|
requestId: `local-${Date.now()}`,
|
|
2695
2829
|
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
2696
|
-
status: 0
|
|
2830
|
+
status: 0,
|
|
2697
2831
|
// No HTTP response received
|
|
2832
|
+
cause: networkError
|
|
2833
|
+
// Preserve original error for retry/circuit breaker classification
|
|
2698
2834
|
});
|
|
2699
2835
|
}
|
|
2700
2836
|
throw error;
|
|
2701
2837
|
}
|
|
2838
|
+
function detectKeyType(apiKey) {
|
|
2839
|
+
if (apiKey.startsWith("bld_live_sk_") || apiKey.startsWith("bld_test_sk_")) {
|
|
2840
|
+
return "content";
|
|
2841
|
+
}
|
|
2842
|
+
if (apiKey.startsWith("bld_preview_sk_")) {
|
|
2843
|
+
return "preview";
|
|
2844
|
+
}
|
|
2845
|
+
return "unknown";
|
|
2846
|
+
}
|
|
2702
2847
|
function createRiverbankClient(config) {
|
|
2703
2848
|
if (!config.baseUrl) {
|
|
2704
2849
|
throw new Error(
|
|
@@ -2729,6 +2874,7 @@ function createRiverbankClient(config) {
|
|
|
2729
2874
|
resetTimeoutMs: _nullishCoalesce(_optionalChain([config, 'access', _45 => _45.resilience, 'optionalAccess', _46 => _46.circuitBreaker, 'optionalAccess', _47 => _47.resetTimeoutMs]), () => ( DEFAULT_CIRCUIT_BREAKER_CONFIG.resetTimeoutMs)),
|
|
2730
2875
|
halfOpenMaxRequests: _nullishCoalesce(_optionalChain([config, 'access', _48 => _48.resilience, 'optionalAccess', _49 => _49.circuitBreaker, 'optionalAccess', _50 => _50.halfOpenMaxRequests]), () => ( DEFAULT_CIRCUIT_BREAKER_CONFIG.halfOpenMaxRequests))
|
|
2731
2876
|
};
|
|
2877
|
+
const keyType = detectKeyType(config.apiKey);
|
|
2732
2878
|
const apiClient = createBearerAPIClient(config.apiKey, config.baseUrl);
|
|
2733
2879
|
const cache = new SimpleCache({
|
|
2734
2880
|
maxSize: cacheMaxSize,
|
|
@@ -3024,9 +3170,26 @@ function createRiverbankClient(config) {
|
|
|
3024
3170
|
});
|
|
3025
3171
|
}, { signal });
|
|
3026
3172
|
},
|
|
3173
|
+
async getAllPublishedRoutes(params) {
|
|
3174
|
+
const { siteId, signal } = params;
|
|
3175
|
+
if (!siteId) {
|
|
3176
|
+
throw new Error("getAllPublishedRoutes() requires siteId");
|
|
3177
|
+
}
|
|
3178
|
+
const cacheKey = `routable-content:${siteId}:published`;
|
|
3179
|
+
return resilientFetch(cacheKey, async (sig) => {
|
|
3180
|
+
return await apiClient({
|
|
3181
|
+
endpoint: "getPublicRoutableContent",
|
|
3182
|
+
params: { siteId, publishedOnly: "true" },
|
|
3183
|
+
options: { signal: sig }
|
|
3184
|
+
});
|
|
3185
|
+
}, { signal });
|
|
3186
|
+
},
|
|
3027
3187
|
clearCache() {
|
|
3028
3188
|
cache.clear();
|
|
3029
3189
|
},
|
|
3190
|
+
getKeyType() {
|
|
3191
|
+
return keyType;
|
|
3192
|
+
},
|
|
3030
3193
|
getLastEmittedStatus() {
|
|
3031
3194
|
return lastStatus;
|
|
3032
3195
|
},
|
|
@@ -3049,4 +3212,4 @@ function createRiverbankClient(config) {
|
|
|
3049
3212
|
|
|
3050
3213
|
|
|
3051
3214
|
exports.API_ENDPOINTS = API_ENDPOINTS; exports.buildEndpointURL = buildEndpointURL; exports.SDK_VERSION = SDK_VERSION; exports.PREBUILD_PAGE_SIZE = PREBUILD_PAGE_SIZE; exports.DEFAULT_PREBUILD_DIR = DEFAULT_PREBUILD_DIR; exports.init_constants = init_constants; exports.canUsePrebuild = canUsePrebuild; exports.PrebuildLoader = PrebuildLoader; exports.createPrebuildLoader = createPrebuildLoader; exports.init_loader = init_loader; exports.createRiverbankClient = createRiverbankClient;
|
|
3052
|
-
//# sourceMappingURL=chunk-
|
|
3215
|
+
//# sourceMappingURL=chunk-WM646WI3.js.map
|