@riverbankcms/sdk 0.78.0 → 0.79.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 (222) hide show
  1. package/README.md +125 -43
  2. package/dist/{PreviewEditorSidebar-RIKFQ72L.mjs → PreviewEditorSidebar-56NMJMIK.mjs} +750 -65
  3. package/dist/{PreviewEditorUI-XO7TUWKK.mjs → PreviewEditorUI-27KJVEET.mjs} +4 -4
  4. package/dist/SdkPreviewModeRuntime-H4BSP6E7.mjs +8 -0
  5. package/dist/_dts/ai/src/contracts/proposals.d.ts +72 -0
  6. package/dist/_dts/api/src/contentRuntime.d.ts +1 -0
  7. package/dist/_dts/api/src/endpoints.d.ts +64 -0
  8. package/dist/_dts/api/src/index.d.ts +8 -6
  9. package/dist/_dts/api/src/media.d.ts +8 -1
  10. package/dist/_dts/api/src/navigation/dashboardSettingsNav.d.ts +1 -1
  11. package/dist/_dts/api/src/navigation/dashboardSiteNav.d.ts +8 -8
  12. package/dist/_dts/api/src/navigation/identity.d.ts +59 -0
  13. package/dist/_dts/api/src/navigation.d.ts +2 -0
  14. package/dist/_dts/api/src/public/types.d.ts +1 -1
  15. package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +4 -0
  16. package/dist/_dts/api/src/request.d.ts +3 -11
  17. package/dist/_dts/api/src/sdkConfig/contracts.d.ts +1 -0
  18. package/dist/_dts/api/src/sdkContracts.d.ts +8 -1
  19. package/dist/_dts/api/src/siteIcons.d.ts +128 -0
  20. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +26 -0
  21. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +8 -0
  22. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +21 -20
  23. package/dist/_dts/api/src/types.d.ts +12 -27
  24. package/dist/_dts/api/src/webhooks.d.ts +239 -0
  25. package/dist/_dts/block-form/src/fields/types.d.ts +6 -0
  26. package/dist/_dts/block-form/src/widgets/RepeaterField/components/RepeaterList.d.ts +3 -2
  27. package/dist/_dts/block-form/src/widgets/RepeaterField/components/RepeaterRow.d.ts +6 -3
  28. package/dist/_dts/block-form/src/widgets/RepeaterField/components/RepeaterRowActions.d.ts +8 -3
  29. package/dist/_dts/block-form/src/widgets/RepeaterField/hooks/index.d.ts +1 -1
  30. package/dist/_dts/block-form/src/widgets/RepeaterField/hooks/useLinearRepeaterDnd.d.ts +1 -0
  31. package/dist/_dts/block-form/src/widgets/RepeaterField/hooks/useRepeaterPointerDragCapability.d.ts +1 -0
  32. package/dist/_dts/block-form/src/widgets/RepeaterField/hooks/useResolvedItemLabel.d.ts +7 -0
  33. package/dist/_dts/block-form/src/widgets/RepeaterField/utils/buildSummary.d.ts +1 -0
  34. package/dist/_dts/block-form/src/widgets/RepeaterField/utils/index.d.ts +3 -1
  35. package/dist/_dts/block-form/src/widgets/RepeaterField/utils/repeaterDndDomain.d.ts +1 -1
  36. package/dist/_dts/block-form/src/widgets/RepeaterField/utils/repeaterLabelSource.d.ts +15 -0
  37. package/dist/_dts/block-form/src/widgets/RepeaterField/utils/repeaterRowActionsDomain.d.ts +50 -0
  38. package/dist/_dts/blocks/src/index.d.ts +4 -0
  39. package/dist/_dts/blocks/src/system/blocks/appointment-booking.d.ts +879 -288
  40. package/dist/_dts/blocks/src/system/blocks/blog-listing.d.ts +879 -288
  41. package/dist/_dts/blocks/src/system/blocks/cart.d.ts +879 -288
  42. package/dist/_dts/blocks/src/system/blocks/checkout.d.ts +879 -288
  43. package/dist/_dts/blocks/src/system/blocks/collection.d.ts +879 -288
  44. package/dist/_dts/blocks/src/system/blocks/faq.d.ts +885 -289
  45. package/dist/_dts/blocks/src/system/blocks/feature-card-icons.d.ts +57 -0
  46. package/dist/_dts/blocks/src/system/blocks/feature-cards.d.ts +4 -0
  47. package/dist/_dts/blocks/src/system/blocks/gifting.d.ts +879 -288
  48. package/dist/_dts/blocks/src/system/blocks/index.d.ts +1 -0
  49. package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +3 -1
  50. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +69 -22
  51. package/dist/_dts/blocks/src/system/blocks/product-detail.d.ts +879 -288
  52. package/dist/_dts/blocks/src/system/blocks/product-list.d.ts +879 -288
  53. package/dist/_dts/blocks/src/system/blocks/shop.d.ts +879 -288
  54. package/dist/_dts/blocks/src/system/blocks/team-members.d.ts +3 -0
  55. package/dist/_dts/blocks/src/system/blocks/testimonials.d.ts +7 -1
  56. package/dist/_dts/blocks/src/system/customize/backgrounds.d.ts +170 -0
  57. package/dist/_dts/blocks/src/system/fragments/library/testimonialsCarousel.d.ts +5 -0
  58. package/dist/_dts/blocks/src/system/helpers/resolveBackground.d.ts +3 -1
  59. package/dist/_dts/blocks/src/system/icons/ids.d.ts +13 -0
  60. package/dist/_dts/blocks/src/system/icons/index.d.ts +6 -0
  61. package/dist/_dts/blocks/src/system/icons/presets.d.ts +4 -0
  62. package/dist/_dts/blocks/src/system/icons/registry.d.ts +18 -0
  63. package/dist/_dts/blocks/src/system/icons/semantic.d.ts +239 -0
  64. package/dist/_dts/blocks/src/system/icons/value.d.ts +94 -0
  65. package/dist/_dts/blocks/src/system/index.d.ts +1 -0
  66. package/dist/_dts/blocks/src/system/manifest/fieldValidation/index.d.ts +4 -1
  67. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +187 -0
  68. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessBookingFlow.state.d.ts +1 -1
  69. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.headless.state.d.ts +1 -1
  70. package/dist/_dts/blocks/src/system/runtime/nodes/feature-card-icon.d.ts +13 -0
  71. package/dist/_dts/content-editor/src/index.d.ts +1 -1
  72. package/dist/_dts/content-editor/src/ui/editorSnapshot.d.ts +2 -2
  73. package/dist/_dts/content-model/src/content-types/schema.d.ts +14 -0
  74. package/dist/_dts/content-model/src/contentManifest.d.ts +3 -1
  75. package/dist/_dts/content-model/src/templates/bindingTypeCompatibility.d.ts +3 -1
  76. package/dist/_dts/content-model/src/templates/bindingValidation.d.ts +10 -4
  77. package/dist/_dts/content-model/src/templates/fieldPaths.d.ts +20 -0
  78. package/dist/_dts/content-model/src/templates/manifestAdapter.d.ts +5 -2
  79. package/dist/_dts/core/src/branded.d.ts +114 -85
  80. package/dist/_dts/core/src/csv-types.d.ts +2 -2
  81. package/dist/_dts/core/src/editor-state.d.ts +7 -7
  82. package/dist/_dts/core/src/participants.d.ts +2 -2
  83. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +202 -0
  84. package/dist/_dts/editor-blocks/src/block-editor/BlockCard.d.ts +12 -1
  85. package/dist/_dts/editor-blocks/src/block-editor/BlockCardBody.d.ts +12 -1
  86. package/dist/_dts/editor-blocks/src/block-editor/BlockCardHeader.d.ts +12 -2
  87. package/dist/_dts/editor-blocks/src/block-editor/FeatureCardIconsPanel.d.ts +21 -0
  88. package/dist/_dts/editor-blocks/src/block-editor/GeneratedIconSetDialog.d.ts +40 -0
  89. package/dist/_dts/editor-blocks/src/block-editor/SortableBlockItem.d.ts +11 -1
  90. package/dist/_dts/editor-blocks/src/block-editor/featureCardIconActions.d.ts +82 -0
  91. package/dist/_dts/editor-blocks/src/blockPayload.d.ts +1 -1
  92. package/dist/_dts/editor-blocks/src/widgets/icon-picker/IconPickerField.d.ts +1 -1
  93. package/dist/_dts/media-core/src/fileDomain.d.ts +8 -1
  94. package/dist/_dts/media-editor/src/MediaEditor.d.ts +5 -2
  95. package/dist/_dts/media-editor/src/MediaPreview.d.ts +3 -1
  96. package/dist/_dts/media-editor/src/fieldUi.d.ts +5 -0
  97. package/dist/_dts/media-editor/src/index.d.ts +1 -1
  98. package/dist/_dts/media-react/src/components/MediaLibrary.d.ts +2 -1
  99. package/dist/_dts/media-react/src/components/MediaPickerMini.d.ts +2 -1
  100. package/dist/_dts/preview-next/src/client/blocks/previewCustomizeActions.d.ts +17 -0
  101. package/dist/_dts/preview-next/src/client/preview/PageDesignEditorStateContext.d.ts +4 -0
  102. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.state.d.ts +3 -2
  103. package/dist/_dts/preview-next/src/client/preview/previewCustomizeHistory.d.ts +6 -0
  104. package/dist/_dts/sdk/src/cli/commands/push/consts.d.ts +1 -1
  105. package/dist/_dts/sdk/src/cli/commands/push/metadata.d.ts +2 -0
  106. package/dist/_dts/sdk/src/cli/commands/push/stale.d.ts +3 -3
  107. package/dist/_dts/sdk/src/cli/commands/push-execute.d.ts +7 -0
  108. package/dist/_dts/sdk/src/cli/commands/push.d.ts +2 -0
  109. package/dist/_dts/sdk/src/cli/content/reader.d.ts +13 -0
  110. package/dist/_dts/sdk/src/cli/content/writer.d.ts +2 -1
  111. package/dist/_dts/sdk/src/cli/helpers.d.ts +2 -0
  112. package/dist/_dts/sdk/src/cli/navigationIdentity.d.ts +11 -0
  113. package/dist/_dts/sdk/src/cli/site-commands/commandKeys.d.ts +6 -6
  114. package/dist/_dts/sdk/src/cli/site-commands/commandRuntime.d.ts +5 -0
  115. package/dist/_dts/sdk/src/cli/site-commands/commandSurfaceDispatch.d.ts +4 -0
  116. package/dist/_dts/sdk/src/cli/site-commands/navigationCommands.d.ts +4 -0
  117. package/dist/_dts/sdk/src/cli/site-commands/oneOffCommands.d.ts +1 -0
  118. package/dist/_dts/sdk/src/cli/site-commands/pageCommands.d.ts +5 -2
  119. package/dist/_dts/sdk/src/cli/site-commands/pushExecution.d.ts +10 -1
  120. package/dist/_dts/sdk/src/cli/site-commands/pushExecutionTypes.d.ts +1 -1
  121. package/dist/_dts/sdk/src/cli/sync/diff.d.ts +9 -0
  122. package/dist/_dts/sdk/src/client/management/types.d.ts +8 -0
  123. package/dist/_dts/sdk/src/client/types.d.ts +2 -2
  124. package/dist/_dts/sdk/src/config/content-types.d.ts +7 -0
  125. package/dist/_dts/sdk/src/config/field-definitions.d.ts +5 -1
  126. package/dist/_dts/sdk/src/contracts/index.d.ts +1 -1
  127. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +19 -2
  128. package/dist/_dts/sdk/src/next/index.d.ts +1 -1
  129. package/dist/_dts/sdk/src/next/revalidate.d.ts +26 -5
  130. package/dist/_dts/sdk/src/next/static-params.d.ts +28 -3
  131. package/dist/_dts/sdk/src/public-api/contracts.d.ts +5 -1
  132. package/dist/_dts/sdk/src/public-api/runtime.d.ts +1 -1
  133. package/dist/_dts/sdk/src/version.d.ts +1 -1
  134. package/dist/_dts/sdk/src/webhooks/index.d.ts +1 -1
  135. package/dist/_dts/sdk/src/webhooks/verify.d.ts +6 -102
  136. package/dist/_dts/site-commands/src/commands.d.ts +6 -0
  137. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  138. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +3 -3
  139. package/dist/_dts/theme-core/src/schema.d.ts +5 -5
  140. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +25 -2
  141. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +5 -5
  142. package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +4 -2
  143. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +4 -4
  144. package/dist/_dts/theme-core/src/tokens/themeColorTokens.d.ts +2 -0
  145. package/dist/_dts/ui/src/combobox.d.ts +1 -0
  146. package/dist/{altcha-B5XGSXP5.mjs → altcha-EKUEQ4RP.mjs} +1 -1
  147. package/dist/{chunk-F7RTCZYN.mjs → chunk-4HCW7FHJ.mjs} +504 -63
  148. package/dist/{chunk-SXOLGNMX.mjs → chunk-A3HHFKVT.mjs} +1 -1
  149. package/dist/{chunk-TXDES5P2.mjs → chunk-GP555I66.mjs} +180 -10
  150. package/dist/{chunk-SVMMM2NA.mjs → chunk-K2IIF34C.mjs} +79 -5
  151. package/dist/{chunk-NIDXI46P.mjs → chunk-LCY32PXF.mjs} +1 -1
  152. package/dist/{chunk-XGB3TDIC.mjs → chunk-R7POPVJR.mjs} +2 -8
  153. package/dist/{chunk-OECWLDHN.mjs → chunk-V47ZU33I.mjs} +2762 -732
  154. package/dist/cli/index.mjs +1799 -345
  155. package/dist/cli/init-docs/content/cli-reference.md +3 -2
  156. package/dist/cli/init-docs/content/content-management.md +2 -2
  157. package/dist/cli/init-docs/content/workflow-editor-workflows.md +2 -0
  158. package/dist/cli/init-docs/content/workflow-isr-revalidation.md +138 -0
  159. package/dist/cli/init-docs/content/workflow-preview-mode.md +68 -2
  160. package/dist/client/{accordion-EVDEOUPR.mjs → accordion-QLA7KBYO.mjs} +2 -2
  161. package/dist/client/analytics.mjs +1 -1
  162. package/dist/client/{bookingForm-DIHBLC64.mjs → bookingForm-PYZIPA5G.mjs} +55 -48
  163. package/dist/client/bookings.mjs +172 -57
  164. package/dist/client/{carousel-FEBQHIWI.mjs → carousel-5EIULWBI.mjs} +3 -3
  165. package/dist/client/{cart-7CKSXAE4.mjs → cart-DOP3FNI4.mjs} +7 -7
  166. package/dist/client/{checkout-WKYCANLV.mjs → checkout-BVMF6FBV.mjs} +7 -7
  167. package/dist/client/{chunk-GUK2FPXQ.mjs → chunk-44K2U3QI.mjs} +37 -15
  168. package/dist/client/{chunk-IVNCUVAV.mjs → chunk-AUJ5DBZJ.mjs} +18 -18
  169. package/dist/client/{chunk-VPPMNXCF.mjs → chunk-CCNTDRCF.mjs} +2 -2
  170. package/dist/client/{chunk-36WJCERQ.mjs → chunk-CE7IBGVW.mjs} +3 -1
  171. package/dist/client/{chunk-2SAVKN2M.mjs → chunk-GG4M2NP6.mjs} +2 -2
  172. package/dist/client/{chunk-65F47D7Y.mjs → chunk-R5ESWNKX.mjs} +49 -39
  173. package/dist/client/{chunk-RZDWX7QW.mjs → chunk-TYONZMST.mjs} +1 -1
  174. package/dist/client/{chunk-OFMSCGNY.mjs → chunk-UDS3NTWA.mjs} +2 -2
  175. package/dist/client/{chunk-YDSEG6GZ.mjs → chunk-V6M5FCR5.mjs} +2 -2
  176. package/dist/client/{chunk-F7LHOKEH.mjs → chunk-XSV6KW4D.mjs} +1 -1
  177. package/dist/client/{chunk-RV6FX7UH.mjs → chunk-YLDYVRZL.mjs} +9 -9
  178. package/dist/client/{chunk-PD6NBCEY.mjs → chunk-ZFHRN6W2.mjs} +1 -1
  179. package/dist/client/client.mjs +21501 -19812
  180. package/dist/client/{courseRegistration-5QF2PHKM.mjs → courseRegistration-E6EAA6NL.mjs} +10 -10
  181. package/dist/client/{eventCalendar-4ZOSETDU.mjs → eventCalendar-HBG3HAK6.mjs} +9 -9
  182. package/dist/client/{eventCombined-WQGU7JUX.mjs → eventCombined-6K5ZZWAK.mjs} +9 -9
  183. package/dist/client/{eventDetails-AYWVUJ5Y.mjs → eventDetails-Q75ICXLT.mjs} +9 -9
  184. package/dist/client/{eventListing-NT7C6UT5.mjs → eventListing-27P5F7DZ.mjs} +9 -9
  185. package/dist/client/{eventRegistration-OH24F4ZJ.mjs → eventRegistration-IQ7AMASR.mjs} +9 -9
  186. package/dist/client/{form-7L42SRBB.mjs → form-JRTD65FN.mjs} +6 -3
  187. package/dist/client/{headerSection-OZRZNZ52.mjs → headerSection-7FPSSZHS.mjs} +3 -3
  188. package/dist/client/hooks.mjs +428 -83
  189. package/dist/client/{locationMap-ZBXRPQ7C.mjs → locationMap-7NGFNYBH.mjs} +3 -3
  190. package/dist/client/{newsletterForm-SNAGFF2I.mjs → newsletterForm-F3BADCI2.mjs} +2 -2
  191. package/dist/client/{productDetail-I46BOFGV.mjs → productDetail-V3HP7ITJ.mjs} +7 -7
  192. package/dist/client/{productList-BOYHTYI6.mjs → productList-L3EGJUF2.mjs} +7 -7
  193. package/dist/client/rendering/client.mjs +2886 -1513
  194. package/dist/client/rendering/islands.mjs +19 -19
  195. package/dist/client/rendering.mjs +2244 -564
  196. package/dist/client/{shop-XTXPZTKR.mjs → shop-DQUB5E2C.mjs} +7 -7
  197. package/dist/preview-next/before-render.mjs +65 -1
  198. package/dist/preview-next/client/runtime.mjs +6 -6
  199. package/dist/preview-next/middleware.mjs +65 -1
  200. package/dist/preview-next/tailwind-sources.css +1 -0
  201. package/dist/sdk-runtime-AF6KXJU4.mjs +8 -0
  202. package/dist/server/components.mjs +2270 -835
  203. package/dist/server/config-template-validation.mjs +221 -15
  204. package/dist/server/config-validation.mjs +426 -77
  205. package/dist/server/config.mjs +426 -77
  206. package/dist/server/data.mjs +427 -82
  207. package/dist/server/index.mjs +94 -10
  208. package/dist/server/next/revalidate.mjs +229 -34
  209. package/dist/server/next.mjs +2439 -888
  210. package/dist/server/page-converter.mjs +335 -74
  211. package/dist/server/prebuild.mjs +1 -1
  212. package/dist/server/rendering/server.mjs +2281 -846
  213. package/dist/server/rendering.mjs +2298 -860
  214. package/dist/server/routing.mjs +860 -113
  215. package/dist/server/server.mjs +452 -92
  216. package/dist/server/theme-bridge.mjs +164 -2
  217. package/dist/server/theme.mjs +2 -2
  218. package/dist/server/webhooks.mjs +129 -25
  219. package/dist/styles/index.css +55 -0
  220. package/package.json +2 -1
  221. package/dist/SdkPreviewModeRuntime-LAGYMPNF.mjs +0 -8
  222. package/dist/sdk-runtime-ZJLKC6DR.mjs +0 -8
@@ -1770,7 +1770,16 @@ var ENDPOINT_DEFINITIONS = {
1770
1770
  revalidate: 60,
1771
1771
  tags: ["site-{siteId}", "content-{siteId}-{type}"],
1772
1772
  auth: "user",
1773
- responseKind: "json"
1773
+ responseKind: "json",
1774
+ errors: ["validation:invalid_input", "resource:not_found", "resource:conflict", "server:internal_error"]
1775
+ },
1776
+ reorderContentEntries: {
1777
+ path: "/sites/{siteId}/content/{type}/order",
1778
+ method: "POST",
1779
+ tags: ["site-{siteId}", "content-{siteId}-{type}"],
1780
+ auth: "user",
1781
+ responseKind: "json",
1782
+ errors: ["validation:invalid_input", "resource:not_found", "resource:conflict", "server:internal_error"]
1774
1783
  },
1775
1784
  getContentTemplate: {
1776
1785
  path: "/sites/{siteId}/content/types/{type}/template",
@@ -2162,6 +2171,46 @@ var ENDPOINT_DEFINITIONS = {
2162
2171
  auth: "user",
2163
2172
  responseKind: "json"
2164
2173
  },
2174
+ getSiteIconStyleGuide: {
2175
+ path: "/sites/{siteId}/settings/icon-style-guide",
2176
+ method: "GET",
2177
+ revalidate: 120,
2178
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings],
2179
+ auth: "user",
2180
+ responseKind: "json",
2181
+ errors: []
2182
+ },
2183
+ updateSiteIconStyleGuide: {
2184
+ path: "/sites/{siteId}/settings/icon-style-guide",
2185
+ method: "POST",
2186
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings],
2187
+ auth: "user",
2188
+ responseKind: "json",
2189
+ errors: []
2190
+ },
2191
+ regenerateSiteIconStyleGuide: {
2192
+ path: "/sites/{siteId}/settings/icon-style-guide/regenerate",
2193
+ method: "POST",
2194
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings],
2195
+ auth: "user",
2196
+ responseKind: "json",
2197
+ errors: []
2198
+ },
2199
+ generateGeneratedIconSet: {
2200
+ path: "/sites/{siteId}/ai/generated-icons/generate",
2201
+ method: "POST",
2202
+ auth: "user",
2203
+ responseKind: "json",
2204
+ errors: []
2205
+ },
2206
+ applyGeneratedIconSet: {
2207
+ path: "/sites/{siteId}/ai/generated-icons/apply",
2208
+ method: "POST",
2209
+ tags: [TAG_TEMPLATES.site, TAG_TEMPLATES.siteSettings],
2210
+ auth: "user",
2211
+ responseKind: "json",
2212
+ errors: []
2213
+ },
2165
2214
  getSiteAiProfile: {
2166
2215
  path: "/sites/{siteId}/settings/ai-site-profile",
2167
2216
  method: "GET",
@@ -3937,6 +3986,14 @@ var ENDPOINT_DEFINITIONS = {
3937
3986
  auth: "public",
3938
3987
  responseKind: "json"
3939
3988
  },
3989
+ getGeneratedIconRenderAssets: {
3990
+ path: "/public/sites/{siteId}/generated-icon-assets",
3991
+ method: "POST",
3992
+ tags: [TAG_TEMPLATES.siteRoutableContent],
3993
+ auth: "public",
3994
+ responseKind: "json",
3995
+ errors: []
3996
+ },
3940
3997
  // Resolve entry subroute by kind and URL segment
3941
3998
  resolveEntrySubroute: {
3942
3999
  path: "/public/sites/{siteId}/routing/subroutes/resolve",
@@ -5641,6 +5698,13 @@ var ENDPOINT_DEFINITIONS = {
5641
5698
  auth: "service",
5642
5699
  responseKind: "json"
5643
5700
  },
5701
+ sdkDeleteNavigationMenu: {
5702
+ path: "/sdk/{siteId}/navigation/{menuId}",
5703
+ method: "DELETE",
5704
+ auth: "service",
5705
+ responseKind: "json",
5706
+ errors: ["resource:not_found", "server:internal_error"]
5707
+ },
5644
5708
  sdkUpsertTheme: {
5645
5709
  path: "/sdk/{siteId}/theme",
5646
5710
  method: "POST",
@@ -6383,18 +6447,21 @@ function buildEndpointURL(baseURL, endpoint) {
6383
6447
  function isFormDataBody(value) {
6384
6448
  return typeof FormData !== "undefined" && value instanceof FormData;
6385
6449
  }
6450
+ function isUnknownArray(value) {
6451
+ return Array.isArray(value);
6452
+ }
6386
6453
  function appendQueryParam(queryParams, key, value) {
6387
6454
  if (value === void 0 || value === null) {
6388
6455
  return;
6389
6456
  }
6390
- if (Array.isArray(value)) {
6457
+ if (isUnknownArray(value)) {
6391
6458
  const stack = [...value].reverse();
6392
6459
  while (stack.length > 0) {
6393
6460
  const item = stack.pop();
6394
6461
  if (item === void 0 || item === null) {
6395
6462
  continue;
6396
6463
  }
6397
- if (Array.isArray(item)) {
6464
+ if (isUnknownArray(item)) {
6398
6465
  stack.push(...[...item].reverse());
6399
6466
  continue;
6400
6467
  }
@@ -6404,6 +6471,12 @@ function appendQueryParam(queryParams, key, value) {
6404
6471
  }
6405
6472
  queryParams.append(key, String(value));
6406
6473
  }
6474
+ function serializePathParam(endpoint, key, value) {
6475
+ if (typeof value === "string") {
6476
+ return value;
6477
+ }
6478
+ throw new Error(`Invalid path param for endpoint ${String(endpoint)}: ${key} must be a string`);
6479
+ }
6407
6480
  function invalidateCacheTags(tags, params) {
6408
6481
  const resolved = getRevalidateTag();
6409
6482
  if (typeof window !== "undefined" || !resolved || !tags) return;
@@ -6542,8 +6615,9 @@ function createRawCMSClient(headers = {}, baseUrl) {
6542
6615
  const bracePlaceholder = `{${key}}`;
6543
6616
  const colonPlaceholder = `:${key}`;
6544
6617
  if (originalPath.includes(bracePlaceholder) || originalPath.includes(colonPlaceholder)) {
6545
- url = url.replace(bracePlaceholder, value);
6546
- url = url.replace(colonPlaceholder, value);
6618
+ const stringValue = serializePathParam(endpoint, key, value);
6619
+ url = url.replace(bracePlaceholder, stringValue);
6620
+ url = url.replace(colonPlaceholder, stringValue);
6547
6621
  } else {
6548
6622
  unusedParams[key] = value;
6549
6623
  }
@@ -6817,7 +6891,7 @@ var SimpleCache = class {
6817
6891
  };
6818
6892
 
6819
6893
  // src/version.ts
6820
- var SDK_VERSION = "0.78.0";
6894
+ var SDK_VERSION = "0.79.0";
6821
6895
 
6822
6896
  // src/client/error.ts
6823
6897
  var RiverbankApiError = class _RiverbankApiError extends Error {
@@ -7236,9 +7310,10 @@ var CircuitOpenError = class extends Error {
7236
7310
  var prebuildModule = null;
7237
7311
  function tryRequire(modulePath) {
7238
7312
  try {
7239
- const req = Function(
7313
+ const getRequire = new Function(
7240
7314
  'return typeof require === "function" ? require : null'
7241
- )();
7315
+ );
7316
+ const req = getRequire();
7242
7317
  return req ? req(modulePath) : null;
7243
7318
  } catch {
7244
7319
  return null;
@@ -7751,8 +7826,7 @@ function createRiverbankClient(config) {
7751
7826
  async (sig) => {
7752
7827
  return await apiClient({
7753
7828
  endpoint: "getContentByPath",
7754
- params: { siteId },
7755
- body: { path: path3, preview },
7829
+ params: { siteId, path: path3, preview: String(preview) },
7756
7830
  options: { signal: sig }
7757
7831
  });
7758
7832
  },
@@ -7802,6 +7876,8 @@ function createRiverbankClient(config) {
7802
7876
  orderParam = "published_at.asc";
7803
7877
  } else if (order === "title") {
7804
7878
  orderParam = "title.asc";
7879
+ } else if (order === "manual") {
7880
+ orderParam = "manual.asc";
7805
7881
  }
7806
7882
  const apiParams = {
7807
7883
  siteId,
@@ -9002,6 +9078,14 @@ var API_ENDPOINTS2 = Object.freeze({
9002
9078
  auth: "user",
9003
9079
  responseKind: "json"
9004
9080
  },
9081
+ getPublicRoutableContent: {
9082
+ path: "/public/sites/{siteId}/routable-content",
9083
+ method: "GET",
9084
+ revalidate: 60,
9085
+ tags: ["riverbank:site:{siteId}:routable-content"],
9086
+ auth: "public",
9087
+ responseKind: "json"
9088
+ },
9005
9089
  getPublicSitemapRoutes: {
9006
9090
  path: "/public/sites/{siteId}/sitemap",
9007
9091
  method: "GET",
@@ -1,56 +1,156 @@
1
1
  // src/next/revalidate.ts
2
2
  import { revalidateTag, revalidatePath } from "next/cache";
3
3
 
4
- // src/webhooks/verify.ts
5
- import crypto from "crypto";
4
+ // ../api/src/webhooks.ts
6
5
  import { z } from "zod";
7
- var WebhookEventSchema = z.enum([
6
+ var RIVERBANK_SIGNATURE_PREFIX = "sha256=";
7
+ var SUPPORTED_WEBHOOK_EVENTS = [
8
8
  "page.published",
9
+ "page.unpublished",
10
+ "page.deleted",
11
+ "page.path_changed",
9
12
  "entry.published",
13
+ "entry.unpublished",
14
+ "entry.deleted",
15
+ "entry.path_changed",
10
16
  "navigation.updated",
11
17
  "theme.updated",
12
18
  "site.settings_updated"
13
- ]);
19
+ ];
20
+ var WebhookEventSchema = z.enum(SUPPORTED_WEBHOOK_EVENTS);
21
+ function asRevalidationPath(path) {
22
+ return path;
23
+ }
24
+ function parseRevalidationPath(input) {
25
+ const trimmed = input.trim();
26
+ if (!trimmed) {
27
+ return { success: false, error: { tag: "EMPTY_PATH", input } };
28
+ }
29
+ if (/^[a-z][a-z\d+.-]*:/i.test(trimmed) || trimmed.startsWith("//") || !trimmed.startsWith("/")) {
30
+ return { success: false, error: { tag: "ABSOLUTE_OR_PROTOCOL_PATH", input } };
31
+ }
32
+ if (/[\u0000-\u001F\u007F]/.test(trimmed) || trimmed.includes("\\") || trimmed.includes("?") || trimmed.includes("#")) {
33
+ return { success: false, error: { tag: "MALFORMED_PATH", input } };
34
+ }
35
+ const collapsed = trimmed.replace(/\/{2,}/g, "/");
36
+ const normalized = collapsed === "/" ? "/" : collapsed.replace(/\/+$/g, "");
37
+ return { success: true, path: asRevalidationPath(normalized) };
38
+ }
39
+ function normalizeRevalidationPath(input) {
40
+ const result = parseRevalidationPath(input);
41
+ return result.success ? result.path : null;
42
+ }
14
43
  var PagePublishedDataSchema = z.object({
15
44
  pageId: z.string(),
16
45
  path: z.string(),
17
46
  slug: z.string().optional()
18
- });
47
+ }).strict();
48
+ var PageRemovedDataSchema = z.object({
49
+ pageId: z.string(),
50
+ path: z.string(),
51
+ slug: z.string().optional()
52
+ }).strict();
53
+ var PagePathChangedDataSchema = z.object({
54
+ pageId: z.string(),
55
+ previousPath: z.string(),
56
+ path: z.string(),
57
+ slug: z.string().optional()
58
+ }).strict();
19
59
  var EntryPublishedDataSchema = z.object({
20
60
  entryId: z.string(),
21
61
  path: z.string(),
22
62
  contentType: z.string()
23
- });
63
+ }).strict();
64
+ var EntryRemovedDataSchema = z.object({
65
+ entryId: z.string(),
66
+ path: z.string(),
67
+ contentType: z.string()
68
+ }).strict();
69
+ var EntryPathChangedDataSchema = z.object({
70
+ entryId: z.string(),
71
+ previousPath: z.string(),
72
+ path: z.string(),
73
+ contentType: z.string()
74
+ }).strict();
24
75
  var NavigationUpdatedDataSchema = z.object({
25
76
  menuId: z.string().optional()
26
- });
27
- var EmptyDataSchema = z.object({});
28
- var WebhookDataSchema = z.union([
29
- PagePublishedDataSchema,
30
- EntryPublishedDataSchema,
31
- NavigationUpdatedDataSchema,
32
- EmptyDataSchema
33
- ]);
34
- var WebhookPayloadSchema = z.object({
35
- /** Event type */
36
- event: WebhookEventSchema,
37
- /** ISO timestamp of when the event occurred */
77
+ }).strict();
78
+ var EmptyWebhookDataSchema = z.object({}).strict();
79
+ var WebhookPayloadBaseSchema = z.object({
38
80
  timestamp: z.string(),
39
- /** Site ID that triggered the event */
81
+ dispatchId: z.string().optional(),
40
82
  siteId: z.string(),
41
- /** Event-specific data (shape depends on event type) */
42
- data: z.record(z.string(), z.unknown()),
43
- /** Cache invalidation tags (for tag-based revalidation) */
44
- tags: z.array(z.string()).optional()
83
+ tags: z.array(z.string()).optional(),
84
+ paths: z.array(z.string()).optional()
45
85
  });
86
+ var WebhookPayloadSchema = z.discriminatedUnion("event", [
87
+ WebhookPayloadBaseSchema.extend({
88
+ event: z.literal("page.published"),
89
+ data: PagePublishedDataSchema
90
+ }),
91
+ WebhookPayloadBaseSchema.extend({
92
+ event: z.literal("page.unpublished"),
93
+ data: PageRemovedDataSchema
94
+ }),
95
+ WebhookPayloadBaseSchema.extend({
96
+ event: z.literal("page.deleted"),
97
+ data: PageRemovedDataSchema
98
+ }),
99
+ WebhookPayloadBaseSchema.extend({
100
+ event: z.literal("page.path_changed"),
101
+ data: PagePathChangedDataSchema
102
+ }),
103
+ WebhookPayloadBaseSchema.extend({
104
+ event: z.literal("entry.published"),
105
+ data: EntryPublishedDataSchema
106
+ }),
107
+ WebhookPayloadBaseSchema.extend({
108
+ event: z.literal("entry.unpublished"),
109
+ data: EntryRemovedDataSchema
110
+ }),
111
+ WebhookPayloadBaseSchema.extend({
112
+ event: z.literal("entry.deleted"),
113
+ data: EntryRemovedDataSchema
114
+ }),
115
+ WebhookPayloadBaseSchema.extend({
116
+ event: z.literal("entry.path_changed"),
117
+ data: EntryPathChangedDataSchema
118
+ }),
119
+ WebhookPayloadBaseSchema.extend({
120
+ event: z.literal("navigation.updated"),
121
+ data: NavigationUpdatedDataSchema
122
+ }),
123
+ WebhookPayloadBaseSchema.extend({
124
+ event: z.literal("theme.updated"),
125
+ data: EmptyWebhookDataSchema
126
+ }),
127
+ WebhookPayloadBaseSchema.extend({
128
+ event: z.literal("site.settings_updated"),
129
+ data: EmptyWebhookDataSchema
130
+ })
131
+ ]);
132
+
133
+ // src/client/types.ts
134
+ var SDK_CORRELATION_HEADER_NAMES = [
135
+ "x-request-id",
136
+ "x-correlation-id",
137
+ "x-riverbank-monitor-run-id"
138
+ ];
139
+
140
+ // src/webhooks/verify.ts
141
+ import crypto from "crypto";
46
142
  function verifyWebhookSignature(payload, signature, secret) {
47
- const expectedSignature = crypto.createHmac("sha256", secret).update(payload).digest("hex");
48
- if (signature.length !== expectedSignature.length) {
143
+ if (!signature.startsWith(RIVERBANK_SIGNATURE_PREFIX)) {
144
+ return false;
145
+ }
146
+ const signatureDigest = signature.slice(RIVERBANK_SIGNATURE_PREFIX.length);
147
+ if (!/^[a-f0-9]{64}$/.test(signatureDigest)) {
49
148
  return false;
50
149
  }
150
+ const expectedSignature = crypto.createHmac("sha256", secret).update(payload).digest("hex");
51
151
  return crypto.timingSafeEqual(
52
- Buffer.from(signature),
53
- Buffer.from(expectedSignature)
152
+ Buffer.from(signatureDigest, "hex"),
153
+ Buffer.from(expectedSignature, "hex")
54
154
  );
55
155
  }
56
156
  function parseWebhookPayload(body) {
@@ -68,6 +168,65 @@ function parseWebhookPayload(body) {
68
168
  }
69
169
 
70
170
  // src/next/revalidate.ts
171
+ var [
172
+ SDK_REQUEST_ID_HEADER,
173
+ SDK_CORRELATION_ID_HEADER,
174
+ SDK_MONITOR_RUN_ID_HEADER
175
+ ] = SDK_CORRELATION_HEADER_NAMES;
176
+ var RIVERBANK_DISPATCH_ID_HEADER = "x-riverbank-dispatch-id";
177
+ var RIVERBANK_CORRELATION_ID_HEADER = "x-riverbank-correlation-id";
178
+ function normalizeRevalidationPath2(path) {
179
+ return normalizeRevalidationPath(path);
180
+ }
181
+ function normalizeRevalidationPaths(paths = []) {
182
+ const normalized = [];
183
+ const invalidPaths = [];
184
+ const seen = /* @__PURE__ */ new Set();
185
+ for (const path of paths) {
186
+ const normalizedPath = normalizeRevalidationPath2(path);
187
+ if (!normalizedPath) {
188
+ invalidPaths.push(path);
189
+ continue;
190
+ }
191
+ if (!seen.has(normalizedPath)) {
192
+ seen.add(normalizedPath);
193
+ normalized.push(normalizedPath);
194
+ }
195
+ }
196
+ return { paths: normalized, invalidPaths };
197
+ }
198
+ function normalizeRevalidationTags(tags = []) {
199
+ const normalized = [];
200
+ const seen = /* @__PURE__ */ new Set();
201
+ for (const tag of tags) {
202
+ const trimmed = tag.trim();
203
+ if (!trimmed || seen.has(trimmed)) continue;
204
+ seen.add(trimmed);
205
+ normalized.push(trimmed);
206
+ }
207
+ return normalized;
208
+ }
209
+ function getOptionalHeader(headers, name) {
210
+ const value = headers.get(name)?.trim();
211
+ return value ? value : void 0;
212
+ }
213
+ function getRevalidationRequestMetadata(request, payload, counts) {
214
+ const dispatchId = payload.dispatchId ?? getOptionalHeader(request.headers, RIVERBANK_DISPATCH_ID_HEADER);
215
+ const requestId = getOptionalHeader(request.headers, "x-vercel-id") ?? getOptionalHeader(request.headers, SDK_REQUEST_ID_HEADER);
216
+ const correlationId = getOptionalHeader(request.headers, RIVERBANK_CORRELATION_ID_HEADER) ?? getOptionalHeader(request.headers, SDK_CORRELATION_ID_HEADER);
217
+ const monitorRunId = getOptionalHeader(request.headers, SDK_MONITOR_RUN_ID_HEADER);
218
+ return {
219
+ event: payload.event,
220
+ siteId: payload.siteId,
221
+ ...dispatchId ? { dispatchId } : {},
222
+ pathCount: counts.pathCount,
223
+ tagCount: counts.tagCount,
224
+ itemCount: counts.itemCount,
225
+ ...requestId ? { requestId } : {},
226
+ ...correlationId ? { correlationId } : {},
227
+ ...monitorRunId ? { monitorRunId } : {}
228
+ };
229
+ }
71
230
  function createRevalidateHandler(options = {}) {
72
231
  return async function handleRevalidateRequest(request) {
73
232
  const secret = options.secret ?? process.env.RIVERBANK_WEBHOOK_SECRET;
@@ -81,41 +240,77 @@ function createRevalidateHandler(options = {}) {
81
240
  const body = await request.text();
82
241
  const signature = request.headers.get("x-riverbank-signature");
83
242
  if (!signature || !verifyWebhookSignature(body, signature, secret)) {
243
+ console.warn("[Riverbank] Rejected webhook with invalid signature");
84
244
  return Response.json({ error: "Invalid signature" }, { status: 401 });
85
245
  }
86
246
  const parseResult = parseWebhookPayload(body);
87
247
  if (!parseResult.success) {
248
+ console.warn("[Riverbank] Rejected webhook with invalid payload", {
249
+ reason: parseResult.error
250
+ });
88
251
  return Response.json({ error: parseResult.error }, { status: 400 });
89
252
  }
90
253
  const payload = parseResult.payload;
91
254
  const revalidated = [];
92
- if (payload.tags?.length) {
93
- for (const tag of payload.tags) {
255
+ const normalizedPaths = normalizeRevalidationPaths(payload.paths);
256
+ if (normalizedPaths.invalidPaths.length > 0) {
257
+ console.warn(
258
+ "[Riverbank] Ignored invalid revalidation paths",
259
+ {
260
+ event: payload.event,
261
+ siteId: payload.siteId,
262
+ invalidPathCount: normalizedPaths.invalidPaths.length
263
+ }
264
+ );
265
+ }
266
+ const normalizedTags = normalizeRevalidationTags(payload.tags);
267
+ if (normalizedTags.length) {
268
+ for (const tag of normalizedTags) {
94
269
  revalidateTag(tag, "max");
95
270
  revalidated.push(`tag:${tag}`);
96
271
  }
97
272
  }
98
- const path = typeof payload.data?.path === "string" ? payload.data.path : void 0;
99
- if (path) {
273
+ for (const path of normalizedPaths.paths) {
100
274
  revalidatePath(path);
101
275
  revalidated.push(`path:${path}`);
102
276
  }
277
+ const metadata = getRevalidationRequestMetadata(
278
+ request,
279
+ payload,
280
+ {
281
+ pathCount: normalizedPaths.paths.length,
282
+ tagCount: normalizedTags.length,
283
+ itemCount: revalidated.length
284
+ }
285
+ );
103
286
  if (revalidated.length > 0) {
104
287
  console.log(
105
- `[Riverbank] Revalidated: ${revalidated.join(", ")} (event: ${payload.event})`
288
+ [
289
+ `[Riverbank] Revalidated ${normalizedPaths.paths.length} path(s)`,
290
+ `and ${normalizedTags.length} tag(s)`,
291
+ `(event: ${payload.event}, site: ${payload.siteId})`
292
+ ].join(" "),
293
+ metadata
106
294
  );
107
295
  }
108
296
  if (options.onRevalidate) {
109
- options.onRevalidate(payload, revalidated);
297
+ options.onRevalidate(payload, revalidated, metadata);
110
298
  }
111
299
  return Response.json({
112
300
  revalidated: true,
113
301
  items: revalidated,
114
302
  event: payload.event,
303
+ dispatchId: metadata.dispatchId,
304
+ pathCount: normalizedPaths.paths.length,
305
+ tagCount: normalizedTags.length,
306
+ invalidPathCount: normalizedPaths.invalidPaths.length,
115
307
  timestamp: Date.now()
116
308
  });
117
309
  };
118
310
  }
119
311
  export {
120
- createRevalidateHandler
312
+ createRevalidateHandler,
313
+ normalizeRevalidationPath2 as normalizeRevalidationPath,
314
+ normalizeRevalidationPaths,
315
+ normalizeRevalidationTags
121
316
  };