@riverbankcms/sdk 0.4.3 → 0.5.1

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 (178) hide show
  1. package/README.md +84 -0
  2. package/dist/cli/index.js +3463 -120
  3. package/dist/cli/index.js.map +1 -1
  4. package/dist/client/analytics.js +1 -1
  5. package/dist/client/analytics.js.map +1 -1
  6. package/dist/client/analytics.mjs +1 -1
  7. package/dist/client/analytics.mjs.map +1 -1
  8. package/dist/client/bookings.js +6 -6
  9. package/dist/client/bookings.js.map +1 -1
  10. package/dist/client/bookings.mjs +6 -6
  11. package/dist/client/bookings.mjs.map +1 -1
  12. package/dist/client/client.d.mts +2 -2
  13. package/dist/client/client.d.ts +2 -2
  14. package/dist/client/client.js +1379 -519
  15. package/dist/client/client.js.map +1 -1
  16. package/dist/client/client.mjs +1379 -519
  17. package/dist/client/client.mjs.map +1 -1
  18. package/dist/client/hooks.d.mts +2 -2
  19. package/dist/client/hooks.d.ts +2 -2
  20. package/dist/client/hooks.js +26 -11
  21. package/dist/client/hooks.js.map +1 -1
  22. package/dist/client/hooks.mjs +26 -11
  23. package/dist/client/hooks.mjs.map +1 -1
  24. package/dist/client/rendering/client.js +20 -14
  25. package/dist/client/rendering/client.js.map +1 -1
  26. package/dist/client/rendering/client.mjs +20 -14
  27. package/dist/client/rendering/client.mjs.map +1 -1
  28. package/dist/client/usePage-BTPnCuWC.d.mts +6511 -0
  29. package/dist/client/usePage-BXjk8BhD.d.mts +6704 -0
  30. package/dist/client/usePage-BafOS9UT.d.mts +6512 -0
  31. package/dist/client/usePage-BiOReg0_.d.ts +6704 -0
  32. package/dist/client/usePage-Bnx-kA6x.d.mts +6670 -0
  33. package/dist/client/usePage-DoPI6b8V.d.ts +6511 -0
  34. package/dist/client/usePage-QNWArrVO.d.ts +6670 -0
  35. package/dist/client/usePage-fBgPB6Oq.d.ts +6512 -0
  36. package/dist/server/{Layout-CXI_VkhN.d.ts → Layout-BClXUTsd.d.mts} +4 -4
  37. package/dist/server/{Layout-p6f3TLw9.d.mts → Layout-UXGjXv8M.d.ts} +4 -4
  38. package/dist/server/{chunk-6JBKKV3G.js → chunk-2KCF2DNK.js} +30 -10
  39. package/dist/server/chunk-2KCF2DNK.js.map +1 -0
  40. package/dist/server/chunk-5STV4MWD.js +189 -0
  41. package/dist/server/chunk-5STV4MWD.js.map +1 -0
  42. package/dist/server/{chunk-VHDDXCK6.js → chunk-7UPVCT3K.js} +1206 -496
  43. package/dist/server/chunk-7UPVCT3K.js.map +1 -0
  44. package/dist/server/{chunk-7DS4Q3GA.mjs → chunk-AEFWG657.mjs} +3 -3
  45. package/dist/server/chunk-AEFWG657.mjs.map +1 -0
  46. package/dist/server/{chunk-USQF2XTU.mjs → chunk-BYBJA6SP.mjs} +26 -11
  47. package/dist/server/chunk-BYBJA6SP.mjs.map +1 -0
  48. package/dist/server/{chunk-ES6QDZUX.mjs → chunk-C6FIJC7T.mjs} +2 -2
  49. package/dist/server/{chunk-N3PX76AP.mjs → chunk-CMABGYGI.mjs} +269 -135
  50. package/dist/server/chunk-CMABGYGI.mjs.map +1 -0
  51. package/dist/server/{chunk-TO7FD6TQ.js → chunk-I2D7KOEA.js} +4 -4
  52. package/dist/server/{chunk-TO7FD6TQ.js.map → chunk-I2D7KOEA.js.map} +1 -1
  53. package/dist/server/{chunk-R5B6IOFQ.js → chunk-KA74YRK6.js} +269 -135
  54. package/dist/server/chunk-KA74YRK6.js.map +1 -0
  55. package/dist/server/chunk-KFLZGNPO.mjs +189 -0
  56. package/dist/server/chunk-KFLZGNPO.mjs.map +1 -0
  57. package/dist/server/chunk-L5EA4FXU.mjs +134 -0
  58. package/dist/server/chunk-L5EA4FXU.mjs.map +1 -0
  59. package/dist/server/{chunk-U2NI3TS3.mjs → chunk-LNOUXALA.mjs} +1135 -425
  60. package/dist/server/chunk-LNOUXALA.mjs.map +1 -0
  61. package/dist/server/{chunk-24F6FTCI.mjs → chunk-OSF34JTQ.mjs} +4 -4
  62. package/dist/server/{chunk-G35R7N7B.js → chunk-P3NNN73G.js} +3 -3
  63. package/dist/server/{chunk-G35R7N7B.js.map → chunk-P3NNN73G.js.map} +1 -1
  64. package/dist/server/{chunk-I6K5REFT.mjs → chunk-P4K63SBZ.mjs} +24 -4
  65. package/dist/server/chunk-P4K63SBZ.mjs.map +1 -0
  66. package/dist/server/{chunk-HOY77YBF.js → chunk-RVDS7VSP.js} +5 -5
  67. package/dist/server/chunk-RVDS7VSP.js.map +1 -0
  68. package/dist/server/{chunk-2SSEBAHC.js → chunk-TT5JWA4X.js} +9 -9
  69. package/dist/server/{chunk-2SSEBAHC.js.map → chunk-TT5JWA4X.js.map} +1 -1
  70. package/dist/server/chunk-VSFQRHYZ.js +134 -0
  71. package/dist/server/chunk-VSFQRHYZ.js.map +1 -0
  72. package/dist/server/{chunk-EGTDJ4PL.js → chunk-YYO3RIFO.js} +26 -11
  73. package/dist/server/chunk-YYO3RIFO.js.map +1 -0
  74. package/dist/server/{chunk-OP2GHK27.mjs → chunk-Z5ZA6Q4D.mjs} +2 -2
  75. package/dist/server/{components-Dhiemsjd.d.ts → components-BmaJxgCV.d.mts} +20 -75
  76. package/dist/server/{components-C75e4poV.d.mts → components-DppHY5oD.d.ts} +20 -75
  77. package/dist/server/components.d.mts +11 -8
  78. package/dist/server/components.d.ts +11 -8
  79. package/dist/server/components.js +5 -4
  80. package/dist/server/components.js.map +1 -1
  81. package/dist/server/components.mjs +4 -3
  82. package/dist/server/config-validation.d.mts +3 -3
  83. package/dist/server/config-validation.d.ts +3 -3
  84. package/dist/server/config-validation.js +9 -5
  85. package/dist/server/config-validation.js.map +1 -1
  86. package/dist/server/config-validation.mjs +8 -4
  87. package/dist/server/config.d.mts +243 -5
  88. package/dist/server/config.d.ts +243 -5
  89. package/dist/server/config.js +72 -5
  90. package/dist/server/config.js.map +1 -1
  91. package/dist/server/config.mjs +72 -5
  92. package/dist/server/config.mjs.map +1 -1
  93. package/dist/server/core-DsNWrl3o.d.mts +44 -0
  94. package/dist/server/core-DsNWrl3o.d.ts +44 -0
  95. package/dist/server/data.d.mts +4 -3
  96. package/dist/server/data.d.ts +4 -3
  97. package/dist/server/data.js +3 -3
  98. package/dist/server/data.mjs +2 -2
  99. package/dist/server/{index-CAwBj3-A.d.ts → index-Bucs6UqG.d.mts} +2 -1
  100. package/dist/server/{index-C6o9LPvq.d.mts → index-Cp7tJuRt.d.ts} +2 -1
  101. package/dist/server/index.d.mts +84 -6
  102. package/dist/server/index.d.ts +84 -6
  103. package/dist/server/index.js +91 -2
  104. package/dist/server/index.js.map +1 -1
  105. package/dist/server/index.mjs +90 -1
  106. package/dist/server/index.mjs.map +1 -1
  107. package/dist/server/link-DjxLyC82.d.mts +23 -0
  108. package/dist/server/link-DjxLyC82.d.ts +23 -0
  109. package/dist/server/{loadContent-CdXfuCuE.d.mts → loadContent-BS-3wesN.d.mts} +4 -4
  110. package/dist/server/{loadContent-CsvQRoxb.d.ts → loadContent-Buvmudee.d.ts} +4 -4
  111. package/dist/server/{loadPage-p3AWwwrd.d.mts → loadPage-B8mQUUSo.d.mts} +5 -46
  112. package/dist/server/loadPage-DNQTTRHL.mjs +11 -0
  113. package/dist/server/{loadPage-BA0HiT-6.d.ts → loadPage-DP3nrHBi.d.ts} +5 -46
  114. package/dist/server/loadPage-IDGVDFBB.js +11 -0
  115. package/dist/server/{loadPage-DLC7DJZP.js.map → loadPage-IDGVDFBB.js.map} +1 -1
  116. package/dist/server/metadata.d.mts +6 -4
  117. package/dist/server/metadata.d.ts +6 -4
  118. package/dist/server/navigation.d.mts +199 -29
  119. package/dist/server/navigation.d.ts +199 -29
  120. package/dist/server/navigation.js +27 -43
  121. package/dist/server/navigation.js.map +1 -1
  122. package/dist/server/navigation.mjs +20 -36
  123. package/dist/server/navigation.mjs.map +1 -1
  124. package/dist/server/rendering/server.d.mts +8 -6
  125. package/dist/server/rendering/server.d.ts +8 -6
  126. package/dist/server/rendering/server.js +7 -6
  127. package/dist/server/rendering/server.js.map +1 -1
  128. package/dist/server/rendering/server.mjs +6 -5
  129. package/dist/server/rendering.d.mts +14 -10
  130. package/dist/server/rendering.d.ts +14 -10
  131. package/dist/server/rendering.js +9 -8
  132. package/dist/server/rendering.js.map +1 -1
  133. package/dist/server/rendering.mjs +8 -7
  134. package/dist/server/richTextSchema-DURiozvD.d.mts +62 -0
  135. package/dist/server/richTextSchema-DURiozvD.d.ts +62 -0
  136. package/dist/server/routing.d.mts +178 -11
  137. package/dist/server/routing.d.ts +178 -11
  138. package/dist/server/routing.js +95 -2
  139. package/dist/server/routing.js.map +1 -1
  140. package/dist/server/routing.mjs +94 -1
  141. package/dist/server/routing.mjs.map +1 -1
  142. package/dist/server/{schema-Bpy9N5ZI.d.mts → schema-Z6-afHJG.d.mts} +1 -1
  143. package/dist/server/{schema-Bpy9N5ZI.d.ts → schema-Z6-afHJG.d.ts} +1 -1
  144. package/dist/server/server.d.mts +9 -7
  145. package/dist/server/server.d.ts +9 -7
  146. package/dist/server/server.js +6 -6
  147. package/dist/server/server.mjs +5 -5
  148. package/dist/server/theme-bridge.js +8 -8
  149. package/dist/server/theme-bridge.mjs +2 -2
  150. package/dist/server/{types-Dj8B3QRb.d.ts → types-1cLz0vnq.d.mts} +55 -2
  151. package/dist/server/{types-txWsSxN7.d.mts → types-BjgZt8xJ.d.mts} +63 -2
  152. package/dist/server/{types-CdhKJrB0.d.mts → types-BvcJU7zk.d.ts} +55 -2
  153. package/dist/server/{types-BWQ-TohG.d.ts → types-CVykEqXN.d.ts} +289 -83
  154. package/dist/server/{types-CL916r6x.d.ts → types-DLBhEPSt.d.ts} +63 -2
  155. package/dist/server/{types-BLf-hE50.d.mts → types-Dsu9wsUh.d.mts} +289 -83
  156. package/dist/server/{validation-DzvDwwRo.d.mts → validation-BGuRo8P1.d.mts} +18 -5
  157. package/dist/server/{validation-CoU8uAiu.d.ts → validation-DU2YE7u5.d.ts} +18 -5
  158. package/package.json +5 -1
  159. package/dist/server/chunk-6JBKKV3G.js.map +0 -1
  160. package/dist/server/chunk-7DS4Q3GA.mjs.map +0 -1
  161. package/dist/server/chunk-EGTDJ4PL.js.map +0 -1
  162. package/dist/server/chunk-HOY77YBF.js.map +0 -1
  163. package/dist/server/chunk-I6K5REFT.mjs.map +0 -1
  164. package/dist/server/chunk-LCYGQDAB.mjs +0 -835
  165. package/dist/server/chunk-LCYGQDAB.mjs.map +0 -1
  166. package/dist/server/chunk-N3PX76AP.mjs.map +0 -1
  167. package/dist/server/chunk-R5B6IOFQ.js.map +0 -1
  168. package/dist/server/chunk-TNYU5EIO.js +0 -835
  169. package/dist/server/chunk-TNYU5EIO.js.map +0 -1
  170. package/dist/server/chunk-U2NI3TS3.mjs.map +0 -1
  171. package/dist/server/chunk-USQF2XTU.mjs.map +0 -1
  172. package/dist/server/chunk-VHDDXCK6.js.map +0 -1
  173. package/dist/server/loadPage-DLC7DJZP.js +0 -11
  174. package/dist/server/loadPage-GEGN4UAL.mjs +0 -11
  175. /package/dist/server/{chunk-ES6QDZUX.mjs.map → chunk-C6FIJC7T.mjs.map} +0 -0
  176. /package/dist/server/{chunk-24F6FTCI.mjs.map → chunk-OSF34JTQ.mjs.map} +0 -0
  177. /package/dist/server/{chunk-OP2GHK27.mjs.map → chunk-Z5ZA6Q4D.mjs.map} +0 -0
  178. /package/dist/server/{loadPage-GEGN4UAL.mjs.map → loadPage-DNQTTRHL.mjs.map} +0 -0
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-A2FZMRDW.mjs";
5
5
  import {
6
6
  prefetchBlockData
7
- } from "./chunk-7DS4Q3GA.mjs";
7
+ } from "./chunk-AEFWG657.mjs";
8
8
 
9
9
  // src/rendering/helpers/loadPage.ts
10
10
  async function loadPage(params) {
@@ -85,4 +85,4 @@ async function loadPage(params) {
85
85
  export {
86
86
  loadPage
87
87
  };
88
- //# sourceMappingURL=chunk-ES6QDZUX.mjs.map
88
+ //# sourceMappingURL=chunk-C6FIJC7T.mjs.map
@@ -182,6 +182,28 @@ var ENDPOINT_DEFINITIONS = {
182
182
  tags: ["site-{siteId}", "api-keys", "access-logs"],
183
183
  responseKind: "json"
184
184
  },
185
+ // Management API Keys (SDK write operations)
186
+ listManagementKeys: {
187
+ path: "/sites/{siteId}/api-keys/management",
188
+ method: "GET",
189
+ auth: "user",
190
+ tags: ["site-{siteId}", "api-keys", "management-keys"],
191
+ responseKind: "json"
192
+ },
193
+ createManagementKey: {
194
+ path: "/sites/{siteId}/api-keys/management",
195
+ method: "POST",
196
+ auth: "user",
197
+ tags: ["site-{siteId}", "api-keys", "management-keys"],
198
+ responseKind: "json"
199
+ },
200
+ revokeManagementKey: {
201
+ path: "/sites/{siteId}/api-keys/management",
202
+ method: "DELETE",
203
+ auth: "user",
204
+ tags: ["site-{siteId}", "api-keys", "management-keys"],
205
+ responseKind: "json"
206
+ },
185
207
  getBookingSettings: {
186
208
  path: "/sites/{siteId}/bookings/settings",
187
209
  method: "GET",
@@ -1457,6 +1479,15 @@ var ENDPOINT_DEFINITIONS = {
1457
1479
  auth: "public",
1458
1480
  responseKind: "json"
1459
1481
  },
1482
+ // Resolve event occurrence by URL segment (date or UUID)
1483
+ resolveEventOccurrence: {
1484
+ path: "/public/sites/{siteId}/events/occurrences/resolve",
1485
+ method: "GET",
1486
+ revalidate: 60,
1487
+ tags: ["public-events-{siteId}", "event-occurrence"],
1488
+ auth: "public",
1489
+ responseKind: "json"
1490
+ },
1460
1491
  // Public event registration
1461
1492
  registerForEvent: {
1462
1493
  path: "/public/sites/{siteId}/events/register",
@@ -1634,6 +1665,20 @@ if (typeof window === "undefined") {
1634
1665
  revalidateTag = null;
1635
1666
  }
1636
1667
  }
1668
+ var sdkVersion;
1669
+ function generateRequestId() {
1670
+ if (typeof crypto !== "undefined" && typeof crypto.randomUUID === "function") {
1671
+ return crypto.randomUUID();
1672
+ }
1673
+ return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
1674
+ const r = Math.random() * 16 | 0;
1675
+ const v = c === "x" ? r : r & 3 | 8;
1676
+ return v.toString(16);
1677
+ });
1678
+ }
1679
+ function setSdkVersion(version) {
1680
+ sdkVersion = version;
1681
+ }
1637
1682
  var ApiRequestError = class extends Error {
1638
1683
  constructor(message, options) {
1639
1684
  super(message);
@@ -1645,6 +1690,7 @@ var ApiRequestError = class extends Error {
1645
1690
  this.requestId = options.requestId;
1646
1691
  this.body = options.body;
1647
1692
  this.cause = options.cause;
1693
+ this.errorCode = options.errorCode;
1648
1694
  }
1649
1695
  };
1650
1696
  function buildEndpointURL2(baseURL, endpoint) {
@@ -1681,6 +1727,29 @@ async function parseErrorBody(response) {
1681
1727
  return null;
1682
1728
  }
1683
1729
  }
1730
+ function buildSuccessEnvelope(data, requestId) {
1731
+ return {
1732
+ success: true,
1733
+ data,
1734
+ meta: {
1735
+ requestId: requestId ?? generateRequestId(),
1736
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
1737
+ apiVersion: "2025-01-01"
1738
+ }
1739
+ };
1740
+ }
1741
+ function buildErrorEnvelope(code, message, status, requestId) {
1742
+ return {
1743
+ success: false,
1744
+ error: {
1745
+ code,
1746
+ message,
1747
+ requestId: requestId ?? generateRequestId(),
1748
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
1749
+ status
1750
+ }
1751
+ };
1752
+ }
1684
1753
  async function parseSuccessResponse(endpoint, response, config) {
1685
1754
  const responseKind = config.responseKind ?? "json";
1686
1755
  const auth = config.auth ?? "user";
@@ -1688,14 +1757,15 @@ async function parseSuccessResponse(endpoint, response, config) {
1688
1757
  switch (responseKind) {
1689
1758
  case "json": {
1690
1759
  if (response.status === 204 || response.status === 205 || response.status === 304) {
1691
- return void 0;
1760
+ return buildSuccessEnvelope(void 0, requestId);
1692
1761
  }
1693
1762
  const raw = await response.text();
1694
1763
  if (!raw.trim()) {
1695
- return void 0;
1764
+ return buildSuccessEnvelope(void 0, requestId);
1696
1765
  }
1766
+ let parsed;
1697
1767
  try {
1698
- return JSON.parse(raw);
1768
+ parsed = JSON.parse(raw);
1699
1769
  } catch (cause) {
1700
1770
  throw new ApiRequestError(
1701
1771
  `Failed to parse JSON response for endpoint ${String(endpoint)}`,
@@ -1710,32 +1780,33 @@ async function parseSuccessResponse(endpoint, response, config) {
1710
1780
  }
1711
1781
  );
1712
1782
  }
1783
+ if (parsed && typeof parsed === "object" && "success" in parsed && typeof parsed.success === "boolean") {
1784
+ return parsed;
1785
+ }
1786
+ return buildSuccessEnvelope(parsed, requestId);
1713
1787
  }
1714
1788
  case "text": {
1715
- return await response.text();
1789
+ const text = await response.text();
1790
+ return buildSuccessEnvelope(text, requestId);
1716
1791
  }
1717
1792
  case "stream": {
1718
1793
  const body = response.body;
1719
1794
  if (!body) {
1720
- throw new ApiRequestError(
1795
+ return buildErrorEnvelope(
1796
+ "server:internal_error",
1721
1797
  `Expected a streamed body for endpoint ${String(endpoint)}`,
1722
- {
1723
- endpoint,
1724
- status: response.status,
1725
- method: config.method,
1726
- auth,
1727
- requestId
1728
- }
1798
+ response.status,
1799
+ requestId
1729
1800
  );
1730
1801
  }
1731
1802
  const stream = body;
1732
- return stream;
1803
+ return buildSuccessEnvelope(stream, requestId);
1733
1804
  }
1734
1805
  case "void": {
1735
- return void 0;
1806
+ return buildSuccessEnvelope(void 0, requestId);
1736
1807
  }
1737
1808
  default: {
1738
- return void 0;
1809
+ return buildSuccessEnvelope(void 0, requestId);
1739
1810
  }
1740
1811
  }
1741
1812
  }
@@ -1801,11 +1872,15 @@ function createRawCMSClient(headers = {}, baseUrl) {
1801
1872
  const requestInit = {
1802
1873
  method,
1803
1874
  ...options,
1875
+ // Include credentials for same-origin requests (sends cookies for auth)
1876
+ credentials: "same-origin",
1804
1877
  // Don't include body for GET/HEAD requests
1805
1878
  body: isGetOrHead ? void 0 : isFormData ? body : body ? JSON.stringify(body) : void 0,
1806
1879
  headers: {
1807
1880
  ...options.headers,
1808
1881
  ...headers,
1882
+ // Include SDK version if set
1883
+ ...sdkVersion && { "x-sdk-version": sdkVersion },
1809
1884
  // Don't set Content-Type for GET/HEAD requests without body
1810
1885
  ...isGetOrHead ? {} : isFormData ? {} : { "Content-Type": "application/json" }
1811
1886
  },
@@ -1859,94 +1934,30 @@ function createBearerAPIClient(token, baseUrl) {
1859
1934
  return createCMSClient(authHeaders, baseUrl);
1860
1935
  }
1861
1936
 
1862
- // ../api/src/aiPlayground.ts
1863
- import { z } from "zod";
1864
- var Rfc6902PatchOp = z.discriminatedUnion("op", [
1865
- // Standard RFC-6902 operations
1866
- z.object({
1867
- op: z.literal("add"),
1868
- path: z.string(),
1869
- value: z.unknown()
1870
- }),
1871
- z.object({
1872
- op: z.literal("remove"),
1873
- path: z.string()
1874
- }),
1875
- z.object({
1876
- op: z.literal("replace"),
1877
- path: z.string(),
1878
- value: z.unknown()
1879
- }),
1880
- z.object({
1881
- op: z.literal("move"),
1882
- from: z.string(),
1883
- path: z.string()
1884
- }),
1885
- z.object({
1886
- op: z.literal("copy"),
1887
- from: z.string(),
1888
- path: z.string()
1889
- }),
1890
- // Block-level operations (Phase 2)
1891
- z.object({
1892
- op: z.literal("add_block"),
1893
- blockKind: z.string(),
1894
- afterBlockId: z.string().nullable(),
1895
- content: z.record(z.string(), z.unknown()),
1896
- rationale: z.string()
1897
- }),
1898
- z.object({
1899
- op: z.literal("delete_block"),
1900
- blockId: z.string(),
1901
- rationale: z.string()
1902
- }),
1903
- z.object({
1904
- op: z.literal("reorder_block"),
1905
- blockId: z.string(),
1906
- afterBlockId: z.string().nullable(),
1907
- rationale: z.string()
1908
- })
1909
- ]);
1910
- var PatchEnvelope = z.object({
1911
- blockId: z.string(),
1912
- blockKind: z.string().optional(),
1913
- blockPurpose: z.string().optional().nullable(),
1914
- ops: z.array(Rfc6902PatchOp),
1915
- rationale: z.string(),
1916
- currentContent: z.record(z.string(), z.unknown()).optional()
1917
- });
1918
- var ContentUpdateResponse = z.object({
1919
- patches: z.array(PatchEnvelope),
1920
- assistantMessage: z.string()
1921
- });
1922
- var PlaygroundProposeRequest = z.object({
1923
- request: z.string().min(1).max(2e3)
1924
- });
1925
- var PlaygroundProposeResponse = z.object({
1926
- patches: z.array(PatchEnvelope),
1927
- assistantMessage: z.string(),
1928
- validation: z.object({
1929
- valid: z.boolean(),
1930
- issues: z.array(z.string()),
1931
- filtered: z.number()
1932
- })
1933
- });
1934
- var MultiPagePatchEnvelope = z.object({
1935
- pageId: z.string(),
1936
- blockId: z.string().optional(),
1937
- // Not present for page-level ops
1938
- blockKind: z.string().optional(),
1939
- blockPurpose: z.string().optional().nullable(),
1940
- ops: z.array(Rfc6902PatchOp),
1941
- rationale: z.string(),
1942
- currentContent: z.record(z.string(), z.unknown()).optional()
1943
- });
1944
- var MultiPageUpdateResponse = z.object({
1945
- patches: z.array(MultiPagePatchEnvelope),
1946
- assistantMessage: z.string(),
1947
- pagesModified: z.number(),
1948
- toolCallsUsed: z.number()
1949
- });
1937
+ // ../api/src/common/envelope.ts
1938
+ function isApiError(result) {
1939
+ return result.success === false;
1940
+ }
1941
+ function isApiSuccess(result) {
1942
+ return result.success === true;
1943
+ }
1944
+ var ApiEnvelopeError = class extends Error {
1945
+ constructor(error) {
1946
+ super(error.message);
1947
+ this.name = "ApiEnvelopeError";
1948
+ this.code = error.code;
1949
+ this.requestId = error.requestId;
1950
+ this.timestamp = error.timestamp;
1951
+ this.status = error.status;
1952
+ this.fieldErrors = error.fieldErrors;
1953
+ }
1954
+ };
1955
+ function unwrapResponse(result) {
1956
+ if (isApiSuccess(result)) {
1957
+ return result.data;
1958
+ }
1959
+ throw new ApiEnvelopeError(result.error);
1960
+ }
1950
1961
 
1951
1962
  // src/client/cache.ts
1952
1963
  var SimpleCache = class {
@@ -1984,7 +1995,100 @@ var SimpleCache = class {
1984
1995
  }
1985
1996
  };
1986
1997
 
1998
+ // src/version.ts
1999
+ var SDK_VERSION = "0.5.0";
2000
+
2001
+ // src/client/error.ts
2002
+ var RiverbankApiError = class _RiverbankApiError extends Error {
2003
+ constructor(apiError) {
2004
+ super(apiError.message);
2005
+ this.name = "RiverbankApiError";
2006
+ this.code = apiError.code;
2007
+ this.requestId = apiError.requestId;
2008
+ this.status = apiError.status;
2009
+ this.fieldErrors = apiError.fieldErrors;
2010
+ this.timestamp = apiError.timestamp;
2011
+ Object.setPrototypeOf(this, _RiverbankApiError.prototype);
2012
+ }
2013
+ /**
2014
+ * Check if this error matches a specific error code
2015
+ *
2016
+ * @example
2017
+ * ```ts
2018
+ * if (error.is('auth:unauthenticated')) {
2019
+ * // Redirect to login
2020
+ * }
2021
+ * ```
2022
+ */
2023
+ is(code) {
2024
+ return this.code === code;
2025
+ }
2026
+ /**
2027
+ * Check if this is an authentication or authorization error
2028
+ *
2029
+ * Matches: auth:unauthenticated, auth:token_expired, auth:token_invalid,
2030
+ * auth:forbidden, auth:mfa_required, auth:insufficient_permissions
2031
+ */
2032
+ isAuthError() {
2033
+ return this.code.startsWith("auth:");
2034
+ }
2035
+ /**
2036
+ * Check if this is a validation error
2037
+ *
2038
+ * Matches: validation:invalid_input, validation:missing_field, validation:invalid_format
2039
+ */
2040
+ isValidationError() {
2041
+ return this.code.startsWith("validation:");
2042
+ }
2043
+ /**
2044
+ * Check if this is a resource error (not found, conflict, etc.)
2045
+ *
2046
+ * Matches: resource:not_found, resource:already_exists, resource:conflict, resource:gone
2047
+ */
2048
+ isResourceError() {
2049
+ return this.code.startsWith("resource:");
2050
+ }
2051
+ /**
2052
+ * Check if this is a rate limiting error
2053
+ */
2054
+ isRateLimitError() {
2055
+ return this.code.startsWith("rate_limit:");
2056
+ }
2057
+ /**
2058
+ * Check if this is a billing/payment error
2059
+ */
2060
+ isBillingError() {
2061
+ return this.code.startsWith("billing:");
2062
+ }
2063
+ /**
2064
+ * Check if this is a server error
2065
+ */
2066
+ isServerError() {
2067
+ return this.code.startsWith("server:");
2068
+ }
2069
+ };
2070
+
1987
2071
  // src/client/index.ts
2072
+ setSdkVersion(SDK_VERSION);
2073
+ function convertToTypedError(error) {
2074
+ if (error instanceof ApiEnvelopeError) {
2075
+ throw new RiverbankApiError({
2076
+ code: error.code,
2077
+ message: error.message,
2078
+ requestId: error.requestId,
2079
+ timestamp: error.timestamp,
2080
+ status: error.status,
2081
+ fieldErrors: error.fieldErrors
2082
+ });
2083
+ }
2084
+ if (error instanceof ApiRequestError && error.body && typeof error.body === "object") {
2085
+ const body = error.body;
2086
+ if (isApiError(body)) {
2087
+ throw new RiverbankApiError(body.error);
2088
+ }
2089
+ }
2090
+ throw error;
2091
+ }
1988
2092
  function createRiverbankClient(config) {
1989
2093
  if (!config.baseUrl) {
1990
2094
  throw new Error(
@@ -2011,7 +2115,13 @@ function createRiverbankClient(config) {
2011
2115
  return cached;
2012
2116
  }
2013
2117
  }
2014
- const data = await fetcher();
2118
+ let data;
2119
+ try {
2120
+ const response = await fetcher();
2121
+ data = unwrapResponse(response);
2122
+ } catch (error) {
2123
+ convertToTypedError(error);
2124
+ }
2015
2125
  if (cacheEnabled) {
2016
2126
  cache.set(cacheKey, data);
2017
2127
  }
@@ -2046,33 +2156,27 @@ function createRiverbankClient(config) {
2046
2156
  const entryIdsCacheKey = mode === "manual" && entryIds?.length ? entryIds.join(",") : "";
2047
2157
  const cacheKey = `entries:${siteId}:${contentType}:${limit ?? ""}:${offset ?? ""}:${order ?? ""}:${preview}:${mode ?? ""}:${entryIdsCacheKey}:${includeMeta ?? ""}`;
2048
2158
  return cachedFetch(cacheKey, async () => {
2049
- const apiParams = {
2050
- siteId,
2051
- type: contentType
2052
- };
2053
- if (typeof limit === "number") {
2054
- apiParams.limit = String(limit);
2055
- }
2056
- if (typeof offset === "number") {
2057
- apiParams.offset = String(offset);
2058
- }
2059
- if (includeMeta) {
2060
- apiParams.meta = "true";
2061
- }
2159
+ let orderParam;
2062
2160
  if (order === "newest") {
2063
- apiParams.order = "published_at.desc";
2161
+ orderParam = "published_at.desc";
2064
2162
  } else if (order === "oldest") {
2065
- apiParams.order = "published_at.asc";
2163
+ orderParam = "published_at.asc";
2066
2164
  } else if (order === "title") {
2067
- apiParams.order = "title.asc";
2068
- }
2069
- if (preview) {
2070
- apiParams.stage = "preview";
2071
- }
2072
- if (mode === "manual" && entryIds?.length) {
2073
- apiParams.mode = "manual";
2074
- apiParams.entryIds = JSON.stringify(entryIds);
2165
+ orderParam = "title.asc";
2075
2166
  }
2167
+ const apiParams = {
2168
+ siteId,
2169
+ type: contentType,
2170
+ ...typeof limit === "number" && { limit: String(limit) },
2171
+ ...typeof offset === "number" && { offset: String(offset) },
2172
+ ...includeMeta && { meta: "true" },
2173
+ ...orderParam && { order: orderParam },
2174
+ ...preview && { stage: "preview" },
2175
+ ...mode === "manual" && entryIds?.length && {
2176
+ mode: "manual",
2177
+ entryIds: JSON.stringify(entryIds)
2178
+ }
2179
+ };
2076
2180
  return await apiClient({ endpoint: "listPublishedEntries", params: apiParams });
2077
2181
  });
2078
2182
  },
@@ -2100,8 +2204,10 @@ function createRiverbankClient(config) {
2100
2204
  }
2101
2205
  const cacheKey = `public-booking-services:${siteId}:${ids ?? ""}`;
2102
2206
  return cachedFetch(cacheKey, async () => {
2103
- const apiParams = { siteId };
2104
- if (ids) apiParams.ids = ids;
2207
+ const apiParams = {
2208
+ siteId,
2209
+ ...ids && { ids }
2210
+ };
2105
2211
  return await apiClient({ endpoint: "getPublicBookingServices", params: apiParams });
2106
2212
  });
2107
2213
  },
@@ -2112,14 +2218,42 @@ function createRiverbankClient(config) {
2112
2218
  }
2113
2219
  const cacheKey = `public-events:${siteId}:${limit ?? ""}:${from ?? ""}:${to ?? ""}:${stage ?? ""}`;
2114
2220
  return cachedFetch(cacheKey, async () => {
2115
- const apiParams = { siteId };
2116
- if (typeof limit === "number") apiParams.limit = String(limit);
2117
- if (from) apiParams.from = from;
2118
- if (to) apiParams.to = to;
2119
- if (stage) apiParams.stage = stage;
2221
+ const apiParams = {
2222
+ siteId,
2223
+ ...typeof limit === "number" && { limit: String(limit) },
2224
+ ...from && { from },
2225
+ ...to && { to },
2226
+ ...stage && { stage }
2227
+ };
2120
2228
  return await apiClient({ endpoint: "listPublicEvents", params: apiParams });
2121
2229
  });
2122
2230
  },
2231
+ async resolveEventOccurrence(params) {
2232
+ const { siteId, entryId, segment } = params;
2233
+ if (!siteId || !entryId || !segment) {
2234
+ throw new Error("resolveEventOccurrence() requires siteId, entryId, and segment");
2235
+ }
2236
+ const cacheKey = `event-occurrence:${siteId}:${entryId}:${segment}`;
2237
+ return cachedFetch(cacheKey, async () => {
2238
+ return await apiClient({
2239
+ endpoint: "resolveEventOccurrence",
2240
+ params: { siteId, entryId, segment }
2241
+ });
2242
+ });
2243
+ },
2244
+ async checkRedirect(params) {
2245
+ const { siteId, path } = params;
2246
+ if (!siteId || !path) {
2247
+ throw new Error("checkRedirect() requires siteId and path");
2248
+ }
2249
+ const cacheKey = `redirect:${siteId}:${path}`;
2250
+ return cachedFetch(cacheKey, async () => {
2251
+ return await apiClient({
2252
+ endpoint: "checkRedirect",
2253
+ params: { site: siteId, path }
2254
+ });
2255
+ });
2256
+ },
2123
2257
  clearCache() {
2124
2258
  cache.clear();
2125
2259
  }
@@ -2133,4 +2267,4 @@ export {
2133
2267
  buildEndpointURL,
2134
2268
  createRiverbankClient
2135
2269
  };
2136
- //# sourceMappingURL=chunk-N3PX76AP.mjs.map
2270
+ //# sourceMappingURL=chunk-CMABGYGI.mjs.map