@riverbankcms/sdk 0.95.0 → 0.98.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 (235) hide show
  1. package/README.md +47 -5
  2. package/dist/{PreviewEditorSidebar-6FQYKOSB.mjs → PreviewEditorSidebar-CG3SSJND.mjs} +3 -3
  3. package/dist/{PreviewEditorUI-NPO2XMFB.mjs → PreviewEditorUI-RHNGKAAU.mjs} +3 -3
  4. package/dist/SdkPreviewModeRuntime-OV5PNJBB.mjs +8 -0
  5. package/dist/_dts/ai/src/contracts/proposals.d.ts +10 -10
  6. package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +35 -1
  7. package/dist/_dts/api/src/bookingOperations.d.ts +246 -0
  8. package/dist/_dts/api/src/contentRuntime.d.ts +109 -40
  9. package/dist/_dts/api/src/endpoints.d.ts +80 -0
  10. package/dist/_dts/api/src/index.d.ts +3 -2
  11. package/dist/_dts/api/src/public/endpoints.d.ts +1 -1
  12. package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +10 -0
  13. package/dist/_dts/api/src/sdkContracts.d.ts +2 -0
  14. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +2 -1
  15. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +7 -1
  16. package/dist/_dts/block-form/src/client/index.d.ts +1 -1
  17. package/dist/_dts/block-form/src/fields/types.d.ts +9 -1
  18. package/dist/_dts/block-form/src/registry/schemas.d.ts +4 -0
  19. package/dist/_dts/block-form/src/registry/widgets.d.ts +1 -0
  20. package/dist/_dts/block-form/src/widgets/InlineTextField/InlineTextField.d.ts +4 -0
  21. package/dist/_dts/block-form/src/widgets/InlineTextField/index.d.ts +3 -0
  22. package/dist/_dts/block-form/src/widgets/InlineTextField/inlineTextFieldDefaults.d.ts +2 -0
  23. package/dist/_dts/block-form/src/widgets/InlineTextField/inlineTextFieldSchema.d.ts +3 -0
  24. package/dist/_dts/blocks/src/PageRenderer.d.ts +2 -1
  25. package/dist/_dts/blocks/src/bindings/index.d.ts +1 -0
  26. package/dist/_dts/blocks/src/bindings/types.d.ts +1 -4
  27. package/dist/_dts/blocks/src/client/site-chrome.d.ts +7 -0
  28. package/dist/_dts/blocks/src/contracts/index.d.ts +1 -0
  29. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +12 -12
  30. package/dist/_dts/blocks/src/index.d.ts +2 -0
  31. package/dist/_dts/blocks/src/primitives/content/primitives.d.ts +4 -0
  32. package/dist/_dts/blocks/src/system/blocks/appointment-booking.d.ts +2 -29631
  33. package/dist/_dts/blocks/src/system/blocks/blog-listing.d.ts +2 -29614
  34. package/dist/_dts/blocks/src/system/blocks/cart.d.ts +2 -29634
  35. package/dist/_dts/blocks/src/system/blocks/checkout.d.ts +2 -29627
  36. package/dist/_dts/blocks/src/system/blocks/collection.d.ts +2 -29585
  37. package/dist/_dts/blocks/src/system/blocks/events/shared/index.d.ts +1 -0
  38. package/dist/_dts/blocks/src/system/blocks/events/shared/layout.d.ts +2 -0
  39. package/dist/_dts/blocks/src/system/blocks/faq.d.ts +2 -29677
  40. package/dist/_dts/blocks/src/system/blocks/gifting.d.ts +2 -29655
  41. package/dist/_dts/blocks/src/system/blocks/index.d.ts +1 -0
  42. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +220 -0
  43. package/dist/_dts/blocks/src/system/blocks/product-detail.d.ts +2 -29655
  44. package/dist/_dts/blocks/src/system/blocks/product-list.d.ts +2 -29685
  45. package/dist/_dts/blocks/src/system/blocks/shop.d.ts +2 -29761
  46. package/dist/_dts/blocks/src/system/blocks/weekly-slot-availability.d.ts +34 -0
  47. package/dist/_dts/blocks/src/system/componentFactory.d.ts +1 -0
  48. package/dist/_dts/blocks/src/system/constants/blockKinds.d.ts +1 -1
  49. package/dist/_dts/blocks/src/system/customize/facets.d.ts +2 -2
  50. package/dist/_dts/blocks/src/system/data/loaderEndpoints.d.ts +1 -1
  51. package/dist/_dts/blocks/src/system/data/prefetchBlockData.d.ts +4 -1
  52. package/dist/_dts/blocks/src/system/fragments/library/heroCopy.d.ts +9 -0
  53. package/dist/_dts/blocks/src/system/inlineText.d.ts +78 -0
  54. package/dist/_dts/blocks/src/system/manifest/derivedContent.d.ts +3 -1
  55. package/dist/_dts/blocks/src/system/manifest/fieldValidation/index.d.ts +15 -3
  56. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +188 -7
  57. package/dist/_dts/blocks/src/system/node/builder.d.ts +2 -0
  58. package/dist/_dts/blocks/src/system/node/schema.d.ts +13 -0
  59. package/dist/_dts/blocks/src/system/node/validation-constants.d.ts +1 -1
  60. package/dist/_dts/blocks/src/system/registry.d.ts +1 -0
  61. package/dist/_dts/blocks/src/system/runtime/api/client.d.ts +2 -1
  62. package/dist/_dts/blocks/src/system/runtime/api/endpoints.d.ts +8 -0
  63. package/dist/_dts/blocks/src/system/runtime/api/types.d.ts +24 -0
  64. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +6 -0
  65. package/dist/_dts/blocks/src/system/runtime/hooks/useAppointmentCheckoutVerification.d.ts +7 -0
  66. package/dist/_dts/blocks/src/system/runtime/hooks/useAvailableSlots.d.ts +2 -2
  67. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessEventRegistrationFlow.d.ts +4 -0
  68. package/dist/_dts/blocks/src/system/runtime/hooks/usePaymentVerification.d.ts +5 -0
  69. package/dist/_dts/blocks/src/system/runtime/nodes/basic.d.ts +2 -1
  70. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/hooks.d.ts +14 -0
  71. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.d.ts +8 -2
  72. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +133 -2
  73. package/dist/_dts/blocks/src/system/runtime/nodes/renderInlineText.d.ts +3 -0
  74. package/dist/_dts/blocks/src/system/runtime/nodes/weekly-slot-availability.client.controller.d.ts +3 -0
  75. package/dist/_dts/blocks/src/system/runtime/nodes/weekly-slot-availability.client.d.ts +9 -0
  76. package/dist/_dts/blocks/src/system/runtime/nodes/weekly-slot-availability.client.state.d.ts +14 -0
  77. package/dist/_dts/blocks/src/system/runtime/nodes/weekly-slot-availability.server.d.ts +10 -0
  78. package/dist/_dts/blocks/src/system/runtime/nodes/weekly-slot-availability.view.d.ts +11 -0
  79. package/dist/_dts/blocks/src/system/runtime/resolver.d.ts +31 -1
  80. package/dist/_dts/blocks/src/system/runtime/shared/useWaitlistClaim.d.ts +5 -0
  81. package/dist/_dts/blocks/src/utils/date-formatting.d.ts +1 -1
  82. package/dist/_dts/content-editor/src/index.d.ts +1 -0
  83. package/dist/_dts/content-editor/src/primitives/PreviewInlineTextEditor.d.ts +9 -0
  84. package/dist/_dts/content-editor/src/primitives/PreviewRichTextEditor.d.ts +1 -1
  85. package/dist/_dts/content-model/src/templates/bindingTypeCompatibility.d.ts +1 -1
  86. package/dist/_dts/content-model/src/templates/defaults.d.ts +30 -0
  87. package/dist/_dts/content-model/src/templates/types.d.ts +3 -6
  88. package/dist/_dts/core/src/branded.d.ts +8 -0
  89. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +505 -2
  90. package/dist/_dts/editor/src/inline/FloatingToolbar.d.ts +18 -0
  91. package/dist/_dts/editor/src/inline/InlineTextEditor.d.ts +18 -1
  92. package/dist/_dts/editor/src/inline/InlineTextEditorStyles.d.ts +1 -0
  93. package/dist/_dts/editor/src/inline/domParse.d.ts +3 -0
  94. package/dist/_dts/editor/src/inline/presentation.d.ts +48 -0
  95. package/dist/_dts/editor/src/inline/selection.d.ts +12 -0
  96. package/dist/_dts/editor-blocks/src/widgets/index.d.ts +1 -0
  97. package/dist/_dts/editor-blocks/src/widgets/inline-text/InlineTextField.d.ts +3 -0
  98. package/dist/_dts/editor-blocks/src/widgets/inline-text/index.d.ts +1 -0
  99. package/dist/_dts/field-primitives/src/bindings/index.d.ts +8 -0
  100. package/dist/_dts/path-utils/src/index.d.ts +1 -0
  101. package/dist/_dts/preview-next/src/client/widgets/widgetOverrides.d.ts +1 -0
  102. package/dist/_dts/sdk/src/cli/commands/content.d.ts +56 -0
  103. package/dist/_dts/sdk/src/cli/commands/push/options.d.ts +4 -0
  104. package/dist/_dts/sdk/src/cli/commands/push/publishGuidance.d.ts +15 -0
  105. package/dist/_dts/sdk/src/cli/commands/push/scopes/commandBackedDatedOfferingScope.d.ts +4 -7
  106. package/dist/_dts/sdk/src/cli/commands/push/scopes/types.d.ts +5 -1
  107. package/dist/_dts/sdk/src/cli/commands/push/stale-resolution.d.ts +9 -3
  108. package/dist/_dts/sdk/src/cli/commands/push/verification.d.ts +56 -0
  109. package/dist/_dts/sdk/src/cli/commands/push/workflowPlan.d.ts +34 -0
  110. package/dist/_dts/sdk/src/cli/commands/push-execute.d.ts +2 -1
  111. package/dist/_dts/sdk/src/cli/commands/setup.d.ts +2 -0
  112. package/dist/_dts/sdk/src/cli/config-loader.d.ts +2 -0
  113. package/dist/_dts/sdk/src/cli/content/edit/format.d.ts +2 -0
  114. package/dist/_dts/sdk/src/cli/content/edit/path.d.ts +14 -0
  115. package/dist/_dts/sdk/src/cli/content/edit/planner.d.ts +46 -0
  116. package/dist/_dts/sdk/src/cli/content/fs-utils.d.ts +4 -0
  117. package/dist/_dts/sdk/src/cli/content/metadataStore.d.ts +29 -0
  118. package/dist/_dts/sdk/src/cli/content/reader.d.ts +16 -14
  119. package/dist/_dts/sdk/src/cli/content/writer.d.ts +8 -4
  120. package/dist/_dts/sdk/src/cli/env-scope.d.ts +2 -0
  121. package/dist/_dts/sdk/src/cli/helpers.d.ts +6 -7
  122. package/dist/_dts/sdk/src/cli/merge-remote/entryMergePush.d.ts +2 -0
  123. package/dist/_dts/sdk/src/cli/merge-remote/mergeFieldChanges.d.ts +22 -0
  124. package/dist/_dts/sdk/src/cli/merge-remote/pageLocal.d.ts +3 -0
  125. package/dist/_dts/sdk/src/cli/merge-remote/pageMerge.d.ts +78 -0
  126. package/dist/_dts/sdk/src/cli/merge-remote/pageMergePlan.d.ts +36 -0
  127. package/dist/_dts/sdk/src/cli/merge-remote/pageMergePush.d.ts +23 -0
  128. package/dist/_dts/sdk/src/cli/merge-remote/pageMergeReport.d.ts +29 -0
  129. package/dist/_dts/sdk/src/cli/merge-remote/pageSnapshots.d.ts +48 -0
  130. package/dist/_dts/sdk/src/cli/push-config.d.ts +13 -2
  131. package/dist/_dts/sdk/src/cli/setup/setupPlan.d.ts +51 -0
  132. package/dist/_dts/sdk/src/cli/site-commands/commandRuntime.d.ts +21 -0
  133. package/dist/_dts/sdk/src/cli/sync/diff.d.ts +3 -6
  134. package/dist/_dts/sdk/src/cli/sync/field-diff.d.ts +39 -0
  135. package/dist/_dts/sdk/src/cli/sync/index.d.ts +1 -0
  136. package/dist/_dts/sdk/src/client/runtimeCachePolicy.d.ts +1 -1
  137. package/dist/_dts/sdk/src/client/types.d.ts +18 -2
  138. package/dist/_dts/sdk/src/config/field-definitions.d.ts +8 -3
  139. package/dist/_dts/sdk/src/config/typed-entries.d.ts +5 -3
  140. package/dist/_dts/sdk/src/config/types.d.ts +1 -1
  141. package/dist/_dts/sdk/src/config/validation.d.ts +3 -0
  142. package/dist/_dts/sdk/src/contracts/bindings.d.ts +4 -7
  143. package/dist/_dts/sdk/src/contracts/content.d.ts +18 -0
  144. package/dist/_dts/sdk/src/contracts/index.d.ts +1 -1
  145. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +16 -2
  146. package/dist/_dts/sdk/src/next/route-outcome-proxy.d.ts +3 -3
  147. package/dist/_dts/sdk/src/public-api/contracts.d.ts +174 -78
  148. package/dist/_dts/sdk/src/public-api/runtime.d.ts +1 -1
  149. package/dist/_dts/sdk/src/rendering/helpers/bindings.d.ts +4 -3
  150. package/dist/_dts/sdk/src/rendering/helpers/loadContent.d.ts +52 -1
  151. package/dist/_dts/sdk/src/rendering/hooks/usePage.d.ts +2 -2
  152. package/dist/_dts/sdk/src/rendering/islands/types.d.ts +18 -66
  153. package/dist/_dts/sdk/src/types/block-kinds.d.ts +1 -1
  154. package/dist/_dts/sdk/src/version.d.ts +1 -1
  155. package/dist/_dts/theme-core/src/accordions/types.d.ts +1 -1
  156. package/dist/_dts/theme-core/src/buttons/types.d.ts +1 -1
  157. package/dist/_dts/theme-core/src/cards/types.d.ts +15 -15
  158. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  159. package/dist/_dts/theme-core/src/inputs/types.d.ts +1 -1
  160. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +42 -42
  161. package/dist/_dts/theme-core/src/palette/variants/types.d.ts +2 -2
  162. package/dist/_dts/theme-core/src/schema.d.ts +44 -44
  163. package/dist/_dts/theme-core/src/site-styles/backgroundAppearance.d.ts +2 -2
  164. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +16 -16
  165. package/dist/_dts/theme-core/src/site-styles/pageDesignIntent.d.ts +4 -4
  166. package/dist/_dts/theme-core/src/site-styles/tokenRecipes.d.ts +1 -1
  167. package/dist/_dts/theme-core/src/tokens/themeColorTokens.d.ts +1 -1
  168. package/dist/{chunk-4A6NWO3X.mjs → chunk-6WDBXCPX.mjs} +73 -12
  169. package/dist/{chunk-VZBSD4AJ.mjs → chunk-DBRI3PQF.mjs} +2281 -322
  170. package/dist/{chunk-PJPFTVZG.mjs → chunk-H24OU7WG.mjs} +106 -4
  171. package/dist/{chunk-K2SJTZMX.mjs → chunk-PKDPQHB5.mjs} +2 -2
  172. package/dist/{chunk-VTPPVAOL.mjs → chunk-QPXE2OUZ.mjs} +1 -1
  173. package/dist/{chunk-7ED5UNHL.mjs → chunk-V2BYFSPW.mjs} +109 -0
  174. package/dist/cli/index.mjs +4182 -1165
  175. package/dist/cli/init-docs/content/cli-reference.md +72 -5
  176. package/dist/cli/init-docs/content/content-management.md +22 -0
  177. package/dist/cli/init-docs/content/getting-started.md +8 -0
  178. package/dist/cli/init-docs/content/workflow-agent-safe-sync.md +3 -1
  179. package/dist/cli/init-docs/content/workflow-preview-mode.md +6 -0
  180. package/dist/cli/init-docs/content/workflow-remote-setup.md +51 -0
  181. package/dist/client/{accordion-LGO4IO5U.mjs → accordion-Q2BDNL53.mjs} +1 -1
  182. package/dist/client/{bookingForm-MWLS4LGU.mjs → bookingForm-ZMP4P7EK.mjs} +16 -6
  183. package/dist/client/bookings.mjs +98 -18
  184. package/dist/client/{carousel-6AHNP5HA.mjs → carousel-LW3UXPWO.mjs} +1 -1
  185. package/dist/client/{cart-CIXGYAZB.mjs → cart-Z6D3KS6K.mjs} +5 -5
  186. package/dist/client/{checkout-OTX6O3DN.mjs → checkout-YMT2QJQM.mjs} +5 -5
  187. package/dist/client/{chunk-Y2PMKCXO.mjs → chunk-26ZBRXFR.mjs} +9 -3
  188. package/dist/client/{chunk-MYCXAKWP.mjs → chunk-DRRQ7QSL.mjs} +2 -2
  189. package/dist/client/{chunk-TREIML53.mjs → chunk-ET2MDQQT.mjs} +4 -4
  190. package/dist/client/{chunk-AVBQSUIS.mjs → chunk-HBQEAOG4.mjs} +1 -1
  191. package/dist/client/{chunk-INRIT6DP.mjs → chunk-IEOECM7U.mjs} +62 -43
  192. package/dist/client/{chunk-TNGL2WJF.mjs → chunk-KDP7ZRZV.mjs} +16 -0
  193. package/dist/client/{chunk-V67AT7ZW.mjs → chunk-R4XK3CKR.mjs} +18 -1
  194. package/dist/client/{chunk-R3NQTBWE.mjs → chunk-SK2BMD22.mjs} +2 -2
  195. package/dist/client/{chunk-HOP7MKAZ.mjs → chunk-XNTHVZ25.mjs} +1 -1
  196. package/dist/client/client.mjs +5172 -4177
  197. package/dist/client/{courseRegistration-2LU6C3JL.mjs → courseRegistration-DGKCMC77.mjs} +4 -4
  198. package/dist/client/{eventCalendar-OKUSISBZ.mjs → eventCalendar-74Z2NNFM.mjs} +7 -7
  199. package/dist/client/{eventCombined-CMF6CD4S.mjs → eventCombined-GK2ODOX2.mjs} +7 -7
  200. package/dist/client/{eventDetails-XYWH7WXI.mjs → eventDetails-MONAGT3N.mjs} +7 -7
  201. package/dist/client/{eventListing-EK5DJTAH.mjs → eventListing-SKGAO6PS.mjs} +7 -7
  202. package/dist/client/{eventRegistration-XDOSICV6.mjs → eventRegistration-6KISGXRD.mjs} +7 -7
  203. package/dist/client/{form-J6GOHKYG.mjs → form-FXPRTXHI.mjs} +2 -2
  204. package/dist/client/{headerSection-C5SYJTRW.mjs → headerSection-7NAN5WNB.mjs} +2 -2
  205. package/dist/client/hooks.mjs +1681 -1337
  206. package/dist/client/{locationMap-QSQIFVVT.mjs → locationMap-UERN74U4.mjs} +2 -2
  207. package/dist/client/{newsletterForm-47VXJRWK.mjs → newsletterForm-SGWXMJ7U.mjs} +2 -2
  208. package/dist/client/{productDetail-5U6ISCC2.mjs → productDetail-HN3HWZQZ.mjs} +5 -5
  209. package/dist/client/{productList-XDZUMR3P.mjs → productList-YT22Z5UR.mjs} +5 -5
  210. package/dist/client/rendering/client.mjs +4796 -4288
  211. package/dist/client/rendering/islands.mjs +18 -18
  212. package/dist/client/rendering.mjs +2120 -1106
  213. package/dist/client/{shop-ZSZKIY3R.mjs → shop-TKEDNWUS.mjs} +5 -5
  214. package/dist/preview-next/before-render.mjs +109 -0
  215. package/dist/preview-next/client/runtime.mjs +5 -5
  216. package/dist/preview-next/middleware.mjs +109 -0
  217. package/dist/{sdk-runtime-PHNM7MRD.mjs → sdk-runtime-LWNYCQF2.mjs} +6 -6
  218. package/dist/server/components.mjs +3777 -2981
  219. package/dist/server/config-template-validation.mjs +35 -22
  220. package/dist/server/config-validation.mjs +1883 -1565
  221. package/dist/server/config.mjs +1883 -1565
  222. package/dist/server/data.mjs +1667 -1334
  223. package/dist/server/index.mjs +208 -9
  224. package/dist/server/next/middleware.mjs +2 -2
  225. package/dist/server/next.mjs +4077 -3060
  226. package/dist/server/page-converter.mjs +1481 -1279
  227. package/dist/server/prebuild.mjs +1 -1
  228. package/dist/server/rendering/server.mjs +3806 -2993
  229. package/dist/server/rendering.mjs +4000 -3060
  230. package/dist/server/routing.mjs +1737 -1357
  231. package/dist/server/server.mjs +2918 -2276
  232. package/dist/server/theme-bridge.mjs +43 -0
  233. package/dist/styles/index.css +44 -0
  234. package/package.json +1 -1
  235. package/dist/SdkPreviewModeRuntime-PBEFH5AL.mjs +0 -8
package/README.md CHANGED
@@ -3122,6 +3122,16 @@ export default defineConfig({
3122
3122
 
3123
3123
  The SDK includes a CLI for syncing configuration and content between your local environment and the CMS.
3124
3124
 
3125
+ ### setup plan
3126
+
3127
+ Show the read-only lifecycle for site creation, management-key setup, dashboard user access, and SDK env variables:
3128
+
3129
+ ```bash
3130
+ npx riverbankcms setup plan --env=remote
3131
+ ```
3132
+
3133
+ The SDK CLI cannot create remote sites, issue keys, or grant user access from a site-scoped management key. Do those privileged operations through the dashboard/admin surface or approved CMS repo tooling, then use the setup planner and `env status` to verify the SDK repo has the right `RIVERBANK_*` variables.
3134
+
3125
3135
  ### push-config
3126
3136
 
3127
3137
  Push schema/config surfaces to your CMS dashboard, including custom blocks, block field options/extensions, content type definitions/templates, SDK-managed site settings, and footer blocks:
@@ -3141,6 +3151,7 @@ Canonical event files in `content/events/*.json` may include `path` and `blocks`
3141
3151
  | `--api-key <key>` | Management API key (or set `RIVERBANK_*_MGMT_API_KEY`) |
3142
3152
  | `--dashboard <url>` | Dashboard URL (or set `RIVERBANK_*_DASHBOARD_URL`) |
3143
3153
  | `--config <path>` | Path to config file (default: `./riverbank.config.ts`) |
3154
+ | `--dry-run` | Validate config and preview schema/config surfaces without mutating the dashboard |
3144
3155
 
3145
3156
  **Example:**
3146
3157
 
@@ -3150,6 +3161,9 @@ export RIVERBANK_LOCAL_DASHBOARD_URL=https://www.riverbankcms.com
3150
3161
  export RIVERBANK_LOCAL_MGMT_API_KEY=bld_mgmt_sk_...
3151
3162
  npx riverbankcms push-config
3152
3163
 
3164
+ # Preview without applying
3165
+ npx riverbankcms push-config --dry-run
3166
+
3153
3167
  # Or inline (remote)
3154
3168
  npx riverbankcms push-config \
3155
3169
  --api-key bld_mgmt_sk_... \
@@ -3233,10 +3247,15 @@ content/
3233
3247
  │ ├── <identifier>.<ext>
3234
3248
  │ └── .manifest.json
3235
3249
  └── .meta/
3236
- └── {entity}.json # Timestamps for sync detection
3250
+ ├── local/
3251
+ │ └── {entity}.json # Local CMS sync timestamps
3252
+ └── remote/
3253
+ └── {entity}.json # Remote CMS sync timestamps
3237
3254
  ```
3238
3255
 
3239
- Note: `content/media/.manifest.json` is a local cache (identifier → checksum/filename). It intentionally does not store env-specific `assetId`s.
3256
+ Older projects with flat `content/.meta/{entity}.json` files are read as a compatibility fallback. The CLI writes new metadata into the target-specific `local/` or `remote/` directory the next time you pull or update metadata.
3257
+
3258
+ Note: `content/media/` is local cache and migration working data by default. Generated SDK sites gitignore `content/media/*` so large downloaded files are not staged accidentally, while allowing intentional small fixtures under `content/media/fixtures/`. `content/media/.manifest.json` is also cache data (identifier -> checksum/filename) and intentionally does not store env-specific `assetId`s.
3240
3259
 
3241
3260
  ### push
3242
3261
 
@@ -3268,7 +3287,8 @@ npx riverbankcms push [scope] [type] [identifier]
3268
3287
  | `--sync-media` | Sync media files from local to remote environment |
3269
3288
  | `--overwrite-media` | When using `--sync-media`, overwrite target media on checksum mismatch |
3270
3289
  | `--json-diff` | Output JSON diff (`summary` or `full`) |
3271
- | `--merge-remote` | Plan an entries-only three-way merge for `--env=remote` that preserves remote edits |
3290
+ | `--merge-remote` | Plan an entries/pages three-way merge for `--env=remote` that preserves remote edits |
3291
+ | `--verify-noop` | Re-fetch after an applied push and fail if changes remain |
3272
3292
 
3273
3293
  **Examples:**
3274
3294
 
@@ -3291,16 +3311,37 @@ npx riverbankcms push --env=remote --yes
3291
3311
  # Preview a production-safe merge for entries
3292
3312
  npx riverbankcms push entries blog-post --env=remote --merge-remote
3293
3313
 
3314
+ # Preview a production-safe merge for a page
3315
+ npx riverbankcms push pages home --env=remote --merge-remote
3316
+
3294
3317
  # Apply that merge after reviewing the plan
3295
3318
  npx riverbankcms push entries blog-post --env=remote --merge-remote --yes
3296
3319
 
3297
3320
  # Get JSON diff for automation
3298
3321
  npx riverbankcms push --dry-run --json-diff=summary
3322
+
3323
+ # Push to both environments and verify both are clean afterwards
3324
+ npx riverbankcms push --env=both --yes --verify-noop
3325
+ ```
3326
+
3327
+ **Remote-aware content merge:**
3328
+
3329
+ `--merge-remote` is a safer production entries/pages workflow. It compares the last pulled base snapshot, your local files, and the current remote CMS, then reports a merge plan. Remote runs still default to dry-run; add `--yes` only after reviewing the plan. In v1 this supports entries and pages, is `--env=remote` only, and cannot be combined with `--force`, `--delete-orphaned`, or `--auto-pull-stale`. Page block changes are treated conservatively as conflicts unless remote blocks are unchanged.
3330
+
3331
+ **Local content edit helpers:**
3332
+
3333
+ `riverbankcms content edit ...` changes local `content/**` JSON files only. It previews by default and writes only with `--write`.
3334
+
3335
+ ```bash
3336
+ npx riverbankcms content edit remove-page-block home old-hero
3337
+ npx riverbankcms content edit move-page-block home intro --after hero --write
3338
+ npx riverbankcms content edit set-page-field home title --value "New title" --write
3339
+ npx riverbankcms content edit set-page-field home blocks[0].data.count --json-value 3
3299
3340
  ```
3300
3341
 
3301
- **Remote-aware entry merge:**
3342
+ After editing, run `riverbankcms push --dry-run --diff`, then push with `--verify-noop` when ready.
3302
3343
 
3303
- `--merge-remote` is a safer production entries workflow. It compares the last pulled entry base, your local files, and the current remote CMS, then reports a merge plan. Remote runs still default to dry-run; add `--yes` only after reviewing the plan. In v1 this is entries-only, `--env=remote` only, and cannot be combined with `--force`, `--delete-orphaned`, or `--auto-pull-stale`.
3344
+ **Post-push verification:** `--verify-noop` re-reads local files after an applied push, fetches the target CMS, and fails if changes remain. It cannot be combined with `--dry-run`; remote targets need `--yes` so there is an applied push to verify. In JSON mode the CLI emits a `verification` object with `clean`, `dirty`, `fetch_failed`, or `unsupported_scope` status. A dirty result can also mean another actor changed remote content between push and verification.
3304
3345
 
3305
3346
  **Local Media (Identifiers):**
3306
3347
 
@@ -3308,6 +3349,7 @@ npx riverbankcms push --dry-run --json-diff=summary
3308
3349
  - Place files at `content/media/<identifier>.<ext>`
3309
3350
  - Use `npx riverbankcms push` to upload referenced files (default-on)
3310
3351
  - Use `--force-update-asset` to replace a CMS asset when checksums differ
3352
+ - Treat `content/media/*` as local cache/migration working data by default. For existing repos that already committed media, opt in with `git rm --cached -r content/media` after adding the generated ignore rule. Keep intentional small fixtures under `content/media/fixtures/`.
3311
3353
 
3312
3354
  **Site branding via `content/settings.json`:**
3313
3355
 
@@ -1,7 +1,7 @@
1
1
  "use client";
2
- import { resolvePreviewDashboardSetupHandoff, buildPreviewDashboardSetupUrl, resolvePreviewSidebarChromeModel, resolvePreviewEditorGuidanceModel, previewWidgetOverrides, canInspectSiteStyle, mapContentSchemaToFormFields, PreviewFormProvider, usePreviewBlockCustomizeSelectionOptional, BlockEditor, canApplySiteStyle, useBlockCustomizeControls, MAX_QUICK_MANIFEST_FIELDS } from './chunk-PJPFTVZG.mjs';
3
- import { useEntryController, useEditorUiStoreInstance, useUISelector, resolvePreviewSidebarTab, unsafeAsEditorBlockId, Tabs, TabsList, TabsTrigger, Button, X, TabsContent, useEditorUiStore, deriveRouteMetadataPresentation, resolvePageRouteSlug, createManifestValidation, createStoreBackend, ManifestForm, previewAssistantEnabled, Collapsible, CollapsibleTrigger, ChevronRight, CollapsibleContent, ContentFieldsForm, usePreviewDesignCoordinator, useSiteChromeCustomizeOptional, resolveStyleConfiguratorInitialSnapshot, createStyleConfiguratorState, isPreviewingChange, createOptimisticActionRunner, syncStyleConfiguratorState, getCuratedSiteStyle, planSiteStylePreviewChange, openRow, previewSiteStyle, applyResolvedSelections, previewButtonPersonality, previewHeaderLayout, previewHeaderStyle, planSiteChromeLookSelection, previewFooterLook, buildSiteChromeLookModels, planSiteChromeFooterLayoutSelection, previewPaletteVariant, previewTypographyPreset, setTypographyBodyFontOverride, setTypographyHeadingFontOverride, clearTypographyFontOverrides, paletteOverridesSchema, setPaletteOverrides, toggleRow, cancelPreview, dismissWarnings, dismissNotices, deriveStyleConfiguratorCapabilities, buildApplySiteStyleSelectionBody, markApplyFailed, selectionSnapshotFromApplySiteStyleSelectionResponse, styleConfiguratorHistoryEntryForPersistedSelection, markApplySaved, markApplySaving, findButtonPersonality, findPaletteVariant, findTypographyPreset, getHeaderLayout, getHeaderStyle, getFooterLayout, findFooterLook, cycleSiteChromeLookId, resolveContentTitle, foldSubroute, SUBROUTE_KINDS, Smartphone, Tablet, Monitor, Maximize2, cn, DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuItem, listEntryPageContentSlots, ContentSpinner, Callout, CalloutDescription, curatedSiteStyles, ChevronLeft, cycleableSiteChromeOptions, requireEntriesForCuratedChoices, buttonPersonalities, typographyPresets, paletteVariants, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, FormRenderer, evaluateTypographyFontSlot, Separator, Surface, ColorPicker, Input } from './chunk-VZBSD4AJ.mjs';
4
- import { usePreviewAuth, getDashboardUrl, unwrapResponse } from './chunk-7ED5UNHL.mjs';
2
+ import { resolvePreviewDashboardSetupHandoff, buildPreviewDashboardSetupUrl, resolvePreviewSidebarChromeModel, resolvePreviewEditorGuidanceModel, previewWidgetOverrides, canInspectSiteStyle, mapContentSchemaToFormFields, PreviewFormProvider, usePreviewBlockCustomizeSelectionOptional, BlockEditor, canApplySiteStyle, useBlockCustomizeControls, MAX_QUICK_MANIFEST_FIELDS } from './chunk-H24OU7WG.mjs';
3
+ import { useEntryController, useEditorUiStoreInstance, useUISelector, resolvePreviewSidebarTab, unsafeAsEditorBlockId, Tabs, TabsList, TabsTrigger, Button, X, TabsContent, useEditorUiStore, deriveRouteMetadataPresentation, resolvePageRouteSlug, createManifestValidation, createStoreBackend, ManifestForm, previewAssistantEnabled, Collapsible, CollapsibleTrigger, ChevronRight, CollapsibleContent, ContentFieldsForm, usePreviewDesignCoordinator, useSiteChromeCustomizeOptional, resolveStyleConfiguratorInitialSnapshot, createStyleConfiguratorState, isPreviewingChange, createOptimisticActionRunner, syncStyleConfiguratorState, getCuratedSiteStyle, planSiteStylePreviewChange, openRow, previewSiteStyle, applyResolvedSelections, previewButtonPersonality, previewHeaderLayout, previewHeaderStyle, planSiteChromeLookSelection, previewFooterLook, buildSiteChromeLookModels, planSiteChromeFooterLayoutSelection, previewPaletteVariant, previewTypographyPreset, setTypographyBodyFontOverride, setTypographyHeadingFontOverride, clearTypographyFontOverrides, paletteOverridesSchema, setPaletteOverrides, toggleRow, cancelPreview, dismissWarnings, dismissNotices, deriveStyleConfiguratorCapabilities, buildApplySiteStyleSelectionBody, markApplyFailed, selectionSnapshotFromApplySiteStyleSelectionResponse, styleConfiguratorHistoryEntryForPersistedSelection, markApplySaved, markApplySaving, findButtonPersonality, findPaletteVariant, findTypographyPreset, getHeaderLayout, getHeaderStyle, getFooterLayout, findFooterLook, cycleSiteChromeLookId, resolveContentTitle, foldSubroute, SUBROUTE_KINDS, Smartphone, Tablet, Monitor, Maximize2, cn, DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuItem, listEntryPageContentSlots, ContentSpinner, Callout, CalloutDescription, curatedSiteStyles, ChevronLeft, cycleableSiteChromeOptions, requireEntriesForCuratedChoices, buttonPersonalities, typographyPresets, paletteVariants, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, FormRenderer, evaluateTypographyFontSlot, Separator, Surface, ColorPicker, Input } from './chunk-DBRI3PQF.mjs';
4
+ import { usePreviewAuth, getDashboardUrl, unwrapResponse } from './chunk-V2BYFSPW.mjs';
5
5
  import './chunk-R7POPVJR.mjs';
6
6
  import { useMemo, useRef, useCallback, useEffect, useState, useTransition, useLayoutEffect, useSyncExternalStore, useId } from 'react';
7
7
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
@@ -1,7 +1,7 @@
1
1
  "use client";
2
- import { resolvePreviewChromeSurface, usePreviewPageDesignEditorState, PREVIEW_CHROME_PORTAL_CLASS_NAME, PREVIEW_CHROME_THEME_CLASS_NAME, applyPreviewChromeSurfaceToElement, setPreviewSidebarTab } from './chunk-K2SJTZMX.mjs';
3
- import { useEntryEditorController, useEditorUiStore, useMultiAutosave, usePreviewDesignHistoryOrder, useSiteChromeCustomizeOptional, selectPreviewDesignHistoryDomain, EditorChrome, previewDesignHistoryDomainForCommand, classifyHistoryShortcut, previewAssistantEnabled, cn, Dialog, Button, Palette, DialogContent, DialogHeader, DialogTitle, DialogDescription, TriangleAlert, Pencil, Sparkles, useEditorUiStoreInstance } from './chunk-VZBSD4AJ.mjs';
4
- import { usePreviewAuth, unwrapResponse } from './chunk-7ED5UNHL.mjs';
2
+ import { resolvePreviewChromeSurface, usePreviewPageDesignEditorState, PREVIEW_CHROME_PORTAL_CLASS_NAME, PREVIEW_CHROME_THEME_CLASS_NAME, applyPreviewChromeSurfaceToElement, setPreviewSidebarTab } from './chunk-PKDPQHB5.mjs';
3
+ import { useEntryEditorController, useEditorUiStore, useMultiAutosave, usePreviewDesignHistoryOrder, useSiteChromeCustomizeOptional, selectPreviewDesignHistoryDomain, EditorChrome, previewDesignHistoryDomainForCommand, classifyHistoryShortcut, previewAssistantEnabled, cn, Dialog, Button, Palette, DialogContent, DialogHeader, DialogTitle, DialogDescription, TriangleAlert, Pencil, Sparkles, useEditorUiStoreInstance } from './chunk-DBRI3PQF.mjs';
4
+ import { usePreviewAuth, unwrapResponse } from './chunk-V2BYFSPW.mjs';
5
5
  import './chunk-R7POPVJR.mjs';
6
6
  import { useState, useMemo, useCallback, useEffect, useTransition } from 'react';
7
7
  import { createPortal } from 'react-dom';
@@ -0,0 +1,8 @@
1
+ "use client";
2
+ export { SdkPreviewModeRuntime } from './chunk-6WDBXCPX.mjs';
3
+ import './chunk-QPXE2OUZ.mjs';
4
+ import './chunk-H24OU7WG.mjs';
5
+ import './chunk-PKDPQHB5.mjs';
6
+ import './chunk-DBRI3PQF.mjs';
7
+ import './chunk-V2BYFSPW.mjs';
8
+ import './chunk-R7POPVJR.mjs';
@@ -5159,7 +5159,7 @@ declare const SiteStyleSelectionCommandBodySchema: z.ZodObject<{
5159
5159
  muted: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<import("../../../blocks/src/index").HexColor, string>>>;
5160
5160
  text: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<import("../../../blocks/src/index").HexColor, string>>>;
5161
5161
  border: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<import("../../../blocks/src/index").HexColor, string>>>;
5162
- }, z.core.$strict>, z.ZodTransform<Readonly<Partial<Record<"surface" | "success" | "text" | "primary" | "secondary" | "warning" | "background" | "accent" | "muted" | "border" | "destructive" | "surfaceAlt" | "primaryForeground", import("../../../blocks/src/index").HexColor>>>, {
5162
+ }, z.core.$strict>, z.ZodTransform<Readonly<Partial<Record<"surface" | "success" | "text" | "accent" | "primary" | "secondary" | "warning" | "background" | "muted" | "border" | "destructive" | "surfaceAlt" | "primaryForeground", import("../../../blocks/src/index").HexColor>>>, {
5163
5163
  primary?: import("../../../blocks/src/index").HexColor | undefined;
5164
5164
  primaryForeground?: import("../../../blocks/src/index").HexColor | undefined;
5165
5165
  secondary?: import("../../../blocks/src/index").HexColor | undefined;
@@ -5242,7 +5242,7 @@ export declare const SiteStyleSelectionCommandBackedPreviewSchema: z.ZodObject<{
5242
5242
  muted: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<import("../../../blocks/src/index").HexColor, string>>>;
5243
5243
  text: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<import("../../../blocks/src/index").HexColor, string>>>;
5244
5244
  border: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<import("../../../blocks/src/index").HexColor, string>>>;
5245
- }, z.core.$strict>, z.ZodTransform<Readonly<Partial<Record<"surface" | "success" | "text" | "primary" | "secondary" | "warning" | "background" | "accent" | "muted" | "border" | "destructive" | "surfaceAlt" | "primaryForeground", import("../../../blocks/src/index").HexColor>>>, {
5245
+ }, z.core.$strict>, z.ZodTransform<Readonly<Partial<Record<"surface" | "success" | "text" | "accent" | "primary" | "secondary" | "warning" | "background" | "muted" | "border" | "destructive" | "surfaceAlt" | "primaryForeground", import("../../../blocks/src/index").HexColor>>>, {
5246
5246
  primary?: import("../../../blocks/src/index").HexColor | undefined;
5247
5247
  primaryForeground?: import("../../../blocks/src/index").HexColor | undefined;
5248
5248
  secondary?: import("../../../blocks/src/index").HexColor | undefined;
@@ -5331,7 +5331,7 @@ export declare const ProposeSiteStyleSelectionCommandBackedOutputSchema: z.ZodOb
5331
5331
  muted: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<import("../../../blocks/src/index").HexColor, string>>>;
5332
5332
  text: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<import("../../../blocks/src/index").HexColor, string>>>;
5333
5333
  border: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<import("../../../blocks/src/index").HexColor, string>>>;
5334
- }, z.core.$strict>, z.ZodTransform<Readonly<Partial<Record<"surface" | "success" | "text" | "primary" | "secondary" | "warning" | "background" | "accent" | "muted" | "border" | "destructive" | "surfaceAlt" | "primaryForeground", import("../../../blocks/src/index").HexColor>>>, {
5334
+ }, z.core.$strict>, z.ZodTransform<Readonly<Partial<Record<"surface" | "success" | "text" | "accent" | "primary" | "secondary" | "warning" | "background" | "muted" | "border" | "destructive" | "surfaceAlt" | "primaryForeground", import("../../../blocks/src/index").HexColor>>>, {
5335
5335
  primary?: import("../../../blocks/src/index").HexColor | undefined;
5336
5336
  primaryForeground?: import("../../../blocks/src/index").HexColor | undefined;
5337
5337
  secondary?: import("../../../blocks/src/index").HexColor | undefined;
@@ -6360,7 +6360,7 @@ export declare const ProposeSiteStyleSelectionCommandBackedOutputSchema: z.ZodOb
6360
6360
  muted: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<import("../../../blocks/src/index").HexColor, string>>>;
6361
6361
  text: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<import("../../../blocks/src/index").HexColor, string>>>;
6362
6362
  border: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<import("../../../blocks/src/index").HexColor, string>>>;
6363
- }, z.core.$strict>, z.ZodTransform<Readonly<Partial<Record<"surface" | "success" | "text" | "primary" | "secondary" | "warning" | "background" | "accent" | "muted" | "border" | "destructive" | "surfaceAlt" | "primaryForeground", import("../../../blocks/src/index").HexColor>>>, {
6363
+ }, z.core.$strict>, z.ZodTransform<Readonly<Partial<Record<"surface" | "success" | "text" | "accent" | "primary" | "secondary" | "warning" | "background" | "muted" | "border" | "destructive" | "surfaceAlt" | "primaryForeground", import("../../../blocks/src/index").HexColor>>>, {
6364
6364
  primary?: import("../../../blocks/src/index").HexColor | undefined;
6365
6365
  primaryForeground?: import("../../../blocks/src/index").HexColor | undefined;
6366
6366
  secondary?: import("../../../blocks/src/index").HexColor | undefined;
@@ -6465,7 +6465,7 @@ export declare const ProposeSiteStyleSelectionOutputSchema: z.ZodUnion<readonly
6465
6465
  muted: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<import("../../../blocks/src/index").HexColor, string>>>;
6466
6466
  text: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<import("../../../blocks/src/index").HexColor, string>>>;
6467
6467
  border: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<import("../../../blocks/src/index").HexColor, string>>>;
6468
- }, z.core.$strict>, z.ZodTransform<Readonly<Partial<Record<"surface" | "success" | "text" | "primary" | "secondary" | "warning" | "background" | "accent" | "muted" | "border" | "destructive" | "surfaceAlt" | "primaryForeground", import("../../../blocks/src/index").HexColor>>>, {
6468
+ }, z.core.$strict>, z.ZodTransform<Readonly<Partial<Record<"surface" | "success" | "text" | "accent" | "primary" | "secondary" | "warning" | "background" | "muted" | "border" | "destructive" | "surfaceAlt" | "primaryForeground", import("../../../blocks/src/index").HexColor>>>, {
6469
6469
  primary?: import("../../../blocks/src/index").HexColor | undefined;
6470
6470
  primaryForeground?: import("../../../blocks/src/index").HexColor | undefined;
6471
6471
  secondary?: import("../../../blocks/src/index").HexColor | undefined;
@@ -7494,7 +7494,7 @@ export declare const ProposeSiteStyleSelectionOutputSchema: z.ZodUnion<readonly
7494
7494
  muted: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<import("../../../blocks/src/index").HexColor, string>>>;
7495
7495
  text: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<import("../../../blocks/src/index").HexColor, string>>>;
7496
7496
  border: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<import("../../../blocks/src/index").HexColor, string>>>;
7497
- }, z.core.$strict>, z.ZodTransform<Readonly<Partial<Record<"surface" | "success" | "text" | "primary" | "secondary" | "warning" | "background" | "accent" | "muted" | "border" | "destructive" | "surfaceAlt" | "primaryForeground", import("../../../blocks/src/index").HexColor>>>, {
7497
+ }, z.core.$strict>, z.ZodTransform<Readonly<Partial<Record<"surface" | "success" | "text" | "accent" | "primary" | "secondary" | "warning" | "background" | "muted" | "border" | "destructive" | "surfaceAlt" | "primaryForeground", import("../../../blocks/src/index").HexColor>>>, {
7498
7498
  primary?: import("../../../blocks/src/index").HexColor | undefined;
7499
7499
  primaryForeground?: import("../../../blocks/src/index").HexColor | undefined;
7500
7500
  secondary?: import("../../../blocks/src/index").HexColor | undefined;
@@ -7600,7 +7600,7 @@ export declare const ProposeSiteStyleSelectionResultSchema: z.ZodUnion<readonly
7600
7600
  muted: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<import("../../../blocks/src/index").HexColor, string>>>;
7601
7601
  text: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<import("../../../blocks/src/index").HexColor, string>>>;
7602
7602
  border: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<import("../../../blocks/src/index").HexColor, string>>>;
7603
- }, z.core.$strict>, z.ZodTransform<Readonly<Partial<Record<"surface" | "success" | "text" | "primary" | "secondary" | "warning" | "background" | "accent" | "muted" | "border" | "destructive" | "surfaceAlt" | "primaryForeground", import("../../../blocks/src/index").HexColor>>>, {
7603
+ }, z.core.$strict>, z.ZodTransform<Readonly<Partial<Record<"surface" | "success" | "text" | "accent" | "primary" | "secondary" | "warning" | "background" | "muted" | "border" | "destructive" | "surfaceAlt" | "primaryForeground", import("../../../blocks/src/index").HexColor>>>, {
7604
7604
  primary?: import("../../../blocks/src/index").HexColor | undefined;
7605
7605
  primaryForeground?: import("../../../blocks/src/index").HexColor | undefined;
7606
7606
  secondary?: import("../../../blocks/src/index").HexColor | undefined;
@@ -8629,7 +8629,7 @@ export declare const ProposeSiteStyleSelectionResultSchema: z.ZodUnion<readonly
8629
8629
  muted: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<import("../../../blocks/src/index").HexColor, string>>>;
8630
8630
  text: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<import("../../../blocks/src/index").HexColor, string>>>;
8631
8631
  border: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<import("../../../blocks/src/index").HexColor, string>>>;
8632
- }, z.core.$strict>, z.ZodTransform<Readonly<Partial<Record<"surface" | "success" | "text" | "primary" | "secondary" | "warning" | "background" | "accent" | "muted" | "border" | "destructive" | "surfaceAlt" | "primaryForeground", import("../../../blocks/src/index").HexColor>>>, {
8632
+ }, z.core.$strict>, z.ZodTransform<Readonly<Partial<Record<"surface" | "success" | "text" | "accent" | "primary" | "secondary" | "warning" | "background" | "muted" | "border" | "destructive" | "surfaceAlt" | "primaryForeground", import("../../../blocks/src/index").HexColor>>>, {
8633
8633
  primary?: import("../../../blocks/src/index").HexColor | undefined;
8634
8634
  primaryForeground?: import("../../../blocks/src/index").HexColor | undefined;
8635
8635
  secondary?: import("../../../blocks/src/index").HexColor | undefined;
@@ -30964,7 +30964,7 @@ export declare const proposalToolSchemas: {
30964
30964
  muted: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<import("../../../blocks/src/index").HexColor, string>>>;
30965
30965
  text: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<import("../../../blocks/src/index").HexColor, string>>>;
30966
30966
  border: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<import("../../../blocks/src/index").HexColor, string>>>;
30967
- }, z.core.$strict>, z.ZodTransform<Readonly<Partial<Record<"surface" | "success" | "text" | "primary" | "secondary" | "warning" | "background" | "accent" | "muted" | "border" | "destructive" | "surfaceAlt" | "primaryForeground", import("../../../blocks/src/index").HexColor>>>, {
30967
+ }, z.core.$strict>, z.ZodTransform<Readonly<Partial<Record<"surface" | "success" | "text" | "accent" | "primary" | "secondary" | "warning" | "background" | "muted" | "border" | "destructive" | "surfaceAlt" | "primaryForeground", import("../../../blocks/src/index").HexColor>>>, {
30968
30968
  primary?: import("../../../blocks/src/index").HexColor | undefined;
30969
30969
  primaryForeground?: import("../../../blocks/src/index").HexColor | undefined;
30970
30970
  secondary?: import("../../../blocks/src/index").HexColor | undefined;
@@ -31993,7 +31993,7 @@ export declare const proposalToolSchemas: {
31993
31993
  muted: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<import("../../../blocks/src/index").HexColor, string>>>;
31994
31994
  text: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<import("../../../blocks/src/index").HexColor, string>>>;
31995
31995
  border: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<import("../../../blocks/src/index").HexColor, string>>>;
31996
- }, z.core.$strict>, z.ZodTransform<Readonly<Partial<Record<"surface" | "success" | "text" | "primary" | "secondary" | "warning" | "background" | "accent" | "muted" | "border" | "destructive" | "surfaceAlt" | "primaryForeground", import("../../../blocks/src/index").HexColor>>>, {
31996
+ }, z.core.$strict>, z.ZodTransform<Readonly<Partial<Record<"surface" | "success" | "text" | "accent" | "primary" | "secondary" | "warning" | "background" | "muted" | "border" | "destructive" | "surfaceAlt" | "primaryForeground", import("../../../blocks/src/index").HexColor>>>, {
31997
31997
  primary?: import("../../../blocks/src/index").HexColor | undefined;
31998
31998
  primaryForeground?: import("../../../blocks/src/index").HexColor | undefined;
31999
31999
  secondary?: import("../../../blocks/src/index").HexColor | undefined;
@@ -5,7 +5,7 @@ import type { BookingRequirementConfigRequest, BookingRequirementConfigResponse,
5
5
  import type { BookingClosureConflictResponse, CreateBookingClosureRequest, CreateBookingClosureResponse, DeleteBookingClosureResponse, GetBookingClosureResponse, ListBookingClosuresResponse, PreviewBookingClosureResponse, BookingClosureRequest } from "./bookingClosures";
6
6
  import type { BookingSettingsResponse, CreateEventSeriesRequest, EventSeriesRecord, UpdateBookingSettingsRequest, UpdateEventSeriesRequest } from "./bookingConfig";
7
7
  import type { AdjustCustomerPassDetailsRequest, AdjustCustomerPassDetailsResponse, AssignCustomerMembershipRequest, AssignCustomerMembershipResponse, AssignCustomerPassRequest, AssignCustomerPassResponse, CancelCustomerMembershipAtPeriodEndRequest, CancelCustomerMembershipAtPeriodEndResponse, ConvertCreditRefundToCashRequest, ConvertCreditRefundToCashResponse, ListCustomerMembershipPaymentRefundsResponse, ListCustomerMembershipPaymentsResponse, ListCustomerPassRefundsResponse, RefundCustomerMembershipPaymentRequest, RefundCustomerMembershipPaymentResponse, RefundCustomerPassRequest, RefundCustomerPassResponse } from "./bookingAdjustments";
8
- import type { AppointmentResourceResponse, AppointmentServiceResponse, BookingAppointmentWithDetails, CreateAppointmentResourceRequest, CreateAppointmentResourceWithAccountAccessRequest, CreateAppointmentResourceWithAccountAccessResponse, CreateAppointmentServiceRequest, CreateTeamMemberProfileResponse, DiscardTeamMemberProfileDraftResponse, DeleteServiceResponse, ListAppointmentResourcesResponse, ListAppointmentServicesResponse, ListCourseEnrollmentRefundsResponse, ListEventAttendeeRefundsResponse, ListEventAttendeeTransfersResponse, OpsCancelEventAttendeeRequest, OpsCancelEventAttendeeResponse, OpsEventAttendeeDetailsResponse, OpsListUpcomingEventOccurrencesResponse, OpsOccurrenceAttendeesResponse, OpsRefundEventAttendeeResponse, OpsUpdateEventAttendeeCheckinRequest, OpsUpdateEventAttendeeCheckinResponse, OpsValidateEventTicketRequest, OpsValidateEventTicketResponse, ReferenceOptionsResponse, RemoveAppointmentResourceResponse, RefundCourseEnrollmentRequest, RefundCourseEnrollmentResponse, RefundEventAttendeeRequest, RefundEventAttendeeResponse, TransferEventAttendeeRequest, TransferEventAttendeeResponse, UpdateAppointmentResourceRequest, UpdateAppointmentServiceRequest, PublishTeamMemberProfileRequest, PublishTeamMemberProfileResponse, CancelScheduledTeamMemberProfileResponse, ScheduleTeamMemberProfileRequest, ScheduleTeamMemberProfileResponse, TeamMemberProfileContentResponse, UnpublishTeamMemberProfileResponse, UpdateTeamMemberProfileContentRequest, UpdateTeamMemberProfilePolicyRequest, UpdateTeamMemberProfilePolicyResponse, UpdateTeamMemberProfileRouteMetadataRequest, UpdateTeamMemberProfileRouteMetadataResponse } from "./bookingOperations";
8
+ import type { AppointmentResourceResponse, AppointmentReservationLifecycleRequest, AppointmentReservationResponse, AppointmentServiceResponse, BookingAppointmentWithDetails, CreateAppointmentResourceRequest, CreateAppointmentResourceWithAccountAccessRequest, CreateAppointmentResourceWithAccountAccessResponse, CreateAppointmentReservationRequest, CreateAppointmentReservationRunRequest, CreateAppointmentReservationRunResponse, CreateAppointmentServiceRequest, CreateTeamMemberProfileResponse, DiscardTeamMemberProfileDraftResponse, DeleteServiceResponse, EndAppointmentReservationRequest, ListAppointmentResourcesResponse, ListAppointmentReservationsRequest, ListAppointmentReservationsResponse, ListAppointmentServicesResponse, ListCourseEnrollmentRefundsResponse, ListEventAttendeeRefundsResponse, ListEventAttendeeTransfersResponse, OpsCancelEventAttendeeRequest, OpsCancelEventAttendeeResponse, OpsEventAttendeeDetailsResponse, OpsListUpcomingEventOccurrencesResponse, OpsOccurrenceAttendeesResponse, OpsRefundEventAttendeeResponse, OpsUpdateEventAttendeeCheckinRequest, OpsUpdateEventAttendeeCheckinResponse, OpsValidateEventTicketRequest, OpsValidateEventTicketResponse, PreviewAppointmentReservationRunRequest, PreviewAppointmentReservationRunResponse, ReferenceOptionsResponse, RemoveAppointmentResourceResponse, RefundCourseEnrollmentRequest, RefundCourseEnrollmentResponse, RefundEventAttendeeRequest, RefundEventAttendeeResponse, TransferEventAttendeeRequest, TransferEventAttendeeResponse, UpdateAppointmentResourceRequest, UpdateAppointmentReservationRequest, UpdateAppointmentServiceRequest, PublishTeamMemberProfileRequest, PublishTeamMemberProfileResponse, CancelScheduledTeamMemberProfileResponse, ScheduleTeamMemberProfileRequest, ScheduleTeamMemberProfileResponse, TeamMemberProfileContentResponse, UnpublishTeamMemberProfileResponse, UpdateTeamMemberProfileContentRequest, UpdateTeamMemberProfilePolicyRequest, UpdateTeamMemberProfilePolicyResponse, UpdateTeamMemberProfileRouteMetadataRequest, UpdateTeamMemberProfileRouteMetadataResponse } from "./bookingOperations";
9
9
  import type { AddEventOccurrenceAttendeeRequest, AddEventOccurrenceAttendeeResponse, AdjustCustomerCreditRequest, AdjustCustomerCreditResponse, BookingEventSeriesAttendee, BookingMembershipResponse, BookingPassResponse, CheckEventAdminEligibilityRequest, CheckEventAdminEligibilityResponse, CreateBookingCustomerRequest, CreateBookingCustomerResponse, RectifyBookingCustomerProfileRequest, RectifyBookingCustomerProfileResponse, RectifyBookingParticipantIdentityRequest, RectifyBookingParticipantIdentityResponse, CreateBookingMembershipRequest, CreateBookingPassRequest, CreateDiscountCodeRequest, CreateEventCategoryRequest, CreateOccurrenceRequest, CreateVenueRequest, DeleteDiscountCodeResponse, DeleteVenueResponse, DiscountCodeResponse, EventCategoryResponse, EventOccurrenceListRecord, EventOccurrenceRecord, GeocodeVenueRequest, GeocodeVenueResponse, GetCustomerCreditResponse, GetMoneyReportRequest, GetMoneyReportResponse, ExportBookingQuestionAnswersCsvRequest, ExportBookingLedgerCsvRequest, ListBookingActivityRequest, ListBookingActivityResponse, ListBookingCustomersRequest, ListBookingCustomersResponse, ListBookingMembershipsRequest, ListBookingMembershipsResponse, ListBookingPassesRequest, ListBookingPassesResponse, ListCustomerAttendancesRequest, ListCustomerAttendancesResponse, ListCustomerMembershipsResponse, ListCustomerPassesResponse, CreatePersonRecordEntryRequest, CreatePersonRecordEntryResponse, ListDiscountCodesResponse, ListDiscountRedemptionsRequest, ListDiscountRedemptionsResponse, ListEventCategoriesResponse, ListMoneyPaymentsRequest, ListMoneyPaymentsResponse, ListSiteCustomerMembershipsRequest, ListSiteCustomerMembershipsResponse, ListSiteCustomerPassesRequest, ListSiteCustomerPassesResponse, UpdateBookingMembershipRequest, UpdateBookingPassRequest, UpdateDiscountCodeRequest, UpdateEventCategoryRequest, UpdateOccurrenceRequest, UpdateVenueRequest, VenueRecord } from "./bookingRecords";
10
10
  import type { ApplyAppointmentSetupRequest, ApplyAppointmentSetupResponse, AppointmentSetupResponse } from "./appointmentSetup";
11
11
  import type { AddCourseEnrollmentRequest, AddCourseEnrollmentResponse, CourseRecord, CreateCourseRequest, CreateCourseResponse, DashboardWaitlistListResponse, DeleteCourseProgramResponse, DeleteCourseResponse, DuplicateCourseRequest, DuplicateCourseResponse, ListCourseEnrollmentsResponse, UpdateCourseEnrollmentRequest, UpdateCourseEnrollmentResponse, UpdateCourseRequest, UpdateCourseResponse, WaitlistDashboardActionResponse } from "./courses";
@@ -239,6 +239,40 @@ export type BookingManagementAPIEndpoints = {
239
239
  siteId: string;
240
240
  resourceId: string;
241
241
  }, RemoveAppointmentResourceResponse>;
242
+ listAppointmentReservations: APIEndpoint<never, {
243
+ siteId: string;
244
+ } & ListAppointmentReservationsRequest, ListAppointmentReservationsResponse>;
245
+ createAppointmentReservation: APIEndpoint<CreateAppointmentReservationRequest, {
246
+ siteId: string;
247
+ }, AppointmentReservationResponse>;
248
+ getAppointmentReservation: APIEndpoint<never, {
249
+ siteId: string;
250
+ reservationId: string;
251
+ }, AppointmentReservationResponse>;
252
+ updateAppointmentReservation: APIEndpoint<UpdateAppointmentReservationRequest, {
253
+ siteId: string;
254
+ reservationId: string;
255
+ }, AppointmentReservationResponse>;
256
+ pauseAppointmentReservation: APIEndpoint<AppointmentReservationLifecycleRequest, {
257
+ siteId: string;
258
+ reservationId: string;
259
+ }, AppointmentReservationResponse>;
260
+ resumeAppointmentReservation: APIEndpoint<AppointmentReservationLifecycleRequest, {
261
+ siteId: string;
262
+ reservationId: string;
263
+ }, AppointmentReservationResponse>;
264
+ endAppointmentReservation: APIEndpoint<EndAppointmentReservationRequest, {
265
+ siteId: string;
266
+ reservationId: string;
267
+ }, AppointmentReservationResponse>;
268
+ previewAppointmentReservationRun: APIEndpoint<PreviewAppointmentReservationRunRequest, {
269
+ siteId: string;
270
+ reservationId: string;
271
+ }, PreviewAppointmentReservationRunResponse>;
272
+ createAppointmentReservationRun: APIEndpoint<CreateAppointmentReservationRunRequest, {
273
+ siteId: string;
274
+ reservationId: string;
275
+ }, CreateAppointmentReservationRunResponse>;
242
276
  createTeamMemberProfile: APIEndpoint<never, {
243
277
  siteId: string;
244
278
  resourceId: string;
@@ -452,6 +452,228 @@ export type AppointmentServiceResponse = {
452
452
  export type ListAppointmentServicesResponse = {
453
453
  services: AppointmentService[];
454
454
  };
455
+ export declare const APPOINTMENT_RESERVATION_STATUS_VALUES: readonly ["active", "paused", "ended"];
456
+ export type AppointmentReservationStatus = (typeof APPOINTMENT_RESERVATION_STATUS_VALUES)[number];
457
+ export type AppointmentReservationPaymentMode = Readonly<{
458
+ kind: "manual";
459
+ }> | Readonly<{
460
+ kind: "online_request";
461
+ sendOffsetMinutes: number;
462
+ }>;
463
+ export type AppointmentReservation = {
464
+ id: string;
465
+ siteId: string;
466
+ customerId: string;
467
+ resourceId: string;
468
+ serviceId: string;
469
+ weekday: 0 | 1 | 2 | 3 | 4 | 5 | 6;
470
+ localStartTime: string;
471
+ timezone: string;
472
+ startsOn: string;
473
+ endsOn: string | null;
474
+ status: AppointmentReservationStatus;
475
+ paymentMode: AppointmentReservationPaymentMode;
476
+ durationMinutes: number;
477
+ prepMinutes: number;
478
+ cleanupMinutes: number;
479
+ };
480
+ export type AppointmentReservationListItem = AppointmentReservation & {
481
+ updatedAt: string;
482
+ customerName: string;
483
+ customerEmail: string;
484
+ serviceName: string;
485
+ serviceColor: string | null;
486
+ resourceName: string;
487
+ resourceColor: string | null;
488
+ };
489
+ export type ListAppointmentReservationsRequest = {
490
+ customerId?: string;
491
+ resourceId?: string;
492
+ serviceId?: string;
493
+ status?: AppointmentReservationStatus;
494
+ startDate?: string;
495
+ endDate?: string;
496
+ };
497
+ export type CreateAppointmentReservationRequest = {
498
+ customerId: string;
499
+ resourceId: string;
500
+ serviceId: string;
501
+ weekday: 0 | 1 | 2 | 3 | 4 | 5 | 6;
502
+ localStartTime: string;
503
+ timezone: string;
504
+ startsOn: string;
505
+ endsOn?: string | null;
506
+ paymentMode?: AppointmentReservationPaymentMode;
507
+ };
508
+ export type UpdateAppointmentReservationRequest = Partial<Omit<CreateAppointmentReservationRequest, "paymentMode">> & {
509
+ expectedUpdatedAt: string;
510
+ paymentMode?: AppointmentReservationPaymentMode;
511
+ };
512
+ export type AppointmentReservationLifecycleRequest = {
513
+ expectedUpdatedAt: string;
514
+ };
515
+ export type EndAppointmentReservationRequest = {
516
+ endsOn: string;
517
+ } & AppointmentReservationLifecycleRequest;
518
+ export type AppointmentReservationResponse = {
519
+ reservation: AppointmentReservation;
520
+ };
521
+ export type ListAppointmentReservationsResponse = {
522
+ reservations: AppointmentReservationListItem[];
523
+ };
524
+ export type AppointmentReservationRunPlanningMode = Readonly<{
525
+ kind: "occurrence_count";
526
+ startsOn: string;
527
+ occurrenceCount: number;
528
+ }> | Readonly<{
529
+ kind: "date_range";
530
+ startsOn: string;
531
+ endsOn: string;
532
+ }>;
533
+ export type PreviewAppointmentReservationRunRequest = {
534
+ mode: AppointmentReservationRunPlanningMode;
535
+ skippedOccurrenceKeys?: string[];
536
+ expectedReservationUpdatedAt?: string;
537
+ };
538
+ export type CreateAppointmentReservationRunRequest = {
539
+ mode: AppointmentReservationRunPlanningMode;
540
+ skippedOccurrenceKeys?: string[];
541
+ selectedOccurrenceKeys: string[];
542
+ expectedReservationUpdatedAt: string;
543
+ idempotencyKey: string;
544
+ };
545
+ export type AppointmentReservationRunOccurrence = {
546
+ occurrenceKey: string;
547
+ localDate: string;
548
+ startAt: string;
549
+ endAt: string;
550
+ occupiedStartAt: string;
551
+ occupiedEndAt: string;
552
+ };
553
+ export type AppointmentReservationRunGlobalConflict = Readonly<{
554
+ kind: "archived_customer";
555
+ customerId: string;
556
+ }> | Readonly<{
557
+ kind: "archived_resource";
558
+ resourceId: string;
559
+ }> | Readonly<{
560
+ kind: "archived_service";
561
+ serviceId: string;
562
+ }> | Readonly<{
563
+ kind: "stale_reservation";
564
+ expectedUpdatedAt: string;
565
+ actualUpdatedAt: string;
566
+ }>;
567
+ export type AppointmentReservationRunOccurrenceConflict = Readonly<{
568
+ kind: "appointment";
569
+ appointmentId: string;
570
+ startAt: string;
571
+ endAt: string;
572
+ }> | Readonly<{
573
+ kind: "reservation";
574
+ reservationId: string;
575
+ occurrenceKey: string;
576
+ startAt: string;
577
+ endAt: string;
578
+ }> | Readonly<{
579
+ kind: "blackout";
580
+ blackoutId: string | null;
581
+ startAt: string;
582
+ endAt: string;
583
+ }> | Readonly<{
584
+ kind: "external_busy";
585
+ externalBusyKey: string | null;
586
+ startAt: string;
587
+ endAt: string;
588
+ }>;
589
+ export type AppointmentReservationRunPlannedOccurrence = Readonly<{
590
+ kind: "ready";
591
+ occurrence: AppointmentReservationRunOccurrence;
592
+ }> | Readonly<{
593
+ kind: "skipped";
594
+ occurrence: AppointmentReservationRunOccurrence;
595
+ }> | Readonly<{
596
+ kind: "conflict";
597
+ occurrence: AppointmentReservationRunOccurrence;
598
+ conflicts: AppointmentReservationRunOccurrenceConflict[];
599
+ }>;
600
+ type AppointmentReservationRunPlanBase = {
601
+ reservationId: string;
602
+ reservationUpdatedAt: string;
603
+ selectedOccurrenceKeys: string[];
604
+ occurrences: AppointmentReservationRunPlannedOccurrence[];
605
+ readyOccurrences: Extract<AppointmentReservationRunPlannedOccurrence, {
606
+ kind: "ready";
607
+ }>[];
608
+ skippedOccurrences: Extract<AppointmentReservationRunPlannedOccurrence, {
609
+ kind: "skipped";
610
+ }>[];
611
+ conflictOccurrences: Extract<AppointmentReservationRunPlannedOccurrence, {
612
+ kind: "conflict";
613
+ }>[];
614
+ };
615
+ export type AppointmentReservationRunPlan = (AppointmentReservationRunPlanBase & {
616
+ kind: "empty";
617
+ canConfirm: false;
618
+ conflictOccurrences: [];
619
+ globalConflicts: [];
620
+ }) | (AppointmentReservationRunPlanBase & {
621
+ kind: "incomplete";
622
+ canConfirm: false;
623
+ requestedOccurrenceCount: number;
624
+ conflictOccurrences: [];
625
+ globalConflicts: [];
626
+ }) | (AppointmentReservationRunPlanBase & {
627
+ kind: "ready";
628
+ canConfirm: true;
629
+ conflictOccurrences: [];
630
+ globalConflicts: [];
631
+ }) | (AppointmentReservationRunPlanBase & {
632
+ kind: "has_conflicts";
633
+ canConfirm: false;
634
+ conflictOccurrences: Extract<AppointmentReservationRunPlannedOccurrence, {
635
+ kind: "conflict";
636
+ }>[];
637
+ globalConflicts: [];
638
+ }) | (AppointmentReservationRunPlanBase & {
639
+ kind: "blocked";
640
+ canConfirm: false;
641
+ globalConflicts: AppointmentReservationRunGlobalConflict[];
642
+ });
643
+ export type PreviewAppointmentReservationRunResponse = {
644
+ plan: AppointmentReservationRunPlan;
645
+ };
646
+ export type AppointmentReservationRunEffectStatus = Readonly<{
647
+ kind: "succeeded";
648
+ }> | Readonly<{
649
+ kind: "skipped";
650
+ reason: "calendar_unavailable" | "manual_payment_mode" | "missing_appointment_resource" | "missing_run_appointments" | "missing_customer_email" | "missing_site_owner" | "payment_request_scheduler_deferred" | "run_reused";
651
+ message?: string;
652
+ }> | Readonly<{
653
+ kind: "failed";
654
+ message: string;
655
+ }>;
656
+ export type AppointmentReservationRunAppointmentEffects = Readonly<{
657
+ appointmentId: string;
658
+ calendar: AppointmentReservationRunEffectStatus;
659
+ paymentRequest: AppointmentReservationRunEffectStatus;
660
+ }>;
661
+ export type AppointmentReservationRunPostCommitEffects = Readonly<{
662
+ completedAt: string;
663
+ summaryEmail: AppointmentReservationRunEffectStatus;
664
+ appointments: readonly AppointmentReservationRunAppointmentEffects[];
665
+ }>;
666
+ export type CreateAppointmentReservationRunResponse = {
667
+ run: {
668
+ id: string;
669
+ reservationId: string;
670
+ selectedOccurrenceKeys: string[];
671
+ status: "committed" | "completed_with_effect_failures";
672
+ reused: boolean;
673
+ };
674
+ appointmentIds: string[];
675
+ effects: AppointmentReservationRunPostCommitEffects;
676
+ };
455
677
  export type DeleteServiceResponse = {
456
678
  success: boolean;
457
679
  };
@@ -492,6 +714,30 @@ export type PublicBookingAvailableDatesResponse = {
492
714
  export type PublicBookingAvailableSlotsResponse = {
493
715
  slots: TimeSlot[];
494
716
  };
717
+ export type PublicWeeklySlotAvailabilityQuery = {
718
+ siteId: string;
719
+ serviceId: string;
720
+ resourceId?: string;
721
+ horizonWeeks?: number;
722
+ timezone?: string;
723
+ };
724
+ export type PublicWeeklySlotAvailabilityOption = {
725
+ id: string;
726
+ resourceId: string;
727
+ weekday: number;
728
+ weekdayLabel: string;
729
+ startTime: string;
730
+ endTime: string;
731
+ nextDate: string;
732
+ availableWeeks: number;
733
+ };
734
+ export type PublicWeeklySlotAvailabilityResponse = {
735
+ slots: PublicWeeklySlotAvailabilityOption[];
736
+ horizonWeeks: number;
737
+ timezone: string;
738
+ startDate: string;
739
+ endDate: string;
740
+ };
495
741
  export type PublicCreateBookingAppointmentRequest = {
496
742
  formId: string;
497
743
  serviceId: string;