@riverbankcms/sdk 0.4.3 → 0.5.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 (176) hide show
  1. package/README.md +84 -0
  2. package/dist/cli/index.js +3104 -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 +1357 -519
  15. package/dist/client/client.js.map +1 -1
  16. package/dist/client/client.mjs +1357 -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-BafOS9UT.d.mts +6512 -0
  30. package/dist/client/usePage-Bnx-kA6x.d.mts +6670 -0
  31. package/dist/client/usePage-DoPI6b8V.d.ts +6511 -0
  32. package/dist/client/usePage-QNWArrVO.d.ts +6670 -0
  33. package/dist/client/usePage-fBgPB6Oq.d.ts +6512 -0
  34. package/dist/server/{Layout-CXI_VkhN.d.ts → Layout-B-q2Py4v.d.ts} +4 -4
  35. package/dist/server/{Layout-p6f3TLw9.d.mts → Layout-Cc5HUXAH.d.mts} +4 -4
  36. package/dist/server/{chunk-6JBKKV3G.js → chunk-2KCF2DNK.js} +30 -10
  37. package/dist/server/chunk-2KCF2DNK.js.map +1 -0
  38. package/dist/server/{chunk-N3PX76AP.mjs → chunk-4HIRA33Z.mjs} +247 -135
  39. package/dist/server/chunk-4HIRA33Z.mjs.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-R5B6IOFQ.js → chunk-6OSNCH4F.js} +247 -135
  43. package/dist/server/chunk-6OSNCH4F.js.map +1 -0
  44. package/dist/server/{chunk-VHDDXCK6.js → chunk-7UPVCT3K.js} +1206 -496
  45. package/dist/server/chunk-7UPVCT3K.js.map +1 -0
  46. package/dist/server/{chunk-7DS4Q3GA.mjs → chunk-AEFWG657.mjs} +3 -3
  47. package/dist/server/chunk-AEFWG657.mjs.map +1 -0
  48. package/dist/server/{chunk-USQF2XTU.mjs → chunk-BYBJA6SP.mjs} +26 -11
  49. package/dist/server/chunk-BYBJA6SP.mjs.map +1 -0
  50. package/dist/server/{chunk-ES6QDZUX.mjs → chunk-C6FIJC7T.mjs} +2 -2
  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-KFLZGNPO.mjs +189 -0
  54. package/dist/server/chunk-KFLZGNPO.mjs.map +1 -0
  55. package/dist/server/chunk-L5EA4FXU.mjs +134 -0
  56. package/dist/server/chunk-L5EA4FXU.mjs.map +1 -0
  57. package/dist/server/{chunk-U2NI3TS3.mjs → chunk-LNOUXALA.mjs} +1135 -425
  58. package/dist/server/chunk-LNOUXALA.mjs.map +1 -0
  59. package/dist/server/{chunk-24F6FTCI.mjs → chunk-OSF34JTQ.mjs} +4 -4
  60. package/dist/server/{chunk-G35R7N7B.js → chunk-P3NNN73G.js} +3 -3
  61. package/dist/server/{chunk-G35R7N7B.js.map → chunk-P3NNN73G.js.map} +1 -1
  62. package/dist/server/{chunk-I6K5REFT.mjs → chunk-P4K63SBZ.mjs} +24 -4
  63. package/dist/server/chunk-P4K63SBZ.mjs.map +1 -0
  64. package/dist/server/{chunk-HOY77YBF.js → chunk-RVDS7VSP.js} +5 -5
  65. package/dist/server/chunk-RVDS7VSP.js.map +1 -0
  66. package/dist/server/{chunk-2SSEBAHC.js → chunk-TT5JWA4X.js} +9 -9
  67. package/dist/server/{chunk-2SSEBAHC.js.map → chunk-TT5JWA4X.js.map} +1 -1
  68. package/dist/server/chunk-VSFQRHYZ.js +134 -0
  69. package/dist/server/chunk-VSFQRHYZ.js.map +1 -0
  70. package/dist/server/{chunk-EGTDJ4PL.js → chunk-YYO3RIFO.js} +26 -11
  71. package/dist/server/chunk-YYO3RIFO.js.map +1 -0
  72. package/dist/server/{chunk-OP2GHK27.mjs → chunk-Z5ZA6Q4D.mjs} +2 -2
  73. package/dist/server/{components-Dhiemsjd.d.ts → components-CU46ZkAv.d.mts} +20 -75
  74. package/dist/server/{components-C75e4poV.d.mts → components-DvozDwRN.d.ts} +20 -75
  75. package/dist/server/components.d.mts +11 -8
  76. package/dist/server/components.d.ts +11 -8
  77. package/dist/server/components.js +5 -4
  78. package/dist/server/components.js.map +1 -1
  79. package/dist/server/components.mjs +4 -3
  80. package/dist/server/config-validation.d.mts +3 -3
  81. package/dist/server/config-validation.d.ts +3 -3
  82. package/dist/server/config-validation.js +9 -5
  83. package/dist/server/config-validation.js.map +1 -1
  84. package/dist/server/config-validation.mjs +8 -4
  85. package/dist/server/config.d.mts +243 -5
  86. package/dist/server/config.d.ts +243 -5
  87. package/dist/server/config.js +72 -5
  88. package/dist/server/config.js.map +1 -1
  89. package/dist/server/config.mjs +72 -5
  90. package/dist/server/config.mjs.map +1 -1
  91. package/dist/server/core-DsNWrl3o.d.mts +44 -0
  92. package/dist/server/core-DsNWrl3o.d.ts +44 -0
  93. package/dist/server/data.d.mts +4 -3
  94. package/dist/server/data.d.ts +4 -3
  95. package/dist/server/data.js +3 -3
  96. package/dist/server/data.mjs +2 -2
  97. package/dist/server/{index-C6o9LPvq.d.mts → index-CJfMXZQr.d.ts} +2 -1
  98. package/dist/server/{index-CAwBj3-A.d.ts → index-Q7RLMAQ6.d.mts} +2 -1
  99. package/dist/server/index.d.mts +63 -6
  100. package/dist/server/index.d.ts +63 -6
  101. package/dist/server/index.js +91 -2
  102. package/dist/server/index.js.map +1 -1
  103. package/dist/server/index.mjs +90 -1
  104. package/dist/server/index.mjs.map +1 -1
  105. package/dist/server/link-DjxLyC82.d.mts +23 -0
  106. package/dist/server/link-DjxLyC82.d.ts +23 -0
  107. package/dist/server/{loadContent-CdXfuCuE.d.mts → loadContent-DgpSKWqY.d.mts} +4 -4
  108. package/dist/server/{loadContent-CsvQRoxb.d.ts → loadContent-GPvUI1bN.d.ts} +4 -4
  109. package/dist/server/{loadPage-p3AWwwrd.d.mts → loadPage-DGnIK7s4.d.mts} +5 -46
  110. package/dist/server/loadPage-DNQTTRHL.mjs +11 -0
  111. package/dist/server/{loadPage-BA0HiT-6.d.ts → loadPage-DW9WB-u9.d.ts} +5 -46
  112. package/dist/server/loadPage-IDGVDFBB.js +11 -0
  113. package/dist/server/{loadPage-DLC7DJZP.js.map → loadPage-IDGVDFBB.js.map} +1 -1
  114. package/dist/server/metadata.d.mts +6 -4
  115. package/dist/server/metadata.d.ts +6 -4
  116. package/dist/server/navigation.d.mts +199 -29
  117. package/dist/server/navigation.d.ts +199 -29
  118. package/dist/server/navigation.js +27 -43
  119. package/dist/server/navigation.js.map +1 -1
  120. package/dist/server/navigation.mjs +20 -36
  121. package/dist/server/navigation.mjs.map +1 -1
  122. package/dist/server/rendering/server.d.mts +8 -6
  123. package/dist/server/rendering/server.d.ts +8 -6
  124. package/dist/server/rendering/server.js +7 -6
  125. package/dist/server/rendering/server.js.map +1 -1
  126. package/dist/server/rendering/server.mjs +6 -5
  127. package/dist/server/rendering.d.mts +14 -10
  128. package/dist/server/rendering.d.ts +14 -10
  129. package/dist/server/rendering.js +9 -8
  130. package/dist/server/rendering.js.map +1 -1
  131. package/dist/server/rendering.mjs +8 -7
  132. package/dist/server/richTextSchema-DURiozvD.d.mts +62 -0
  133. package/dist/server/richTextSchema-DURiozvD.d.ts +62 -0
  134. package/dist/server/routing.d.mts +178 -11
  135. package/dist/server/routing.d.ts +178 -11
  136. package/dist/server/routing.js +95 -2
  137. package/dist/server/routing.js.map +1 -1
  138. package/dist/server/routing.mjs +94 -1
  139. package/dist/server/routing.mjs.map +1 -1
  140. package/dist/server/{schema-Bpy9N5ZI.d.mts → schema-Z6-afHJG.d.mts} +1 -1
  141. package/dist/server/{schema-Bpy9N5ZI.d.ts → schema-Z6-afHJG.d.ts} +1 -1
  142. package/dist/server/server.d.mts +9 -7
  143. package/dist/server/server.d.ts +9 -7
  144. package/dist/server/server.js +6 -6
  145. package/dist/server/server.mjs +5 -5
  146. package/dist/server/theme-bridge.js +8 -8
  147. package/dist/server/theme-bridge.mjs +2 -2
  148. package/dist/server/{types-Dj8B3QRb.d.ts → types-0f4PIlgx.d.mts} +55 -2
  149. package/dist/server/{types-txWsSxN7.d.mts → types-BjgZt8xJ.d.mts} +63 -2
  150. package/dist/server/{types-BWQ-TohG.d.ts → types-C28kMfa1.d.ts} +254 -82
  151. package/dist/server/{types-CL916r6x.d.ts → types-DLBhEPSt.d.ts} +63 -2
  152. package/dist/server/{types-BLf-hE50.d.mts → types-DuzJZKJI.d.mts} +254 -82
  153. package/dist/server/{types-CdhKJrB0.d.mts → types-kOQyCFXO.d.ts} +55 -2
  154. package/dist/server/{validation-DzvDwwRo.d.mts → validation-BGuRo8P1.d.mts} +18 -5
  155. package/dist/server/{validation-CoU8uAiu.d.ts → validation-DU2YE7u5.d.ts} +18 -5
  156. package/package.json +3 -1
  157. package/dist/server/chunk-6JBKKV3G.js.map +0 -1
  158. package/dist/server/chunk-7DS4Q3GA.mjs.map +0 -1
  159. package/dist/server/chunk-EGTDJ4PL.js.map +0 -1
  160. package/dist/server/chunk-HOY77YBF.js.map +0 -1
  161. package/dist/server/chunk-I6K5REFT.mjs.map +0 -1
  162. package/dist/server/chunk-LCYGQDAB.mjs +0 -835
  163. package/dist/server/chunk-LCYGQDAB.mjs.map +0 -1
  164. package/dist/server/chunk-N3PX76AP.mjs.map +0 -1
  165. package/dist/server/chunk-R5B6IOFQ.js.map +0 -1
  166. package/dist/server/chunk-TNYU5EIO.js +0 -835
  167. package/dist/server/chunk-TNYU5EIO.js.map +0 -1
  168. package/dist/server/chunk-U2NI3TS3.mjs.map +0 -1
  169. package/dist/server/chunk-USQF2XTU.mjs.map +0 -1
  170. package/dist/server/chunk-VHDDXCK6.js.map +0 -1
  171. package/dist/server/loadPage-DLC7DJZP.js +0 -11
  172. package/dist/server/loadPage-GEGN4UAL.mjs +0 -11
  173. /package/dist/server/{chunk-ES6QDZUX.mjs.map → chunk-C6FIJC7T.mjs.map} +0 -0
  174. /package/dist/server/{chunk-24F6FTCI.mjs.map → chunk-OSF34JTQ.mjs.map} +0 -0
  175. /package/dist/server/{chunk-OP2GHK27.mjs.map → chunk-Z5ZA6Q4D.mjs.map} +0 -0
  176. /package/dist/server/{loadPage-GEGN4UAL.mjs.map → loadPage-DNQTTRHL.mjs.map} +0 -0
@@ -1457,6 +1457,15 @@ var ENDPOINT_DEFINITIONS = {
1457
1457
  auth: "public",
1458
1458
  responseKind: "json"
1459
1459
  },
1460
+ // Resolve event occurrence by URL segment (date or UUID)
1461
+ resolveEventOccurrence: {
1462
+ path: "/public/sites/{siteId}/events/occurrences/resolve",
1463
+ method: "GET",
1464
+ revalidate: 60,
1465
+ tags: ["public-events-{siteId}", "event-occurrence"],
1466
+ auth: "public",
1467
+ responseKind: "json"
1468
+ },
1460
1469
  // Public event registration
1461
1470
  registerForEvent: {
1462
1471
  path: "/public/sites/{siteId}/events/register",
@@ -1634,6 +1643,20 @@ if (typeof window === "undefined") {
1634
1643
  revalidateTag = null;
1635
1644
  }
1636
1645
  }
1646
+ var sdkVersion;
1647
+ function generateRequestId() {
1648
+ if (typeof crypto !== "undefined" && typeof crypto.randomUUID === "function") {
1649
+ return crypto.randomUUID();
1650
+ }
1651
+ return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
1652
+ const r = Math.random() * 16 | 0;
1653
+ const v = c === "x" ? r : r & 3 | 8;
1654
+ return v.toString(16);
1655
+ });
1656
+ }
1657
+ function setSdkVersion(version) {
1658
+ sdkVersion = version;
1659
+ }
1637
1660
  var ApiRequestError = class extends Error {
1638
1661
  constructor(message, options) {
1639
1662
  super(message);
@@ -1645,6 +1668,7 @@ var ApiRequestError = class extends Error {
1645
1668
  this.requestId = options.requestId;
1646
1669
  this.body = options.body;
1647
1670
  this.cause = options.cause;
1671
+ this.errorCode = options.errorCode;
1648
1672
  }
1649
1673
  };
1650
1674
  function buildEndpointURL2(baseURL, endpoint) {
@@ -1681,6 +1705,29 @@ async function parseErrorBody(response) {
1681
1705
  return null;
1682
1706
  }
1683
1707
  }
1708
+ function buildSuccessEnvelope(data, requestId) {
1709
+ return {
1710
+ success: true,
1711
+ data,
1712
+ meta: {
1713
+ requestId: requestId ?? generateRequestId(),
1714
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
1715
+ apiVersion: "2025-01-01"
1716
+ }
1717
+ };
1718
+ }
1719
+ function buildErrorEnvelope(code, message, status, requestId) {
1720
+ return {
1721
+ success: false,
1722
+ error: {
1723
+ code,
1724
+ message,
1725
+ requestId: requestId ?? generateRequestId(),
1726
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
1727
+ status
1728
+ }
1729
+ };
1730
+ }
1684
1731
  async function parseSuccessResponse(endpoint, response, config) {
1685
1732
  const responseKind = config.responseKind ?? "json";
1686
1733
  const auth = config.auth ?? "user";
@@ -1688,14 +1735,15 @@ async function parseSuccessResponse(endpoint, response, config) {
1688
1735
  switch (responseKind) {
1689
1736
  case "json": {
1690
1737
  if (response.status === 204 || response.status === 205 || response.status === 304) {
1691
- return void 0;
1738
+ return buildSuccessEnvelope(void 0, requestId);
1692
1739
  }
1693
1740
  const raw = await response.text();
1694
1741
  if (!raw.trim()) {
1695
- return void 0;
1742
+ return buildSuccessEnvelope(void 0, requestId);
1696
1743
  }
1744
+ let parsed;
1697
1745
  try {
1698
- return JSON.parse(raw);
1746
+ parsed = JSON.parse(raw);
1699
1747
  } catch (cause) {
1700
1748
  throw new ApiRequestError(
1701
1749
  `Failed to parse JSON response for endpoint ${String(endpoint)}`,
@@ -1710,32 +1758,33 @@ async function parseSuccessResponse(endpoint, response, config) {
1710
1758
  }
1711
1759
  );
1712
1760
  }
1761
+ if (parsed && typeof parsed === "object" && "success" in parsed && typeof parsed.success === "boolean") {
1762
+ return parsed;
1763
+ }
1764
+ return buildSuccessEnvelope(parsed, requestId);
1713
1765
  }
1714
1766
  case "text": {
1715
- return await response.text();
1767
+ const text = await response.text();
1768
+ return buildSuccessEnvelope(text, requestId);
1716
1769
  }
1717
1770
  case "stream": {
1718
1771
  const body = response.body;
1719
1772
  if (!body) {
1720
- throw new ApiRequestError(
1773
+ return buildErrorEnvelope(
1774
+ "server:internal_error",
1721
1775
  `Expected a streamed body for endpoint ${String(endpoint)}`,
1722
- {
1723
- endpoint,
1724
- status: response.status,
1725
- method: config.method,
1726
- auth,
1727
- requestId
1728
- }
1776
+ response.status,
1777
+ requestId
1729
1778
  );
1730
1779
  }
1731
1780
  const stream = body;
1732
- return stream;
1781
+ return buildSuccessEnvelope(stream, requestId);
1733
1782
  }
1734
1783
  case "void": {
1735
- return void 0;
1784
+ return buildSuccessEnvelope(void 0, requestId);
1736
1785
  }
1737
1786
  default: {
1738
- return void 0;
1787
+ return buildSuccessEnvelope(void 0, requestId);
1739
1788
  }
1740
1789
  }
1741
1790
  }
@@ -1801,11 +1850,15 @@ function createRawCMSClient(headers = {}, baseUrl) {
1801
1850
  const requestInit = {
1802
1851
  method,
1803
1852
  ...options,
1853
+ // Include credentials for same-origin requests (sends cookies for auth)
1854
+ credentials: "same-origin",
1804
1855
  // Don't include body for GET/HEAD requests
1805
1856
  body: isGetOrHead ? void 0 : isFormData ? body : body ? JSON.stringify(body) : void 0,
1806
1857
  headers: {
1807
1858
  ...options.headers,
1808
1859
  ...headers,
1860
+ // Include SDK version if set
1861
+ ...sdkVersion && { "x-sdk-version": sdkVersion },
1809
1862
  // Don't set Content-Type for GET/HEAD requests without body
1810
1863
  ...isGetOrHead ? {} : isFormData ? {} : { "Content-Type": "application/json" }
1811
1864
  },
@@ -1859,94 +1912,30 @@ function createBearerAPIClient(token, baseUrl) {
1859
1912
  return createCMSClient(authHeaders, baseUrl);
1860
1913
  }
1861
1914
 
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
- });
1915
+ // ../api/src/common/envelope.ts
1916
+ function isApiError(result) {
1917
+ return result.success === false;
1918
+ }
1919
+ function isApiSuccess(result) {
1920
+ return result.success === true;
1921
+ }
1922
+ var ApiEnvelopeError = class extends Error {
1923
+ constructor(error) {
1924
+ super(error.message);
1925
+ this.name = "ApiEnvelopeError";
1926
+ this.code = error.code;
1927
+ this.requestId = error.requestId;
1928
+ this.timestamp = error.timestamp;
1929
+ this.status = error.status;
1930
+ this.fieldErrors = error.fieldErrors;
1931
+ }
1932
+ };
1933
+ function unwrapResponse(result) {
1934
+ if (isApiSuccess(result)) {
1935
+ return result.data;
1936
+ }
1937
+ throw new ApiEnvelopeError(result.error);
1938
+ }
1950
1939
 
1951
1940
  // src/client/cache.ts
1952
1941
  var SimpleCache = class {
@@ -1984,7 +1973,100 @@ var SimpleCache = class {
1984
1973
  }
1985
1974
  };
1986
1975
 
1976
+ // src/version.ts
1977
+ var SDK_VERSION = "0.4.3";
1978
+
1979
+ // src/client/error.ts
1980
+ var RiverbankApiError = class _RiverbankApiError extends Error {
1981
+ constructor(apiError) {
1982
+ super(apiError.message);
1983
+ this.name = "RiverbankApiError";
1984
+ this.code = apiError.code;
1985
+ this.requestId = apiError.requestId;
1986
+ this.status = apiError.status;
1987
+ this.fieldErrors = apiError.fieldErrors;
1988
+ this.timestamp = apiError.timestamp;
1989
+ Object.setPrototypeOf(this, _RiverbankApiError.prototype);
1990
+ }
1991
+ /**
1992
+ * Check if this error matches a specific error code
1993
+ *
1994
+ * @example
1995
+ * ```ts
1996
+ * if (error.is('auth:unauthenticated')) {
1997
+ * // Redirect to login
1998
+ * }
1999
+ * ```
2000
+ */
2001
+ is(code) {
2002
+ return this.code === code;
2003
+ }
2004
+ /**
2005
+ * Check if this is an authentication or authorization error
2006
+ *
2007
+ * Matches: auth:unauthenticated, auth:token_expired, auth:token_invalid,
2008
+ * auth:forbidden, auth:mfa_required, auth:insufficient_permissions
2009
+ */
2010
+ isAuthError() {
2011
+ return this.code.startsWith("auth:");
2012
+ }
2013
+ /**
2014
+ * Check if this is a validation error
2015
+ *
2016
+ * Matches: validation:invalid_input, validation:missing_field, validation:invalid_format
2017
+ */
2018
+ isValidationError() {
2019
+ return this.code.startsWith("validation:");
2020
+ }
2021
+ /**
2022
+ * Check if this is a resource error (not found, conflict, etc.)
2023
+ *
2024
+ * Matches: resource:not_found, resource:already_exists, resource:conflict, resource:gone
2025
+ */
2026
+ isResourceError() {
2027
+ return this.code.startsWith("resource:");
2028
+ }
2029
+ /**
2030
+ * Check if this is a rate limiting error
2031
+ */
2032
+ isRateLimitError() {
2033
+ return this.code.startsWith("rate_limit:");
2034
+ }
2035
+ /**
2036
+ * Check if this is a billing/payment error
2037
+ */
2038
+ isBillingError() {
2039
+ return this.code.startsWith("billing:");
2040
+ }
2041
+ /**
2042
+ * Check if this is a server error
2043
+ */
2044
+ isServerError() {
2045
+ return this.code.startsWith("server:");
2046
+ }
2047
+ };
2048
+
1987
2049
  // src/client/index.ts
2050
+ setSdkVersion(SDK_VERSION);
2051
+ function convertToTypedError(error) {
2052
+ if (error instanceof ApiEnvelopeError) {
2053
+ throw new RiverbankApiError({
2054
+ code: error.code,
2055
+ message: error.message,
2056
+ requestId: error.requestId,
2057
+ timestamp: error.timestamp,
2058
+ status: error.status,
2059
+ fieldErrors: error.fieldErrors
2060
+ });
2061
+ }
2062
+ if (error instanceof ApiRequestError && error.body && typeof error.body === "object") {
2063
+ const body = error.body;
2064
+ if (isApiError(body)) {
2065
+ throw new RiverbankApiError(body.error);
2066
+ }
2067
+ }
2068
+ throw error;
2069
+ }
1988
2070
  function createRiverbankClient(config) {
1989
2071
  if (!config.baseUrl) {
1990
2072
  throw new Error(
@@ -2011,7 +2093,13 @@ function createRiverbankClient(config) {
2011
2093
  return cached;
2012
2094
  }
2013
2095
  }
2014
- const data = await fetcher();
2096
+ let data;
2097
+ try {
2098
+ const response = await fetcher();
2099
+ data = unwrapResponse(response);
2100
+ } catch (error) {
2101
+ convertToTypedError(error);
2102
+ }
2015
2103
  if (cacheEnabled) {
2016
2104
  cache.set(cacheKey, data);
2017
2105
  }
@@ -2046,33 +2134,27 @@ function createRiverbankClient(config) {
2046
2134
  const entryIdsCacheKey = mode === "manual" && entryIds?.length ? entryIds.join(",") : "";
2047
2135
  const cacheKey = `entries:${siteId}:${contentType}:${limit ?? ""}:${offset ?? ""}:${order ?? ""}:${preview}:${mode ?? ""}:${entryIdsCacheKey}:${includeMeta ?? ""}`;
2048
2136
  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
- }
2137
+ let orderParam;
2062
2138
  if (order === "newest") {
2063
- apiParams.order = "published_at.desc";
2139
+ orderParam = "published_at.desc";
2064
2140
  } else if (order === "oldest") {
2065
- apiParams.order = "published_at.asc";
2141
+ orderParam = "published_at.asc";
2066
2142
  } 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);
2143
+ orderParam = "title.asc";
2075
2144
  }
2145
+ const apiParams = {
2146
+ siteId,
2147
+ type: contentType,
2148
+ ...typeof limit === "number" && { limit: String(limit) },
2149
+ ...typeof offset === "number" && { offset: String(offset) },
2150
+ ...includeMeta && { meta: "true" },
2151
+ ...orderParam && { order: orderParam },
2152
+ ...preview && { stage: "preview" },
2153
+ ...mode === "manual" && entryIds?.length && {
2154
+ mode: "manual",
2155
+ entryIds: JSON.stringify(entryIds)
2156
+ }
2157
+ };
2076
2158
  return await apiClient({ endpoint: "listPublishedEntries", params: apiParams });
2077
2159
  });
2078
2160
  },
@@ -2100,8 +2182,10 @@ function createRiverbankClient(config) {
2100
2182
  }
2101
2183
  const cacheKey = `public-booking-services:${siteId}:${ids ?? ""}`;
2102
2184
  return cachedFetch(cacheKey, async () => {
2103
- const apiParams = { siteId };
2104
- if (ids) apiParams.ids = ids;
2185
+ const apiParams = {
2186
+ siteId,
2187
+ ...ids && { ids }
2188
+ };
2105
2189
  return await apiClient({ endpoint: "getPublicBookingServices", params: apiParams });
2106
2190
  });
2107
2191
  },
@@ -2112,14 +2196,42 @@ function createRiverbankClient(config) {
2112
2196
  }
2113
2197
  const cacheKey = `public-events:${siteId}:${limit ?? ""}:${from ?? ""}:${to ?? ""}:${stage ?? ""}`;
2114
2198
  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;
2199
+ const apiParams = {
2200
+ siteId,
2201
+ ...typeof limit === "number" && { limit: String(limit) },
2202
+ ...from && { from },
2203
+ ...to && { to },
2204
+ ...stage && { stage }
2205
+ };
2120
2206
  return await apiClient({ endpoint: "listPublicEvents", params: apiParams });
2121
2207
  });
2122
2208
  },
2209
+ async resolveEventOccurrence(params) {
2210
+ const { siteId, entryId, segment } = params;
2211
+ if (!siteId || !entryId || !segment) {
2212
+ throw new Error("resolveEventOccurrence() requires siteId, entryId, and segment");
2213
+ }
2214
+ const cacheKey = `event-occurrence:${siteId}:${entryId}:${segment}`;
2215
+ return cachedFetch(cacheKey, async () => {
2216
+ return await apiClient({
2217
+ endpoint: "resolveEventOccurrence",
2218
+ params: { siteId, entryId, segment }
2219
+ });
2220
+ });
2221
+ },
2222
+ async checkRedirect(params) {
2223
+ const { siteId, path } = params;
2224
+ if (!siteId || !path) {
2225
+ throw new Error("checkRedirect() requires siteId and path");
2226
+ }
2227
+ const cacheKey = `redirect:${siteId}:${path}`;
2228
+ return cachedFetch(cacheKey, async () => {
2229
+ return await apiClient({
2230
+ endpoint: "checkRedirect",
2231
+ params: { site: siteId, path }
2232
+ });
2233
+ });
2234
+ },
2123
2235
  clearCache() {
2124
2236
  cache.clear();
2125
2237
  }
@@ -2133,4 +2245,4 @@ export {
2133
2245
  buildEndpointURL,
2134
2246
  createRiverbankClient
2135
2247
  };
2136
- //# sourceMappingURL=chunk-N3PX76AP.mjs.map
2248
+ //# sourceMappingURL=chunk-4HIRA33Z.mjs.map