@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,6 +1,6 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { buildMenu, buildLogo } from './navigation.mjs';
3
- import { S as SiteResponse, R as RiverbankClient } from './types-C-LShyIg.mjs';
3
+ import { S as SiteResponse, R as RiverbankClient } from './types-BRQ_6yOc.mjs';
4
4
 
5
5
  type HeaderData = {
6
6
  menu: ReturnType<typeof buildMenu>;
@@ -1,6 +1,6 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { buildMenu, buildLogo } from './navigation.js';
3
- import { S as SiteResponse, R as RiverbankClient } from './types-BRQyLrQU.js';
3
+ import { S as SiteResponse, R as RiverbankClient } from './types-D0rPF8l5.js';
4
4
 
5
5
  type HeaderData = {
6
6
  menu: ReturnType<typeof buildMenu>;
@@ -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.7.5";
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;
@@ -2486,13 +2498,75 @@ var DEFAULT_CIRCUIT_BREAKER_CONFIG = {
2486
2498
  resetTimeoutMs: 3e4,
2487
2499
  halfOpenMaxRequests: 2
2488
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
+ }
2489
2547
  function isTransientError(error) {
2490
2548
  if (error instanceof RiverbankApiError) {
2549
+ const errorCode = getErrorCodeFromCause(error);
2550
+ if (errorCode && PERMANENT_NETWORK_ERROR_CODES.has(errorCode)) {
2551
+ return false;
2552
+ }
2491
2553
  if (error.status === 0) return true;
2492
2554
  if (error.status === 429) return true;
2493
2555
  if (error.status >= 500) return true;
2494
2556
  return false;
2495
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
+ }
2496
2570
  return true;
2497
2571
  }
2498
2572
  function calculateBackoff(attempt, config) {
@@ -2753,12 +2827,23 @@ function convertToTypedError(error) {
2753
2827
  message: networkError.message || "Network request failed",
2754
2828
  requestId: `local-${Date.now()}`,
2755
2829
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
2756
- status: 0
2830
+ status: 0,
2757
2831
  // No HTTP response received
2832
+ cause: networkError
2833
+ // Preserve original error for retry/circuit breaker classification
2758
2834
  });
2759
2835
  }
2760
2836
  throw error;
2761
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
+ }
2762
2847
  function createRiverbankClient(config) {
2763
2848
  if (!config.baseUrl) {
2764
2849
  throw new Error(
@@ -2789,6 +2874,7 @@ function createRiverbankClient(config) {
2789
2874
  resetTimeoutMs: config.resilience?.circuitBreaker?.resetTimeoutMs ?? DEFAULT_CIRCUIT_BREAKER_CONFIG.resetTimeoutMs,
2790
2875
  halfOpenMaxRequests: config.resilience?.circuitBreaker?.halfOpenMaxRequests ?? DEFAULT_CIRCUIT_BREAKER_CONFIG.halfOpenMaxRequests
2791
2876
  };
2877
+ const keyType = detectKeyType(config.apiKey);
2792
2878
  const apiClient = createBearerAPIClient(config.apiKey, config.baseUrl);
2793
2879
  const cache = new SimpleCache({
2794
2880
  maxSize: cacheMaxSize,
@@ -3084,9 +3170,26 @@ function createRiverbankClient(config) {
3084
3170
  });
3085
3171
  }, { signal });
3086
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
+ },
3087
3187
  clearCache() {
3088
3188
  cache.clear();
3089
3189
  },
3190
+ getKeyType() {
3191
+ return keyType;
3192
+ },
3090
3193
  getLastEmittedStatus() {
3091
3194
  return lastStatus;
3092
3195
  },
@@ -3109,4 +3212,4 @@ export {
3109
3212
  init_loader,
3110
3213
  createRiverbankClient
3111
3214
  };
3112
- //# sourceMappingURL=chunk-2NBNOY3C.mjs.map
3215
+ //# sourceMappingURL=chunk-65A5HAUZ.mjs.map