@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.
Files changed (72) hide show
  1. package/README.md +88 -1
  2. package/dist/cli/index.js +3693 -39
  3. package/dist/cli/index.js.map +1 -1
  4. package/dist/client/client.d.mts +2 -2
  5. package/dist/client/client.d.ts +2 -2
  6. package/dist/client/client.js +105 -2
  7. package/dist/client/client.js.map +1 -1
  8. package/dist/client/client.mjs +105 -2
  9. package/dist/client/client.mjs.map +1 -1
  10. package/dist/client/hooks.d.mts +2 -2
  11. package/dist/client/hooks.d.ts +2 -2
  12. package/dist/client/usePage-CdnO2CP5.d.mts +6875 -0
  13. package/dist/client/usePage-_ksKXlUF.d.ts +6875 -0
  14. package/dist/server/{Layout-qWLdVm5-.d.mts → Layout-D4J009eS.d.mts} +1 -1
  15. package/dist/server/{Layout-Yluyb6sK.d.ts → Layout-l2v4Qa6E.d.ts} +1 -1
  16. package/dist/server/{chunk-2NBNOY3C.mjs → chunk-65A5HAUZ.mjs} +106 -3
  17. package/dist/server/chunk-65A5HAUZ.mjs.map +1 -0
  18. package/dist/server/{chunk-KH3EXBJM.js → chunk-WM646WI3.js} +106 -3
  19. package/dist/server/chunk-WM646WI3.js.map +1 -0
  20. package/dist/server/{components-Di5ME6He.d.ts → components-D2uCKCj7.d.ts} +3 -3
  21. package/dist/server/{components-DNHfSCML.d.mts → components-vtYEmmPF.d.mts} +3 -3
  22. package/dist/server/components.d.mts +5 -5
  23. package/dist/server/components.d.ts +5 -5
  24. package/dist/server/config-validation.d.mts +2 -2
  25. package/dist/server/config-validation.d.ts +2 -2
  26. package/dist/server/config.d.mts +3 -3
  27. package/dist/server/config.d.ts +3 -3
  28. package/dist/server/data.d.mts +2 -2
  29. package/dist/server/data.d.ts +2 -2
  30. package/dist/server/{index-Clm3skz_.d.mts → index-2qnY7VH_.d.mts} +1 -1
  31. package/dist/server/{index-DLvNddi-.d.ts → index-BxrAuL9K.d.ts} +1 -1
  32. package/dist/server/{index-C9Ra8dza.d.ts → index-CH_dvF6n.d.ts} +2 -2
  33. package/dist/server/{index--Oyunk_B.d.mts → index-DfWg1Qle.d.mts} +2 -2
  34. package/dist/server/index.d.mts +13 -5
  35. package/dist/server/index.d.ts +13 -5
  36. package/dist/server/index.js +10 -10
  37. package/dist/server/index.mjs +1 -1
  38. package/dist/server/{loadContent-D7LQwI0o.d.ts → loadContent-DECnsp4k.d.ts} +3 -3
  39. package/dist/server/{loadContent-DVfuBLiZ.d.mts → loadContent-Du5kS8UM.d.mts} +3 -3
  40. package/dist/server/{loadPage-BmYJCe_V.d.ts → loadPage-BZohBxxf.d.ts} +2 -2
  41. package/dist/server/{loadPage-BucnLHmE.d.mts → loadPage-VBorKlWv.d.mts} +2 -2
  42. package/dist/server/metadata.d.mts +4 -4
  43. package/dist/server/metadata.d.ts +4 -4
  44. package/dist/server/navigation.d.mts +2 -2
  45. package/dist/server/navigation.d.ts +2 -2
  46. package/dist/server/next.d.mts +38 -7
  47. package/dist/server/next.d.ts +38 -7
  48. package/dist/server/next.js +29 -11
  49. package/dist/server/next.js.map +1 -1
  50. package/dist/server/next.mjs +29 -11
  51. package/dist/server/next.mjs.map +1 -1
  52. package/dist/server/rendering/server.d.mts +4 -4
  53. package/dist/server/rendering/server.d.ts +4 -4
  54. package/dist/server/rendering.d.mts +7 -7
  55. package/dist/server/rendering.d.ts +7 -7
  56. package/dist/server/routing.d.mts +4 -4
  57. package/dist/server/routing.d.ts +4 -4
  58. package/dist/server/server.d.mts +5 -5
  59. package/dist/server/server.d.ts +5 -5
  60. package/dist/server/server.js +2 -2
  61. package/dist/server/server.mjs +1 -1
  62. package/dist/server/{types-C-LShyIg.d.mts → types-BRQ_6yOc.d.mts} +43 -1
  63. package/dist/server/{types-BjgZt8xJ.d.mts → types-CJfJwcuL.d.mts} +37 -0
  64. package/dist/server/{types-Dt98DeYa.d.ts → types-CgSO0yxg.d.ts} +8 -0
  65. package/dist/server/{types-BRQyLrQU.d.ts → types-D0rPF8l5.d.ts} +43 -1
  66. package/dist/server/{types-DLBhEPSt.d.ts → types-D8XqwoVd.d.ts} +37 -0
  67. package/dist/server/{types-BSV6Vc-P.d.mts → types-DT30Qy7x.d.mts} +8 -0
  68. package/dist/server/{validation-DU2YE7u5.d.ts → validation-D1LaY1kQ.d.ts} +1 -1
  69. package/dist/server/{validation-BGuRo8P1.d.mts → validation-Pv3Zs6dP.d.mts} +1 -1
  70. package/package.json +2 -1
  71. package/dist/server/chunk-2NBNOY3C.mjs.map +0 -1
  72. package/dist/server/chunk-KH3EXBJM.js.map +0 -1
@@ -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.7.5";
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
  },