@wix/himalaya-cli 0.1392.0 → 0.1394.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 (286) hide show
  1. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/wix-sdk/bookings-v2/src/extensions.d.ts +7 -5
  2. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/wix-bookings.mjs +4 -4
  3. package/dist/cli.mjs +41 -27
  4. package/dist/preview-assets.generated.bin +0 -0
  5. package/guides/himi-json-output.md +1 -0
  6. package/guides/iap-products.md +5 -0
  7. package/guides/sdk-reference.json +4 -4
  8. package/package.json +2 -2
  9. package/templates/beauty-salon/tier5-src/_shared/owner-load-error.ts +115 -12
  10. package/templates/beauty-salon/tier5-src/himi-branded-lite-cart/index.ts +52 -28
  11. package/templates/beauty-salon-owner/dev/index.ts +545 -100
  12. package/templates/beauty-salon-owner/himalaya.content.json +6 -0
  13. package/templates/beauty-salon-owner/tier5-src/_shared/owner-account.ts +6 -2
  14. package/templates/beauty-salon-owner/tier5-src/_shared/owner-booking-respond.ts +82 -0
  15. package/templates/beauty-salon-owner/tier5-src/_shared/owner-load-error.ts +115 -12
  16. package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-account/index.ts +7 -4
  17. package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-appointments/index.ts +2 -2
  18. package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-ask/live.ts +3 -3
  19. package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-home/index.ts +2 -2
  20. package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-order/index.ts +3 -3
  21. package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-orders/index.ts +2 -2
  22. package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-overview/index.ts +2 -2
  23. package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-post/index.ts +60 -43
  24. package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-post-form/index.ts +10 -23
  25. package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-posts/index.ts +2 -2
  26. package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-product/index.ts +31 -32
  27. package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-product-form/index.ts +23 -43
  28. package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-products/index.ts +2 -2
  29. package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-service/index.ts +18 -20
  30. package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-service-form/index.ts +16 -29
  31. package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-services/index.ts +2 -2
  32. package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-sites/index.ts +2 -2
  33. package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-today/index.ts +315 -0
  34. package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-wrist/index.ts +42 -15
  35. package/templates/branded-lite/tier5-src/_shared/owner-load-error.ts +115 -12
  36. package/templates/branded-lite/tier5-src/himi-branded-lite-cart/index.ts +52 -28
  37. package/templates/branded-lite/tier5-src/himi-branded-lite-group/index.ts +24 -24
  38. package/templates/community-club/tier5-src/_shared/owner-load-error.ts +115 -12
  39. package/templates/community-club/tier5-src/himi-branded-lite-group/index.ts +24 -24
  40. package/templates/community-club-owner/dev/index.ts +317 -100
  41. package/templates/community-club-owner/himalaya.content.json +6 -0
  42. package/templates/community-club-owner/tier5-src/_shared/owner-account.ts +6 -2
  43. package/templates/community-club-owner/tier5-src/_shared/owner-booking-respond.ts +82 -0
  44. package/templates/community-club-owner/tier5-src/_shared/owner-load-error.ts +115 -12
  45. package/templates/community-club-owner/tier5-src/himi-owner-lite-account/index.ts +7 -4
  46. package/templates/community-club-owner/tier5-src/himi-owner-lite-ask/live.ts +3 -3
  47. package/templates/community-club-owner/tier5-src/himi-owner-lite-event/index.ts +18 -20
  48. package/templates/community-club-owner/tier5-src/himi-owner-lite-event-form/index.ts +20 -28
  49. package/templates/community-club-owner/tier5-src/himi-owner-lite-events/index.ts +2 -2
  50. package/templates/community-club-owner/tier5-src/himi-owner-lite-home/index.ts +2 -2
  51. package/templates/community-club-owner/tier5-src/himi-owner-lite-order/index.ts +3 -3
  52. package/templates/community-club-owner/tier5-src/himi-owner-lite-orders/index.ts +2 -2
  53. package/templates/community-club-owner/tier5-src/himi-owner-lite-overview/index.ts +2 -2
  54. package/templates/community-club-owner/tier5-src/himi-owner-lite-post/index.ts +60 -43
  55. package/templates/community-club-owner/tier5-src/himi-owner-lite-post-form/index.ts +10 -23
  56. package/templates/community-club-owner/tier5-src/himi-owner-lite-posts/index.ts +2 -2
  57. package/templates/community-club-owner/tier5-src/himi-owner-lite-product/index.ts +31 -32
  58. package/templates/community-club-owner/tier5-src/himi-owner-lite-product-form/index.ts +23 -43
  59. package/templates/community-club-owner/tier5-src/himi-owner-lite-products/index.ts +2 -2
  60. package/templates/community-club-owner/tier5-src/himi-owner-lite-sites/index.ts +2 -2
  61. package/templates/community-club-owner/tier5-src/himi-owner-lite-today/index.ts +315 -0
  62. package/templates/community-club-owner/tier5-src/himi-owner-lite-wrist/index.ts +42 -15
  63. package/templates/events-meetups/tier5-src/_shared/owner-load-error.ts +115 -12
  64. package/templates/events-meetups/tier5-src/himi-branded-lite-group/index.ts +24 -24
  65. package/templates/events-meetups-owner/dev/index.ts +275 -100
  66. package/templates/events-meetups-owner/himalaya.content.json +6 -0
  67. package/templates/events-meetups-owner/tier5-src/_shared/owner-account.ts +6 -2
  68. package/templates/events-meetups-owner/tier5-src/_shared/owner-booking-respond.ts +82 -0
  69. package/templates/events-meetups-owner/tier5-src/_shared/owner-load-error.ts +115 -12
  70. package/templates/events-meetups-owner/tier5-src/himi-owner-lite-account/index.ts +7 -4
  71. package/templates/events-meetups-owner/tier5-src/himi-owner-lite-ask/live.ts +3 -3
  72. package/templates/events-meetups-owner/tier5-src/himi-owner-lite-event/index.ts +18 -20
  73. package/templates/events-meetups-owner/tier5-src/himi-owner-lite-event-form/index.ts +20 -28
  74. package/templates/events-meetups-owner/tier5-src/himi-owner-lite-events/index.ts +2 -2
  75. package/templates/events-meetups-owner/tier5-src/himi-owner-lite-home/index.ts +2 -2
  76. package/templates/events-meetups-owner/tier5-src/himi-owner-lite-overview/index.ts +2 -2
  77. package/templates/events-meetups-owner/tier5-src/himi-owner-lite-post/index.ts +60 -43
  78. package/templates/events-meetups-owner/tier5-src/himi-owner-lite-post-form/index.ts +10 -23
  79. package/templates/events-meetups-owner/tier5-src/himi-owner-lite-posts/index.ts +2 -2
  80. package/templates/events-meetups-owner/tier5-src/himi-owner-lite-sites/index.ts +2 -2
  81. package/templates/events-meetups-owner/tier5-src/himi-owner-lite-today/index.ts +315 -0
  82. package/templates/events-meetups-owner/tier5-src/himi-owner-lite-wrist/index.ts +42 -15
  83. package/templates/gym-fitness/tier5-src/_shared/owner-load-error.ts +115 -12
  84. package/templates/gym-fitness/tier5-src/himi-branded-lite-cart/index.ts +52 -28
  85. package/templates/gym-fitness-owner/dev/index.ts +545 -100
  86. package/templates/gym-fitness-owner/himalaya.content.json +6 -0
  87. package/templates/gym-fitness-owner/tier5-src/_shared/owner-account.ts +6 -2
  88. package/templates/gym-fitness-owner/tier5-src/_shared/owner-booking-respond.ts +82 -0
  89. package/templates/gym-fitness-owner/tier5-src/_shared/owner-load-error.ts +115 -12
  90. package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-account/index.ts +7 -4
  91. package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-appointments/index.ts +2 -2
  92. package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-ask/live.ts +3 -3
  93. package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-event/index.ts +18 -20
  94. package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-event-form/index.ts +20 -28
  95. package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-events/index.ts +2 -2
  96. package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-home/index.ts +2 -2
  97. package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-order/index.ts +3 -3
  98. package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-orders/index.ts +2 -2
  99. package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-overview/index.ts +2 -2
  100. package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-post/index.ts +60 -43
  101. package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-post-form/index.ts +10 -23
  102. package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-posts/index.ts +2 -2
  103. package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-product/index.ts +31 -32
  104. package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-product-form/index.ts +23 -43
  105. package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-products/index.ts +2 -2
  106. package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-service/index.ts +18 -20
  107. package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-service-form/index.ts +16 -29
  108. package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-services/index.ts +2 -2
  109. package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-sites/index.ts +2 -2
  110. package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-today/index.ts +315 -0
  111. package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-wrist/index.ts +42 -15
  112. package/templates/himi-chat/tier5-src/_shared/owner-load-error.ts +115 -12
  113. package/templates/nonprofit-cause/tier5-src/_shared/owner-load-error.ts +115 -12
  114. package/templates/nonprofit-cause/tier5-src/himi-branded-lite-group/index.ts +24 -24
  115. package/templates/nonprofit-cause-owner/dev/index.ts +503 -100
  116. package/templates/nonprofit-cause-owner/himalaya.content.json +6 -0
  117. package/templates/nonprofit-cause-owner/tier5-src/_shared/owner-account.ts +6 -2
  118. package/templates/nonprofit-cause-owner/tier5-src/_shared/owner-booking-respond.ts +82 -0
  119. package/templates/nonprofit-cause-owner/tier5-src/_shared/owner-load-error.ts +115 -12
  120. package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-account/index.ts +7 -4
  121. package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-appointments/index.ts +2 -2
  122. package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-ask/live.ts +3 -3
  123. package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-event/index.ts +18 -20
  124. package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-event-form/index.ts +20 -28
  125. package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-events/index.ts +2 -2
  126. package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-home/index.ts +2 -2
  127. package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-overview/index.ts +2 -2
  128. package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-post/index.ts +60 -43
  129. package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-post-form/index.ts +10 -23
  130. package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-posts/index.ts +2 -2
  131. package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-service/index.ts +18 -20
  132. package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-service-form/index.ts +16 -29
  133. package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-services/index.ts +2 -2
  134. package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-sites/index.ts +2 -2
  135. package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-today/index.ts +315 -0
  136. package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-wrist/index.ts +42 -15
  137. package/templates/owner-lite/dev/index.ts +545 -100
  138. package/templates/owner-lite/himalaya.content.json +6 -0
  139. package/templates/owner-lite/tier5-src/_shared/owner-account.ts +6 -2
  140. package/templates/owner-lite/tier5-src/_shared/owner-booking-respond.ts +82 -0
  141. package/templates/owner-lite/tier5-src/_shared/owner-load-error.ts +115 -12
  142. package/templates/owner-lite/tier5-src/himi-owner-lite-account/index.ts +7 -4
  143. package/templates/owner-lite/tier5-src/himi-owner-lite-appointments/index.ts +2 -2
  144. package/templates/owner-lite/tier5-src/himi-owner-lite-ask/live.ts +3 -3
  145. package/templates/owner-lite/tier5-src/himi-owner-lite-event/index.ts +18 -20
  146. package/templates/owner-lite/tier5-src/himi-owner-lite-event-form/index.ts +20 -28
  147. package/templates/owner-lite/tier5-src/himi-owner-lite-events/index.ts +2 -2
  148. package/templates/owner-lite/tier5-src/himi-owner-lite-home/index.ts +2 -2
  149. package/templates/owner-lite/tier5-src/himi-owner-lite-order/index.ts +3 -3
  150. package/templates/owner-lite/tier5-src/himi-owner-lite-orders/index.ts +2 -2
  151. package/templates/owner-lite/tier5-src/himi-owner-lite-overview/index.ts +2 -2
  152. package/templates/owner-lite/tier5-src/himi-owner-lite-post/index.ts +60 -43
  153. package/templates/owner-lite/tier5-src/himi-owner-lite-post-form/index.ts +10 -23
  154. package/templates/owner-lite/tier5-src/himi-owner-lite-posts/index.ts +2 -2
  155. package/templates/owner-lite/tier5-src/himi-owner-lite-product/index.ts +31 -32
  156. package/templates/owner-lite/tier5-src/himi-owner-lite-product-form/index.ts +23 -43
  157. package/templates/owner-lite/tier5-src/himi-owner-lite-products/index.ts +2 -2
  158. package/templates/owner-lite/tier5-src/himi-owner-lite-service/index.ts +18 -20
  159. package/templates/owner-lite/tier5-src/himi-owner-lite-service-form/index.ts +16 -29
  160. package/templates/owner-lite/tier5-src/himi-owner-lite-services/index.ts +2 -2
  161. package/templates/owner-lite/tier5-src/himi-owner-lite-sites/index.ts +2 -2
  162. package/templates/owner-lite/tier5-src/himi-owner-lite-today/index.ts +315 -0
  163. package/templates/owner-lite/tier5-src/himi-owner-lite-wrist/index.ts +42 -15
  164. package/templates/podcast-creator/tier5-src/_shared/owner-load-error.ts +115 -12
  165. package/templates/podcast-creator-owner/dev/index.ts +317 -100
  166. package/templates/podcast-creator-owner/himalaya.content.json +6 -0
  167. package/templates/podcast-creator-owner/tier5-src/_shared/owner-account.ts +6 -2
  168. package/templates/podcast-creator-owner/tier5-src/_shared/owner-booking-respond.ts +82 -0
  169. package/templates/podcast-creator-owner/tier5-src/_shared/owner-load-error.ts +115 -12
  170. package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-account/index.ts +7 -4
  171. package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-ask/live.ts +3 -3
  172. package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-event/index.ts +18 -20
  173. package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-event-form/index.ts +20 -28
  174. package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-events/index.ts +2 -2
  175. package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-home/index.ts +2 -2
  176. package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-order/index.ts +3 -3
  177. package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-orders/index.ts +2 -2
  178. package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-overview/index.ts +2 -2
  179. package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-post/index.ts +60 -43
  180. package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-post-form/index.ts +10 -23
  181. package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-posts/index.ts +2 -2
  182. package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-product/index.ts +31 -32
  183. package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-product-form/index.ts +23 -43
  184. package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-products/index.ts +2 -2
  185. package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-sites/index.ts +2 -2
  186. package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-today/index.ts +315 -0
  187. package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-wrist/index.ts +42 -15
  188. package/templates/portfolio-creative/tier5-src/_shared/owner-load-error.ts +115 -12
  189. package/templates/portfolio-creative/tier5-src/himi-branded-lite-cart/index.ts +52 -28
  190. package/templates/portfolio-creative-owner/dev/index.ts +545 -100
  191. package/templates/portfolio-creative-owner/himalaya.content.json +6 -0
  192. package/templates/portfolio-creative-owner/tier5-src/_shared/owner-account.ts +6 -2
  193. package/templates/portfolio-creative-owner/tier5-src/_shared/owner-booking-respond.ts +82 -0
  194. package/templates/portfolio-creative-owner/tier5-src/_shared/owner-load-error.ts +115 -12
  195. package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-account/index.ts +7 -4
  196. package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-appointments/index.ts +2 -2
  197. package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-ask/live.ts +3 -3
  198. package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-home/index.ts +2 -2
  199. package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-order/index.ts +3 -3
  200. package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-orders/index.ts +2 -2
  201. package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-overview/index.ts +2 -2
  202. package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-post/index.ts +60 -43
  203. package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-post-form/index.ts +10 -23
  204. package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-posts/index.ts +2 -2
  205. package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-product/index.ts +31 -32
  206. package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-product-form/index.ts +23 -43
  207. package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-products/index.ts +2 -2
  208. package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-service/index.ts +18 -20
  209. package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-service-form/index.ts +16 -29
  210. package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-services/index.ts +2 -2
  211. package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-sites/index.ts +2 -2
  212. package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-today/index.ts +315 -0
  213. package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-wrist/index.ts +42 -15
  214. package/templates/restaurant/tier5-src/_shared/owner-load-error.ts +115 -12
  215. package/templates/restaurant-owner/dev/index.ts +545 -100
  216. package/templates/restaurant-owner/himalaya.content.json +6 -0
  217. package/templates/restaurant-owner/tier5-src/_shared/owner-account.ts +6 -2
  218. package/templates/restaurant-owner/tier5-src/_shared/owner-booking-respond.ts +82 -0
  219. package/templates/restaurant-owner/tier5-src/_shared/owner-load-error.ts +115 -12
  220. package/templates/restaurant-owner/tier5-src/himi-owner-lite-account/index.ts +7 -4
  221. package/templates/restaurant-owner/tier5-src/himi-owner-lite-appointments/index.ts +2 -2
  222. package/templates/restaurant-owner/tier5-src/himi-owner-lite-ask/live.ts +3 -3
  223. package/templates/restaurant-owner/tier5-src/himi-owner-lite-event/index.ts +18 -20
  224. package/templates/restaurant-owner/tier5-src/himi-owner-lite-event-form/index.ts +20 -28
  225. package/templates/restaurant-owner/tier5-src/himi-owner-lite-events/index.ts +2 -2
  226. package/templates/restaurant-owner/tier5-src/himi-owner-lite-home/index.ts +2 -2
  227. package/templates/restaurant-owner/tier5-src/himi-owner-lite-order/index.ts +3 -3
  228. package/templates/restaurant-owner/tier5-src/himi-owner-lite-orders/index.ts +2 -2
  229. package/templates/restaurant-owner/tier5-src/himi-owner-lite-overview/index.ts +2 -2
  230. package/templates/restaurant-owner/tier5-src/himi-owner-lite-post/index.ts +60 -43
  231. package/templates/restaurant-owner/tier5-src/himi-owner-lite-post-form/index.ts +10 -23
  232. package/templates/restaurant-owner/tier5-src/himi-owner-lite-posts/index.ts +2 -2
  233. package/templates/restaurant-owner/tier5-src/himi-owner-lite-product/index.ts +31 -32
  234. package/templates/restaurant-owner/tier5-src/himi-owner-lite-product-form/index.ts +23 -43
  235. package/templates/restaurant-owner/tier5-src/himi-owner-lite-products/index.ts +2 -2
  236. package/templates/restaurant-owner/tier5-src/himi-owner-lite-service/index.ts +18 -20
  237. package/templates/restaurant-owner/tier5-src/himi-owner-lite-service-form/index.ts +16 -29
  238. package/templates/restaurant-owner/tier5-src/himi-owner-lite-services/index.ts +2 -2
  239. package/templates/restaurant-owner/tier5-src/himi-owner-lite-sites/index.ts +2 -2
  240. package/templates/restaurant-owner/tier5-src/himi-owner-lite-today/index.ts +315 -0
  241. package/templates/restaurant-owner/tier5-src/himi-owner-lite-wrist/index.ts +42 -15
  242. package/templates/retail-store/tier5-src/_shared/owner-load-error.ts +115 -12
  243. package/templates/retail-store/tier5-src/himi-branded-lite-cart/index.ts +52 -28
  244. package/templates/retail-store-owner/dev/index.ts +317 -100
  245. package/templates/retail-store-owner/himalaya.content.json +6 -0
  246. package/templates/retail-store-owner/tier5-src/_shared/owner-account.ts +6 -2
  247. package/templates/retail-store-owner/tier5-src/_shared/owner-booking-respond.ts +82 -0
  248. package/templates/retail-store-owner/tier5-src/_shared/owner-load-error.ts +115 -12
  249. package/templates/retail-store-owner/tier5-src/himi-owner-lite-account/index.ts +7 -4
  250. package/templates/retail-store-owner/tier5-src/himi-owner-lite-ask/live.ts +3 -3
  251. package/templates/retail-store-owner/tier5-src/himi-owner-lite-home/index.ts +2 -2
  252. package/templates/retail-store-owner/tier5-src/himi-owner-lite-order/index.ts +3 -3
  253. package/templates/retail-store-owner/tier5-src/himi-owner-lite-orders/index.ts +2 -2
  254. package/templates/retail-store-owner/tier5-src/himi-owner-lite-overview/index.ts +2 -2
  255. package/templates/retail-store-owner/tier5-src/himi-owner-lite-post/index.ts +60 -43
  256. package/templates/retail-store-owner/tier5-src/himi-owner-lite-post-form/index.ts +10 -23
  257. package/templates/retail-store-owner/tier5-src/himi-owner-lite-posts/index.ts +2 -2
  258. package/templates/retail-store-owner/tier5-src/himi-owner-lite-product/index.ts +31 -32
  259. package/templates/retail-store-owner/tier5-src/himi-owner-lite-product-form/index.ts +23 -43
  260. package/templates/retail-store-owner/tier5-src/himi-owner-lite-products/index.ts +2 -2
  261. package/templates/retail-store-owner/tier5-src/himi-owner-lite-sites/index.ts +2 -2
  262. package/templates/retail-store-owner/tier5-src/himi-owner-lite-today/index.ts +315 -0
  263. package/templates/retail-store-owner/tier5-src/himi-owner-lite-wrist/index.ts +42 -15
  264. package/templates/yoga-studio/tier5-src/_shared/owner-load-error.ts +115 -12
  265. package/templates/yoga-studio-owner/dev/index.ts +503 -100
  266. package/templates/yoga-studio-owner/himalaya.content.json +6 -0
  267. package/templates/yoga-studio-owner/tier5-src/_shared/owner-account.ts +6 -2
  268. package/templates/yoga-studio-owner/tier5-src/_shared/owner-booking-respond.ts +82 -0
  269. package/templates/yoga-studio-owner/tier5-src/_shared/owner-load-error.ts +115 -12
  270. package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-account/index.ts +7 -4
  271. package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-appointments/index.ts +2 -2
  272. package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-ask/live.ts +3 -3
  273. package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-event/index.ts +18 -20
  274. package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-event-form/index.ts +20 -28
  275. package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-events/index.ts +2 -2
  276. package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-home/index.ts +2 -2
  277. package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-overview/index.ts +2 -2
  278. package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-post/index.ts +60 -43
  279. package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-post-form/index.ts +10 -23
  280. package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-posts/index.ts +2 -2
  281. package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-service/index.ts +18 -20
  282. package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-service-form/index.ts +16 -29
  283. package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-services/index.ts +2 -2
  284. package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-sites/index.ts +2 -2
  285. package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-today/index.ts +315 -0
  286. package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-wrist/index.ts +42 -15
@@ -4,8 +4,8 @@ import { getMember } from "@himalaya/wix-members";
4
4
  import { signedInEmail } from "../_shared/himi-account";
5
5
  import { initials } from "../_shared/himi-text.js";
6
6
  import { copyParam, stashCopy } from "../_shared/himi-copy.js";
7
- import { get as dbGet, upsert as dbUpsert, enqueue as dbEnqueue, type DbEntity } from "@himalaya/local-db";
8
- import { isBridgeUnavailable } from "../_shared/owner-load-error";
7
+ import { get as dbGet, upsert as dbUpsert, type DbEntity } from "@himalaya/local-db";
8
+ import { isOfflineFailure, writeMayHaveLanded } from "../_shared/owner-load-error";
9
9
 
10
10
  interface MemberAvatar {
11
11
  initials: string;
@@ -13,11 +13,12 @@ interface MemberAvatar {
13
13
  }
14
14
 
15
15
  // Offline-first (data-offline): the group detail READS through the shared `groups`
16
- // cache (get by id) so a previously-synced group still renders offline, and join/leave
17
- // are WRITE-BEHIND — the membership is written OPTIMISTICALLY to the local store, then
18
- // the Wix mutation is attempted; if the bridge/network is unreachable the mutation is
19
- // ENQUEUED for replay on reconnect. Every local-db call is wrapped (try/catch) so a
20
- // build without the `local_database` grant behaves exactly as before (online-only).
16
+ // cache (get by id) so a previously-synced group still renders offline. Join/leave
17
+ // are SERVER-CONFIRMED: the cached membership changes only after Wix accepts it; a
18
+ // failed one leaves it alone and tells the member why. No host replays a queued
19
+ // write, so nothing is queued.
20
+ // Every local-db call is wrapped so a build without the `local_database` grant
21
+ // behaves exactly as before (online-only).
21
22
  const ENTITY = "groups";
22
23
  async function readCachedGroup(id: string): Promise<DbEntity | null> {
23
24
  try { return await dbGet(ENTITY, id); } catch { return null; }
@@ -41,9 +42,6 @@ async function cachePutMembership(state: State, joined: boolean): Promise<void>
41
42
  await dbUpsert(ENTITY, { ...existing, id: state.id, joined: joined ? "true" : "false" });
42
43
  } catch { /* capability not granted */ }
43
44
  }
44
- async function queueWrite(actionId: string, params: Record<string, string>): Promise<void> {
45
- try { await dbEnqueue(actionId, params); } catch { /* capability not granted */ }
46
- }
47
45
 
48
46
  interface State {
49
47
  status: "loading" | "ready" | "error";
@@ -242,17 +240,19 @@ const svc = defineService<State, {
242
240
  if (state.privacy !== "Public" && state.privacy !== "Unknown") {
243
241
  return membershipState({ ...state, message: copyParam("group.privateInviteMessage", "Private groups are available by invitation.") }, false, true);
244
242
  }
245
- // Optimistic local write — persist the joined membership so it survives offline.
246
- await cachePutMembership(state, true);
247
243
  try {
248
244
  await joinGroup(state.id);
245
+ // Wix confirmed it: persist the joined membership so it survives offline.
246
+ await cachePutMembership(state, true);
249
247
  return membershipState({ ...state, message: copyParam("group.joinedMessage", "You joined the group.") }, true, true);
250
248
  } catch (e) {
251
- if (isBridgeUnavailable(e)) {
252
- // Offline / no bridge: the optimistic cache already reflects the join; queue
253
- // the write to replay (WriteQueue, idempotent) when connectivity returns.
254
- await queueWrite("tier5.himiBrandedGroup.join", { id: state.id });
255
- return membershipState({ ...state, message: copyParam("group.joinedOfflineMessage", "You joined the group — it will sync when you reconnect.") }, true, true);
249
+ if (isOfflineFailure(e)) {
250
+ return membershipState({ ...state, message: copyParam("group.offlineFailedMessage", "You’re offline — nothing was saved. Try again when you reconnect.") }, false, true);
251
+ }
252
+ // It may have landed: neither "joined" nor "could not". (No "refresh to check": a load
253
+ // does not read the membership back.)
254
+ if (writeMayHaveLanded(e)) {
255
+ return membershipState({ ...state, message: copyParam("group.joinUnconfirmedMessage", "Wix didn’t confirm this, so you may already have joined the group.") }, false, true);
256
256
  }
257
257
  return membershipState({ ...state, message: copyParam("group.joinFailedMessage", "The group could not be joined. Try again.") }, false, true);
258
258
  }
@@ -260,17 +260,17 @@ const svc = defineService<State, {
260
260
  leave: async (state) => {
261
261
  const signedIn = Boolean(await signedInEmail());
262
262
  if (!signedIn) return membershipState({ ...state, message: copyParam("group.manageSignInMessage", "Sign in from Profile to manage groups.") }, state.isJoined, false);
263
- // Optimistic local write — persist the left membership so it survives offline.
264
- await cachePutMembership(state, false);
265
263
  try {
266
264
  await leaveGroup(state.id);
265
+ // Wix confirmed it: persist the left membership so it survives offline.
266
+ await cachePutMembership(state, false);
267
267
  return membershipState({ ...state, message: copyParam("group.leftMessage", "You left the group.") }, false, true);
268
268
  } catch (e) {
269
- if (isBridgeUnavailable(e)) {
270
- // Offline / no bridge: the optimistic cache already reflects the leave; queue
271
- // the write to replay (WriteQueue, idempotent) when connectivity returns.
272
- await queueWrite("tier5.himiBrandedGroup.leave", { id: state.id });
273
- return membershipState({ ...state, message: copyParam("group.leftOfflineMessage", "You left the group — it will sync when you reconnect.") }, false, true);
269
+ if (isOfflineFailure(e)) {
270
+ return membershipState({ ...state, message: copyParam("group.offlineFailedMessage", "You’re offline — nothing was saved. Try again when you reconnect.") }, true, true);
271
+ }
272
+ if (writeMayHaveLanded(e)) {
273
+ return membershipState({ ...state, message: copyParam("group.leaveUnconfirmedMessage", "Wix didn’t confirm this, so you may already have left the group.") }, true, true);
274
274
  }
275
275
  return membershipState({ ...state, message: copyParam("group.leaveFailedMessage", "The group could not be left. Try again.") }, true, true);
276
276
  }
@@ -51899,106 +51899,6 @@ const SCREENS = runtimeSetting({
51899
51899
  ]
51900
51900
  }
51901
51901
  }
51902
- },
51903
- {
51904
- "id": "himi_owner_lite_account.role",
51905
- "body": {
51906
- "package": "himalaya",
51907
- "type": "HStack",
51908
- "props": {
51909
- "spacing": 0,
51910
- "children": [
51911
- {
51912
- "id": "",
51913
- "body": {
51914
- "package": "himalaya",
51915
- "type": "Text",
51916
- "props": {
51917
- "text": "Role",
51918
- "style": "footnote",
51919
- "color": "textSecondary"
51920
- }
51921
- },
51922
- "modifiers": {
51923
- "padding": {
51924
- "trailing": 10
51925
- }
51926
- }
51927
- },
51928
- {
51929
- "id": "",
51930
- "body": {
51931
- "package": "himalaya",
51932
- "type": "Spacer",
51933
- "props": {}
51934
- }
51935
- },
51936
- {
51937
- "id": "",
51938
- "body": {
51939
- "package": "himalaya",
51940
- "type": "Text",
51941
- "props": {
51942
- "text": "Organiser",
51943
- "style": "bodyEmphasis",
51944
- "maxLines": 1,
51945
- "collapseWhenEmpty": true
51946
- }
51947
- }
51948
- }
51949
- ]
51950
- }
51951
- }
51952
- },
51953
- {
51954
- "id": "himi_owner_lite_account.plan",
51955
- "body": {
51956
- "package": "himalaya",
51957
- "type": "HStack",
51958
- "props": {
51959
- "spacing": 0,
51960
- "children": [
51961
- {
51962
- "id": "",
51963
- "body": {
51964
- "package": "himalaya",
51965
- "type": "Text",
51966
- "props": {
51967
- "text": "Plan",
51968
- "style": "footnote",
51969
- "color": "textSecondary"
51970
- }
51971
- },
51972
- "modifiers": {
51973
- "padding": {
51974
- "trailing": 10
51975
- }
51976
- }
51977
- },
51978
- {
51979
- "id": "",
51980
- "body": {
51981
- "package": "himalaya",
51982
- "type": "Spacer",
51983
- "props": {}
51984
- }
51985
- },
51986
- {
51987
- "id": "",
51988
- "body": {
51989
- "package": "himalaya",
51990
- "type": "Text",
51991
- "props": {
51992
- "text": "Business",
51993
- "style": "bodyEmphasis",
51994
- "maxLines": 1,
51995
- "collapseWhenEmpty": true
51996
- }
51997
- }
51998
- }
51999
- ]
52000
- }
52001
- }
52002
51902
  }
52003
51903
  ]
52004
51904
  }
@@ -52094,6 +51994,28 @@ const SCREENS = runtimeSetting({
52094
51994
  "modifiers": {
52095
51995
  "hiddenPath": "$service:himiOwnerLiteAccount.noTerms"
52096
51996
  }
51997
+ },
51998
+ {
51999
+ "id": "himi_owner_lite_account.deleteAccount",
52000
+ "body": {
52001
+ "package": "himalaya",
52002
+ "type": "Button",
52003
+ "props": {
52004
+ "title": "Delete account",
52005
+ "style": "plain",
52006
+ "fullWidth": true,
52007
+ "role": "destructive",
52008
+ "action": {
52009
+ "actionId": "tier5.himiOwnerLiteAccount.openLink",
52010
+ "params": {
52011
+ "kind": "deleteAccount"
52012
+ }
52013
+ }
52014
+ }
52015
+ },
52016
+ "modifiers": {
52017
+ "hiddenPath": "$service:himiOwnerLiteAccount.noDeleteAccount"
52018
+ }
52097
52019
  }
52098
52020
  ]
52099
52021
  }
@@ -52165,6 +52087,7 @@ const SCREENS = runtimeSetting({
52165
52087
  "supportUrl": "https://www.wix.com/support",
52166
52088
  "privacyUrl": "https://www.wix.com/about/privacy",
52167
52089
  "termsUrl": "https://www.wix.com/about/terms-of-use",
52090
+ "deleteAccountUrl": "https://manage.wix.com/account/account-settings",
52168
52091
  "businessName": "__HIMI_APP_NAME__",
52169
52092
  "copy": "{\"ownerAccount.roleValue\":\"Organiser\",\"ownerAccount.subtitle\":\"Event organiser\"}"
52170
52093
  }
@@ -63441,6 +63364,258 @@ const SCREENS = runtimeSetting({
63441
63364
  "bundleVersion": "0.0.1"
63442
63365
  }
63443
63366
  },
63367
+ "himi_owner_lite_widget_today_small": {
63368
+ "screenId": "himi_owner_lite_widget_today_small",
63369
+ "renderer": "sdui_intent",
63370
+ "title": "Today widget (small)",
63371
+ "schemaVersion": 1,
63372
+ "cacheControl": {
63373
+ "maxAge": 0,
63374
+ "staleWhileRevalidate": 0
63375
+ },
63376
+ "telemetryScreenName": "himi_owner_lite_widget_today_small",
63377
+ "payload": {
63378
+ "id": "himi_owner_lite_widget_today_small.root",
63379
+ "body": {
63380
+ "package": "himalaya",
63381
+ "type": "VStack",
63382
+ "props": {
63383
+ "spacing": 4,
63384
+ "alignment": "leading",
63385
+ "children": [
63386
+ {
63387
+ "id": "owner_widget.small.header",
63388
+ "body": {
63389
+ "package": "himalaya",
63390
+ "type": "HStack",
63391
+ "props": {
63392
+ "spacing": 4,
63393
+ "children": [
63394
+ {
63395
+ "id": "owner_widget.small.icon",
63396
+ "body": {
63397
+ "package": "himalaya",
63398
+ "type": "Icon",
63399
+ "props": {
63400
+ "name": "calendar",
63401
+ "size": 12,
63402
+ "tint": "accentPrimary"
63403
+ }
63404
+ },
63405
+ "modifiers": {
63406
+ "accessibilityRole": "decorative"
63407
+ }
63408
+ },
63409
+ {
63410
+ "id": "owner_widget.small.title",
63411
+ "body": {
63412
+ "package": "himalaya",
63413
+ "type": "Text",
63414
+ "props": {
63415
+ "text": "Today",
63416
+ "style": "caption",
63417
+ "color": "textSecondary",
63418
+ "maxLines": 1
63419
+ }
63420
+ }
63421
+ }
63422
+ ]
63423
+ }
63424
+ }
63425
+ },
63426
+ {
63427
+ "id": "owner_widget.small.message",
63428
+ "body": {
63429
+ "package": "himalaya",
63430
+ "type": "Text",
63431
+ "props": {
63432
+ "text": "$service:ownerToday.message",
63433
+ "style": "footnote",
63434
+ "color": "textSecondary",
63435
+ "maxLines": 3
63436
+ }
63437
+ },
63438
+ "modifiers": {
63439
+ "hiddenPath": "$service:ownerToday.hideMessage"
63440
+ }
63441
+ },
63442
+ {
63443
+ "id": "owner_widget.small.spacer",
63444
+ "body": {
63445
+ "package": "himalaya",
63446
+ "type": "Spacer",
63447
+ "props": {}
63448
+ }
63449
+ },
63450
+ {
63451
+ "id": "owner_widget.small.counts",
63452
+ "body": {
63453
+ "package": "himalaya",
63454
+ "type": "Text",
63455
+ "props": {
63456
+ "text": "$service:ownerToday.countsShort",
63457
+ "style": "caption",
63458
+ "maxLines": 1,
63459
+ "monospacedDigits": true
63460
+ }
63461
+ },
63462
+ "modifiers": {
63463
+ "hiddenPath": "$service:ownerToday.message"
63464
+ }
63465
+ }
63466
+ ]
63467
+ }
63468
+ }
63469
+ },
63470
+ "input": {
63471
+ "verticals": ""
63472
+ },
63473
+ "logicBundle": {
63474
+ "url": "http://localhost:8190/v1/bundles/himi-owner-lite-today",
63475
+ "integrity": "",
63476
+ "contentType": "application/javascript+ts-bundle",
63477
+ "declaredCapabilities": [
63478
+ "wix_api"
63479
+ ],
63480
+ "minBinaryVersion": "0.1.0",
63481
+ "bundleVersion": "0.0.1"
63482
+ }
63483
+ },
63484
+ "himi_owner_lite_widget_today_medium": {
63485
+ "screenId": "himi_owner_lite_widget_today_medium",
63486
+ "renderer": "sdui_intent",
63487
+ "title": "Today widget (medium)",
63488
+ "schemaVersion": 1,
63489
+ "cacheControl": {
63490
+ "maxAge": 0,
63491
+ "staleWhileRevalidate": 0
63492
+ },
63493
+ "telemetryScreenName": "himi_owner_lite_widget_today_medium",
63494
+ "payload": {
63495
+ "id": "himi_owner_lite_widget_today_medium.root",
63496
+ "body": {
63497
+ "package": "himalaya",
63498
+ "type": "VStack",
63499
+ "props": {
63500
+ "spacing": 6,
63501
+ "alignment": "leading",
63502
+ "children": [
63503
+ {
63504
+ "id": "owner_widget.medium.header_row",
63505
+ "body": {
63506
+ "package": "himalaya",
63507
+ "type": "HStack",
63508
+ "props": {
63509
+ "spacing": 4,
63510
+ "children": [
63511
+ {
63512
+ "id": "owner_widget.medium.icon",
63513
+ "body": {
63514
+ "package": "himalaya",
63515
+ "type": "Icon",
63516
+ "props": {
63517
+ "name": "calendar",
63518
+ "size": 12,
63519
+ "tint": "accentPrimary"
63520
+ }
63521
+ },
63522
+ "modifiers": {
63523
+ "accessibilityRole": "decorative"
63524
+ }
63525
+ },
63526
+ {
63527
+ "id": "owner_widget.medium.header",
63528
+ "body": {
63529
+ "package": "himalaya",
63530
+ "type": "Text",
63531
+ "props": {
63532
+ "text": "$service:ownerToday.header",
63533
+ "style": "caption",
63534
+ "color": "textSecondary",
63535
+ "maxLines": 1
63536
+ }
63537
+ }
63538
+ }
63539
+ ]
63540
+ }
63541
+ }
63542
+ },
63543
+ {
63544
+ "id": "owner_widget.medium.message",
63545
+ "body": {
63546
+ "package": "himalaya",
63547
+ "type": "Text",
63548
+ "props": {
63549
+ "text": "$service:ownerToday.message",
63550
+ "style": "footnote",
63551
+ "color": "textSecondary",
63552
+ "maxLines": 3
63553
+ }
63554
+ },
63555
+ "modifiers": {
63556
+ "hiddenPath": "$service:ownerToday.hideMessage"
63557
+ }
63558
+ },
63559
+ {
63560
+ "id": "owner_widget.medium.spacer",
63561
+ "body": {
63562
+ "package": "himalaya",
63563
+ "type": "Spacer",
63564
+ "props": {}
63565
+ }
63566
+ },
63567
+ {
63568
+ "id": "owner_widget.medium.divider",
63569
+ "body": {
63570
+ "package": "himalaya",
63571
+ "type": "Divider",
63572
+ "props": {}
63573
+ },
63574
+ "modifiers": {
63575
+ "hiddenPath": "$service:ownerToday.message"
63576
+ }
63577
+ },
63578
+ {
63579
+ "id": "owner_widget.medium.counts",
63580
+ "body": {
63581
+ "package": "himalaya",
63582
+ "type": "HStack",
63583
+ "props": {
63584
+ "spacing": 8,
63585
+ "children": [
63586
+ {
63587
+ "id": "owner_widget.medium.counts_spacer",
63588
+ "body": {
63589
+ "package": "himalaya",
63590
+ "type": "Spacer",
63591
+ "props": {}
63592
+ }
63593
+ }
63594
+ ]
63595
+ }
63596
+ },
63597
+ "modifiers": {
63598
+ "hiddenPath": "$service:ownerToday.message"
63599
+ }
63600
+ }
63601
+ ]
63602
+ }
63603
+ }
63604
+ },
63605
+ "input": {
63606
+ "verticals": ""
63607
+ },
63608
+ "logicBundle": {
63609
+ "url": "http://localhost:8190/v1/bundles/himi-owner-lite-today",
63610
+ "integrity": "",
63611
+ "contentType": "application/javascript+ts-bundle",
63612
+ "declaredCapabilities": [
63613
+ "wix_api"
63614
+ ],
63615
+ "minBinaryVersion": "0.1.0",
63616
+ "bundleVersion": "0.0.1"
63617
+ }
63618
+ },
63444
63619
  "himi_owner_lite_wrist_home": {
63445
63620
  "screenId": "himi_owner_lite_wrist_home",
63446
63621
  "renderer": "sdui_intent",
@@ -154,6 +154,12 @@
154
154
  "himi_owner_lite_sites": {
155
155
  "displayName": "Sites"
156
156
  },
157
+ "himi_owner_lite_widget_today_medium": {
158
+ "displayName": "Today widget (medium)"
159
+ },
160
+ "himi_owner_lite_widget_today_small": {
161
+ "displayName": "Today widget (small)"
162
+ },
157
163
  "himi_owner_lite_wrist_home": {
158
164
  "displayName": "Next up"
159
165
  },
@@ -15,10 +15,13 @@ export interface AccountState {
15
15
  supportUrl: string;
16
16
  privacyUrl: string;
17
17
  termsUrl: string;
18
+ /** Wix's own account-deletion destination (App Store 5.1.1(v)). */
19
+ deleteAccountUrl: string;
18
20
  /** hiddenPath flags — TRUE hides, so each is phrased negatively. */
19
21
  noSupport: boolean;
20
22
  noPrivacy: boolean;
21
23
  noTerms: boolean;
24
+ noDeleteAccount: boolean;
22
25
  }
23
26
 
24
27
  /** Only absolute http(s) URLs are openable; anything else is treated as absent. */
@@ -37,13 +40,14 @@ export function ownerLineOf(name: string, email: string): string {
37
40
 
38
41
  export function shapeAccount(s: Partial<AccountState>): AccountState {
39
42
  const supportUrl = safeUrl(s.supportUrl), privacyUrl = safeUrl(s.privacyUrl), termsUrl = safeUrl(s.termsUrl);
43
+ const deleteAccountUrl = safeUrl(s.deleteAccountUrl);
40
44
  return {
41
45
  status: s.status ?? "loading",
42
46
  businessName: s.businessName ?? "",
43
47
  ownerLine: s.ownerLine ?? "",
44
48
  versionLine: s.versionLine ?? "",
45
49
  error: s.error ?? "",
46
- supportUrl, privacyUrl, termsUrl,
47
- noSupport: !supportUrl, noPrivacy: !privacyUrl, noTerms: !termsUrl,
50
+ supportUrl, privacyUrl, termsUrl, deleteAccountUrl,
51
+ noSupport: !supportUrl, noPrivacy: !privacyUrl, noTerms: !termsUrl, noDeleteAccount: !deleteAccountUrl,
48
52
  };
49
53
  }
@@ -0,0 +1,82 @@
1
+ // Accept / Decline ONE booking request — the write shared by the two __HIMI_APP_NAME__ surfaces that
2
+ // answer a request without opening the booking screen: the paired watch (`himi-owner-lite-wrist`)
3
+ // and the notification's action buttons (`himi-owner-lite-nav`).
4
+ //
5
+ // Both follow the same rules:
6
+ // • the press names the business it was shown for, and is REFUSED unless that is the business
7
+ // the phone has active — a site switched between delivery and press must never confirm
8
+ // another business's booking;
9
+ // • the write itself is addressed at that business (`wix-site-id`), so even a switch that lands
10
+ // between the check and the request cannot move it;
11
+ // • only a request still pending is written, at the revision Wix last reported.
12
+
13
+ import { getBooking, confirmBooking, declineBooking } from "@himalaya/wix-bookings";
14
+
15
+ type Rec = Record<string, unknown>;
16
+
17
+ /** The statuses that are waiting on the owner. */
18
+ export const PENDING_BOOKING_STATUSES: ReadonlySet<string> = new Set(["PENDING", "PENDING_APPROVAL", "WAITING_LIST"]);
19
+
20
+ export type BookingResponse = "confirm" | "decline";
21
+
22
+ /** A press may write only for the business the phone has active. Fails CLOSED: a press that
23
+ * names no business, or a host that cannot say which one is active, writes nothing. */
24
+ export function isForActiveBusiness(siteId: string, activeSiteId: string): boolean {
25
+ return !!siteId && !!activeSiteId && siteId === activeSiteId;
26
+ }
27
+
28
+ /** Wix refused the write because the booking moved on (another revision, already handled). */
29
+ export function isStaleBookingWrite(e: unknown): boolean {
30
+ return /revision|\b409\b|ABORTED|conflict/i.test(String((e as Error)?.message ?? e));
31
+ }
32
+
33
+ /** Confirm or decline `bookingId` at `revision`, addressed at `siteId`. Rejects without a
34
+ * request when `siteId` is empty: an unaddressed write would land on whatever business the
35
+ * ambient bridge is scoped to. */
36
+ export function writeBookingResponse(kind: BookingResponse, bookingId: string, revision: string, siteId: string): Promise<unknown> {
37
+ const site = siteId.trim();
38
+ if (!site) return Promise.reject(new Error("writeBookingResponse: a booking write must name its business"));
39
+ const opts = { site };
40
+ return kind === "confirm" ? confirmBooking(bookingId, revision, opts) : declineBooking(bookingId, revision, false, opts);
41
+ }
42
+
43
+ export type BookingResponseOutcome =
44
+ | "confirmed" | "declined"
45
+ /** Not written: no booking id, or a press for a business other than the active one. */
46
+ | "refused"
47
+ /** Not written: the booking is no longer waiting on the owner (or no longer exists). */
48
+ | "notPending"
49
+ /** Not written: Wix reported a newer revision between the read and the write. */
50
+ | "stale"
51
+ /** Not written: the read or the write failed. */
52
+ | "failed";
53
+
54
+ function str(r: Rec | undefined, key: string): string {
55
+ const v = r?.[key];
56
+ return typeof v === "string" ? v : typeof v === "number" ? String(v) : "";
57
+ }
58
+
59
+ /** Answer a request known only by id — a notification carries no revision, so the booking is
60
+ * read first (from the business the press names) and written only while it is still pending. */
61
+ export async function respondToBookingById(
62
+ kind: BookingResponse,
63
+ bookingId: string,
64
+ siteId: string,
65
+ activeSiteId: string,
66
+ ): Promise<BookingResponseOutcome> {
67
+ if (!bookingId || !isForActiveBusiness(siteId, activeSiteId)) return "refused";
68
+ let booking: Rec | undefined;
69
+ try {
70
+ booking = ((await getBooking(bookingId, { site: siteId })) as unknown as { booking?: Rec } | undefined)?.booking;
71
+ } catch {
72
+ return "failed";
73
+ }
74
+ const revision = str(booking, "revision");
75
+ if (!booking || !revision || !PENDING_BOOKING_STATUSES.has(str(booking, "status"))) return "notPending";
76
+ try {
77
+ await writeBookingResponse(kind, bookingId, revision, siteId);
78
+ } catch (e) {
79
+ return isStaleBookingWrite(e) ? "stale" : "failed";
80
+ }
81
+ return kind === "confirm" ? "confirmed" : "declined";
82
+ }