@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
@@ -1,5 +1,5 @@
1
- import { R as RiverbankClient, P as PageProps, T as Theme, a as ResolvedBlockData, b as RiverbankClientConfig } from './usePage-DZtrWajy.mjs';
2
- export { d as Page, U as UsePageParams, c as UsePageResult, u as usePage } from './usePage-DZtrWajy.mjs';
1
+ import { R as RiverbankClient, P as PageProps, T as Theme, a as ResolvedBlockData, b as RiverbankClientConfig } from './usePage-CdnO2CP5.mjs';
2
+ export { d as Page, U as UsePageParams, c as UsePageResult, u as usePage } from './usePage-CdnO2CP5.mjs';
3
3
  import '@riverbankcms/ai';
4
4
  import 'zod';
5
5
  import '@riverbankcms/media-storage-supabase';
@@ -1,5 +1,5 @@
1
- import { R as RiverbankClient, P as PageProps, T as Theme, a as ResolvedBlockData, b as RiverbankClientConfig } from './usePage-BYmJCCm1.js';
2
- export { d as Page, U as UsePageParams, c as UsePageResult, u as usePage } from './usePage-BYmJCCm1.js';
1
+ import { R as RiverbankClient, P as PageProps, T as Theme, a as ResolvedBlockData, b as RiverbankClientConfig } from './usePage-_ksKXlUF.js';
2
+ export { d as Page, U as UsePageParams, c as UsePageResult, u as usePage } from './usePage-_ksKXlUF.js';
3
3
  import '@riverbankcms/ai';
4
4
  import 'zod';
5
5
  import '@riverbankcms/media-storage-supabase';
@@ -16704,6 +16704,15 @@ var ENDPOINT_DEFINITIONS = {
16704
16704
  auth: "user",
16705
16705
  responseKind: "json"
16706
16706
  },
16707
+ // Public routable content for SDK SSG
16708
+ getPublicRoutableContent: {
16709
+ path: "/public/sites/{siteId}/routable-content",
16710
+ method: "GET",
16711
+ revalidate: 60,
16712
+ tags: ["site-{siteId}", "routable-content-{siteId}"],
16713
+ auth: "public",
16714
+ responseKind: "json"
16715
+ },
16707
16716
  // Generic public content preview (preferred)
16708
16717
  getPublishedEntryPreview: {
16709
16718
  path: "/public/content/{siteId}/{type}/{slug}/preview",
@@ -17764,13 +17773,16 @@ var SimpleCache = class {
17764
17773
  };
17765
17774
 
17766
17775
  // src/version.ts
17767
- var SDK_VERSION = "0.7.5";
17776
+ var SDK_VERSION = "0.8.0";
17768
17777
 
17769
17778
  // src/client/error.ts
17770
17779
  var RiverbankApiError = class _RiverbankApiError extends Error {
17771
17780
  constructor(apiError) {
17772
17781
  super(apiError.message);
17773
17782
  this.name = "RiverbankApiError";
17783
+ if ("cause" in apiError && apiError.cause) {
17784
+ this.cause = apiError.cause;
17785
+ }
17774
17786
  this.code = apiError.code;
17775
17787
  this.requestId = apiError.requestId;
17776
17788
  this.status = apiError.status;
@@ -17919,13 +17931,75 @@ var DEFAULT_CIRCUIT_BREAKER_CONFIG = {
17919
17931
  resetTimeoutMs: 3e4,
17920
17932
  halfOpenMaxRequests: 2
17921
17933
  };
17934
+ var PERMANENT_NETWORK_ERROR_CODES = /* @__PURE__ */ new Set([
17935
+ "ECONNREFUSED",
17936
+ // Server is not running / port not listening
17937
+ "ENOTFOUND",
17938
+ // DNS lookup failed - hostname doesn't exist
17939
+ "EAI_AGAIN"
17940
+ // DNS lookup timeout (usually permanent for invalid hosts)
17941
+ ]);
17942
+ var TRANSIENT_NETWORK_ERROR_CODES = /* @__PURE__ */ new Set([
17943
+ "ECONNRESET",
17944
+ // Connection was reset mid-request (server dropped it)
17945
+ "EPIPE",
17946
+ // Broken pipe (connection closed while writing)
17947
+ "ETIMEDOUT",
17948
+ // Connection timed out (could be temporary congestion)
17949
+ "ESOCKETTIMEDOUT"
17950
+ // Socket timeout
17951
+ ]);
17952
+ var NODE_NETWORK_ERROR_CODES = /* @__PURE__ */ new Set([
17953
+ // Permanent
17954
+ "ECONNREFUSED",
17955
+ "ENOTFOUND",
17956
+ "EAI_AGAIN",
17957
+ // Transient
17958
+ "ECONNRESET",
17959
+ "EPIPE",
17960
+ "ETIMEDOUT",
17961
+ "ESOCKETTIMEDOUT"
17962
+ ]);
17963
+ function isNodeNetworkErrorCode(code) {
17964
+ return !code.includes(":") && NODE_NETWORK_ERROR_CODES.has(code);
17965
+ }
17966
+ function getErrorCodeFromCause(error) {
17967
+ let current = error;
17968
+ while (current) {
17969
+ const nodeError = current;
17970
+ if (nodeError.code && typeof nodeError.code === "string") {
17971
+ if (isNodeNetworkErrorCode(nodeError.code)) {
17972
+ return nodeError.code;
17973
+ }
17974
+ }
17975
+ const errorWithCause = current;
17976
+ current = errorWithCause.cause;
17977
+ }
17978
+ return void 0;
17979
+ }
17922
17980
  function isTransientError(error) {
17923
17981
  if (error instanceof RiverbankApiError) {
17982
+ const errorCode = getErrorCodeFromCause(error);
17983
+ if (errorCode && PERMANENT_NETWORK_ERROR_CODES.has(errorCode)) {
17984
+ return false;
17985
+ }
17924
17986
  if (error.status === 0) return true;
17925
17987
  if (error.status === 429) return true;
17926
17988
  if (error.status >= 500) return true;
17927
17989
  return false;
17928
17990
  }
17991
+ if (error instanceof TypeError) {
17992
+ const errorCode = getErrorCodeFromCause(error);
17993
+ if (errorCode) {
17994
+ if (PERMANENT_NETWORK_ERROR_CODES.has(errorCode)) {
17995
+ return false;
17996
+ }
17997
+ if (TRANSIENT_NETWORK_ERROR_CODES.has(errorCode)) {
17998
+ return true;
17999
+ }
18000
+ }
18001
+ return true;
18002
+ }
17929
18003
  return true;
17930
18004
  }
17931
18005
  function calculateBackoff(attempt, config) {
@@ -18186,12 +18260,23 @@ function convertToTypedError(error) {
18186
18260
  message: networkError.message || "Network request failed",
18187
18261
  requestId: `local-${Date.now()}`,
18188
18262
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
18189
- status: 0
18263
+ status: 0,
18190
18264
  // No HTTP response received
18265
+ cause: networkError
18266
+ // Preserve original error for retry/circuit breaker classification
18191
18267
  });
18192
18268
  }
18193
18269
  throw error;
18194
18270
  }
18271
+ function detectKeyType(apiKey) {
18272
+ if (apiKey.startsWith("bld_live_sk_") || apiKey.startsWith("bld_test_sk_")) {
18273
+ return "content";
18274
+ }
18275
+ if (apiKey.startsWith("bld_preview_sk_")) {
18276
+ return "preview";
18277
+ }
18278
+ return "unknown";
18279
+ }
18195
18280
  function createRiverbankClient(config) {
18196
18281
  if (!config.baseUrl) {
18197
18282
  throw new Error(
@@ -18222,6 +18307,7 @@ function createRiverbankClient(config) {
18222
18307
  resetTimeoutMs: config.resilience?.circuitBreaker?.resetTimeoutMs ?? DEFAULT_CIRCUIT_BREAKER_CONFIG.resetTimeoutMs,
18223
18308
  halfOpenMaxRequests: config.resilience?.circuitBreaker?.halfOpenMaxRequests ?? DEFAULT_CIRCUIT_BREAKER_CONFIG.halfOpenMaxRequests
18224
18309
  };
18310
+ const keyType = detectKeyType(config.apiKey);
18225
18311
  const apiClient = createBearerAPIClient(config.apiKey, config.baseUrl);
18226
18312
  const cache = new SimpleCache({
18227
18313
  maxSize: cacheMaxSize,
@@ -18517,9 +18603,26 @@ function createRiverbankClient(config) {
18517
18603
  });
18518
18604
  }, { signal });
18519
18605
  },
18606
+ async getAllPublishedRoutes(params) {
18607
+ const { siteId, signal } = params;
18608
+ if (!siteId) {
18609
+ throw new Error("getAllPublishedRoutes() requires siteId");
18610
+ }
18611
+ const cacheKey = `routable-content:${siteId}:published`;
18612
+ return resilientFetch(cacheKey, async (sig) => {
18613
+ return await apiClient({
18614
+ endpoint: "getPublicRoutableContent",
18615
+ params: { siteId, publishedOnly: "true" },
18616
+ options: { signal: sig }
18617
+ });
18618
+ }, { signal });
18619
+ },
18520
18620
  clearCache() {
18521
18621
  cache.clear();
18522
18622
  },
18623
+ getKeyType() {
18624
+ return keyType;
18625
+ },
18523
18626
  getLastEmittedStatus() {
18524
18627
  return lastStatus;
18525
18628
  },