@riverbankcms/sdk 0.7.2 → 0.7.3

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 (187) hide show
  1. package/README.md +54 -0
  2. package/dist/client/bookings.d.mts +2 -0
  3. package/dist/client/bookings.d.ts +2 -0
  4. package/dist/client/bookings.js +2956 -104
  5. package/dist/client/bookings.js.map +1 -1
  6. package/dist/client/bookings.mjs +2929 -70
  7. package/dist/client/bookings.mjs.map +1 -1
  8. package/dist/client/client.d.mts +2 -2
  9. package/dist/client/client.d.ts +2 -2
  10. package/dist/client/client.js +80 -11
  11. package/dist/client/client.js.map +1 -1
  12. package/dist/client/client.mjs +87 -11
  13. package/dist/client/client.mjs.map +1 -1
  14. package/dist/client/hooks.d.mts +2 -2
  15. package/dist/client/hooks.d.ts +2 -2
  16. package/dist/client/rendering/client.js +3070 -259
  17. package/dist/client/rendering/client.js.map +1 -1
  18. package/dist/client/rendering/client.mjs +3212 -395
  19. package/dist/client/rendering/client.mjs.map +1 -1
  20. package/dist/client/spam-protection.d.mts +55 -0
  21. package/dist/client/spam-protection.d.ts +55 -0
  22. package/dist/client/spam-protection.js +2915 -0
  23. package/dist/client/spam-protection.js.map +1 -0
  24. package/dist/client/spam-protection.mjs +2893 -0
  25. package/dist/client/spam-protection.mjs.map +1 -0
  26. package/dist/client/{usePage-Db9kzA41.d.ts → usePage-BYmJCCm1.d.ts} +14 -2
  27. package/dist/client/{usePage-C9tJpuKa.d.mts → usePage-DZtrWajy.d.mts} +14 -2
  28. package/dist/server/{Layout-Ce7PU9I5.d.ts → Layout-Yluyb6sK.d.ts} +1 -1
  29. package/dist/server/{Layout-WllR8Zug.d.mts → Layout-qWLdVm5-.d.mts} +1 -1
  30. package/dist/server/chunk-2IZ6S225.js +122 -0
  31. package/dist/server/chunk-2IZ6S225.js.map +1 -0
  32. package/dist/server/chunk-4CV4JOE5.js +27 -0
  33. package/dist/server/chunk-4CV4JOE5.js.map +1 -0
  34. package/dist/server/{chunk-AET56TQX.mjs → chunk-5LRR64Y6.mjs} +32 -5
  35. package/dist/server/chunk-5LRR64Y6.mjs.map +1 -0
  36. package/dist/server/{chunk-VODFQMUW.js → chunk-NBTRDLCM.js} +32 -5
  37. package/dist/server/chunk-NBTRDLCM.js.map +1 -0
  38. package/dist/server/chunk-NFEGQTCC.mjs +27 -0
  39. package/dist/server/{chunk-5JT452F2.mjs → chunk-NFQLH5IA.mjs} +340 -19
  40. package/dist/server/chunk-NFQLH5IA.mjs.map +1 -0
  41. package/dist/server/chunk-PPHZV6YD.mjs +122 -0
  42. package/dist/server/chunk-PPHZV6YD.mjs.map +1 -0
  43. package/dist/server/{chunk-HMENX4Y7.js → chunk-VLXTNB2C.js} +370 -49
  44. package/dist/server/chunk-VLXTNB2C.js.map +1 -0
  45. package/dist/server/{components-RPzRQve6.d.mts → components-DNHfSCML.d.mts} +3 -3
  46. package/dist/server/{components--LT61IKp.d.ts → components-Di5ME6He.d.ts} +3 -3
  47. package/dist/server/components.d.mts +5 -5
  48. package/dist/server/components.d.ts +5 -5
  49. package/dist/server/components.js +1 -0
  50. package/dist/server/components.js.map +1 -1
  51. package/dist/server/components.mjs +1 -0
  52. package/dist/server/config-validation.js +1 -0
  53. package/dist/server/config-validation.js.map +1 -1
  54. package/dist/server/config-validation.mjs +1 -0
  55. package/dist/server/config.js +1 -0
  56. package/dist/server/config.js.map +1 -1
  57. package/dist/server/config.mjs +1 -0
  58. package/dist/server/config.mjs.map +1 -1
  59. package/dist/server/data.d.mts +2 -2
  60. package/dist/server/data.d.ts +2 -2
  61. package/dist/server/data.js +1 -0
  62. package/dist/server/data.js.map +1 -1
  63. package/dist/server/data.mjs +1 -0
  64. package/dist/server/env.d.mts +91 -5
  65. package/dist/server/env.d.ts +91 -5
  66. package/dist/server/env.js +9 -2
  67. package/dist/server/env.js.map +1 -1
  68. package/dist/server/env.mjs +8 -1
  69. package/dist/server/{index-BL66CU6d.d.mts → index--Oyunk_B.d.mts} +2 -2
  70. package/dist/server/{index-CJk9iQQW.d.ts → index-C9Ra8dza.d.ts} +2 -2
  71. package/dist/server/{index-Bkva0WAj.d.mts → index-Clm3skz_.d.mts} +1 -1
  72. package/dist/server/{index-CSBWKA3r.d.ts → index-DLvNddi-.d.ts} +1 -1
  73. package/dist/server/index.d.mts +215 -4
  74. package/dist/server/index.d.ts +215 -4
  75. package/dist/server/index.js +301 -3
  76. package/dist/server/index.js.map +1 -1
  77. package/dist/server/index.mjs +301 -3
  78. package/dist/server/index.mjs.map +1 -1
  79. package/dist/server/{loadContent-CXUWMuzY.d.ts → loadContent-D7LQwI0o.d.ts} +3 -3
  80. package/dist/server/{loadContent-F_tAS0Nl.d.mts → loadContent-DVfuBLiZ.d.mts} +3 -3
  81. package/dist/server/{loadPage-6I7F6GRF.js → loadPage-AXNAERDS.js} +2 -1
  82. package/dist/server/loadPage-AXNAERDS.js.map +1 -0
  83. package/dist/server/{loadPage-i2r-X5b9.d.ts → loadPage-BmYJCe_V.d.ts} +2 -2
  84. package/dist/server/{loadPage-CxlYLe5K.d.mts → loadPage-BucnLHmE.d.mts} +2 -2
  85. package/dist/server/{loadPage-JI2SML4M.mjs → loadPage-XR7ORQ2E.mjs} +2 -1
  86. package/dist/server/loadPage-XR7ORQ2E.mjs.map +1 -0
  87. package/dist/server/metadata.d.mts +4 -4
  88. package/dist/server/metadata.d.ts +4 -4
  89. package/dist/server/metadata.js +1 -0
  90. package/dist/server/metadata.js.map +1 -1
  91. package/dist/server/metadata.mjs +1 -0
  92. package/dist/server/navigation.d.mts +2 -2
  93. package/dist/server/navigation.d.ts +2 -2
  94. package/dist/server/navigation.js +1 -0
  95. package/dist/server/navigation.js.map +1 -1
  96. package/dist/server/navigation.mjs +1 -0
  97. package/dist/server/next/revalidate.js +5 -4
  98. package/dist/server/next/revalidate.js.map +1 -1
  99. package/dist/server/next/revalidate.mjs +3 -2
  100. package/dist/server/next/revalidate.mjs.map +1 -1
  101. package/dist/server/next/tags.d.mts +3 -0
  102. package/dist/server/next/tags.d.ts +3 -0
  103. package/dist/server/next/tags.js +3 -1
  104. package/dist/server/next/tags.js.map +1 -1
  105. package/dist/server/next/tags.mjs +2 -0
  106. package/dist/server/next/tags.mjs.map +1 -1
  107. package/dist/server/next.d.mts +5 -5
  108. package/dist/server/next.d.ts +5 -5
  109. package/dist/server/next.js +5 -4
  110. package/dist/server/next.js.map +1 -1
  111. package/dist/server/next.mjs +3 -2
  112. package/dist/server/next.mjs.map +1 -1
  113. package/dist/server/rendering/server.d.mts +4 -4
  114. package/dist/server/rendering/server.d.ts +4 -4
  115. package/dist/server/rendering/server.js +1 -0
  116. package/dist/server/rendering/server.js.map +1 -1
  117. package/dist/server/rendering/server.mjs +1 -0
  118. package/dist/server/rendering.d.mts +7 -7
  119. package/dist/server/rendering.d.ts +7 -7
  120. package/dist/server/rendering.js +1 -0
  121. package/dist/server/rendering.js.map +1 -1
  122. package/dist/server/rendering.mjs +1 -0
  123. package/dist/server/routing.d.mts +3 -3
  124. package/dist/server/routing.d.ts +3 -3
  125. package/dist/server/routing.js +4 -2
  126. package/dist/server/routing.js.map +1 -1
  127. package/dist/server/routing.mjs +3 -1
  128. package/dist/server/routing.mjs.map +1 -1
  129. package/dist/server/server.d.mts +5 -5
  130. package/dist/server/server.d.ts +5 -5
  131. package/dist/server/server.js +3 -2
  132. package/dist/server/server.js.map +1 -1
  133. package/dist/server/server.mjs +2 -1
  134. package/dist/server/theme-bridge.js +1 -0
  135. package/dist/server/theme-bridge.js.map +1 -1
  136. package/dist/server/theme-bridge.mjs +1 -0
  137. package/dist/server/theme-bridge.mjs.map +1 -1
  138. package/dist/server/theme.js +3 -1
  139. package/dist/server/theme.js.map +1 -1
  140. package/dist/server/theme.mjs +2 -0
  141. package/dist/server/theme.mjs.map +1 -1
  142. package/dist/server/{types-DnkRh0UL.d.ts → types-BRQyLrQU.d.ts} +14 -2
  143. package/dist/server/{types-Dsu9wsUh.d.mts → types-BSV6Vc-P.d.mts} +2 -2
  144. package/dist/server/{types-MF2AWoKv.d.mts → types-C-LShyIg.d.mts} +14 -2
  145. package/dist/server/{types-CVykEqXN.d.ts → types-Dt98DeYa.d.ts} +2 -2
  146. package/dist/server/webhooks.d.mts +8 -2
  147. package/dist/server/webhooks.d.ts +8 -2
  148. package/dist/server/webhooks.js +3 -2
  149. package/dist/server/webhooks.js.map +1 -1
  150. package/dist/server/webhooks.mjs +2 -1
  151. package/package.json +7 -1
  152. package/dist/client/resolver-BhueZVxZ.d.mts +0 -61
  153. package/dist/client/resolver-BhueZVxZ.d.ts +0 -61
  154. package/dist/client/usePage--fGlyrgj.d.mts +0 -6439
  155. package/dist/client/usePage-BBcFCxOU.d.ts +0 -6297
  156. package/dist/client/usePage-BC8Q2E3t.d.mts +0 -6431
  157. package/dist/client/usePage-BTPnCuWC.d.mts +0 -6511
  158. package/dist/client/usePage-BXjk8BhD.d.mts +0 -6704
  159. package/dist/client/usePage-BafOS9UT.d.mts +0 -6512
  160. package/dist/client/usePage-BcjWPXvh.d.mts +0 -6388
  161. package/dist/client/usePage-BiOReg0_.d.ts +0 -6704
  162. package/dist/client/usePage-Bnx-kA6x.d.mts +0 -6670
  163. package/dist/client/usePage-BvKAa3Zw.d.mts +0 -366
  164. package/dist/client/usePage-BvKAa3Zw.d.ts +0 -366
  165. package/dist/client/usePage-BydHcMYB.d.mts +0 -6297
  166. package/dist/client/usePage-C3ZKNwY7.d.mts +0 -6393
  167. package/dist/client/usePage-CE7X5NcN.d.ts +0 -6439
  168. package/dist/client/usePage-CHEybPMD.d.ts +0 -6429
  169. package/dist/client/usePage-CrKw1H6Y.d.ts +0 -6338
  170. package/dist/client/usePage-CyYpOJud.d.ts +0 -6388
  171. package/dist/client/usePage-D4fxZbRR.d.mts +0 -6429
  172. package/dist/client/usePage-DMI8ImsU.d.mts +0 -6338
  173. package/dist/client/usePage-DoPI6b8V.d.ts +0 -6511
  174. package/dist/client/usePage-DpRNZUtP.d.ts +0 -6431
  175. package/dist/client/usePage-QNWArrVO.d.ts +0 -6670
  176. package/dist/client/usePage-fBgPB6Oq.d.ts +0 -6512
  177. package/dist/client/usePage-gpVaeWDy.d.ts +0 -6393
  178. package/dist/server/chunk-5JT452F2.mjs.map +0 -1
  179. package/dist/server/chunk-AET56TQX.mjs.map +0 -1
  180. package/dist/server/chunk-HMENX4Y7.js.map +0 -1
  181. package/dist/server/chunk-LQUKXIW7.mjs +0 -13
  182. package/dist/server/chunk-LQUKXIW7.mjs.map +0 -1
  183. package/dist/server/chunk-VODFQMUW.js.map +0 -1
  184. package/dist/server/chunk-WYNEYDXO.js +0 -13
  185. package/dist/server/chunk-WYNEYDXO.js.map +0 -1
  186. package/dist/server/loadPage-6I7F6GRF.js.map +0 -1
  187. /package/dist/server/{loadPage-JI2SML4M.mjs.map → chunk-NFEGQTCC.mjs.map} +0 -0
@@ -1,3 +1,247 @@
1
+ import {
2
+ __esm,
3
+ __export,
4
+ __toCommonJS
5
+ } from "./chunk-NFEGQTCC.mjs";
6
+
7
+ // src/constants.ts
8
+ var PREBUILD_PAGE_SIZE, DEFAULT_MAX_PREBUILD_AGE_SEC, DEFAULT_PREBUILD_DIR;
9
+ var init_constants = __esm({
10
+ "src/constants.ts"() {
11
+ "use strict";
12
+ PREBUILD_PAGE_SIZE = 50;
13
+ DEFAULT_MAX_PREBUILD_AGE_SEC = 86400;
14
+ DEFAULT_PREBUILD_DIR = ".riverbank-cache";
15
+ }
16
+ });
17
+
18
+ // src/prebuild/loader.ts
19
+ var loader_exports = {};
20
+ __export(loader_exports, {
21
+ PrebuildLoader: () => PrebuildLoader,
22
+ canUsePrebuild: () => canUsePrebuild,
23
+ createPrebuildLoader: () => createPrebuildLoader
24
+ });
25
+ import * as fs from "fs";
26
+ import * as path from "path";
27
+ function loadManifest(prebuildDir) {
28
+ if (cachedManifest?.dir === prebuildDir) {
29
+ return cachedManifest.manifest;
30
+ }
31
+ const manifestPath = path.join(prebuildDir, "manifest.json");
32
+ if (!fs.existsSync(manifestPath)) {
33
+ return null;
34
+ }
35
+ try {
36
+ const content = fs.readFileSync(manifestPath, "utf-8");
37
+ const manifest = JSON.parse(content);
38
+ cachedManifest = { manifest, dir: prebuildDir };
39
+ return manifest;
40
+ } catch {
41
+ return null;
42
+ }
43
+ }
44
+ function loadJsonFile(prebuildDir, relativePath) {
45
+ const filePath = path.join(prebuildDir, relativePath);
46
+ if (!fs.existsSync(filePath)) {
47
+ return null;
48
+ }
49
+ try {
50
+ const content = fs.readFileSync(filePath, "utf-8");
51
+ return JSON.parse(content);
52
+ } catch {
53
+ return null;
54
+ }
55
+ }
56
+ function isPrebuildExpired(manifest, maxAgeSec) {
57
+ const ageMs = Date.now() - new Date(manifest.generatedAt).getTime();
58
+ return ageMs > maxAgeSec * 1e3;
59
+ }
60
+ function getPrebuildAgeSec(manifest) {
61
+ const ageMs = Date.now() - new Date(manifest.generatedAt).getTime();
62
+ return Math.floor(ageMs / 1e3);
63
+ }
64
+ function canUsePrebuild() {
65
+ if (typeof process === "undefined" || !process.versions?.node) {
66
+ return false;
67
+ }
68
+ try {
69
+ return typeof fs.existsSync === "function";
70
+ } catch {
71
+ return false;
72
+ }
73
+ }
74
+ function createPrebuildLoader(config) {
75
+ return new PrebuildLoader(config);
76
+ }
77
+ var cachedManifest, PrebuildLoader;
78
+ var init_loader = __esm({
79
+ "src/prebuild/loader.ts"() {
80
+ "use strict";
81
+ init_constants();
82
+ cachedManifest = null;
83
+ PrebuildLoader = class {
84
+ constructor(config) {
85
+ this.prebuildDir = config.prebuildDir ?? DEFAULT_PREBUILD_DIR;
86
+ this.maxPrebuildAgeSec = config.maxPrebuildAgeSec ?? DEFAULT_MAX_PREBUILD_AGE_SEC;
87
+ }
88
+ /**
89
+ * Check if prebuild is available and not expired.
90
+ */
91
+ isAvailable() {
92
+ if (!canUsePrebuild()) {
93
+ return false;
94
+ }
95
+ const manifest = loadManifest(this.prebuildDir);
96
+ if (!manifest) {
97
+ return false;
98
+ }
99
+ return !isPrebuildExpired(manifest, this.maxPrebuildAgeSec);
100
+ }
101
+ /**
102
+ * Load site data from prebuild cache.
103
+ */
104
+ loadSite(siteId) {
105
+ const manifest = loadManifest(this.prebuildDir);
106
+ if (!manifest || isPrebuildExpired(manifest, this.maxPrebuildAgeSec)) {
107
+ return null;
108
+ }
109
+ const cacheFile = loadJsonFile(this.prebuildDir, "site.json");
110
+ if (!cacheFile || cacheFile.data.site.id !== siteId) {
111
+ return null;
112
+ }
113
+ return {
114
+ data: cacheFile.data,
115
+ prebuildAgeSec: getPrebuildAgeSec(manifest)
116
+ };
117
+ }
118
+ /**
119
+ * Load page data from prebuild cache.
120
+ */
121
+ loadPage(siteId, pagePath) {
122
+ const manifest = loadManifest(this.prebuildDir);
123
+ if (!manifest || isPrebuildExpired(manifest, this.maxPrebuildAgeSec)) {
124
+ return null;
125
+ }
126
+ const cacheKey = `page:${siteId}:${pagePath}:false`;
127
+ const relativePath = manifest.keyToFile[cacheKey];
128
+ if (!relativePath) {
129
+ return null;
130
+ }
131
+ const cacheFile = loadJsonFile(this.prebuildDir, relativePath);
132
+ if (!cacheFile) {
133
+ return null;
134
+ }
135
+ return {
136
+ data: cacheFile.data,
137
+ prebuildAgeSec: getPrebuildAgeSec(manifest)
138
+ };
139
+ }
140
+ /**
141
+ * Load entries from prebuild cache with runtime filtering.
142
+ *
143
+ * The prebuild stores ALL entries for each content type.
144
+ * Filtering, ordering, and pagination are applied at runtime.
145
+ */
146
+ loadEntries(siteId, params) {
147
+ if (params.preview) {
148
+ return null;
149
+ }
150
+ if (params.mode === "manual" && params.entryIds?.length) {
151
+ return null;
152
+ }
153
+ const manifest = loadManifest(this.prebuildDir);
154
+ if (!manifest || isPrebuildExpired(manifest, this.maxPrebuildAgeSec)) {
155
+ return null;
156
+ }
157
+ const cacheKey = `entries-all:${siteId}:${params.contentType}`;
158
+ const relativePath = manifest.keyToFile[cacheKey];
159
+ if (!relativePath) {
160
+ return null;
161
+ }
162
+ const cacheFile = loadJsonFile(this.prebuildDir, relativePath);
163
+ if (!cacheFile) {
164
+ return null;
165
+ }
166
+ let entries = [...cacheFile.entries];
167
+ if (params.order === "newest") {
168
+ entries.sort((a, b) => {
169
+ const aTime = a.publishedAt ? new Date(a.publishedAt).getTime() : 0;
170
+ const bTime = b.publishedAt ? new Date(b.publishedAt).getTime() : 0;
171
+ return bTime - aTime;
172
+ });
173
+ } else if (params.order === "oldest") {
174
+ entries.sort((a, b) => {
175
+ const aTime = a.publishedAt ? new Date(a.publishedAt).getTime() : 0;
176
+ const bTime = b.publishedAt ? new Date(b.publishedAt).getTime() : 0;
177
+ return aTime - bTime;
178
+ });
179
+ } else if (params.order === "title") {
180
+ entries.sort((a, b) => (a.title || "").localeCompare(b.title || ""));
181
+ }
182
+ const total = entries.length;
183
+ const offset = params.offset ?? 0;
184
+ const limit = params.limit ?? 10;
185
+ if (offset > 0) {
186
+ entries = entries.slice(offset);
187
+ }
188
+ entries = entries.slice(0, limit);
189
+ const prebuildAgeSec = getPrebuildAgeSec(manifest);
190
+ if (params.includeMeta) {
191
+ return {
192
+ data: {
193
+ entries,
194
+ total,
195
+ hasMore: offset + entries.length < total,
196
+ limit,
197
+ offset,
198
+ totalPages: Math.ceil(total / limit),
199
+ currentPage: Math.floor(offset / limit) + 1
200
+ },
201
+ prebuildAgeSec
202
+ };
203
+ }
204
+ return {
205
+ data: { entries },
206
+ prebuildAgeSec
207
+ };
208
+ }
209
+ /**
210
+ * Load navigation data from prebuild cache.
211
+ */
212
+ loadNavigation() {
213
+ const manifest = loadManifest(this.prebuildDir);
214
+ if (!manifest || isPrebuildExpired(manifest, this.maxPrebuildAgeSec)) {
215
+ return null;
216
+ }
217
+ const cacheFile = loadJsonFile(
218
+ this.prebuildDir,
219
+ "navigation/menus.json"
220
+ );
221
+ if (!cacheFile) {
222
+ return null;
223
+ }
224
+ return {
225
+ data: cacheFile.menus,
226
+ prebuildAgeSec: getPrebuildAgeSec(manifest)
227
+ };
228
+ }
229
+ /**
230
+ * Get the manifest for inspection.
231
+ */
232
+ getManifest() {
233
+ return loadManifest(this.prebuildDir);
234
+ }
235
+ /**
236
+ * Clear the cached manifest (for testing).
237
+ */
238
+ clearCache() {
239
+ cachedManifest = null;
240
+ }
241
+ };
242
+ }
243
+ });
244
+
1
245
  // ../api/src/endpoints.ts
2
246
  var ENDPOINT_DEFINITIONS = {
3
247
  // AI endpoints - no cache due to dynamic nature
@@ -2017,7 +2261,7 @@ var SimpleCache = class {
2017
2261
  const ttl = options?.ttl ?? this.ttl;
2018
2262
  const staleTtl = options?.staleTtl ?? this.staleTtl;
2019
2263
  const now = Date.now();
2020
- if (this.cache.size >= this.maxSize && !this.cache.has(key)) {
2264
+ while (this.cache.size >= this.maxSize && !this.cache.has(key)) {
2021
2265
  this.evictOne(now);
2022
2266
  }
2023
2267
  this.cache.set(key, {
@@ -2087,7 +2331,7 @@ var SimpleCache = class {
2087
2331
  };
2088
2332
 
2089
2333
  // src/version.ts
2090
- var SDK_VERSION = "0.7.2";
2334
+ var SDK_VERSION = "0.7.3";
2091
2335
 
2092
2336
  // src/client/error.ts
2093
2337
  var RiverbankApiError = class _RiverbankApiError extends Error {
@@ -2362,6 +2606,19 @@ var CircuitOpenError = class extends Error {
2362
2606
  };
2363
2607
 
2364
2608
  // src/client/index.ts
2609
+ var prebuildModule = null;
2610
+ function getPrebuildModule() {
2611
+ if (prebuildModule !== null) return prebuildModule;
2612
+ if (typeof process === "undefined" || !process.versions?.node) {
2613
+ return null;
2614
+ }
2615
+ try {
2616
+ prebuildModule = (init_loader(), __toCommonJS(loader_exports));
2617
+ return prebuildModule;
2618
+ } catch {
2619
+ return null;
2620
+ }
2621
+ }
2365
2622
  setSdkVersion(SDK_VERSION);
2366
2623
  var DEFAULT_BROWSER_TIMEOUT_MS = 5e3;
2367
2624
  var DEFAULT_SERVER_TIMEOUT_MS = 8e3;
@@ -2378,6 +2635,24 @@ function isAbortError(error) {
2378
2635
  return false;
2379
2636
  }
2380
2637
  function getNetworkErrorCode(error) {
2638
+ if (error.name === "TimeoutError" || error.name === "AbortError") {
2639
+ return "network:timeout";
2640
+ }
2641
+ const nodeError = error;
2642
+ if (nodeError.code) {
2643
+ switch (nodeError.code) {
2644
+ case "ETIMEDOUT":
2645
+ case "ESOCKETTIMEDOUT":
2646
+ return "network:timeout";
2647
+ case "ENOTFOUND":
2648
+ case "EAI_AGAIN":
2649
+ return "network:dns_error";
2650
+ case "ECONNREFUSED":
2651
+ case "ECONNRESET":
2652
+ case "EPIPE":
2653
+ return "network:connection_error";
2654
+ }
2655
+ }
2381
2656
  const message = error.message.toLowerCase();
2382
2657
  if (message.includes("timeout") || message.includes("timed out")) {
2383
2658
  return "network:timeout";
@@ -2461,6 +2736,12 @@ function createRiverbankClient(config) {
2461
2736
  staleTtl: staleTtlMs
2462
2737
  });
2463
2738
  const circuitBreaker = new CircuitBreaker(circuitBreakerConfig);
2739
+ const prebuildDir = config.resilience?.prebuildDir;
2740
+ const prebuildMod = prebuildDir ? getPrebuildModule() : null;
2741
+ const prebuildLoader = prebuildMod?.canUsePrebuild() && prebuildDir ? new prebuildMod.PrebuildLoader({
2742
+ prebuildDir,
2743
+ maxPrebuildAgeSec: config.resilience?.maxPrebuildAgeSec
2744
+ }) : null;
2464
2745
  let lastStatus = null;
2465
2746
  let isDegraded = false;
2466
2747
  function emitStatus(source, data, details) {
@@ -2470,6 +2751,7 @@ function createRiverbankClient(config) {
2470
2751
  cacheKey: details.cacheKey,
2471
2752
  error: details.error,
2472
2753
  staleAgeSec: details.staleAgeSec,
2754
+ prebuildAgeSec: details.prebuildAgeSec,
2473
2755
  circuit: circuitBreaker.getState(),
2474
2756
  requestId: details.requestId,
2475
2757
  durationMs: details.durationMs
@@ -2510,13 +2792,20 @@ function createRiverbankClient(config) {
2510
2792
  }));
2511
2793
  }
2512
2794
  }
2513
- if (!options.force) {
2514
- const circuitState = circuitBreaker.getState();
2515
- emitStatus("error", null, statusDetails({
2516
- error: { code: "circuit_open", message: "Circuit breaker is open" }
2517
- }));
2518
- throw new CircuitOpenError(circuitState);
2795
+ if (!isPreview && options.prebuildFallback) {
2796
+ const prebuildResult = options.prebuildFallback();
2797
+ if (prebuildResult) {
2798
+ return emitStatus("prebuild", prebuildResult.data, statusDetails({
2799
+ prebuildAgeSec: prebuildResult.prebuildAgeSec,
2800
+ error: { code: "circuit_open", message: "Circuit breaker is open" }
2801
+ }));
2802
+ }
2519
2803
  }
2804
+ const circuitState = circuitBreaker.getState();
2805
+ emitStatus("error", null, statusDetails({
2806
+ error: { code: "circuit_open", message: "Circuit breaker is open" }
2807
+ }));
2808
+ throw new CircuitOpenError(circuitState);
2520
2809
  }
2521
2810
  try {
2522
2811
  let data;
@@ -2566,6 +2855,16 @@ function createRiverbankClient(config) {
2566
2855
  }));
2567
2856
  }
2568
2857
  }
2858
+ if (!isPreview && options.prebuildFallback) {
2859
+ const prebuildResult = options.prebuildFallback();
2860
+ if (prebuildResult) {
2861
+ const errorInfo2 = error instanceof RiverbankApiError ? { code: error.code, message: error.message } : { message: error.message };
2862
+ return emitStatus("prebuild", prebuildResult.data, statusDetails({
2863
+ prebuildAgeSec: prebuildResult.prebuildAgeSec,
2864
+ error: errorInfo2
2865
+ }));
2866
+ }
2867
+ }
2569
2868
  const errorInfo = error instanceof RiverbankApiError ? { code: error.code, message: error.message } : { message: error.message };
2570
2869
  emitStatus("error", null, statusDetails({ error: errorInfo }));
2571
2870
  throw error;
@@ -2591,20 +2890,29 @@ function createRiverbankClient(config) {
2591
2890
  );
2592
2891
  }
2593
2892
  const cacheKey = `site:${slug || domain || id}`;
2893
+ const siteId = id || slug || domain;
2594
2894
  return resilientFetch(cacheKey, async (sig) => {
2595
2895
  const apiParams = {};
2596
2896
  if (params.slug) apiParams.slug = params.slug;
2597
2897
  if (params.domain) apiParams.domain = params.domain;
2598
2898
  if (params.id) apiParams.id = params.id;
2599
2899
  return await apiClient({ endpoint: "getSite", params: apiParams, options: { signal: sig } });
2600
- }, { signal });
2900
+ }, {
2901
+ signal,
2902
+ prebuildFallback: prebuildLoader && siteId ? () => prebuildLoader.loadSite(siteId) : void 0
2903
+ });
2601
2904
  },
2602
2905
  async getPage(params) {
2603
- const { siteId, path, preview = false, signal } = params;
2604
- const cacheKey = `page:${siteId}:${path}:${preview}`;
2906
+ const { siteId, path: path2, preview = false, signal } = params;
2907
+ const cacheKey = `page:${siteId}:${path2}:${preview}`;
2605
2908
  return resilientFetch(cacheKey, async (sig) => {
2606
- return await apiClient({ endpoint: "getContentByPath", params: { siteId }, body: { path, preview }, options: { signal: sig } });
2607
- }, { preview, signal });
2909
+ return await apiClient({ endpoint: "getContentByPath", params: { siteId }, body: { path: path2, preview }, options: { signal: sig } });
2910
+ }, {
2911
+ preview,
2912
+ signal,
2913
+ // Prebuild fallback only for published pages (not preview)
2914
+ prebuildFallback: prebuildLoader && !preview ? () => prebuildLoader.loadPage(siteId, path2) : void 0
2915
+ });
2608
2916
  },
2609
2917
  async getEntries(params) {
2610
2918
  const { siteId, contentType, limit, offset, order, preview = false, mode, entryIds, includeMeta, signal } = params;
@@ -2633,7 +2941,12 @@ function createRiverbankClient(config) {
2633
2941
  }
2634
2942
  };
2635
2943
  return await apiClient({ endpoint: "listPublishedEntries", params: apiParams, options: { signal: sig } });
2636
- }, { preview, signal });
2944
+ }, {
2945
+ preview,
2946
+ signal,
2947
+ // Prebuild fallback only for published entries (not preview, not manual mode)
2948
+ prebuildFallback: prebuildLoader && !preview ? () => prebuildLoader.loadEntries(siteId, params) : void 0
2949
+ });
2637
2950
  },
2638
2951
  async getEntry(params) {
2639
2952
  const { siteId, contentType, slug, signal } = params;
@@ -2698,15 +3011,15 @@ function createRiverbankClient(config) {
2698
3011
  }, { signal });
2699
3012
  },
2700
3013
  async checkRedirect(params) {
2701
- const { siteId, path, signal } = params;
2702
- if (!siteId || !path) {
3014
+ const { siteId, path: path2, signal } = params;
3015
+ if (!siteId || !path2) {
2703
3016
  throw new Error("checkRedirect() requires siteId and path");
2704
3017
  }
2705
- const cacheKey = `redirect:${siteId}:${path}`;
3018
+ const cacheKey = `redirect:${siteId}:${path2}`;
2706
3019
  return resilientFetch(cacheKey, async (sig) => {
2707
3020
  return await apiClient({
2708
3021
  endpoint: "checkRedirect",
2709
- params: { site: siteId, path },
3022
+ params: { site: siteId, path: path2 },
2710
3023
  options: { signal: sig }
2711
3024
  });
2712
3025
  }, { signal });
@@ -2726,6 +3039,14 @@ function createRiverbankClient(config) {
2726
3039
  export {
2727
3040
  API_ENDPOINTS,
2728
3041
  buildEndpointURL,
3042
+ SDK_VERSION,
3043
+ PREBUILD_PAGE_SIZE,
3044
+ DEFAULT_PREBUILD_DIR,
3045
+ init_constants,
3046
+ canUsePrebuild,
3047
+ PrebuildLoader,
3048
+ createPrebuildLoader,
3049
+ init_loader,
2729
3050
  createRiverbankClient
2730
3051
  };
2731
- //# sourceMappingURL=chunk-5JT452F2.mjs.map
3052
+ //# sourceMappingURL=chunk-NFQLH5IA.mjs.map