@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.
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/wix-sdk/bookings-v2/src/extensions.d.ts +7 -5
- package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/wix-bookings.mjs +4 -4
- package/dist/cli.mjs +41 -27
- package/dist/preview-assets.generated.bin +0 -0
- package/guides/himi-json-output.md +1 -0
- package/guides/iap-products.md +5 -0
- package/guides/sdk-reference.json +4 -4
- package/package.json +2 -2
- package/templates/beauty-salon/tier5-src/_shared/owner-load-error.ts +115 -12
- package/templates/beauty-salon/tier5-src/himi-branded-lite-cart/index.ts +52 -28
- package/templates/beauty-salon-owner/dev/index.ts +545 -100
- package/templates/beauty-salon-owner/himalaya.content.json +6 -0
- package/templates/beauty-salon-owner/tier5-src/_shared/owner-account.ts +6 -2
- package/templates/beauty-salon-owner/tier5-src/_shared/owner-booking-respond.ts +82 -0
- package/templates/beauty-salon-owner/tier5-src/_shared/owner-load-error.ts +115 -12
- package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-account/index.ts +7 -4
- package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-appointments/index.ts +2 -2
- package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-ask/live.ts +3 -3
- package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-home/index.ts +2 -2
- package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-order/index.ts +3 -3
- package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-orders/index.ts +2 -2
- package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-overview/index.ts +2 -2
- package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-post/index.ts +60 -43
- package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-post-form/index.ts +10 -23
- package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-posts/index.ts +2 -2
- package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-product/index.ts +31 -32
- package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-product-form/index.ts +23 -43
- package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-products/index.ts +2 -2
- package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-service/index.ts +18 -20
- package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-service-form/index.ts +16 -29
- package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-services/index.ts +2 -2
- package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-sites/index.ts +2 -2
- package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-today/index.ts +315 -0
- package/templates/beauty-salon-owner/tier5-src/himi-owner-lite-wrist/index.ts +42 -15
- package/templates/branded-lite/tier5-src/_shared/owner-load-error.ts +115 -12
- package/templates/branded-lite/tier5-src/himi-branded-lite-cart/index.ts +52 -28
- package/templates/branded-lite/tier5-src/himi-branded-lite-group/index.ts +24 -24
- package/templates/community-club/tier5-src/_shared/owner-load-error.ts +115 -12
- package/templates/community-club/tier5-src/himi-branded-lite-group/index.ts +24 -24
- package/templates/community-club-owner/dev/index.ts +317 -100
- package/templates/community-club-owner/himalaya.content.json +6 -0
- package/templates/community-club-owner/tier5-src/_shared/owner-account.ts +6 -2
- package/templates/community-club-owner/tier5-src/_shared/owner-booking-respond.ts +82 -0
- package/templates/community-club-owner/tier5-src/_shared/owner-load-error.ts +115 -12
- package/templates/community-club-owner/tier5-src/himi-owner-lite-account/index.ts +7 -4
- package/templates/community-club-owner/tier5-src/himi-owner-lite-ask/live.ts +3 -3
- package/templates/community-club-owner/tier5-src/himi-owner-lite-event/index.ts +18 -20
- package/templates/community-club-owner/tier5-src/himi-owner-lite-event-form/index.ts +20 -28
- package/templates/community-club-owner/tier5-src/himi-owner-lite-events/index.ts +2 -2
- package/templates/community-club-owner/tier5-src/himi-owner-lite-home/index.ts +2 -2
- package/templates/community-club-owner/tier5-src/himi-owner-lite-order/index.ts +3 -3
- package/templates/community-club-owner/tier5-src/himi-owner-lite-orders/index.ts +2 -2
- package/templates/community-club-owner/tier5-src/himi-owner-lite-overview/index.ts +2 -2
- package/templates/community-club-owner/tier5-src/himi-owner-lite-post/index.ts +60 -43
- package/templates/community-club-owner/tier5-src/himi-owner-lite-post-form/index.ts +10 -23
- package/templates/community-club-owner/tier5-src/himi-owner-lite-posts/index.ts +2 -2
- package/templates/community-club-owner/tier5-src/himi-owner-lite-product/index.ts +31 -32
- package/templates/community-club-owner/tier5-src/himi-owner-lite-product-form/index.ts +23 -43
- package/templates/community-club-owner/tier5-src/himi-owner-lite-products/index.ts +2 -2
- package/templates/community-club-owner/tier5-src/himi-owner-lite-sites/index.ts +2 -2
- package/templates/community-club-owner/tier5-src/himi-owner-lite-today/index.ts +315 -0
- package/templates/community-club-owner/tier5-src/himi-owner-lite-wrist/index.ts +42 -15
- package/templates/events-meetups/tier5-src/_shared/owner-load-error.ts +115 -12
- package/templates/events-meetups/tier5-src/himi-branded-lite-group/index.ts +24 -24
- package/templates/events-meetups-owner/dev/index.ts +275 -100
- package/templates/events-meetups-owner/himalaya.content.json +6 -0
- package/templates/events-meetups-owner/tier5-src/_shared/owner-account.ts +6 -2
- package/templates/events-meetups-owner/tier5-src/_shared/owner-booking-respond.ts +82 -0
- package/templates/events-meetups-owner/tier5-src/_shared/owner-load-error.ts +115 -12
- package/templates/events-meetups-owner/tier5-src/himi-owner-lite-account/index.ts +7 -4
- package/templates/events-meetups-owner/tier5-src/himi-owner-lite-ask/live.ts +3 -3
- package/templates/events-meetups-owner/tier5-src/himi-owner-lite-event/index.ts +18 -20
- package/templates/events-meetups-owner/tier5-src/himi-owner-lite-event-form/index.ts +20 -28
- package/templates/events-meetups-owner/tier5-src/himi-owner-lite-events/index.ts +2 -2
- package/templates/events-meetups-owner/tier5-src/himi-owner-lite-home/index.ts +2 -2
- package/templates/events-meetups-owner/tier5-src/himi-owner-lite-overview/index.ts +2 -2
- package/templates/events-meetups-owner/tier5-src/himi-owner-lite-post/index.ts +60 -43
- package/templates/events-meetups-owner/tier5-src/himi-owner-lite-post-form/index.ts +10 -23
- package/templates/events-meetups-owner/tier5-src/himi-owner-lite-posts/index.ts +2 -2
- package/templates/events-meetups-owner/tier5-src/himi-owner-lite-sites/index.ts +2 -2
- package/templates/events-meetups-owner/tier5-src/himi-owner-lite-today/index.ts +315 -0
- package/templates/events-meetups-owner/tier5-src/himi-owner-lite-wrist/index.ts +42 -15
- package/templates/gym-fitness/tier5-src/_shared/owner-load-error.ts +115 -12
- package/templates/gym-fitness/tier5-src/himi-branded-lite-cart/index.ts +52 -28
- package/templates/gym-fitness-owner/dev/index.ts +545 -100
- package/templates/gym-fitness-owner/himalaya.content.json +6 -0
- package/templates/gym-fitness-owner/tier5-src/_shared/owner-account.ts +6 -2
- package/templates/gym-fitness-owner/tier5-src/_shared/owner-booking-respond.ts +82 -0
- package/templates/gym-fitness-owner/tier5-src/_shared/owner-load-error.ts +115 -12
- package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-account/index.ts +7 -4
- package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-appointments/index.ts +2 -2
- package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-ask/live.ts +3 -3
- package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-event/index.ts +18 -20
- package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-event-form/index.ts +20 -28
- package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-events/index.ts +2 -2
- package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-home/index.ts +2 -2
- package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-order/index.ts +3 -3
- package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-orders/index.ts +2 -2
- package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-overview/index.ts +2 -2
- package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-post/index.ts +60 -43
- package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-post-form/index.ts +10 -23
- package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-posts/index.ts +2 -2
- package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-product/index.ts +31 -32
- package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-product-form/index.ts +23 -43
- package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-products/index.ts +2 -2
- package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-service/index.ts +18 -20
- package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-service-form/index.ts +16 -29
- package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-services/index.ts +2 -2
- package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-sites/index.ts +2 -2
- package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-today/index.ts +315 -0
- package/templates/gym-fitness-owner/tier5-src/himi-owner-lite-wrist/index.ts +42 -15
- package/templates/himi-chat/tier5-src/_shared/owner-load-error.ts +115 -12
- package/templates/nonprofit-cause/tier5-src/_shared/owner-load-error.ts +115 -12
- package/templates/nonprofit-cause/tier5-src/himi-branded-lite-group/index.ts +24 -24
- package/templates/nonprofit-cause-owner/dev/index.ts +503 -100
- package/templates/nonprofit-cause-owner/himalaya.content.json +6 -0
- package/templates/nonprofit-cause-owner/tier5-src/_shared/owner-account.ts +6 -2
- package/templates/nonprofit-cause-owner/tier5-src/_shared/owner-booking-respond.ts +82 -0
- package/templates/nonprofit-cause-owner/tier5-src/_shared/owner-load-error.ts +115 -12
- package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-account/index.ts +7 -4
- package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-appointments/index.ts +2 -2
- package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-ask/live.ts +3 -3
- package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-event/index.ts +18 -20
- package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-event-form/index.ts +20 -28
- package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-events/index.ts +2 -2
- package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-home/index.ts +2 -2
- package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-overview/index.ts +2 -2
- package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-post/index.ts +60 -43
- package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-post-form/index.ts +10 -23
- package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-posts/index.ts +2 -2
- package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-service/index.ts +18 -20
- package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-service-form/index.ts +16 -29
- package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-services/index.ts +2 -2
- package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-sites/index.ts +2 -2
- package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-today/index.ts +315 -0
- package/templates/nonprofit-cause-owner/tier5-src/himi-owner-lite-wrist/index.ts +42 -15
- package/templates/owner-lite/dev/index.ts +545 -100
- package/templates/owner-lite/himalaya.content.json +6 -0
- package/templates/owner-lite/tier5-src/_shared/owner-account.ts +6 -2
- package/templates/owner-lite/tier5-src/_shared/owner-booking-respond.ts +82 -0
- package/templates/owner-lite/tier5-src/_shared/owner-load-error.ts +115 -12
- package/templates/owner-lite/tier5-src/himi-owner-lite-account/index.ts +7 -4
- package/templates/owner-lite/tier5-src/himi-owner-lite-appointments/index.ts +2 -2
- package/templates/owner-lite/tier5-src/himi-owner-lite-ask/live.ts +3 -3
- package/templates/owner-lite/tier5-src/himi-owner-lite-event/index.ts +18 -20
- package/templates/owner-lite/tier5-src/himi-owner-lite-event-form/index.ts +20 -28
- package/templates/owner-lite/tier5-src/himi-owner-lite-events/index.ts +2 -2
- package/templates/owner-lite/tier5-src/himi-owner-lite-home/index.ts +2 -2
- package/templates/owner-lite/tier5-src/himi-owner-lite-order/index.ts +3 -3
- package/templates/owner-lite/tier5-src/himi-owner-lite-orders/index.ts +2 -2
- package/templates/owner-lite/tier5-src/himi-owner-lite-overview/index.ts +2 -2
- package/templates/owner-lite/tier5-src/himi-owner-lite-post/index.ts +60 -43
- package/templates/owner-lite/tier5-src/himi-owner-lite-post-form/index.ts +10 -23
- package/templates/owner-lite/tier5-src/himi-owner-lite-posts/index.ts +2 -2
- package/templates/owner-lite/tier5-src/himi-owner-lite-product/index.ts +31 -32
- package/templates/owner-lite/tier5-src/himi-owner-lite-product-form/index.ts +23 -43
- package/templates/owner-lite/tier5-src/himi-owner-lite-products/index.ts +2 -2
- package/templates/owner-lite/tier5-src/himi-owner-lite-service/index.ts +18 -20
- package/templates/owner-lite/tier5-src/himi-owner-lite-service-form/index.ts +16 -29
- package/templates/owner-lite/tier5-src/himi-owner-lite-services/index.ts +2 -2
- package/templates/owner-lite/tier5-src/himi-owner-lite-sites/index.ts +2 -2
- package/templates/owner-lite/tier5-src/himi-owner-lite-today/index.ts +315 -0
- package/templates/owner-lite/tier5-src/himi-owner-lite-wrist/index.ts +42 -15
- package/templates/podcast-creator/tier5-src/_shared/owner-load-error.ts +115 -12
- package/templates/podcast-creator-owner/dev/index.ts +317 -100
- package/templates/podcast-creator-owner/himalaya.content.json +6 -0
- package/templates/podcast-creator-owner/tier5-src/_shared/owner-account.ts +6 -2
- package/templates/podcast-creator-owner/tier5-src/_shared/owner-booking-respond.ts +82 -0
- package/templates/podcast-creator-owner/tier5-src/_shared/owner-load-error.ts +115 -12
- package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-account/index.ts +7 -4
- package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-ask/live.ts +3 -3
- package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-event/index.ts +18 -20
- package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-event-form/index.ts +20 -28
- package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-events/index.ts +2 -2
- package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-home/index.ts +2 -2
- package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-order/index.ts +3 -3
- package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-orders/index.ts +2 -2
- package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-overview/index.ts +2 -2
- package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-post/index.ts +60 -43
- package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-post-form/index.ts +10 -23
- package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-posts/index.ts +2 -2
- package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-product/index.ts +31 -32
- package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-product-form/index.ts +23 -43
- package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-products/index.ts +2 -2
- package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-sites/index.ts +2 -2
- package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-today/index.ts +315 -0
- package/templates/podcast-creator-owner/tier5-src/himi-owner-lite-wrist/index.ts +42 -15
- package/templates/portfolio-creative/tier5-src/_shared/owner-load-error.ts +115 -12
- package/templates/portfolio-creative/tier5-src/himi-branded-lite-cart/index.ts +52 -28
- package/templates/portfolio-creative-owner/dev/index.ts +545 -100
- package/templates/portfolio-creative-owner/himalaya.content.json +6 -0
- package/templates/portfolio-creative-owner/tier5-src/_shared/owner-account.ts +6 -2
- package/templates/portfolio-creative-owner/tier5-src/_shared/owner-booking-respond.ts +82 -0
- package/templates/portfolio-creative-owner/tier5-src/_shared/owner-load-error.ts +115 -12
- package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-account/index.ts +7 -4
- package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-appointments/index.ts +2 -2
- package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-ask/live.ts +3 -3
- package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-home/index.ts +2 -2
- package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-order/index.ts +3 -3
- package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-orders/index.ts +2 -2
- package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-overview/index.ts +2 -2
- package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-post/index.ts +60 -43
- package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-post-form/index.ts +10 -23
- package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-posts/index.ts +2 -2
- package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-product/index.ts +31 -32
- package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-product-form/index.ts +23 -43
- package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-products/index.ts +2 -2
- package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-service/index.ts +18 -20
- package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-service-form/index.ts +16 -29
- package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-services/index.ts +2 -2
- package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-sites/index.ts +2 -2
- package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-today/index.ts +315 -0
- package/templates/portfolio-creative-owner/tier5-src/himi-owner-lite-wrist/index.ts +42 -15
- package/templates/restaurant/tier5-src/_shared/owner-load-error.ts +115 -12
- package/templates/restaurant-owner/dev/index.ts +545 -100
- package/templates/restaurant-owner/himalaya.content.json +6 -0
- package/templates/restaurant-owner/tier5-src/_shared/owner-account.ts +6 -2
- package/templates/restaurant-owner/tier5-src/_shared/owner-booking-respond.ts +82 -0
- package/templates/restaurant-owner/tier5-src/_shared/owner-load-error.ts +115 -12
- package/templates/restaurant-owner/tier5-src/himi-owner-lite-account/index.ts +7 -4
- package/templates/restaurant-owner/tier5-src/himi-owner-lite-appointments/index.ts +2 -2
- package/templates/restaurant-owner/tier5-src/himi-owner-lite-ask/live.ts +3 -3
- package/templates/restaurant-owner/tier5-src/himi-owner-lite-event/index.ts +18 -20
- package/templates/restaurant-owner/tier5-src/himi-owner-lite-event-form/index.ts +20 -28
- package/templates/restaurant-owner/tier5-src/himi-owner-lite-events/index.ts +2 -2
- package/templates/restaurant-owner/tier5-src/himi-owner-lite-home/index.ts +2 -2
- package/templates/restaurant-owner/tier5-src/himi-owner-lite-order/index.ts +3 -3
- package/templates/restaurant-owner/tier5-src/himi-owner-lite-orders/index.ts +2 -2
- package/templates/restaurant-owner/tier5-src/himi-owner-lite-overview/index.ts +2 -2
- package/templates/restaurant-owner/tier5-src/himi-owner-lite-post/index.ts +60 -43
- package/templates/restaurant-owner/tier5-src/himi-owner-lite-post-form/index.ts +10 -23
- package/templates/restaurant-owner/tier5-src/himi-owner-lite-posts/index.ts +2 -2
- package/templates/restaurant-owner/tier5-src/himi-owner-lite-product/index.ts +31 -32
- package/templates/restaurant-owner/tier5-src/himi-owner-lite-product-form/index.ts +23 -43
- package/templates/restaurant-owner/tier5-src/himi-owner-lite-products/index.ts +2 -2
- package/templates/restaurant-owner/tier5-src/himi-owner-lite-service/index.ts +18 -20
- package/templates/restaurant-owner/tier5-src/himi-owner-lite-service-form/index.ts +16 -29
- package/templates/restaurant-owner/tier5-src/himi-owner-lite-services/index.ts +2 -2
- package/templates/restaurant-owner/tier5-src/himi-owner-lite-sites/index.ts +2 -2
- package/templates/restaurant-owner/tier5-src/himi-owner-lite-today/index.ts +315 -0
- package/templates/restaurant-owner/tier5-src/himi-owner-lite-wrist/index.ts +42 -15
- package/templates/retail-store/tier5-src/_shared/owner-load-error.ts +115 -12
- package/templates/retail-store/tier5-src/himi-branded-lite-cart/index.ts +52 -28
- package/templates/retail-store-owner/dev/index.ts +317 -100
- package/templates/retail-store-owner/himalaya.content.json +6 -0
- package/templates/retail-store-owner/tier5-src/_shared/owner-account.ts +6 -2
- package/templates/retail-store-owner/tier5-src/_shared/owner-booking-respond.ts +82 -0
- package/templates/retail-store-owner/tier5-src/_shared/owner-load-error.ts +115 -12
- package/templates/retail-store-owner/tier5-src/himi-owner-lite-account/index.ts +7 -4
- package/templates/retail-store-owner/tier5-src/himi-owner-lite-ask/live.ts +3 -3
- package/templates/retail-store-owner/tier5-src/himi-owner-lite-home/index.ts +2 -2
- package/templates/retail-store-owner/tier5-src/himi-owner-lite-order/index.ts +3 -3
- package/templates/retail-store-owner/tier5-src/himi-owner-lite-orders/index.ts +2 -2
- package/templates/retail-store-owner/tier5-src/himi-owner-lite-overview/index.ts +2 -2
- package/templates/retail-store-owner/tier5-src/himi-owner-lite-post/index.ts +60 -43
- package/templates/retail-store-owner/tier5-src/himi-owner-lite-post-form/index.ts +10 -23
- package/templates/retail-store-owner/tier5-src/himi-owner-lite-posts/index.ts +2 -2
- package/templates/retail-store-owner/tier5-src/himi-owner-lite-product/index.ts +31 -32
- package/templates/retail-store-owner/tier5-src/himi-owner-lite-product-form/index.ts +23 -43
- package/templates/retail-store-owner/tier5-src/himi-owner-lite-products/index.ts +2 -2
- package/templates/retail-store-owner/tier5-src/himi-owner-lite-sites/index.ts +2 -2
- package/templates/retail-store-owner/tier5-src/himi-owner-lite-today/index.ts +315 -0
- package/templates/retail-store-owner/tier5-src/himi-owner-lite-wrist/index.ts +42 -15
- package/templates/yoga-studio/tier5-src/_shared/owner-load-error.ts +115 -12
- package/templates/yoga-studio-owner/dev/index.ts +503 -100
- package/templates/yoga-studio-owner/himalaya.content.json +6 -0
- package/templates/yoga-studio-owner/tier5-src/_shared/owner-account.ts +6 -2
- package/templates/yoga-studio-owner/tier5-src/_shared/owner-booking-respond.ts +82 -0
- package/templates/yoga-studio-owner/tier5-src/_shared/owner-load-error.ts +115 -12
- package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-account/index.ts +7 -4
- package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-appointments/index.ts +2 -2
- package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-ask/live.ts +3 -3
- package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-event/index.ts +18 -20
- package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-event-form/index.ts +20 -28
- package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-events/index.ts +2 -2
- package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-home/index.ts +2 -2
- package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-overview/index.ts +2 -2
- package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-post/index.ts +60 -43
- package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-post-form/index.ts +10 -23
- package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-posts/index.ts +2 -2
- package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-service/index.ts +18 -20
- package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-service-form/index.ts +16 -29
- package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-services/index.ts +2 -2
- package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-sites/index.ts +2 -2
- package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-today/index.ts +315 -0
- package/templates/yoga-studio-owner/tier5-src/himi-owner-lite-wrist/index.ts +42 -15
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { WixBooking, WixBookingsPagingMetadata } from "./index.js";
|
|
1
|
+
import type { WixBooking, WixBookingsPagingMetadata, WixCallOptions } from "./index.js";
|
|
2
2
|
export interface WixServiceMoney {
|
|
3
3
|
/** Decimal string returned by Bookings v2, e.g. "50.00". */
|
|
4
4
|
value?: string;
|
|
@@ -165,10 +165,12 @@ export interface WixParticipantNotification {
|
|
|
165
165
|
notifyParticipants?: boolean;
|
|
166
166
|
message?: string;
|
|
167
167
|
}
|
|
168
|
-
/** Confirm a pending booking — POST /bookings/v2/bookings/{id}/confirm.
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
168
|
+
/** Confirm a pending booking — POST /bookings/v2/bookings/{id}/confirm. `opts.site` addresses
|
|
169
|
+
* the write at that business (`wix-site-id`) instead of the active one. */
|
|
170
|
+
export declare function confirmBooking(bookingId: string, revision: string, opts?: WixCallOptions): Promise<WixUpdateBookingResponse>;
|
|
171
|
+
/** Decline a pending booking — POST /bookings/v2/bookings/{id}/decline. `opts.site` as for
|
|
172
|
+
* `confirmBooking`. */
|
|
173
|
+
export declare function declineBooking(bookingId: string, revision: string, notify?: boolean, opts?: WixCallOptions): Promise<WixUpdateBookingResponse>;
|
|
172
174
|
/** Cancel a confirmed booking as the OWNER — POST /bookings/v2/bookings/{id}/cancel.
|
|
173
175
|
* Sends `ignoreCancellationPolicy`, so it cancels outside the customer window too.
|
|
174
176
|
* NEVER call this from a member-facing screen: it would let any member cancel past
|
|
@@ -95,14 +95,14 @@ async function updateService(serviceId, service) {
|
|
|
95
95
|
});
|
|
96
96
|
return { ...res, service: decodeService(res.service) };
|
|
97
97
|
}
|
|
98
|
-
function confirmBooking(bookingId, revision) {
|
|
98
|
+
function confirmBooking(bookingId, revision, opts) {
|
|
99
99
|
if (!bookingId || !revision) throw new Error("confirmBooking: bookingId + revision required");
|
|
100
|
-
return wixCall("POST", `/bookings/v2/bookings/${bookingId}/confirm`, { revision });
|
|
100
|
+
return wixCall("POST", `/bookings/v2/bookings/${bookingId}/confirm`, { revision }, opts);
|
|
101
101
|
}
|
|
102
102
|
var OWNER_FLOW = { flowControlSettings: { ignoreCancellationPolicy: true } };
|
|
103
|
-
function declineBooking(bookingId, revision, notify = false) {
|
|
103
|
+
function declineBooking(bookingId, revision, notify = false, opts) {
|
|
104
104
|
if (!bookingId || !revision) throw new Error("declineBooking: bookingId + revision required");
|
|
105
|
-
return wixCall("POST", `/bookings/v2/bookings/${bookingId}/decline`, { revision, participantNotification: { notifyParticipants: notify }, ...OWNER_FLOW });
|
|
105
|
+
return wixCall("POST", `/bookings/v2/bookings/${bookingId}/decline`, { revision, participantNotification: { notifyParticipants: notify }, ...OWNER_FLOW }, opts);
|
|
106
106
|
}
|
|
107
107
|
function cancelBooking(bookingId, revision, notify = false) {
|
|
108
108
|
if (!bookingId || !revision) throw new Error("cancelBooking: bookingId + revision required");
|
package/dist/cli.mjs
CHANGED
|
@@ -30379,7 +30379,6 @@ function shouldRevealError(args) {
|
|
|
30379
30379
|
var EMAIL_RE, URL_HOST_RE, INTEGER_RE, NUMBER_RE;
|
|
30380
30380
|
var init_validation = __esm({
|
|
30381
30381
|
"../../core/ts/src/validation.ts"() {
|
|
30382
|
-
"use strict";
|
|
30383
30382
|
EMAIL_RE = /^[A-Za-z0-9._%+-]+@[A-Za-z0-9-]+(\.[A-Za-z0-9-]+)*\.[A-Za-z]{2,}$/;
|
|
30384
30383
|
URL_HOST_RE = /^[A-Za-z0-9-]+(\.[A-Za-z0-9-]+)*(:[0-9]+)?$/;
|
|
30385
30384
|
INTEGER_RE = /^[+-]?[0-9]+$/;
|
|
@@ -126222,14 +126221,16 @@ var init_renderNode = __esm({
|
|
|
126222
126221
|
const ph = props.placeholder ? C2(props.placeholder, "#e6e6e6") : void 0;
|
|
126223
126222
|
const imgUrl = props.url != null && isBinding(props.url) ? boundUrl : props.url;
|
|
126224
126223
|
const imgInitials = props.initials != null && isBinding(props.initials) ? boundInitials : props.initials;
|
|
126225
|
-
|
|
126226
|
-
|
|
126224
|
+
const [failedSrc, setFailedSrc] = React9.useState(null);
|
|
126225
|
+
const resolvedSrc = imgUrl && typeof imgUrl === "string" ? resolveAssetUrl(imgUrl, ctx.assetBaseUrl) : null;
|
|
126226
|
+
if (resolvedSrc && resolvedSrc !== failedSrc) {
|
|
126227
|
+
const src = resolvedSrc;
|
|
126227
126228
|
const tplTint = props.tint != null && renderingMode !== "original" ? C2(props.tint, "#000") : null;
|
|
126228
126229
|
if (tplTint != null) {
|
|
126229
126230
|
const mSize = objectFit === "cover" ? "cover" : "contain";
|
|
126230
|
-
return /* @__PURE__ */ jsx10("div", { role: "img", "aria-label": asText2(boundAlt), style: { width: w2, height: boxHeight, aspectRatio: ar2, borderRadius: r2, display: "block", flex: "none", background: tplTint, WebkitMaskImage: `url("${src}")`, maskImage: `url("${src}")`, WebkitMaskSize: mSize, maskSize: mSize, WebkitMaskRepeat: "no-repeat", maskRepeat: "no-repeat", WebkitMaskPosition: "center", maskPosition: "center", ...wrap } });
|
|
126231
|
+
return /* @__PURE__ */ jsx10("div", { role: "img", "aria-label": asText2(boundAlt), style: { width: w2, height: boxHeight, aspectRatio: ar2, borderRadius: r2, display: "block", flex: "none", background: tplTint, WebkitMaskImage: `url("${src}")`, maskImage: `url("${src}")`, WebkitMaskSize: mSize, maskSize: mSize, WebkitMaskRepeat: "no-repeat", maskRepeat: "no-repeat", WebkitMaskPosition: "center", maskPosition: "center", ...wrap }, children: /* @__PURE__ */ jsx10("img", { src, alt: "", "aria-hidden": "true", "data-mask-probe": "", onError: () => setFailedSrc(src), style: { display: "none" } }) });
|
|
126231
126232
|
}
|
|
126232
|
-
return /* @__PURE__ */ jsx10("img", { src, alt: asText2(boundAlt), style: { width: w2, height: boxHeight, aspectRatio: ar2, objectFit, borderRadius: r2, display: "block", flex: "none", background: ph, ...wrap } });
|
|
126233
|
+
return /* @__PURE__ */ jsx10("img", { src, alt: asText2(boundAlt), onError: () => setFailedSrc(src), style: { width: w2, height: boxHeight, aspectRatio: ar2, objectFit, borderRadius: r2, display: "block", flex: "none", background: ph, ...wrap } });
|
|
126233
126234
|
}
|
|
126234
126235
|
if (imgInitials && typeof imgInitials === "string") {
|
|
126235
126236
|
const alt = asText2(boundAlt).trim();
|
|
@@ -158002,25 +158003,30 @@ var init_preview_assets_generated = __esm({
|
|
|
158002
158003
|
"../../packages/serve/src/preview-assets.generated.ts"() {
|
|
158003
158004
|
init_preview_assets_format();
|
|
158004
158005
|
PREVIEW_ASSET_MANIFEST = [
|
|
158005
|
-
{ key: "assets/
|
|
158006
|
-
{ key: "assets/
|
|
158007
|
-
{ key: "assets/
|
|
158008
|
-
{ key: "assets/
|
|
158009
|
-
{ key: "assets/
|
|
158010
|
-
{ key: "
|
|
158011
|
-
{ key: "
|
|
158012
|
-
{ key: "
|
|
158013
|
-
{ key: "
|
|
158014
|
-
{ key: "fonts/
|
|
158015
|
-
{ key: "fonts/
|
|
158016
|
-
{ key: "fonts/WixMadeforDisplay-
|
|
158017
|
-
{ key: "fonts/
|
|
158018
|
-
{ key: "fonts/
|
|
158019
|
-
{ key: "fonts/
|
|
158020
|
-
{ key: "fonts/
|
|
158021
|
-
{ key: "fonts/WixMadeforText-
|
|
158022
|
-
{ key: "
|
|
158023
|
-
{ key: "
|
|
158006
|
+
{ key: "assets/DashboardHost-BwwFh1Rh.js", contentType: "application/javascript; charset=utf-8", offset: 8, length: 2916, sha256: "1b810b02f8f16f0624cc2dff760ce22a0e77eafa1c12fcf25d52a166d26771f3" },
|
|
158007
|
+
{ key: "assets/DevDrawer-BsBxQHqr.js", contentType: "application/javascript; charset=utf-8", offset: 2924, length: 16744, sha256: "42693fa13183ef56c085240b9677dceb1b989fc8046850e97384639c151b8f8a" },
|
|
158008
|
+
{ key: "assets/IdiomCompare-5INe6klB.js", contentType: "application/javascript; charset=utf-8", offset: 19668, length: 1892, sha256: "687a823bbb5b9f51c7282da9fa5d4483d1d3b31e29ca0b449043aabcd45fd401" },
|
|
158009
|
+
{ key: "assets/SchemeCompare-B09MhOJd.js", contentType: "application/javascript; charset=utf-8", offset: 21560, length: 1824, sha256: "11cb98c36223ba2569915aeee0f57861bdd2be373aa7b6836488efd0dffafc24" },
|
|
158010
|
+
{ key: "assets/index-Bsr_oPhO.js", contentType: "application/javascript; charset=utf-8", offset: 23384, length: 1307250, sha256: "cf4bfdad0d9559d0aa83b7921cfc66260618bae7d8326797839a19b548d7f9b0" },
|
|
158011
|
+
{ key: "assets/pdf-TMIc1ird.js", contentType: "application/javascript; charset=utf-8", offset: 1330634, length: 488199, sha256: "6acc4c51260700faed89a337f0704de2674842a2b85adc685b6e38ddfb64da7c" },
|
|
158012
|
+
{ key: "assets/pdf.worker.min-BQa_JDET.js", contentType: "application/javascript; charset=utf-8", offset: 1818833, length: 73, sha256: "41bcfda4f3c8c0a81c785ea87c69afc8e7d0ed8c333324aee94c273d881bb6aa" },
|
|
158013
|
+
{ key: "assets/pdf.worker.min-BmVo14Nb.mjs", contentType: "application/javascript; charset=utf-8", offset: 1818906, length: 1317034, sha256: "a33cfe728c584fdba4fcc1fd54bcdc2f9f2f13889ddbb5b2bd1d0f8cbe49b84e" },
|
|
158014
|
+
{ key: "assets/pdfDocument-v-EQVeu6.js", contentType: "application/javascript; charset=utf-8", offset: 3135940, length: 2868, sha256: "e0059d7d414f25dcf4a63da3936aa02d97448e75990edb2e247c1b118b0d69b3" },
|
|
158015
|
+
{ key: "fonts/Roboto-LICENSE.txt", contentType: "application/octet-stream", offset: 3138808, length: 4610, sha256: "994062dd7af4186a739de55dd9e151c63b6301f8e2cbafc608d35c2e87da0cd2" },
|
|
158016
|
+
{ key: "fonts/Roboto-Variable.ttf", contentType: "font/ttf", offset: 3143418, length: 488584, sha256: "d7598e12c5dbef095ff8272cfc55da0250bd07fbdecbac8a530b9b277872a134" },
|
|
158017
|
+
{ key: "fonts/WixMadeforDisplay-Bold.ttf", contentType: "font/ttf", offset: 3632002, length: 90924, sha256: "ec4c7d63772d980d6e147b2df6215fd2737e4b04cebe0cf7e11dc695fb63cdcf" },
|
|
158018
|
+
{ key: "fonts/WixMadeforDisplay-ExtraBold.ttf", contentType: "font/ttf", offset: 3722926, length: 90984, sha256: "bf4c16a2774edd38a921edf3099469866cd74c094fd596f3fa4e81f54a04dfaa" },
|
|
158019
|
+
{ key: "fonts/WixMadeforDisplay-Medium.ttf", contentType: "font/ttf", offset: 3813910, length: 90980, sha256: "368faca44fb9f7207e4af784e94750b1ee59c1098b8689e0f4a918926f244fb5" },
|
|
158020
|
+
{ key: "fonts/WixMadeforDisplay-Regular.ttf", contentType: "font/ttf", offset: 3904890, length: 90872, sha256: "97ed8f1a6772abe26e3d8af5cecfc4b02faa94497d585b0398b5053b739a70c1" },
|
|
158021
|
+
{ key: "fonts/WixMadeforDisplay-SemiBold.ttf", contentType: "font/ttf", offset: 3995762, length: 90980, sha256: "642feab8a48ddf6c7a89d7c2a7c0edfa0e6e773f671287e460e222703563191e" },
|
|
158022
|
+
{ key: "fonts/WixMadeforText-Bold.ttf", contentType: "font/ttf", offset: 4086742, length: 108636, sha256: "37c179b4fefb63ea9637322b84583a2df53aa226c150294eea1675c14b1b8e29" },
|
|
158023
|
+
{ key: "fonts/WixMadeforText-ExtraBold.ttf", contentType: "font/ttf", offset: 4195378, length: 109084, sha256: "62e2fe4718129f36ecdb0ae4de385bd6b81ecc876146447167c6c140fad699a9" },
|
|
158024
|
+
{ key: "fonts/WixMadeforText-Medium.ttf", contentType: "font/ttf", offset: 4304462, length: 109048, sha256: "4ecf270136af928612c76fe4ebade91d8156975e5ea4c0cf9225501dd1788e02" },
|
|
158025
|
+
{ key: "fonts/WixMadeforText-Regular.ttf", contentType: "font/ttf", offset: 4413510, length: 107700, sha256: "dee56f09fd3efc127c1ea95557edc74110c1460a46287da36e0af25efd341ef5" },
|
|
158026
|
+
{ key: "fonts/WixMadeforText-SemiBold.ttf", contentType: "font/ttf", offset: 4521210, length: 88108, sha256: "dced97a77624bc5f8b1ae65850360908297f4588e09feb6f22792d29dc7e765b" },
|
|
158027
|
+
{ key: "himi-sw.js", contentType: "application/javascript; charset=utf-8", offset: 4609318, length: 6748, sha256: "4a92459977d7cefa1a6a7e020c3a63509737f083b3f2773557c1a5771665811a" },
|
|
158028
|
+
{ key: "index.html", contentType: "text/html; charset=utf-8", offset: 4616066, length: 4947, sha256: "1713847734a2aa3d28352c73b80cce03da3d4cee8ed5c1ea156eeafa893231b5" },
|
|
158029
|
+
{ key: "t5-frame.html", contentType: "text/html; charset=utf-8", offset: 4621013, length: 17768, sha256: "a47dec8623a0f58def7d8785ee74d08483626e75d07c9328bfc9ecb2172c2e0d" }
|
|
158024
158030
|
];
|
|
158025
158031
|
}
|
|
158026
158032
|
});
|
|
@@ -161955,6 +161961,10 @@ function createReviewScreenRenderer() {
|
|
|
161955
161961
|
});
|
|
161956
161962
|
}
|
|
161957
161963
|
},
|
|
161964
|
+
async ready() {
|
|
161965
|
+
const { pngAvailable: pngAvailable2 } = await Promise.resolve().then(() => (init_render_descriptor(), render_descriptor_exports));
|
|
161966
|
+
return pngAvailable2();
|
|
161967
|
+
},
|
|
161958
161968
|
async close() {
|
|
161959
161969
|
if (browser) await (await browser.catch(() => void 0))?.close().catch(() => {
|
|
161960
161970
|
});
|
|
@@ -162508,11 +162518,14 @@ async function screenshotsCommand(flags, deps, out2) {
|
|
|
162508
162518
|
const contentDir2 = requireFlag(flags, "content", "screenshots");
|
|
162509
162519
|
const manifestText = readInput(deps, manifestPath, "manifest");
|
|
162510
162520
|
const manifest = parseIapManifest(manifestText, manifestPath);
|
|
162511
|
-
const facts = await appleFacts(flags, deps, out2, manifest);
|
|
162512
162521
|
const renderer = (deps.reviewScreenRenderer ?? createReviewScreenRenderer)();
|
|
162522
|
+
const dryRun = flags["dry-run"] === true;
|
|
162523
|
+
if (!dryRun && renderer.ready && !await renderer.ready()) {
|
|
162524
|
+
return out2.fail("taking screenshots needs a headless Chromium, installed once with `npx playwright install chromium` (~170MB) \u2014 nothing was rendered or written", { ok: false, code: "browser_unavailable" });
|
|
162525
|
+
}
|
|
162526
|
+
const facts = await appleFacts(flags, deps, out2, manifest);
|
|
162513
162527
|
const only = textFlag(flags, "only");
|
|
162514
162528
|
const outDir = textFlag(flags, "out-dir");
|
|
162515
|
-
const dryRun = flags["dry-run"] === true;
|
|
162516
162529
|
let report3;
|
|
162517
162530
|
try {
|
|
162518
162531
|
report3 = await takeReviewScreenshots({
|
|
@@ -179614,7 +179627,8 @@ var USAGE = `himi \u2014 the Himalaya authoring CLI (remote dev loop)
|
|
|
179614
179627
|
signed-in member sees it on a bound iPhone (Apple price, buy
|
|
179615
179628
|
button), save it at 1290\xD72796 and name it as the item's
|
|
179616
179629
|
reviewScreenshot. --profile reads Apple's price (read-only)
|
|
179617
|
-
and skips live products.
|
|
179630
|
+
and skips live products. Needs Chromium, once:
|
|
179631
|
+
npx playwright install chromium. Guide: himi docs iap-products
|
|
179618
179632
|
himi logout [--target <t>] clear the stored control token for a target
|
|
179619
179633
|
himi notify setup --content <dir> [--target wix] [--yes] [--no-push-setup]
|
|
179620
179634
|
Optional Branded/Ping setup. Prompts for site, native IDs and APNs key file.
|
|
Binary file
|
|
@@ -107,6 +107,7 @@ existing `problems` list.
|
|
|
107
107
|
| Code | Meaning |
|
|
108
108
|
|---|---|
|
|
109
109
|
| `screenshots_incomplete` | At least one selected item has no screenshot. Each one in `items` carries a `skipped` reason: no purchase screen, no Apple price yet, an existing screenshot kept without `--force`, a screen that did not show the Apple price, or a failed read of the item. The screenshots that were made are saved and named in the manifest. Exit 1. |
|
|
110
|
+
| `browser_unavailable` | The headless Chromium the screenshots are taken in is not installed. Run `npx playwright install chromium` once. Nothing was rendered or written. Exit 2. |
|
|
110
111
|
|
|
111
112
|
An invalid manifest fails with `manifest_invalid`, like the other `store iap` commands.
|
|
112
113
|
|
package/guides/iap-products.md
CHANGED
|
@@ -239,6 +239,11 @@ hosts only ever get the file's bytes, never the API key's token.
|
|
|
239
239
|
`himi store iap screenshots --manifest <file> --content <app dir> [--profile <name>]` makes each
|
|
240
240
|
product's review screenshot from the app's own purchase screen, so nobody has to take them on a phone:
|
|
241
241
|
|
|
242
|
+
**One-time setup.** The screenshots are taken in a headless Chromium on your machine, so no phone,
|
|
243
|
+
simulator or Xcode is needed. The Playwright library comes with himi; the browser is a separate
|
|
244
|
+
download (~170MB) that you run once: `npx playwright install chromium`. Without it the command stops
|
|
245
|
+
before rendering anything and says so (`browser_unavailable`). A `--dry-run` doesn't need it.
|
|
246
|
+
|
|
242
247
|
1. **It renders the screen.** For each item it opens that Wix item's detail screen: `himi_product_<id>`,
|
|
243
248
|
`himi_program_<id>` or `himi_plan_<id>`, or the plain screen given the `id` when the app has no such
|
|
244
249
|
route. For a plan it falls back to the plans list (`himi_plans`), where older apps sell plans. The
|
|
@@ -9022,15 +9022,15 @@
|
|
|
9022
9022
|
{
|
|
9023
9023
|
"name": "confirmBooking",
|
|
9024
9024
|
"kind": "function",
|
|
9025
|
-
"jsdoc": "/** Confirm a pending booking — POST /bookings/v2/bookings/{id}/confirm. */",
|
|
9026
|
-
"decl": "export function confirmBooking(bookingId: string, revision: string): Promise<WixUpdateBookingResponse>;",
|
|
9025
|
+
"jsdoc": "/** Confirm a pending booking — POST /bookings/v2/bookings/{id}/confirm. `opts.site` addresses\n * the write at that business (`wix-site-id`) instead of the active one. */",
|
|
9026
|
+
"decl": "export function confirmBooking(bookingId: string, revision: string, opts?: WixCallOptions): Promise<WixUpdateBookingResponse>;",
|
|
9027
9027
|
"http": "POST /bookings/v2/bookings/{…}/confirm"
|
|
9028
9028
|
},
|
|
9029
9029
|
{
|
|
9030
9030
|
"name": "declineBooking",
|
|
9031
9031
|
"kind": "function",
|
|
9032
|
-
"jsdoc": "/** Decline a pending booking — POST /bookings/v2/bookings/{id}/decline. */",
|
|
9033
|
-
"decl": "export function declineBooking(bookingId: string, revision: string, notify = false): Promise<WixUpdateBookingResponse>;",
|
|
9032
|
+
"jsdoc": "/** Decline a pending booking — POST /bookings/v2/bookings/{id}/decline. `opts.site` as for\n * `confirmBooking`. */",
|
|
9033
|
+
"decl": "export function declineBooking(bookingId: string, revision: string, notify = false, opts?: WixCallOptions): Promise<WixUpdateBookingResponse>;",
|
|
9034
9034
|
"http": "POST /bookings/v2/bookings/{…}/decline"
|
|
9035
9035
|
},
|
|
9036
9036
|
{
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wix/himalaya-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.1394.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "himi — the Himalaya authoring CLI. Build a Tier-5 content package on your own machine, push it to the production serve as a draft, preview it on web + Himi Player, and read worker logs back — the remote dev loop. Wraps @himalaya/serve-cli for transport.",
|
|
6
6
|
"keywords": [
|
|
@@ -71,5 +71,5 @@
|
|
|
71
71
|
"artifactId": "himalaya-cli"
|
|
72
72
|
}
|
|
73
73
|
},
|
|
74
|
-
"falconPackageHash": "
|
|
74
|
+
"falconPackageHash": "1554f1e7d7c70e78f8d9d6f9c96640b7b624bec6b4aa9ae454345280"
|
|
75
75
|
}
|
|
@@ -20,10 +20,9 @@ export function isOwnerPreviewLive(): boolean {
|
|
|
20
20
|
*
|
|
21
21
|
* `isBridgeUnavailable` cannot answer this: it reads "not live" as "preview",
|
|
22
22
|
* and on NATIVE there is no input at all, so `undefined` satisfies it. That is
|
|
23
|
-
*
|
|
24
|
-
* write
|
|
25
|
-
*
|
|
26
|
-
* their failures the same way (`"HTTP \(code): \(body)"`, JSWorker.swift;
|
|
23
|
+
* left alone for the other apps that use it to pick a demo fallback or to queue
|
|
24
|
+
* a write. Owner-lite reads ask `ownerDemoFallback` instead. It is NOT
|
|
25
|
+
* harmless for choosing COPY: native workers format their failures the same way (`"HTTP \(code): \(body)"`, JSWorker.swift;
|
|
27
26
|
* `"HTTP ${e.code}: ..."`, WebViewJSWorker.kt), so a transient `HTTP 503` on a
|
|
28
27
|
* phone would otherwise be answered with "open this app on a device" — on the
|
|
29
28
|
* device. Callers that pick a SENTENCE ask this instead.
|
|
@@ -43,11 +42,89 @@ export function isBridgeUnavailable(e: unknown): boolean {
|
|
|
43
42
|
return /HTTP (405|501|502|503)\b/.test(String((e as Error)?.message ?? e));
|
|
44
43
|
}
|
|
45
44
|
|
|
46
|
-
/**
|
|
47
|
-
*
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
45
|
+
/**
|
|
46
|
+
* Whether a failed owner-lite READ may answer with the built-in demo records.
|
|
47
|
+
*
|
|
48
|
+
* Only where a demo was asked for: a web preview host that is not live. On a phone no
|
|
49
|
+
* mode is injected, so `isBridgeUnavailable` alone is `true` for a transient Wix
|
|
50
|
+
* `HTTP 503` — and the owner was shown sample appointments, orders and sites as if
|
|
51
|
+
* they were their business. Native falls through to the screen's error state.
|
|
52
|
+
* `isBridgeUnavailable` keeps its semantics: other apps' callers depend on it.
|
|
53
|
+
*/
|
|
54
|
+
export function ownerDemoFallback(e: unknown): boolean {
|
|
55
|
+
return isOwnerPreviewHost() && !isOwnerPreviewLive() && isBridgeUnavailable(e);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* The sentence for an owner WRITE that failed because the device could not reach Wix at
|
|
60
|
+
* all (a transport failure). Nothing replays a queued write on any platform — every host's
|
|
61
|
+
* `drain` passes an empty closure — so the honest answer is that nothing was saved.
|
|
62
|
+
* Copy-as-configuration under `ownerCommon.`, which every owner screen forwards.
|
|
63
|
+
*/
|
|
64
|
+
export function ownerOfflineNotSaved(): string {
|
|
65
|
+
return copyParam(
|
|
66
|
+
"ownerCommon.offlineNotSaved",
|
|
67
|
+
"You’re offline — nothing was saved. Try again when you reconnect.",
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/** The sentence for an owner WRITE that Wix answered with an unavailable status: the
|
|
72
|
+
* device is online, so it is not "offline" — but nothing was saved all the same. */
|
|
73
|
+
/**
|
|
74
|
+
* Whether a failed WRITE may have landed on Wix anyway, so the user must not be told it
|
|
75
|
+
* was not saved: a transport failure mid-request (timeout, reset, fetch rejection), the web
|
|
76
|
+
* host's after-send envelope (`HTTP 502 {…"sent":true}`), the serve bridge's mid-request
|
|
77
|
+
* `webwix_bridge_upstream_failed`, or a gateway status (502/503/504) that can arrive after
|
|
78
|
+
* the backend already ran. Only connect-time failures (`isOfflineFailure`) and the designed
|
|
79
|
+
* 405/501 bridge refusals prove nothing happened.
|
|
80
|
+
*/
|
|
81
|
+
export function writeMayHaveLanded(e: unknown): boolean {
|
|
82
|
+
if (isOfflineFailure(e)) return false;
|
|
83
|
+
if (isTransportFailure(e)) return true;
|
|
84
|
+
const msg = String((e as Error)?.message ?? e ?? "");
|
|
85
|
+
if (/"sent"\s*:\s*true/.test(msg)) return true;
|
|
86
|
+
// The web host's own envelope WITHOUT `sent: true` failed before the request left it, and
|
|
87
|
+
// a disabled owner rung / bridge refuses by design without sending anything.
|
|
88
|
+
if (/\bwebwix_(?:direct_failed|owner_disabled|bridge_disabled)\b/.test(msg)) return false;
|
|
89
|
+
// `webwix_bridge_upstream_failed` stays ambiguous: the same code covers a lookup that failed
|
|
90
|
+
// before sending and a serve-bridge failure mid-request, and nothing in it says which.
|
|
91
|
+
return /\bwebwix_bridge_upstream_failed\b/.test(msg) || /HTTP (502|503|504)\b/.test(msg);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/** Wix answered that the record does not exist (`HTTP 404`). A detail must not fall back to
|
|
95
|
+
* its cached row then: that row is what a delete whose reply was lost leaves behind. */
|
|
96
|
+
export function isNotFound(e: unknown): boolean {
|
|
97
|
+
if (/HTTP 404\b/.test(String((e as Error)?.message ?? e ?? ""))) return true;
|
|
98
|
+
// An SDK that answers a 404 with its own "not found" error keeps the HTTP one as `cause`
|
|
99
|
+
// (the blog SDK's getPost, after its query fallback also finds nothing).
|
|
100
|
+
const cause = (e as { cause?: unknown } | null | undefined)?.cause;
|
|
101
|
+
return cause !== undefined && cause !== e && /HTTP 404\b/.test(String((cause as Error)?.message ?? cause));
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export function ownerUnavailableNotSaved(): string {
|
|
105
|
+
return copyParam(
|
|
106
|
+
"ownerCommon.unavailableNotSaved",
|
|
107
|
+
"Wix isn’t available right now — nothing was saved. Try again in a moment.",
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/** The sentence for an owner WRITE that may have landed (`writeMayHaveLanded`): it can't
|
|
112
|
+
* be called saved or not saved. */
|
|
113
|
+
export function ownerWriteUnconfirmed(): string {
|
|
114
|
+
return copyParam(
|
|
115
|
+
"ownerCommon.writeUnconfirmed",
|
|
116
|
+
"Wix didn’t confirm this, so it may or may not have been saved. Check before trying again.",
|
|
117
|
+
);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/** Display copy for a failed owner write: `ownerOfflineNotSaved` when the request never
|
|
121
|
+
* left the device, `ownerWriteUnconfirmed` when it may have landed, `ownerUnavailableNotSaved`
|
|
122
|
+
* for the designed 405/501 bridge refusals outside a live preview, else `ownerLoadError`. */
|
|
123
|
+
export function ownerWriteError(e: unknown): string {
|
|
124
|
+
if (isOfflineFailure(e)) return ownerOfflineNotSaved();
|
|
125
|
+
if (writeMayHaveLanded(e)) return ownerWriteUnconfirmed();
|
|
126
|
+
if (!isOwnerPreviewLive() && /HTTP (405|501)\b/.test(String((e as Error)?.message ?? e))) return ownerUnavailableNotSaved();
|
|
127
|
+
return ownerLoadError(e);
|
|
51
128
|
}
|
|
52
129
|
|
|
53
130
|
/** `HTTP 403: …` → "403", when the message carries a status at all. */
|
|
@@ -99,6 +176,10 @@ const TRANSPORT = [
|
|
|
99
176
|
/^Failed to connect to \S/,
|
|
100
177
|
/^Unable to resolve host\b/,
|
|
101
178
|
/\b(?:Connection refused|Network is unreachable|Software caused connection abort)\b/,
|
|
179
|
+
// OkHttp / HttpURLConnection messages a dropped connection produces mid-request, which
|
|
180
|
+
// Android's bridge forwards without the exception class.
|
|
181
|
+
/\b(?:Connection reset|ECONNRESET|ETIMEDOUT|EPIPE|Broken pipe|stream was reset)\b/,
|
|
182
|
+
/^unexpected end of stream\b/i,
|
|
102
183
|
/^(?:timeout|Read timed out|connect timed out)$/i,
|
|
103
184
|
/\bFailed to fetch\b/,
|
|
104
185
|
/\bNetworkError when attempting to fetch\b/,
|
|
@@ -113,6 +194,27 @@ export function isTransportFailure(e: unknown): boolean {
|
|
|
113
194
|
return TRANSPORT.some((re) => re.test(msg));
|
|
114
195
|
}
|
|
115
196
|
|
|
197
|
+
/** Transport failures that happen while CONNECTING — no connection, no route, no such host,
|
|
198
|
+
* connection refused — so the request provably never left the device. Every other
|
|
199
|
+
* transport failure (a timeout, a reset, a bad or truncated response, a browser's fetch
|
|
200
|
+
* rejection, which says nothing about when it failed) may come after Wix took the write. */
|
|
201
|
+
const NEVER_SENT = [
|
|
202
|
+
/\bNSURLErrorDomain Code=-10(?:09|04|03|06|20|18)\b/, // not connected / cannot connect / no host / DNS / data not allowed / roaming off
|
|
203
|
+
/\b(?:UnknownHost|Connect|NoRouteToHost)Exception\b/,
|
|
204
|
+
/^Failed to connect to \S/,
|
|
205
|
+
/^Unable to resolve host\b/,
|
|
206
|
+
/\b(?:Connection refused|Network is unreachable)\b/,
|
|
207
|
+
/\bnet::ERR_(?:INTERNET_DISCONNECTED|NAME_NOT_RESOLVED|CONNECTION_REFUSED|ADDRESS_UNREACHABLE|NETWORK_ACCESS_DENIED)\b/,
|
|
208
|
+
];
|
|
209
|
+
|
|
210
|
+
/** No HTTP answer, and the request provably never left the device: the user is offline, and
|
|
211
|
+
* a write certainly did not happen. Anything else may have landed (see `NEVER_SENT`). */
|
|
212
|
+
export function isOfflineFailure(e: unknown): boolean {
|
|
213
|
+
if (!isTransportFailure(e)) return false;
|
|
214
|
+
const msg = String((e as Error)?.message ?? e ?? "");
|
|
215
|
+
return NEVER_SENT.some((re) => re.test(msg));
|
|
216
|
+
}
|
|
217
|
+
|
|
116
218
|
/** The one sentence for a transport failure. Copy-as-configuration: the key is
|
|
117
219
|
* under `ownerCommon.`, which every owner screen (Aria included) forwards. */
|
|
118
220
|
export function ownerTransportFailureText(): string {
|
|
@@ -194,8 +296,8 @@ export function ownerPreviewUnavailable(): string {
|
|
|
194
296
|
* error says: this names the web preview when there IS one. `isBridgeUnavailable`
|
|
195
297
|
* reads "not live" as "preview", and native injects no mode at all, so the
|
|
196
298
|
* default would answer a device-side `HTTP 503` with "open this app on a device"
|
|
197
|
-
* — on the device. That predicate is deliberately left alone:
|
|
198
|
-
* write-
|
|
299
|
+
* — on the device. That predicate is deliberately left alone: other apps'
|
|
300
|
+
* demo and write-queue decisions depend on exactly it.
|
|
199
301
|
*
|
|
200
302
|
* The reductions this used to add are now in `humanWireError`, so every owner
|
|
201
303
|
* screen gets them rather than the two that happened to call this.
|
|
@@ -232,6 +334,7 @@ export function ownerDisplayError(e: unknown): string {
|
|
|
232
334
|
*/
|
|
233
335
|
export function ownerLoadError(e: unknown): string {
|
|
234
336
|
const msg = String((e as Error)?.message ?? e);
|
|
235
|
-
|
|
337
|
+
// Same host guard as `ownerDisplayError`: on a phone, "open this app on a device" is false.
|
|
338
|
+
if (isOwnerPreviewHost() && isBridgeUnavailable(e)) return ownerPreviewUnavailable();
|
|
236
339
|
return humanWireError(msg);
|
|
237
340
|
}
|
|
@@ -24,25 +24,33 @@ async function resolveMsid(): Promise<string> {
|
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
import { copyParam, copyTemplate, stashCopy } from "../_shared/himi-copy.js";
|
|
27
|
-
import { getAll, upsert, remove as dbRemove,
|
|
28
|
-
import {
|
|
27
|
+
import { getAll, upsert, remove as dbRemove, type DbEntity } from "@himalaya/local-db";
|
|
28
|
+
import { isOfflineFailure, writeMayHaveLanded } from "../_shared/owner-load-error.js";
|
|
29
29
|
|
|
30
30
|
// Offline-first (data-offline): the cart is READ-THROUGH — paint the last-synced line
|
|
31
31
|
// items from the on-device `cart` entity first (instant, works offline), then
|
|
32
|
-
// revalidate from Wix and refresh the cache.
|
|
33
|
-
//
|
|
34
|
-
//
|
|
35
|
-
//
|
|
32
|
+
// revalidate from Wix and refresh the cache.
|
|
33
|
+
// `remove` drops the line from the cache only AFTER Wix confirms it; a failed removal
|
|
34
|
+
// keeps the line on screen and says nothing was removed (no host replays a
|
|
35
|
+
// queued write, so the old "removed offline" promise was a removal that never happened).
|
|
36
|
+
// The checkout redirect path is unchanged. Every local-db call is wrapped so a build
|
|
36
37
|
// without the `local_database` grant behaves exactly as before (online-only).
|
|
37
38
|
const ENTITY = "cart";
|
|
38
39
|
async function readCachedItems(): Promise<Row[]> {
|
|
39
40
|
try { return (await getAll(ENTITY)) as unknown as Row[]; } catch { return []; }
|
|
40
41
|
}
|
|
42
|
+
/** Mirror the cart Wix returned: upsert its lines and drop any cached line it no longer has
|
|
43
|
+
* (one removed elsewhere, or a removal whose answer was lost), so the offline paint never
|
|
44
|
+
* shows a line that is gone. */
|
|
41
45
|
async function writeCachedItems(rows: Row[]): Promise<void> {
|
|
42
|
-
try {
|
|
46
|
+
try {
|
|
47
|
+
const keep = new Set(rows.map((r) => r.id));
|
|
48
|
+
for (const old of (await getAll(ENTITY)) as unknown as Row[]) if (!keep.has(old.id)) await dbRemove(ENTITY, old.id);
|
|
49
|
+
for (const r of rows) await upsert(ENTITY, r as unknown as DbEntity);
|
|
50
|
+
} catch { /* capability not granted → online-only */ }
|
|
43
51
|
}
|
|
52
|
+
|
|
44
53
|
async function cacheDrop(id: string): Promise<void> { try { await dbRemove(ENTITY, id); } catch { /* capability not granted */ } }
|
|
45
|
-
async function queueWrite(actionId: string, params: Record<string, string>): Promise<void> { try { await enqueue(actionId, params); } catch { /* capability not granted */ } }
|
|
46
54
|
|
|
47
55
|
interface Row {
|
|
48
56
|
catalogReference?: { appId: string; catalogItemId: string; options?: Record<string, unknown> };
|
|
@@ -164,6 +172,39 @@ function derive(state: State): State {
|
|
|
164
172
|
};
|
|
165
173
|
}
|
|
166
174
|
|
|
175
|
+
/** Remove one line (the trash button, and "−" at quantity 1). The cache drops it only once
|
|
176
|
+
* Wix confirms; a failure keeps it on screen and says why. */
|
|
177
|
+
/** Remove one line (the trash button, and "−" at quantity 1). The cache drops it only once
|
|
178
|
+
* Wix confirms; a failure keeps it on screen and says why. */
|
|
179
|
+
async function removeLine(state: State, id: string): Promise<State> {
|
|
180
|
+
try {
|
|
181
|
+
await removeLineItemsFromCurrentCart([id]);
|
|
182
|
+
} catch (e) {
|
|
183
|
+
// The line stays visible (and cached) until a read says otherwise.
|
|
184
|
+
if (isOfflineFailure(e)) {
|
|
185
|
+
return derive({ ...state, checkoutHint: copyParam("cart.removeOfflineFailedMessage", "You’re offline — nothing was removed. Try again when you reconnect.") });
|
|
186
|
+
}
|
|
187
|
+
// It may have landed (mid-request drop, after-send envelope, gateway 5xx): say so,
|
|
188
|
+
// rather than "could not remove".
|
|
189
|
+
if (writeMayHaveLanded(e)) {
|
|
190
|
+
return derive({ ...state, checkoutHint: copyParam("cart.removeUnconfirmedMessage", "The connection dropped, so this item may already be removed. Refresh to check.") });
|
|
191
|
+
}
|
|
192
|
+
return derive({ ...state, checkoutHint: copyParam("cart.removeFailedMessage", "Could not remove this item.") });
|
|
193
|
+
}
|
|
194
|
+
// Wix confirmed it: only now does the line leave the cache, and it stays gone even
|
|
195
|
+
// if the re-fetch below fails.
|
|
196
|
+
await cacheDrop(id);
|
|
197
|
+
const removed = copyParam("cart.itemRemovedMessage", "Item removed.");
|
|
198
|
+
try {
|
|
199
|
+
return await refresh(state, removed);
|
|
200
|
+
} catch {
|
|
201
|
+
// The totals Wix last sent still count the removed line, and the new ones did not
|
|
202
|
+
// arrive: show none rather than a wrong one.
|
|
203
|
+
const items = state.items.filter((it) => it.id !== id);
|
|
204
|
+
return derive({ ...state, status: "ready", items, subtotal: "", commerceSubtotal: "", emptyText: items.length ? "" : copyParam("cart.emptyText", "Your cart is empty."), checkoutHint: removed });
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
167
208
|
async function refresh(state: State, checkoutHint = ""): Promise<State> {
|
|
168
209
|
const cart = await getCurrentCart();
|
|
169
210
|
const items = (cart.lineItems ?? []).map(row);
|
|
@@ -240,21 +281,7 @@ const svc = defineService<State, {
|
|
|
240
281
|
remove: async (state, arg) => {
|
|
241
282
|
const id = itemId(arg);
|
|
242
283
|
if (!id) return state;
|
|
243
|
-
|
|
244
|
-
await cacheDrop(id);
|
|
245
|
-
try {
|
|
246
|
-
await removeLineItemsFromCurrentCart([id]);
|
|
247
|
-
return await refresh(state, copyParam("cart.itemRemovedMessage", "Item removed."));
|
|
248
|
-
} catch (e) {
|
|
249
|
-
if (isBridgeUnavailable(e)) {
|
|
250
|
-
// Offline / no bridge: the optimistic cache drop already shows; queue the
|
|
251
|
-
// removal to replay (WriteQueue, idempotent) when connectivity returns.
|
|
252
|
-
await queueWrite("tier5.himiStoreCart.remove", { id });
|
|
253
|
-
const items = state.items.filter((it) => it.id !== id);
|
|
254
|
-
return derive({ ...state, status: "ready", items, emptyText: items.length ? "" : copyParam("cart.emptyText", "Your cart is empty."), checkoutHint: copyParam("cart.removedOfflineMessage", "Removed offline — will sync when you reconnect.") });
|
|
255
|
-
}
|
|
256
|
-
return derive({ ...state, checkoutHint: copyParam("cart.removeFailedMessage", "Could not remove this item.") });
|
|
257
|
-
}
|
|
284
|
+
return removeLine(state, id);
|
|
258
285
|
},
|
|
259
286
|
increment: async (state, arg) => {
|
|
260
287
|
const id = itemId(arg);
|
|
@@ -272,12 +299,9 @@ const svc = defineService<State, {
|
|
|
272
299
|
const id = itemId(arg);
|
|
273
300
|
const line = state.items.find((candidate) => candidate.id === id);
|
|
274
301
|
if (!line) return state;
|
|
302
|
+
// Qty 1 − ⇒ remove the line (the control never dead-ends), with remove's handling.
|
|
303
|
+
if (line.quantity <= 1) return removeLine(state, id);
|
|
275
304
|
try {
|
|
276
|
-
if (line.quantity <= 1) {
|
|
277
|
-
// Qty 1 − ⇒ remove the line (the control never dead-ends).
|
|
278
|
-
await removeLineItemsFromCurrentCart([id]);
|
|
279
|
-
return await refresh(state, copyParam("cart.itemRemovedMessage", "Item removed."));
|
|
280
|
-
}
|
|
281
305
|
const cartId = (await getCurrentCart()).id || "";
|
|
282
306
|
await updateLineItemQuantity(cartId, id, line.quantity - 1);
|
|
283
307
|
return await refresh(state);
|