@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
@@ -68,6 +68,11 @@ export type CliCommandOutcome<TSubject> = Readonly<{
68
68
  identifier: string;
69
69
  message: string;
70
70
  subject?: TSubject;
71
+ }> | Readonly<{
72
+ status: 'preflight_failed';
73
+ identifier: string;
74
+ message: string;
75
+ subject?: TSubject;
71
76
  }>;
72
77
  export type CliCommandExecutionReport<TSubject> = Readonly<{
73
78
  outcomes: readonly CliCommandOutcome<TSubject>[];
@@ -19,9 +19,13 @@ export type CommandSurfaceDispatchInput = Readonly<{
19
19
  }>;
20
20
  export type CommandSurfaceDispatchDependencies = Readonly<{
21
21
  compileCommandSurface?: (surface: CommandSurface, input: CommandSurfaceDispatchInput) => CommandSurfaceCompileResult;
22
+ preflightCommandSurfaceAsReport?: (surface: CommandSurfaceCompileSuccess, input: CommandSurfaceDispatchInput) => CommandSurfaceExecutionReport;
22
23
  executeCommandSurfaceAsReport?: (surface: CommandSurfaceCompileSuccess, input: CommandSurfaceDispatchInput) => Promise<CommandSurfaceExecutionReport>;
23
24
  }>;
24
25
  export declare function compileContentPushExecutionPlan(plan: ContentPushExecutionPlan, input: CommandSurfaceDispatchInput, dependencies?: CommandSurfaceDispatchDependencies): Result<CompiledContentPushExecutionPlan, ContentPushExecutionReport>;
26
+ export declare function preflightContentPushExecutionPlan(steps: readonly CompiledContentPushExecutionStep[], input: CommandSurfaceDispatchInput, dependencies?: CommandSurfaceDispatchDependencies): ContentPushExecutionReport;
27
+ export declare function contentPushExecutionReportHasFailures(report: ContentPushExecutionReport): boolean;
25
28
  export declare function executeCommandSurfaceAsReport(surface: CommandSurfaceCompileSuccess, input: CommandSurfaceDispatchInput): Promise<CommandSurfaceExecutionReport>;
29
+ export declare function preflightCommandSurfaceAsReport(surface: CommandSurfaceCompileSuccess, input: CommandSurfaceDispatchInput): CommandSurfaceExecutionReport;
26
30
  export declare function skippedRemainingCommandReports(steps: readonly CompiledContentPushExecutionStep[]): CommandSurfaceExecutionReport[];
27
31
  export declare function commandSurfaceReportToSyncResult(report: CommandSurfaceExecutionReport): SyncResult;
@@ -12,6 +12,10 @@ export type CliNavigationCommandCompileError = Readonly<{
12
12
  code: 'missing_local_navigation_menu';
13
13
  name: CliNavigationMenuName;
14
14
  message: string;
15
+ }> | Readonly<{
16
+ code: 'duplicate_navigation_identity';
17
+ identity: string;
18
+ message: string;
15
19
  }> | CliCommandValidationCompileError;
16
20
  export type CliNavigationCommandCompileInput = Readonly<{
17
21
  source: CliNavigationCommandBatchSource;
@@ -47,6 +47,7 @@ export type OneOffBlockMutation = Readonly<{
47
47
  }>;
48
48
  export type OneOffNavigationMutation = Readonly<{
49
49
  kind: 'upsert';
50
+ identifier?: string;
50
51
  menuName: string;
51
52
  items: readonly NavigationItemInput[];
52
53
  }>;
@@ -53,7 +53,7 @@ export type PageCommandReportSubject = Readonly<{
53
53
  counter: BlockCommandSyncCounter;
54
54
  }>;
55
55
  export type PageCommandExecutionReport = CliCommandExecutionReport<PageCommandReportSubject>;
56
- type PageCommandCompiledPlan = Pick<CliPageCommandCompileSuccess, 'plan' | 'reportedCommands' | 'warnings'>;
56
+ export type PageCommandCompiledPlan = Pick<CliPageCommandCompileSuccess, 'plan' | 'reportedCommands' | 'warnings'>;
57
57
  export declare function compilePagePushCommands(input: CliPageCommandCompileInput): Result<CliPageCommandCompileSuccess, CliPageCommandCompileError>;
58
58
  export type PageCommandRoutingDecision = Readonly<{
59
59
  kind: 'no_page_changes';
@@ -75,5 +75,8 @@ export declare function pageCommandExecutionToReport(input: Readonly<{
75
75
  execution: CliPageCommandExecutionResult;
76
76
  compiledPlan: PageCommandCompiledPlan;
77
77
  }>): PageCommandExecutionReport;
78
+ export declare function preflightPageCommandPlanAsReport(input: Readonly<{
79
+ compiledPlan: PageCommandCompiledPlan;
80
+ blockFieldExtensions?: BlockFieldExtensionsMap;
81
+ }>): PageCommandExecutionReport;
78
82
  export declare function pageCommandReportToSyncResult(report: PageCommandExecutionReport): SyncResult;
79
- export {};
@@ -6,7 +6,7 @@ import type { OutputContext } from '../output';
6
6
  import { type ContentDiff, type SyncResult } from '../sync';
7
7
  import { type CommandSurfaceDispatchDependencies } from './commandSurfaceDispatch';
8
8
  import { planContentPushExecution } from './pushExecutionPlan';
9
- import type { CommandSurface, CommandSurfaceCompileResult, CommandSurfaceCompileSuccess, CommandSurfaceExecutionReport, ContentPushScope, ContentPushExecutionPlan, ContentPushExecutionReport, ContentPushExecutionStep } from './pushExecutionTypes';
9
+ import type { CommandSurface, CommandSurfaceCompileResult, CommandSurfaceCompileSuccess, CommandSurfaceExecutionReport, CompiledContentPushExecutionPlan, ContentPushScope, ContentPushExecutionPlan, ContentPushExecutionReport, ContentPushExecutionStep } from './pushExecutionTypes';
10
10
  import type { compilePagePushCommands } from './pageCommands';
11
11
  export { planContentPushExecution };
12
12
  export type { CommandSurface, CommandSurfaceCompileResult, CommandSurfaceCompileSuccess, CommandSurfaceExecutionReport, ContentPushScope, ContentPushExecutionPlan, ContentPushExecutionReport, ContentPushExecutionStep, };
@@ -26,4 +26,13 @@ export type ContentPushExecutionInput = Readonly<{
26
26
  }>;
27
27
  export declare function executeContentPushPlan(input: ContentPushExecutionInput): Promise<SyncResult>;
28
28
  export declare function executeContentPushPlanAsCommandReport(input: ContentPushExecutionInput, dependencies?: CommandSurfaceDispatchDependencies): Promise<ContentPushExecutionReport>;
29
+ export type ContentPushPreflightOutcome = Readonly<{
30
+ ok: true;
31
+ compiled: CompiledContentPushExecutionPlan;
32
+ report: ContentPushExecutionReport;
33
+ }> | Readonly<{
34
+ ok: false;
35
+ report: ContentPushExecutionReport;
36
+ }>;
37
+ export declare function preflightContentPushPlanAsCommandReport(input: ContentPushExecutionInput, dependencies?: CommandSurfaceDispatchDependencies): ContentPushPreflightOutcome;
29
38
  export declare function contentPushExecutionReportToSyncResult(report: ContentPushExecutionReport): SyncResult;
@@ -7,7 +7,7 @@ import type { compileNavigationPushCommands, NavigationCommandExecutionReport }
7
7
  import type { compilePagePushCommands, PageCommandExecutionReport } from './pageCommands';
8
8
  export type CommandSurface = 'entry' | 'page' | 'form' | 'navigation';
9
9
  export type CommandSurfaceFailurePolicy = 'continue' | 'stop';
10
- export type ContentPushScope = Extract<PushScope, 'entries' | 'pages' | 'navigation' | 'forms' | 'all'>;
10
+ export type ContentPushScope = Extract<PushScope, 'entries' | 'pages' | 'navigation' | 'forms' | 'settings' | 'all'>;
11
11
  export type ResidualSettingsPushPlan = Readonly<{
12
12
  diff: ResidualSettingsDiff;
13
13
  local: ResidualSettingsLocalContent;
@@ -35,6 +35,7 @@ export interface BlockDiff {
35
35
  }
36
36
  export interface NavigationDiff {
37
37
  type: DiffType;
38
+ identifier?: string | null;
38
39
  name: string;
39
40
  /** List of changed field paths (for updates) */
40
41
  changes?: string[];
@@ -135,6 +136,13 @@ export interface JsonDiffChange {
135
136
  /** Status change: publish or unpublish */
136
137
  statusChange?: 'publish' | 'unpublish';
137
138
  }
139
+ export interface JsonDiffWarning {
140
+ type: 'duplicate_navigation_identity';
141
+ source: 'local' | 'remote';
142
+ identity: string;
143
+ menuNames: readonly string[];
144
+ message: string;
145
+ }
138
146
  export interface JsonDiff {
139
147
  summary: {
140
148
  creates: number;
@@ -144,6 +152,7 @@ export interface JsonDiff {
144
152
  unpublishes: number;
145
153
  };
146
154
  changes: JsonDiffChange[];
155
+ warnings?: readonly JsonDiffWarning[];
147
156
  }
148
157
  /** JSON diff output for pull --dry-run --json-diff */
149
158
  export interface PullJsonDiff {
@@ -39,12 +39,14 @@ export interface ManagementEntry {
39
39
  createdAt: string;
40
40
  updatedAt: string;
41
41
  publishedAt: string | null;
42
+ manualOrder: number;
42
43
  }
43
44
  export interface EntryUpsertInput {
44
45
  identifier: string;
45
46
  contentType: string;
46
47
  data: Record<string, unknown>;
47
48
  slug?: string;
49
+ manualOrder?: number;
48
50
  }
49
51
  export interface ManagementPage {
50
52
  id: string;
@@ -129,6 +131,7 @@ export interface PulledNavigationMenu {
129
131
  updatedAt: string;
130
132
  }
131
133
  export interface NavigationMenuUpsertInput {
134
+ identifier?: string;
132
135
  name: string;
133
136
  isPrimary?: boolean;
134
137
  isFooter?: boolean;
@@ -534,9 +537,11 @@ export interface PulledEntries {
534
537
  * Canonical entry title (route title for routable content types).
535
538
  */
536
539
  title: string;
540
+ manualOrder?: number;
537
541
  }>;
538
542
  meta: {
539
543
  pulledAt: string;
544
+ manualOrder?: string[];
540
545
  entries: Record<string, {
541
546
  createdAt: string;
542
547
  updatedAt: string;
@@ -586,6 +591,7 @@ export interface PulledSettings {
586
591
  warnings?: string[];
587
592
  meta: {
588
593
  pulledAt: string;
594
+ updatedAt: string | null;
589
595
  };
590
596
  }
591
597
  export interface PulledForms {
@@ -734,6 +740,7 @@ export interface PulledContent {
734
740
  courses?: PulledCourses['courses'];
735
741
  meta: {
736
742
  pulledAt: string;
743
+ settingsUpdatedAt?: string | null;
737
744
  /** Whether the response was truncated due to size limits */
738
745
  truncated?: boolean;
739
746
  /** Message explaining what was truncated */
@@ -802,6 +809,7 @@ export interface NavigationOperations {
802
809
  list(): Promise<ManagementNavigationMenu[]>;
803
810
  get(name: string): Promise<ManagementNavigationMenu | null>;
804
811
  upsert(input: NavigationMenuUpsertInput): Promise<ManagementNavigationMenu>;
812
+ delete(menuId: string): Promise<void>;
805
813
  }
806
814
  export interface SettingsOperations {
807
815
  get(): Promise<ManagementSettings>;
@@ -60,8 +60,8 @@ export interface GetEntriesBaseParams extends SdkMethodOptions {
60
60
  limit?: number;
61
61
  /** Number of entries to skip for pagination */
62
62
  offset?: number;
63
- /** Sort order for entries. 'order' uses custom ordering (default behavior). */
64
- order?: 'newest' | 'oldest' | 'title' | 'order';
63
+ /** Sort order for entries. Use 'manual' for content types that opt into manual ordering. */
64
+ order?: 'newest' | 'oldest' | 'title' | 'manual';
65
65
  /** If true, includes draft entries (requires API key with site access) */
66
66
  preview?: boolean;
67
67
  /** Selection mode: 'query' for automatic, 'manual' for specific entry IDs */
@@ -150,6 +150,13 @@ export interface ContentTypeConfig {
150
150
  fields: FieldDefinition[];
151
151
  /** Field ID to use as the entry title source */
152
152
  titleField?: string;
153
+ /**
154
+ * Entry ordering behavior. Set `mode: 'manual'` to allow editors and SDK
155
+ * content metadata to curate entry order for this content type.
156
+ */
157
+ ordering?: {
158
+ mode?: 'default' | 'manual';
159
+ };
153
160
  /**
154
161
  * When true, only one entry can exist for this content type.
155
162
  * The entry is auto-created when the content type is created.
@@ -9,6 +9,8 @@
9
9
  import type { LinkValue, Media, TipTapNode } from '../contracts';
10
10
  export type VisibilityLevel = 'admin' | 'designer' | 'author';
11
11
  export type ReferenceValueFrom = 'id' | 'identifier' | 'slug';
12
+ export declare const SDK_ICON_PICKER_PRESETS: readonly ["cta", "feature"];
13
+ export type SdkIconPickerPreset = (typeof SDK_ICON_PICKER_PRESETS)[number];
12
14
  export type MediaDeliveryOptions = {
13
15
  sizes?: string;
14
16
  widthCandidates?: number[];
@@ -35,6 +37,8 @@ export type FieldUi = Partial<{
35
37
  mediaPickerAutoOpen: boolean;
36
38
  showMediaPreview: boolean;
37
39
  showMediaOverlayActions: boolean;
40
+ mediaPreviewMaxWidth: 'xs' | 'sm' | 'md' | 'none';
41
+ preventMediaPreviewUpscale: boolean;
38
42
  mediaDelivery: MediaDeliveryOptions;
39
43
  mediaDeliveryByVariant: Record<string, MediaDeliveryOptions>;
40
44
  inputType: 'text' | 'email' | 'tel' | 'number';
@@ -78,7 +82,7 @@ export type FieldUi = Partial<{
78
82
  thumbnailAltField: string;
79
83
  thumbnailLabelField: string;
80
84
  thumbnailCardDensity: 'compact' | 'comfortable';
81
- iconPickerPreset: 'cta';
85
+ iconPickerPreset: SdkIconPickerPreset;
82
86
  contentTypeField: string;
83
87
  fixedContentType: string;
84
88
  valueFrom: 'id' | 'identifier' | 'slug';
@@ -1,5 +1,5 @@
1
1
  export type { TipTapNode, TipTapMark, Media, LinkValue, InternalRouteOnlyLinkValue, InternalResolvedLinkValue, InternalLinkValue, ExternalLinkValue, CustomLinkValue, PageLinkValue, EntryLinkValue, RichTextPrimitiveProps, RichTextVariant, } from './content';
2
- export type { AppointmentBookingContent, BlogListingContent, BlogPostContent, BodyTextAlignment, BodyTextContent, ButtonVariant, CalendarTabViews, CartContent, CardStylesContent, CheckoutContent, CollectionContent, ColumnsContent, ColumnOption, ContainerStylesContent, CourseDetailsContent, CourseRegistrationContent, CtaFullContent, DisplayMode, EmbedContent, EventCalendarContent, EventDetailsContent, EventLayout, EventListingContent, EventRegistrationContent, EventSpotlightContent, FaqContent, FaqItem, FilterAutoShow, FormBlockContent, GiftingContent, HeroContent, HeroCta, HeroCtaInput, HeroMedia, ImageColSize, ImageGalleryContent, LocationMapContent, LayoutAlign, LayoutWidth, MediaTextAlignment, MediaTextAspectRatio, MediaTextContent, MediaTextImagePosition, NewsletterSignupContent, NewsletterSignupPreset, ProductDetailContent, ProductListContent, SectionStylesContent, SemanticSpacing, ShopContent, SingleButtonContent, SiteFooterContent, SiteHeaderContent, StackContentAlignment, StackImagePosition, SystemBlockContentByFullKind, SystemBlockContentByKind, SystemBlockContentFor, SystemBlockShortKind, TeamMembersContent, TestimonialEntryContent, TestimonialsBlockContent, ThumbnailPadding, ThumbnailShape, VideoGridContent, WeekStart, } from './system-block-content';
2
+ export type { AppointmentBookingContent, BlogListingContent, BlogPostContent, BodyTextAlignment, BodyTextContent, ButtonVariant, CalendarTabViews, CartContent, CardStylesContent, CheckoutContent, CollectionContent, ColumnsContent, ColumnOption, ContainerStylesContent, CourseDetailsContent, CourseRegistrationContent, CtaFullContent, DisplayMode, EmbedContent, EventCalendarContent, EventDetailsContent, EventLayout, EventListingContent, EventRegistrationContent, EventSpotlightContent, FaqContent, FaqItem, FilterAutoShow, FormBlockContent, GiftingContent, HeroContent, HeroCta, HeroCtaInput, HeroMedia, ImageColSize, ImageGalleryContent, LocationMapContent, LayoutAlign, LayoutWidth, MediaTextAlignment, MediaTextAspectRatio, MediaTextContent, MediaTextImagePosition, NewsletterSignupContent, NewsletterSignupPreset, ProductDetailContent, ProductListContent, SectionStylesContent, SemanticIconId, SemanticSpacing, ShopContent, SingleButtonContent, SiteFooterContent, SiteHeaderContent, StackContentAlignment, StackImagePosition, SystemBlockContentByFullKind, SystemBlockContentByKind, SystemBlockContentFor, SystemBlockShortKind, TeamMembersContent, TestimonialEntryContent, TestimonialsBlockContent, ThumbnailPadding, ThumbnailShape, VideoGridContent, WeekStart, BlockIconValue, FeatureCardIconTreatment, } from './system-block-content';
3
3
  export type { PageOutline, BlockOutline, RouteMap, RouteMapEntry, OccurrenceContextData, EntrySubrouteContextData, } from './page';
4
4
  export type { Theme, ThemeTokens } from './theme';
5
5
  export type { CustomCssDeclarationsInput, CustomCssRuleInput, CustomCssNestedRuleInput, CustomCssAtRuleInput, KeyframesAtRuleInput, FontFaceAtRuleInput, MediaAtRuleInput, SupportsAtRuleInput, RawAtRuleInput, } from './custom-css';
@@ -5,7 +5,7 @@
5
5
  * require importing internal blocks package types.
6
6
  */
7
7
  import type { LinkValue, Media, TipTapNode } from './content';
8
- import type { EventCategoryId, VenueId } from '../../../core/src/index';
8
+ import type { Brand, EventCategoryId, VenueId } from '../../../core/src/index';
9
9
  type UnknownRecord = Record<string, unknown>;
10
10
  type ImageMedia = Omit<Media, 'type'> & {
11
11
  type: 'image';
@@ -53,6 +53,20 @@ export type ContainerStylesContent = {
53
53
  fullWidth?: boolean | null;
54
54
  } | null;
55
55
  export type CtaIconName = 'ArrowRight' | 'ArrowLeft' | 'ChevronRight' | 'ChevronLeft' | 'ChevronUp' | 'ChevronDown' | 'ExternalLink' | 'Download' | 'Upload' | 'Mail' | 'Phone' | 'Play' | 'ShoppingCart' | 'Calendar' | 'MapPin' | 'Info' | 'Plus' | 'Minus' | 'Check' | 'X';
56
+ export type SemanticIconId = 'protection-trust' | 'confidentiality' | 'care-support' | 'partnership' | 'warmth' | 'community' | 'personal-guidance' | 'conversation' | 'friendly-welcome' | 'insight-learning' | 'natural-wellbeing' | 'growth' | 'gentle-care' | 'special-touch' | 'ideas' | 'direction' | 'focus' | 'quality' | 'highlight' | 'verified-quality' | 'learning' | 'training' | 'programmes-dates' | 'place' | 'products' | 'packages' | 'time' | 'practical-service' | 'at-home' | 'worldwide' | 'professional-service';
57
+ export type BlockIconValue = {
58
+ kind: 'none';
59
+ } | {
60
+ kind: 'semantic';
61
+ iconId: SemanticIconId;
62
+ } | {
63
+ kind: 'generated';
64
+ setId: Brand<string, 'GeneratedIconSetId'>;
65
+ assetId: Brand<string, 'GeneratedIconAssetId'>;
66
+ semanticFallbackIconId: SemanticIconId;
67
+ styleGuideVersionId: Brand<string, 'SiteIconStyleGuideVersionId'>;
68
+ };
69
+ export type FeatureCardIconTreatment = 'plain' | 'soft-badge' | 'utility-badge';
56
70
  export type RichTextDoc = {
57
71
  type: 'doc';
58
72
  content?: Array<{
@@ -306,6 +320,7 @@ export type FaqItem = {
306
320
  answer: unknown;
307
321
  };
308
322
  export type FaqContent = {
323
+ variant?: 'default' | 'two-column' | 'question-columns' | 'split-heading-columns' | null;
309
324
  eyebrow?: string | null;
310
325
  title?: string | null;
311
326
  description?: unknown;
@@ -315,6 +330,7 @@ export type FaqContent = {
315
330
  export type FeatureCard = {
316
331
  media?: Media | null;
317
332
  aspectRatio?: StandardAspectRatio | null;
333
+ icon?: BlockIconValue | SemanticIconId | null;
318
334
  title: string;
319
335
  body?: TipTapNode | null;
320
336
  ctas?: BlockCtaContent[] | null;
@@ -324,6 +340,7 @@ export type FeatureCardsContent = {
324
340
  title?: string | null;
325
341
  description?: TipTapNode | null;
326
342
  columns?: '2' | '3' | '4' | null;
343
+ _iconTreatment?: FeatureCardIconTreatment | null;
327
344
  cards?: FeatureCard[] | null;
328
345
  };
329
346
  export type HeroCta = {
@@ -502,7 +519,7 @@ export type TeamMembersContent = (TeamMembersCommonContent & {
502
519
  members?: ManualTeamMemberItem[];
503
520
  });
504
521
  export type TestimonialsBlockContent = {
505
- variant?: 'carousel' | 'grid' | null;
522
+ variant?: 'carousel' | 'grid' | 'split-grid' | null;
506
523
  heading?: string | null;
507
524
  subheading?: string | null;
508
525
  avatarLayout?: 'above-centered' | 'inline-left' | 'hidden' | null;
@@ -40,7 +40,7 @@
40
40
  export { createCatchAllPage } from './catch-all';
41
41
  export { RiverbankContentLoadError, SdkContentLoadError, classifyContentLoadError, isSdkContentLoadError, toContentLoadFailureLogFields, type CatchAllContentLoadFailureContext, type CatchAllRequestContext, type ClassifiedContentLoadError, type SdkContentLoadFailure, type SdkContentLoadFailureKind, type SdkContentLoadNotFound, } from './content-load-failure';
42
42
  export type { CreateCatchAllPageOptions, CreateCatchAllPageResult, CatchAllPageProps, CatchAllContext, ThemeSwitchConfigV1, ThemeResolverContext, } from './types';
43
- export { generateAllStaticParams, validateStaticParamsEnv, pathToSlugArray, type StaticParamsEnvResult, } from './static-params';
43
+ export { createGenerateStaticParams, generateAllStaticParams, normalizeStaticRoutePath, validateStaticParamsEnv, pathToSlugArray, routesToStaticParams, type CreateGenerateStaticParamsOptions, type GenerateAllStaticParamsOptions, type StaticParam, type StaticParamsClient, type StaticParamsEnvResult, type StaticParamsFailureContext, type StaticParamsFailureMode, type StaticParamsRoute, } from './static-params';
44
44
  export { createSitemap, type CreateSitemapOptions, type SitemapGenerator, } from './sitemap';
45
45
  export { createRobots, type CreateRobotsOptions } from './robots';
46
46
  /**
@@ -17,13 +17,34 @@
17
17
  * import { createRevalidateHandler } from '@riverbankcms/sdk/next/revalidate';
18
18
  *
19
19
  * export const POST = createRevalidateHandler({
20
- * onRevalidate: (payload, items) => {
21
- * console.log(`Revalidated ${items.length} items for ${payload.event}`);
20
+ * onRevalidate: (payload, items, metadata) => {
21
+ * console.log(`Revalidated ${items.length} items for ${payload.event}`, metadata);
22
22
  * },
23
23
  * });
24
24
  * ```
25
25
  */
26
26
  import { type WebhookPayload } from '../webhooks/verify';
27
+ export type NormalizedRevalidationPaths = Readonly<{
28
+ paths: string[];
29
+ invalidPaths: string[];
30
+ }>;
31
+ export type RevalidationRequestMetadata = Readonly<{
32
+ event: WebhookPayload['event'];
33
+ siteId: string;
34
+ dispatchId?: string;
35
+ pathCount: number;
36
+ tagCount: number;
37
+ itemCount: number;
38
+ requestId?: string;
39
+ correlationId?: string;
40
+ monitorRunId?: string;
41
+ }>;
42
+ /**
43
+ * Normalize a public URL path for Next revalidation.
44
+ */
45
+ export declare function normalizeRevalidationPath(path: string): string | null;
46
+ export declare function normalizeRevalidationPaths(paths?: readonly string[]): NormalizedRevalidationPaths;
47
+ export declare function normalizeRevalidationTags(tags?: readonly string[]): string[];
27
48
  /**
28
49
  * Options for the revalidation handler.
29
50
  */
@@ -36,15 +57,15 @@ export interface RevalidateHandlerOptions {
36
57
  * Callback called after successful revalidation.
37
58
  * Useful for logging or analytics.
38
59
  */
39
- onRevalidate?: (payload: WebhookPayload, revalidatedItems: string[]) => void;
60
+ onRevalidate?: (payload: WebhookPayload, revalidatedItems: string[], metadata: RevalidationRequestMetadata) => void;
40
61
  }
41
62
  /**
42
63
  * Create a Next.js API route handler for webhook revalidation.
43
64
  *
44
65
  * The handler:
45
66
  * 1. Verifies the webhook signature using HMAC-SHA256
46
- * 2. Calls `revalidateTag()` for each tag in the payload
47
- * 3. Calls `revalidatePath()` if a path is included in the data
67
+ * 2. Calls `revalidateTag()` for each normalized tag in the payload
68
+ * 3. Calls `revalidatePath()` for each normalized path in the payload
48
69
  * 4. Returns a JSON response with the revalidation results
49
70
  *
50
71
  * @param options - Configuration options
@@ -11,6 +11,29 @@
11
11
  * export { generateAllStaticParams as generateStaticParams };
12
12
  * ```
13
13
  */
14
+ import type { RiverbankClient } from '../client/types';
15
+ import type { RoutableContentResponse } from '../public-api/contracts';
16
+ export type StaticParam = Readonly<{
17
+ slug: string[];
18
+ }>;
19
+ export type StaticParamsRoute = Pick<RoutableContentResponse['items'][number], 'path'>;
20
+ export type StaticParamsClient = Pick<RiverbankClient, 'getAllPublishedRoutes'>;
21
+ export type StaticParamsFailureMode = 'throw' | 'fallback';
22
+ export type StaticParamsFailureContext = Readonly<{
23
+ siteId: string;
24
+ error: unknown;
25
+ reason: 'route_discovery_failed' | 'invalid_route_path';
26
+ path?: string;
27
+ }>;
28
+ export type CreateGenerateStaticParamsOptions = Readonly<{
29
+ getClient: () => StaticParamsClient | Promise<StaticParamsClient>;
30
+ siteId: string;
31
+ failureMode?: StaticParamsFailureMode;
32
+ fallbackPaths?: readonly string[];
33
+ onFailure?: (context: StaticParamsFailureContext) => void;
34
+ signal?: AbortSignal;
35
+ }>;
36
+ export type GenerateAllStaticParamsOptions = Pick<CreateGenerateStaticParamsOptions, 'failureMode' | 'fallbackPaths' | 'onFailure' | 'signal'>;
14
37
  /**
15
38
  * Environment variable validation result
16
39
  */
@@ -25,6 +48,7 @@ export type StaticParamsEnvResult = {
25
48
  valid: false;
26
49
  missingVars: string[];
27
50
  };
51
+ export declare function dashboardUrlToApiBaseUrl(input: string): string;
28
52
  /**
29
53
  * Validate that all required environment variables are set.
30
54
  *
@@ -36,6 +60,7 @@ export type StaticParamsEnvResult = {
36
60
  * @returns Validation result with config or missing vars
37
61
  */
38
62
  export declare function validateStaticParamsEnv(): StaticParamsEnvResult;
63
+ export declare function normalizeStaticRoutePath(path: string): string;
39
64
  /**
40
65
  * Convert a route path to a Next.js slug array.
41
66
  *
@@ -50,6 +75,8 @@ export declare function validateStaticParamsEnv(): StaticParamsEnvResult;
50
75
  * ```
51
76
  */
52
77
  export declare function pathToSlugArray(path: string): string[];
78
+ export declare function routesToStaticParams(routes: readonly StaticParamsRoute[]): StaticParam[];
79
+ export declare function createGenerateStaticParams(options: CreateGenerateStaticParamsOptions): () => Promise<StaticParam[]>;
53
80
  /**
54
81
  * Generate static params for all published routes.
55
82
  *
@@ -79,6 +106,4 @@ export declare function pathToSlugArray(path: string): string[];
79
106
  * }
80
107
  * ```
81
108
  */
82
- export declare function generateAllStaticParams(): Promise<{
83
- slug: string[];
84
- }[]>;
109
+ export declare function generateAllStaticParams(options?: GenerateAllStaticParamsOptions): Promise<StaticParam[]>;
@@ -810,7 +810,7 @@ export type SitemapRoutesResponse = {
810
810
  pageSize: number;
811
811
  allowIndexingInProduction: boolean;
812
812
  };
813
- export type PublicEndpointName = "getSite" | "getContentByPath" | "listPublishedEntries" | "getPublishedEntryPreview" | "getPublicFormById" | "listPublicForms" | "getPublicBookingServices" | "getPublicChallenge" | "listPublicEvents" | "batchBlockLoaders" | "listPublicCourses" | "listPublicTeamMembers" | "listPublicProducts" | "listPublicPasses" | "listPublicMemberships" | "resolveEntrySubroute" | "resolveEventOccurrence" | "checkRedirect" | "getRoutableContent" | "getPublicSitemapRoutes";
813
+ export type PublicEndpointName = "getSite" | "getContentByPath" | "listPublishedEntries" | "getPublishedEntryPreview" | "getPublicFormById" | "listPublicForms" | "getPublicBookingServices" | "getPublicChallenge" | "listPublicEvents" | "batchBlockLoaders" | "listPublicCourses" | "listPublicTeamMembers" | "listPublicProducts" | "listPublicPasses" | "listPublicMemberships" | "resolveEntrySubroute" | "resolveEventOccurrence" | "checkRedirect" | "getRoutableContent" | "getPublicRoutableContent" | "getPublicSitemapRoutes";
814
814
  export type PublicAPIEndpoints = {
815
815
  getSite: APIEndpointBase<never, {
816
816
  id?: string;
@@ -949,6 +949,10 @@ export type PublicAPIEndpoints = {
949
949
  siteId: string;
950
950
  publishedOnly?: string;
951
951
  }, RoutableContentResponse>;
952
+ getPublicRoutableContent: APIEndpointBase<never, {
953
+ siteId: string;
954
+ publishedOnly?: string;
955
+ }, RoutableContentResponse>;
952
956
  getPublicSitemapRoutes: APIEndpointBase<never, {
953
957
  siteId: string;
954
958
  page?: string;
@@ -1,5 +1,5 @@
1
1
  import type { ApiResult, HTTPMethod, PublicAPIEndpoints, PublicEndpointName } from './contracts';
2
- export declare const PUBLIC_ENDPOINT_NAMES: readonly ["getSite", "getContentByPath", "listPublishedEntries", "getPublishedEntryPreview", "getPublicFormById", "listPublicForms", "getPublicBookingServices", "getPublicChallenge", "listPublicEvents", "batchBlockLoaders", "listPublicCourses", "listPublicTeamMembers", "listPublicProducts", "listPublicPasses", "listPublicMemberships", "resolveEntrySubroute", "resolveEventOccurrence", "checkRedirect", "getRoutableContent", "getPublicSitemapRoutes"];
2
+ export declare const PUBLIC_ENDPOINT_NAMES: readonly ["getSite", "getContentByPath", "listPublishedEntries", "getPublishedEntryPreview", "getPublicFormById", "listPublicForms", "getPublicBookingServices", "getPublicChallenge", "listPublicEvents", "batchBlockLoaders", "listPublicCourses", "listPublicTeamMembers", "listPublicProducts", "listPublicPasses", "listPublicMemberships", "resolveEntrySubroute", "resolveEventOccurrence", "checkRedirect", "getRoutableContent", "getPublicRoutableContent", "getPublicSitemapRoutes"];
3
3
  export type ApiClient = <E extends PublicEndpointName>(params: {
4
4
  endpoint: E;
5
5
  params?: PublicAPIEndpoints[E]['query'];
@@ -8,4 +8,4 @@
8
8
  * 1. This constant
9
9
  * 2. The "version" field in package.json
10
10
  */
11
- export declare const SDK_VERSION = "0.78.0";
11
+ export declare const SDK_VERSION = "0.79.0";
@@ -1,4 +1,4 @@
1
1
  /**
2
2
  * Webhook utilities for Riverbank SDK
3
3
  */
4
- export { verifyWebhookSignature, parseWebhookPayload, WebhookPayloadSchema, type WebhookPayload, type ParseWebhookResult, } from './verify';
4
+ export { SUPPORTED_WEBHOOK_EVENTS, verifyWebhookSignature, parseWebhookPayload, RIVERBANK_SIGNATURE_PREFIX, WebhookPayloadSchema, WebhookEventSchema, normalizeRevalidationPath, parseRevalidationPath, unwrapRevalidationPath, type RevalidationPath, type RevalidationPathParseError, type RevalidationPathParseResult, type WebhookEvent, type WebhookPayload, type ParseWebhookResult, } from './verify';
@@ -3,116 +3,20 @@
3
3
  *
4
4
  * Provides framework-agnostic webhook signature verification and payload parsing.
5
5
  */
6
- import { z } from 'zod';
7
- /**
8
- * Supported webhook event types.
9
- * Keep in sync with apps/dashboard/src/lib/db/helpers/webhooks.ts
10
- */
11
- export declare const WebhookEventSchema: z.ZodEnum<{
12
- "page.published": "page.published";
13
- "entry.published": "entry.published";
14
- "navigation.updated": "navigation.updated";
15
- "theme.updated": "theme.updated";
16
- "site.settings_updated": "site.settings_updated";
17
- }>;
18
- export type WebhookEvent = z.infer<typeof WebhookEventSchema>;
19
- /** Data for page.published events */
20
- export declare const PagePublishedDataSchema: z.ZodObject<{
21
- pageId: z.ZodString;
22
- path: z.ZodString;
23
- slug: z.ZodOptional<z.ZodString>;
24
- }, z.core.$strip>;
25
- /** Data for entry.published events */
26
- export declare const EntryPublishedDataSchema: z.ZodObject<{
27
- entryId: z.ZodString;
28
- path: z.ZodString;
29
- contentType: z.ZodString;
30
- }, z.core.$strip>;
31
- /** Data for navigation.updated events */
32
- export declare const NavigationUpdatedDataSchema: z.ZodObject<{
33
- menuId: z.ZodOptional<z.ZodString>;
34
- }, z.core.$strip>;
35
- /** Data for theme.updated and site.settings_updated events (empty) */
36
- export declare const EmptyDataSchema: z.ZodObject<{}, z.core.$strip>;
37
- /**
38
- * Combined data schema that accepts any valid event data.
39
- * The actual shape depends on the event type.
40
- */
41
- export declare const WebhookDataSchema: z.ZodUnion<readonly [z.ZodObject<{
42
- pageId: z.ZodString;
43
- path: z.ZodString;
44
- slug: z.ZodOptional<z.ZodString>;
45
- }, z.core.$strip>, z.ZodObject<{
46
- entryId: z.ZodString;
47
- path: z.ZodString;
48
- contentType: z.ZodString;
49
- }, z.core.$strip>, z.ZodObject<{
50
- menuId: z.ZodOptional<z.ZodString>;
51
- }, z.core.$strip>, z.ZodObject<{}, z.core.$strip>]>;
52
- export type PagePublishedData = z.infer<typeof PagePublishedDataSchema>;
53
- export type EntryPublishedData = z.infer<typeof EntryPublishedDataSchema>;
54
- export type NavigationUpdatedData = z.infer<typeof NavigationUpdatedDataSchema>;
55
- /**
56
- * Zod schema for webhook payload validation.
57
- */
58
- export declare const WebhookPayloadSchema: z.ZodObject<{
59
- event: z.ZodEnum<{
60
- "page.published": "page.published";
61
- "entry.published": "entry.published";
62
- "navigation.updated": "navigation.updated";
63
- "theme.updated": "theme.updated";
64
- "site.settings_updated": "site.settings_updated";
65
- }>;
66
- timestamp: z.ZodString;
67
- siteId: z.ZodString;
68
- data: z.ZodRecord<z.ZodString, z.ZodUnknown>;
69
- tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
70
- }, z.core.$strip>;
71
- /**
72
- * Webhook payload structure sent by the CMS.
73
- */
74
- export type WebhookPayload = z.infer<typeof WebhookPayloadSchema>;
6
+ import { type EmptyWebhookData, type EntryPathChangedData, type EntryPublishedData, type EntryRemovedData, type NavigationUpdatedData, type PagePathChangedData, type PagePublishedData, type PageRemovedData, type RevalidationPath, type RevalidationPathParseError, type RevalidationPathParseResult, type WebhookEvent, type WebhookPayload } from '../../../api/src/webhooks';
7
+ export { EmptyWebhookDataSchema as EmptyDataSchema, EntryPathChangedDataSchema, EntryPublishedDataSchema, EntryRemovedDataSchema, NavigationUpdatedDataSchema, PagePathChangedDataSchema, PagePublishedDataSchema, PageRemovedDataSchema, RIVERBANK_SIGNATURE_PREFIX, SUPPORTED_WEBHOOK_EVENTS, WebhookEventSchema, WebhookPayloadSchema, normalizeRevalidationPath, parseRevalidationPath, unwrapRevalidationPath, } from '../../../api/src/webhooks';
8
+ export type { EmptyWebhookData as EmptyData, RevalidationPath, RevalidationPathParseError, RevalidationPathParseResult, EntryPathChangedData, EntryPublishedData, EntryRemovedData, NavigationUpdatedData, PagePathChangedData, PagePublishedData, PageRemovedData, WebhookEvent, WebhookPayload, };
75
9
  /**
76
10
  * Type-safe webhook payload with discriminated data based on event type.
77
11
  */
78
- export type TypedWebhookPayload = {
79
- event: 'page.published';
80
- data: PagePublishedData;
81
- siteId: string;
82
- timestamp: string;
83
- tags?: string[];
84
- } | {
85
- event: 'entry.published';
86
- data: EntryPublishedData;
87
- siteId: string;
88
- timestamp: string;
89
- tags?: string[];
90
- } | {
91
- event: 'navigation.updated';
92
- data: NavigationUpdatedData;
93
- siteId: string;
94
- timestamp: string;
95
- tags?: string[];
96
- } | {
97
- event: 'theme.updated';
98
- data: Record<string, never>;
99
- siteId: string;
100
- timestamp: string;
101
- tags?: string[];
102
- } | {
103
- event: 'site.settings_updated';
104
- data: Record<string, never>;
105
- siteId: string;
106
- timestamp: string;
107
- tags?: string[];
108
- };
12
+ export type TypedWebhookPayload = WebhookPayload;
109
13
  /**
110
- * Verify a webhook signature using HMAC-SHA256.
14
+ * Verify a `sha256=<digest>` webhook signature using HMAC-SHA256.
111
15
  *
112
16
  * Uses timing-safe comparison to prevent timing attacks.
113
17
  *
114
18
  * @param payload - The raw request body as a string
115
- * @param signature - The X-Riverbank-Signature header value
19
+ * @param signature - The X-Riverbank-Signature header value (`sha256=<hex digest>`)
116
20
  * @param secret - The webhook signing secret (RIVERBANK_WEBHOOK_SECRET)
117
21
  * @returns true if signature is valid, false otherwise
118
22
  *