@riverbankcms/sdk 0.7.5 → 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 +105 -2
- package/dist/client/client.js.map +1 -1
- package/dist/client/client.mjs +105 -2
- 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-2NBNOY3C.mjs → chunk-65A5HAUZ.mjs} +106 -3
- package/dist/server/chunk-65A5HAUZ.mjs.map +1 -0
- package/dist/server/{chunk-KH3EXBJM.js → chunk-WM646WI3.js} +106 -3
- 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 +29 -11
- package/dist/server/next.js.map +1 -1
- package/dist/server/next.mjs +29 -11
- 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/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 +2 -2
- package/dist/server/server.mjs +1 -1
- 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-2NBNOY3C.mjs.map +0 -1
- package/dist/server/chunk-KH3EXBJM.js.map +0 -1
package/dist/client/client.mjs
CHANGED
|
@@ -16668,6 +16668,15 @@ var ENDPOINT_DEFINITIONS = {
|
|
|
16668
16668
|
auth: "user",
|
|
16669
16669
|
responseKind: "json"
|
|
16670
16670
|
},
|
|
16671
|
+
// Public routable content for SDK SSG
|
|
16672
|
+
getPublicRoutableContent: {
|
|
16673
|
+
path: "/public/sites/{siteId}/routable-content",
|
|
16674
|
+
method: "GET",
|
|
16675
|
+
revalidate: 60,
|
|
16676
|
+
tags: ["site-{siteId}", "routable-content-{siteId}"],
|
|
16677
|
+
auth: "public",
|
|
16678
|
+
responseKind: "json"
|
|
16679
|
+
},
|
|
16671
16680
|
// Generic public content preview (preferred)
|
|
16672
16681
|
getPublishedEntryPreview: {
|
|
16673
16682
|
path: "/public/content/{siteId}/{type}/{slug}/preview",
|
|
@@ -17728,13 +17737,16 @@ var SimpleCache = class {
|
|
|
17728
17737
|
};
|
|
17729
17738
|
|
|
17730
17739
|
// src/version.ts
|
|
17731
|
-
var SDK_VERSION = "0.
|
|
17740
|
+
var SDK_VERSION = "0.8.0";
|
|
17732
17741
|
|
|
17733
17742
|
// src/client/error.ts
|
|
17734
17743
|
var RiverbankApiError = class _RiverbankApiError extends Error {
|
|
17735
17744
|
constructor(apiError) {
|
|
17736
17745
|
super(apiError.message);
|
|
17737
17746
|
this.name = "RiverbankApiError";
|
|
17747
|
+
if ("cause" in apiError && apiError.cause) {
|
|
17748
|
+
this.cause = apiError.cause;
|
|
17749
|
+
}
|
|
17738
17750
|
this.code = apiError.code;
|
|
17739
17751
|
this.requestId = apiError.requestId;
|
|
17740
17752
|
this.status = apiError.status;
|
|
@@ -17883,13 +17895,75 @@ var DEFAULT_CIRCUIT_BREAKER_CONFIG = {
|
|
|
17883
17895
|
resetTimeoutMs: 3e4,
|
|
17884
17896
|
halfOpenMaxRequests: 2
|
|
17885
17897
|
};
|
|
17898
|
+
var PERMANENT_NETWORK_ERROR_CODES = /* @__PURE__ */ new Set([
|
|
17899
|
+
"ECONNREFUSED",
|
|
17900
|
+
// Server is not running / port not listening
|
|
17901
|
+
"ENOTFOUND",
|
|
17902
|
+
// DNS lookup failed - hostname doesn't exist
|
|
17903
|
+
"EAI_AGAIN"
|
|
17904
|
+
// DNS lookup timeout (usually permanent for invalid hosts)
|
|
17905
|
+
]);
|
|
17906
|
+
var TRANSIENT_NETWORK_ERROR_CODES = /* @__PURE__ */ new Set([
|
|
17907
|
+
"ECONNRESET",
|
|
17908
|
+
// Connection was reset mid-request (server dropped it)
|
|
17909
|
+
"EPIPE",
|
|
17910
|
+
// Broken pipe (connection closed while writing)
|
|
17911
|
+
"ETIMEDOUT",
|
|
17912
|
+
// Connection timed out (could be temporary congestion)
|
|
17913
|
+
"ESOCKETTIMEDOUT"
|
|
17914
|
+
// Socket timeout
|
|
17915
|
+
]);
|
|
17916
|
+
var NODE_NETWORK_ERROR_CODES = /* @__PURE__ */ new Set([
|
|
17917
|
+
// Permanent
|
|
17918
|
+
"ECONNREFUSED",
|
|
17919
|
+
"ENOTFOUND",
|
|
17920
|
+
"EAI_AGAIN",
|
|
17921
|
+
// Transient
|
|
17922
|
+
"ECONNRESET",
|
|
17923
|
+
"EPIPE",
|
|
17924
|
+
"ETIMEDOUT",
|
|
17925
|
+
"ESOCKETTIMEDOUT"
|
|
17926
|
+
]);
|
|
17927
|
+
function isNodeNetworkErrorCode(code) {
|
|
17928
|
+
return !code.includes(":") && NODE_NETWORK_ERROR_CODES.has(code);
|
|
17929
|
+
}
|
|
17930
|
+
function getErrorCodeFromCause(error) {
|
|
17931
|
+
let current = error;
|
|
17932
|
+
while (current) {
|
|
17933
|
+
const nodeError = current;
|
|
17934
|
+
if (nodeError.code && typeof nodeError.code === "string") {
|
|
17935
|
+
if (isNodeNetworkErrorCode(nodeError.code)) {
|
|
17936
|
+
return nodeError.code;
|
|
17937
|
+
}
|
|
17938
|
+
}
|
|
17939
|
+
const errorWithCause = current;
|
|
17940
|
+
current = errorWithCause.cause;
|
|
17941
|
+
}
|
|
17942
|
+
return void 0;
|
|
17943
|
+
}
|
|
17886
17944
|
function isTransientError(error) {
|
|
17887
17945
|
if (error instanceof RiverbankApiError) {
|
|
17946
|
+
const errorCode = getErrorCodeFromCause(error);
|
|
17947
|
+
if (errorCode && PERMANENT_NETWORK_ERROR_CODES.has(errorCode)) {
|
|
17948
|
+
return false;
|
|
17949
|
+
}
|
|
17888
17950
|
if (error.status === 0) return true;
|
|
17889
17951
|
if (error.status === 429) return true;
|
|
17890
17952
|
if (error.status >= 500) return true;
|
|
17891
17953
|
return false;
|
|
17892
17954
|
}
|
|
17955
|
+
if (error instanceof TypeError) {
|
|
17956
|
+
const errorCode = getErrorCodeFromCause(error);
|
|
17957
|
+
if (errorCode) {
|
|
17958
|
+
if (PERMANENT_NETWORK_ERROR_CODES.has(errorCode)) {
|
|
17959
|
+
return false;
|
|
17960
|
+
}
|
|
17961
|
+
if (TRANSIENT_NETWORK_ERROR_CODES.has(errorCode)) {
|
|
17962
|
+
return true;
|
|
17963
|
+
}
|
|
17964
|
+
}
|
|
17965
|
+
return true;
|
|
17966
|
+
}
|
|
17893
17967
|
return true;
|
|
17894
17968
|
}
|
|
17895
17969
|
function calculateBackoff(attempt, config) {
|
|
@@ -18150,12 +18224,23 @@ function convertToTypedError(error) {
|
|
|
18150
18224
|
message: networkError.message || "Network request failed",
|
|
18151
18225
|
requestId: `local-${Date.now()}`,
|
|
18152
18226
|
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
18153
|
-
status: 0
|
|
18227
|
+
status: 0,
|
|
18154
18228
|
// No HTTP response received
|
|
18229
|
+
cause: networkError
|
|
18230
|
+
// Preserve original error for retry/circuit breaker classification
|
|
18155
18231
|
});
|
|
18156
18232
|
}
|
|
18157
18233
|
throw error;
|
|
18158
18234
|
}
|
|
18235
|
+
function detectKeyType(apiKey) {
|
|
18236
|
+
if (apiKey.startsWith("bld_live_sk_") || apiKey.startsWith("bld_test_sk_")) {
|
|
18237
|
+
return "content";
|
|
18238
|
+
}
|
|
18239
|
+
if (apiKey.startsWith("bld_preview_sk_")) {
|
|
18240
|
+
return "preview";
|
|
18241
|
+
}
|
|
18242
|
+
return "unknown";
|
|
18243
|
+
}
|
|
18159
18244
|
function createRiverbankClient(config) {
|
|
18160
18245
|
if (!config.baseUrl) {
|
|
18161
18246
|
throw new Error(
|
|
@@ -18186,6 +18271,7 @@ function createRiverbankClient(config) {
|
|
|
18186
18271
|
resetTimeoutMs: config.resilience?.circuitBreaker?.resetTimeoutMs ?? DEFAULT_CIRCUIT_BREAKER_CONFIG.resetTimeoutMs,
|
|
18187
18272
|
halfOpenMaxRequests: config.resilience?.circuitBreaker?.halfOpenMaxRequests ?? DEFAULT_CIRCUIT_BREAKER_CONFIG.halfOpenMaxRequests
|
|
18188
18273
|
};
|
|
18274
|
+
const keyType = detectKeyType(config.apiKey);
|
|
18189
18275
|
const apiClient = createBearerAPIClient(config.apiKey, config.baseUrl);
|
|
18190
18276
|
const cache = new SimpleCache({
|
|
18191
18277
|
maxSize: cacheMaxSize,
|
|
@@ -18481,9 +18567,26 @@ function createRiverbankClient(config) {
|
|
|
18481
18567
|
});
|
|
18482
18568
|
}, { signal });
|
|
18483
18569
|
},
|
|
18570
|
+
async getAllPublishedRoutes(params) {
|
|
18571
|
+
const { siteId, signal } = params;
|
|
18572
|
+
if (!siteId) {
|
|
18573
|
+
throw new Error("getAllPublishedRoutes() requires siteId");
|
|
18574
|
+
}
|
|
18575
|
+
const cacheKey = `routable-content:${siteId}:published`;
|
|
18576
|
+
return resilientFetch(cacheKey, async (sig) => {
|
|
18577
|
+
return await apiClient({
|
|
18578
|
+
endpoint: "getPublicRoutableContent",
|
|
18579
|
+
params: { siteId, publishedOnly: "true" },
|
|
18580
|
+
options: { signal: sig }
|
|
18581
|
+
});
|
|
18582
|
+
}, { signal });
|
|
18583
|
+
},
|
|
18484
18584
|
clearCache() {
|
|
18485
18585
|
cache.clear();
|
|
18486
18586
|
},
|
|
18587
|
+
getKeyType() {
|
|
18588
|
+
return keyType;
|
|
18589
|
+
},
|
|
18487
18590
|
getLastEmittedStatus() {
|
|
18488
18591
|
return lastStatus;
|
|
18489
18592
|
},
|