@withpotter/lib 0.13.0-next.101
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/__fixtures__/demo-content-server.json +484 -0
- package/dist/accessibility-context.d.ts +27 -0
- package/dist/accessibility-context.js +107 -0
- package/dist/accessibility-context.js.map +1 -0
- package/dist/active-workspace.d.ts +45 -0
- package/dist/active-workspace.js +34 -0
- package/dist/active-workspace.js.map +1 -0
- package/dist/admin-account-officer-api.d.ts +13 -0
- package/dist/admin-account-officer-api.js +12 -0
- package/dist/admin-account-officer-api.js.map +1 -0
- package/dist/admin-account-types.d.ts +122 -0
- package/dist/admin-account-types.js +1 -0
- package/dist/admin-account-types.js.map +1 -0
- package/dist/admin-adoption-api.d.ts +35 -0
- package/dist/admin-adoption-api.js +16 -0
- package/dist/admin-adoption-api.js.map +1 -0
- package/dist/admin-api.d.ts +1219 -0
- package/dist/admin-api.js +325 -0
- package/dist/admin-api.js.map +1 -0
- package/dist/admin-case-api.d.ts +32 -0
- package/dist/admin-case-api.js +63 -0
- package/dist/admin-case-api.js.map +1 -0
- package/dist/admin-case-types.d.ts +166 -0
- package/dist/admin-case-types.js +1 -0
- package/dist/admin-case-types.js.map +1 -0
- package/dist/admin-compliance-api.d.ts +31 -0
- package/dist/admin-compliance-api.js +20 -0
- package/dist/admin-compliance-api.js.map +1 -0
- package/dist/admin-country-api.d.ts +28 -0
- package/dist/admin-country-api.js +9 -0
- package/dist/admin-country-api.js.map +1 -0
- package/dist/admin-currency-types.d.ts +138 -0
- package/dist/admin-currency-types.js +1 -0
- package/dist/admin-currency-types.js.map +1 -0
- package/dist/admin-feedback-api.d.ts +215 -0
- package/dist/admin-feedback-api.js +63 -0
- package/dist/admin-feedback-api.js.map +1 -0
- package/dist/admin-inbox-seen.d.ts +22 -0
- package/dist/admin-inbox-seen.js +47 -0
- package/dist/admin-inbox-seen.js.map +1 -0
- package/dist/admin-ledger-api.d.ts +85 -0
- package/dist/admin-ledger-api.js +30 -0
- package/dist/admin-ledger-api.js.map +1 -0
- package/dist/admin-money-api.d.ts +127 -0
- package/dist/admin-money-api.js +125 -0
- package/dist/admin-money-api.js.map +1 -0
- package/dist/admin-newsletter-contacts-api.d.ts +70 -0
- package/dist/admin-newsletter-contacts-api.js +20 -0
- package/dist/admin-newsletter-contacts-api.js.map +1 -0
- package/dist/admin-newsletter-deliveries-api.d.ts +47 -0
- package/dist/admin-newsletter-deliveries-api.js +16 -0
- package/dist/admin-newsletter-deliveries-api.js.map +1 -0
- package/dist/admin-newsletters-api.d.ts +118 -0
- package/dist/admin-newsletters-api.js +47 -0
- package/dist/admin-newsletters-api.js.map +1 -0
- package/dist/admin-pos-api.d.ts +16 -0
- package/dist/admin-pos-api.js +35 -0
- package/dist/admin-pos-api.js.map +1 -0
- package/dist/admin-pos-query.d.ts +43 -0
- package/dist/admin-pos-query.js +55 -0
- package/dist/admin-pos-query.js.map +1 -0
- package/dist/admin-pos-types.d.ts +122 -0
- package/dist/admin-pos-types.js +1 -0
- package/dist/admin-pos-types.js.map +1 -0
- package/dist/admin-pricing-api.d.ts +88 -0
- package/dist/admin-pricing-api.js +66 -0
- package/dist/admin-pricing-api.js.map +1 -0
- package/dist/admin-readiness-api.d.ts +25 -0
- package/dist/admin-readiness-api.js +39 -0
- package/dist/admin-readiness-api.js.map +1 -0
- package/dist/admin-sales-api.d.ts +124 -0
- package/dist/admin-sales-api.js +41 -0
- package/dist/admin-sales-api.js.map +1 -0
- package/dist/admin-saved-replies-api.d.ts +35 -0
- package/dist/admin-saved-replies-api.js +70 -0
- package/dist/admin-saved-replies-api.js.map +1 -0
- package/dist/admin-service-operations-api.d.ts +142 -0
- package/dist/admin-service-operations-api.js +52 -0
- package/dist/admin-service-operations-api.js.map +1 -0
- package/dist/admin-signatures-api.d.ts +57 -0
- package/dist/admin-signatures-api.js +15 -0
- package/dist/admin-signatures-api.js.map +1 -0
- package/dist/admin-support-analytics-api.d.ts +36 -0
- package/dist/admin-support-analytics-api.js +71 -0
- package/dist/admin-support-analytics-api.js.map +1 -0
- package/dist/admin-tenant-setup-types.d.ts +85 -0
- package/dist/admin-tenant-setup-types.js +1 -0
- package/dist/admin-tenant-setup-types.js.map +1 -0
- package/dist/admin-tenants-query.d.ts +14 -0
- package/dist/admin-tenants-query.js +17 -0
- package/dist/admin-tenants-query.js.map +1 -0
- package/dist/analytics/PostHogProvider.d.ts +25 -0
- package/dist/analytics/PostHogProvider.js +44 -0
- package/dist/analytics/PostHogProvider.js.map +1 -0
- package/dist/analytics/index.d.ts +1 -0
- package/dist/analytics/index.js +11 -0
- package/dist/analytics/index.js.map +1 -0
- package/dist/analytics.d.ts +1 -0
- package/dist/analytics.js +1 -0
- package/dist/api/abandoned-cart.d.ts +18 -0
- package/dist/api/abandoned-cart.js +68 -0
- package/dist/api/abandoned-cart.js.map +1 -0
- package/dist/api/accounts.d.ts +176 -0
- package/dist/api/accounts.js +194 -0
- package/dist/api/accounts.js.map +1 -0
- package/dist/api/analytics-patterns.d.ts +18 -0
- package/dist/api/analytics-patterns.js +52 -0
- package/dist/api/analytics-patterns.js.map +1 -0
- package/dist/api/analytics.d.ts +143 -0
- package/dist/api/analytics.js +379 -0
- package/dist/api/analytics.js.map +1 -0
- package/dist/api/assignee-prefs.d.ts +7 -0
- package/dist/api/assignee-prefs.js +17 -0
- package/dist/api/assignee-prefs.js.map +1 -0
- package/dist/api/automations.d.ts +73 -0
- package/dist/api/automations.js +102 -0
- package/dist/api/automations.js.map +1 -0
- package/dist/api/behaviors.d.ts +15 -0
- package/dist/api/behaviors.js +15 -0
- package/dist/api/behaviors.js.map +1 -0
- package/dist/api/bio.d.ts +7 -0
- package/dist/api/bio.js +17 -0
- package/dist/api/bio.js.map +1 -0
- package/dist/api/booking-calendar.d.ts +14 -0
- package/dist/api/booking-calendar.js +33 -0
- package/dist/api/booking-calendar.js.map +1 -0
- package/dist/api/bookings.d.ts +199 -0
- package/dist/api/bookings.js +284 -0
- package/dist/api/bookings.js.map +1 -0
- package/dist/api/business-devices.d.ts +108 -0
- package/dist/api/business-devices.js +139 -0
- package/dist/api/business-devices.js.map +1 -0
- package/dist/api/business-locations.d.ts +26 -0
- package/dist/api/business-locations.js +39 -0
- package/dist/api/business-locations.js.map +1 -0
- package/dist/api/cache-bus.d.ts +56 -0
- package/dist/api/cache-bus.js +18 -0
- package/dist/api/cache-bus.js.map +1 -0
- package/dist/api/calendar-sync.d.ts +49 -0
- package/dist/api/calendar-sync.js +50 -0
- package/dist/api/calendar-sync.js.map +1 -0
- package/dist/api/campaign-initiatives.d.ts +115 -0
- package/dist/api/campaign-initiatives.js +42 -0
- package/dist/api/campaign-initiatives.js.map +1 -0
- package/dist/api/campaigns.d.ts +89 -0
- package/dist/api/campaigns.js +100 -0
- package/dist/api/campaigns.js.map +1 -0
- package/dist/api/capabilities.d.ts +12 -0
- package/dist/api/capabilities.js +16 -0
- package/dist/api/capabilities.js.map +1 -0
- package/dist/api/commerce.d.ts +19 -0
- package/dist/api/commerce.js +31 -0
- package/dist/api/commerce.js.map +1 -0
- package/dist/api/communications.d.ts +166 -0
- package/dist/api/communications.js +141 -0
- package/dist/api/communications.js.map +1 -0
- package/dist/api/connect.d.ts +72 -0
- package/dist/api/connect.js +50 -0
- package/dist/api/connect.js.map +1 -0
- package/dist/api/content.d.ts +146 -0
- package/dist/api/content.js +187 -0
- package/dist/api/content.js.map +1 -0
- package/dist/api/conversations.d.ts +79 -0
- package/dist/api/conversations.js +41 -0
- package/dist/api/conversations.js.map +1 -0
- package/dist/api/core.d.ts +62 -0
- package/dist/api/core.js +223 -0
- package/dist/api/core.js.map +1 -0
- package/dist/api/credentials.d.ts +65 -0
- package/dist/api/credentials.js +48 -0
- package/dist/api/credentials.js.map +1 -0
- package/dist/api/credits.d.ts +96 -0
- package/dist/api/credits.js +24 -0
- package/dist/api/credits.js.map +1 -0
- package/dist/api/crm-analytics.d.ts +10 -0
- package/dist/api/crm-analytics.js +22 -0
- package/dist/api/crm-analytics.js.map +1 -0
- package/dist/api/crm-segments.d.ts +14 -0
- package/dist/api/crm-segments.js +42 -0
- package/dist/api/crm-segments.js.map +1 -0
- package/dist/api/deliveries.d.ts +99 -0
- package/dist/api/deliveries.js +37 -0
- package/dist/api/deliveries.js.map +1 -0
- package/dist/api/demo-content.d.ts +104 -0
- package/dist/api/demo-content.js +36 -0
- package/dist/api/demo-content.js.map +1 -0
- package/dist/api/device-shifts.d.ts +56 -0
- package/dist/api/device-shifts.js +50 -0
- package/dist/api/device-shifts.js.map +1 -0
- package/dist/api/devices.d.ts +6 -0
- package/dist/api/devices.js +10 -0
- package/dist/api/devices.js.map +1 -0
- package/dist/api/digital-files.d.ts +22 -0
- package/dist/api/digital-files.js +55 -0
- package/dist/api/digital-files.js.map +1 -0
- package/dist/api/discounts.d.ts +29 -0
- package/dist/api/discounts.js +46 -0
- package/dist/api/discounts.js.map +1 -0
- package/dist/api/disputes.d.ts +47 -0
- package/dist/api/disputes.js +42 -0
- package/dist/api/disputes.js.map +1 -0
- package/dist/api/feature-locked.d.ts +11 -0
- package/dist/api/feature-locked.js +18 -0
- package/dist/api/feature-locked.js.map +1 -0
- package/dist/api/feedback-prompts.d.ts +45 -0
- package/dist/api/feedback-prompts.js +85 -0
- package/dist/api/feedback-prompts.js.map +1 -0
- package/dist/api/feedback.d.ts +254 -0
- package/dist/api/feedback.js +108 -0
- package/dist/api/feedback.js.map +1 -0
- package/dist/api/finance.d.ts +199 -0
- package/dist/api/finance.js +203 -0
- package/dist/api/finance.js.map +1 -0
- package/dist/api/gallery.d.ts +30 -0
- package/dist/api/gallery.js +48 -0
- package/dist/api/gallery.js.map +1 -0
- package/dist/api/geo.d.ts +18 -0
- package/dist/api/geo.js +19 -0
- package/dist/api/geo.js.map +1 -0
- package/dist/api/giftcards.d.ts +63 -0
- package/dist/api/giftcards.js +63 -0
- package/dist/api/giftcards.js.map +1 -0
- package/dist/api/hardware-orders.d.ts +40 -0
- package/dist/api/hardware-orders.js +37 -0
- package/dist/api/hardware-orders.js.map +1 -0
- package/dist/api/index.d.ts +71 -0
- package/dist/api/index.js +78 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/inquiries.d.ts +92 -0
- package/dist/api/inquiries.js +129 -0
- package/dist/api/inquiries.js.map +1 -0
- package/dist/api/inventory.d.ts +133 -0
- package/dist/api/inventory.js +203 -0
- package/dist/api/inventory.js.map +1 -0
- package/dist/api/invite-body.d.ts +19 -0
- package/dist/api/invite-body.js +8 -0
- package/dist/api/invite-body.js.map +1 -0
- package/dist/api/invoices.d.ts +19 -0
- package/dist/api/invoices.js +80 -0
- package/dist/api/invoices.js.map +1 -0
- package/dist/api/locations.d.ts +15 -0
- package/dist/api/locations.js +30 -0
- package/dist/api/locations.js.map +1 -0
- package/dist/api/loyalty.d.ts +68 -0
- package/dist/api/loyalty.js +112 -0
- package/dist/api/loyalty.js.map +1 -0
- package/dist/api/marketing-consent.d.ts +36 -0
- package/dist/api/marketing-consent.js +11 -0
- package/dist/api/marketing-consent.js.map +1 -0
- package/dist/api/marketing-suppressions.d.ts +81 -0
- package/dist/api/marketing-suppressions.js +65 -0
- package/dist/api/marketing-suppressions.js.map +1 -0
- package/dist/api/members.d.ts +79 -0
- package/dist/api/members.js +148 -0
- package/dist/api/members.js.map +1 -0
- package/dist/api/merchant-notifications.d.ts +27 -0
- package/dist/api/merchant-notifications.js +41 -0
- package/dist/api/merchant-notifications.js.map +1 -0
- package/dist/api/merchant-referrals.d.ts +23 -0
- package/dist/api/merchant-referrals.js +10 -0
- package/dist/api/merchant-referrals.js.map +1 -0
- package/dist/api/merchant-subscriptions.d.ts +117 -0
- package/dist/api/merchant-subscriptions.js +113 -0
- package/dist/api/merchant-subscriptions.js.map +1 -0
- package/dist/api/misc.d.ts +4 -0
- package/dist/api/misc.js +24 -0
- package/dist/api/misc.js.map +1 -0
- package/dist/api/odoo.d.ts +102 -0
- package/dist/api/odoo.js +36 -0
- package/dist/api/odoo.js.map +1 -0
- package/dist/api/onboarding.d.ts +48 -0
- package/dist/api/onboarding.js +78 -0
- package/dist/api/onboarding.js.map +1 -0
- package/dist/api/orders.d.ts +153 -0
- package/dist/api/orders.js +303 -0
- package/dist/api/orders.js.map +1 -0
- package/dist/api/organizations.d.ts +14 -0
- package/dist/api/organizations.js +19 -0
- package/dist/api/organizations.js.map +1 -0
- package/dist/api/packages.d.ts +16 -0
- package/dist/api/packages.js +25 -0
- package/dist/api/packages.js.map +1 -0
- package/dist/api/pages.d.ts +79 -0
- package/dist/api/pages.js +125 -0
- package/dist/api/pages.js.map +1 -0
- package/dist/api/payables.d.ts +34 -0
- package/dist/api/payables.js +70 -0
- package/dist/api/payables.js.map +1 -0
- package/dist/api/plan-refusal.d.ts +21 -0
- package/dist/api/plan-refusal.js +28 -0
- package/dist/api/plan-refusal.js.map +1 -0
- package/dist/api/pos.d.ts +66 -0
- package/dist/api/pos.js +115 -0
- package/dist/api/pos.js.map +1 -0
- package/dist/api/potter.d.ts +114 -0
- package/dist/api/potter.js +88 -0
- package/dist/api/potter.js.map +1 -0
- package/dist/api/push.d.ts +25 -0
- package/dist/api/push.js +23 -0
- package/dist/api/push.js.map +1 -0
- package/dist/api/referrals.d.ts +10 -0
- package/dist/api/referrals.js +16 -0
- package/dist/api/referrals.js.map +1 -0
- package/dist/api/resource-categories.d.ts +35 -0
- package/dist/api/resource-categories.js +76 -0
- package/dist/api/resource-categories.js.map +1 -0
- package/dist/api/resources.d.ts +54 -0
- package/dist/api/resources.js +92 -0
- package/dist/api/resources.js.map +1 -0
- package/dist/api/reviews.d.ts +18 -0
- package/dist/api/reviews.js +46 -0
- package/dist/api/reviews.js.map +1 -0
- package/dist/api/riders.d.ts +70 -0
- package/dist/api/riders.js +24 -0
- package/dist/api/riders.js.map +1 -0
- package/dist/api/role-permissions.d.ts +25 -0
- package/dist/api/role-permissions.js +47 -0
- package/dist/api/role-permissions.js.map +1 -0
- package/dist/api/sales-channels.d.ts +234 -0
- package/dist/api/sales-channels.js +119 -0
- package/dist/api/sales-channels.js.map +1 -0
- package/dist/api/service-missing.d.ts +10 -0
- package/dist/api/service-missing.js +19 -0
- package/dist/api/service-missing.js.map +1 -0
- package/dist/api/session-refresh.d.ts +18 -0
- package/dist/api/session-refresh.js +37 -0
- package/dist/api/session-refresh.js.map +1 -0
- package/dist/api/session-scope.d.ts +35 -0
- package/dist/api/session-scope.js +53 -0
- package/dist/api/session-scope.js.map +1 -0
- package/dist/api/settlements.d.ts +106 -0
- package/dist/api/settlements.js +114 -0
- package/dist/api/settlements.js.map +1 -0
- package/dist/api/share-links.d.ts +46 -0
- package/dist/api/share-links.js +25 -0
- package/dist/api/share-links.js.map +1 -0
- package/dist/api/shift-notes.d.ts +19 -0
- package/dist/api/shift-notes.js +13 -0
- package/dist/api/shift-notes.js.map +1 -0
- package/dist/api/shipping.d.ts +42 -0
- package/dist/api/shipping.js +53 -0
- package/dist/api/shipping.js.map +1 -0
- package/dist/api/social-sources.d.ts +58 -0
- package/dist/api/social-sources.js +23 -0
- package/dist/api/social-sources.js.map +1 -0
- package/dist/api/tabs.d.ts +14 -0
- package/dist/api/tabs.js +39 -0
- package/dist/api/tabs.js.map +1 -0
- package/dist/api/team.d.ts +112 -0
- package/dist/api/team.js +144 -0
- package/dist/api/team.js.map +1 -0
- package/dist/api/template-settings.d.ts +26 -0
- package/dist/api/template-settings.js +36 -0
- package/dist/api/template-settings.js.map +1 -0
- package/dist/api/templates.d.ts +21 -0
- package/dist/api/templates.js +25 -0
- package/dist/api/templates.js.map +1 -0
- package/dist/api/tenant-slug.d.ts +13 -0
- package/dist/api/tenant-slug.js +18 -0
- package/dist/api/tenant-slug.js.map +1 -0
- package/dist/api/tenant.d.ts +33 -0
- package/dist/api/tenant.js +51 -0
- package/dist/api/tenant.js.map +1 -0
- package/dist/api/types/analytics-attribution.d.ts +43 -0
- package/dist/api/types/analytics-attribution.js +1 -0
- package/dist/api/types/analytics-attribution.js.map +1 -0
- package/dist/api/types/analytics.d.ts +465 -0
- package/dist/api/types/analytics.js +1 -0
- package/dist/api/types/analytics.js.map +1 -0
- package/dist/api/types/auth.d.ts +206 -0
- package/dist/api/types/auth.js +7 -0
- package/dist/api/types/auth.js.map +1 -0
- package/dist/api/types/automation-flow.d.ts +199 -0
- package/dist/api/types/automation-flow.js +1 -0
- package/dist/api/types/automation-flow.js.map +1 -0
- package/dist/api/types/bookings.d.ts +226 -0
- package/dist/api/types/bookings.js +1 -0
- package/dist/api/types/bookings.js.map +1 -0
- package/dist/api/types/campaigns.d.ts +262 -0
- package/dist/api/types/campaigns.js +1 -0
- package/dist/api/types/campaigns.js.map +1 -0
- package/dist/api/types/catalog.d.ts +273 -0
- package/dist/api/types/catalog.js +1 -0
- package/dist/api/types/catalog.js.map +1 -0
- package/dist/api/types/collections.d.ts +189 -0
- package/dist/api/types/collections.js +1 -0
- package/dist/api/types/collections.js.map +1 -0
- package/dist/api/types/crm.d.ts +264 -0
- package/dist/api/types/crm.js +1 -0
- package/dist/api/types/crm.js.map +1 -0
- package/dist/api/types/customers.d.ts +269 -0
- package/dist/api/types/customers.js +1 -0
- package/dist/api/types/customers.js.map +1 -0
- package/dist/api/types/devices.d.ts +390 -0
- package/dist/api/types/devices.js +1 -0
- package/dist/api/types/devices.js.map +1 -0
- package/dist/api/types/discounts.d.ts +237 -0
- package/dist/api/types/discounts.js +1 -0
- package/dist/api/types/discounts.js.map +1 -0
- package/dist/api/types/filters.d.ts +258 -0
- package/dist/api/types/filters.js +1 -0
- package/dist/api/types/filters.js.map +1 -0
- package/dist/api/types/index.d.ts +31 -0
- package/dist/api/types/index.js +25 -0
- package/dist/api/types/index.js.map +1 -0
- package/dist/api/types/inquiries.d.ts +266 -0
- package/dist/api/types/inquiries.js +1 -0
- package/dist/api/types/inquiries.js.map +1 -0
- package/dist/api/types/locations.d.ts +208 -0
- package/dist/api/types/locations.js +1 -0
- package/dist/api/types/locations.js.map +1 -0
- package/dist/api/types/onboarding.d.ts +311 -0
- package/dist/api/types/onboarding.js +1 -0
- package/dist/api/types/onboarding.js.map +1 -0
- package/dist/api/types/operations.d.ts +136 -0
- package/dist/api/types/operations.js +1 -0
- package/dist/api/types/operations.js.map +1 -0
- package/dist/api/types/orders.d.ts +242 -0
- package/dist/api/types/orders.js +1 -0
- package/dist/api/types/orders.js.map +1 -0
- package/dist/api/types/payables.d.ts +140 -0
- package/dist/api/types/payables.js +1 -0
- package/dist/api/types/payables.js.map +1 -0
- package/dist/api/types/pos.d.ts +121 -0
- package/dist/api/types/pos.js +5 -0
- package/dist/api/types/pos.js.map +1 -0
- package/dist/api/types/record-analytics.d.ts +95 -0
- package/dist/api/types/record-analytics.js +1 -0
- package/dist/api/types/record-analytics.js.map +1 -0
- package/dist/api/types/sales-patterns.d.ts +58 -0
- package/dist/api/types/sales-patterns.js +1 -0
- package/dist/api/types/sales-patterns.js.map +1 -0
- package/dist/api/types/tabs.d.ts +210 -0
- package/dist/api/types/tabs.js +1 -0
- package/dist/api/types/tabs.js.map +1 -0
- package/dist/api/types/templates.d.ts +398 -0
- package/dist/api/types/templates.js +1 -0
- package/dist/api/types/templates.js.map +1 -0
- package/dist/api/types/waitlist.d.ts +324 -0
- package/dist/api/types/waitlist.js +1 -0
- package/dist/api/types/waitlist.js.map +1 -0
- package/dist/api/types.d.ts +1 -0
- package/dist/api/types.js +1 -0
- package/dist/api/unserved-routes.d.ts +4 -0
- package/dist/api/unserved-routes.js +15 -0
- package/dist/api/unserved-routes.js.map +1 -0
- package/dist/api/waitlist.d.ts +80 -0
- package/dist/api/waitlist.js +85 -0
- package/dist/api/waitlist.js.map +1 -0
- package/dist/api.d.ts +1 -0
- package/dist/api.js +1 -0
- package/dist/app-name.d.ts +29 -0
- package/dist/app-name.js +11 -0
- package/dist/app-name.js.map +1 -0
- package/dist/arrival.d.ts +48 -0
- package/dist/arrival.js +34 -0
- package/dist/arrival.js.map +1 -0
- package/dist/auth-context.d.ts +90 -0
- package/dist/auth-context.js +732 -0
- package/dist/auth-context.js.map +1 -0
- package/dist/auth-session.d.ts +1 -0
- package/dist/auth-session.js +25 -0
- package/dist/auth-session.js.map +1 -0
- package/dist/bank-phone.d.ts +2 -0
- package/dist/bank-phone.js +12 -0
- package/dist/bank-phone.js.map +1 -0
- package/dist/behavior-config-types.d.ts +49 -0
- package/dist/behavior-config-types.js +1 -0
- package/dist/behavior-config-types.js.map +1 -0
- package/dist/behavior-context.d.ts +15 -0
- package/dist/behavior-context.js +38 -0
- package/dist/behavior-context.js.map +1 -0
- package/dist/behavior-fields.d.ts +41 -0
- package/dist/behavior-fields.js +20 -0
- package/dist/behavior-fields.js.map +1 -0
- package/dist/blog/__fixtures__/paste-hygiene.d.ts +7 -0
- package/dist/blog/__fixtures__/paste-hygiene.js +36 -0
- package/dist/blog/__fixtures__/paste-hygiene.js.map +1 -0
- package/dist/blog/density.d.ts +65 -0
- package/dist/blog/density.js +126 -0
- package/dist/blog/density.js.map +1 -0
- package/dist/blog/paste-hygiene.d.ts +3 -0
- package/dist/blog/paste-hygiene.js +168 -0
- package/dist/blog/paste-hygiene.js.map +1 -0
- package/dist/booking-location-label.d.ts +10 -0
- package/dist/booking-location-label.js +24 -0
- package/dist/booking-location-label.js.map +1 -0
- package/dist/booking-meeting-link.d.ts +48 -0
- package/dist/booking-meeting-link.js +40 -0
- package/dist/booking-meeting-link.js.map +1 -0
- package/dist/box-channels.d.ts +22 -0
- package/dist/box-channels.js +16 -0
- package/dist/box-channels.js.map +1 -0
- package/dist/box-delivery.d.ts +10 -0
- package/dist/box-delivery.js +5 -0
- package/dist/box-delivery.js.map +1 -0
- package/dist/box-inbox.d.ts +11 -0
- package/dist/box-inbox.js +5 -0
- package/dist/box-inbox.js.map +1 -0
- package/dist/box-letting.d.ts +14 -0
- package/dist/box-letting.js +7 -0
- package/dist/box-letting.js.map +1 -0
- package/dist/box-mark-paths.d.ts +28 -0
- package/dist/box-mark-paths.js +23 -0
- package/dist/box-mark-paths.js.map +1 -0
- package/dist/box-media.d.ts +9 -0
- package/dist/box-media.js +5 -0
- package/dist/box-media.js.map +1 -0
- package/dist/box-products.d.ts +16 -0
- package/dist/box-products.js +9 -0
- package/dist/box-products.js.map +1 -0
- package/dist/box-splits.d.ts +12 -0
- package/dist/box-splits.js +5 -0
- package/dist/box-splits.js.map +1 -0
- package/dist/brand.d.ts +26 -0
- package/dist/brand.js +22 -0
- package/dist/brand.js.map +1 -0
- package/dist/business-categories.d.ts +50 -0
- package/dist/business-categories.js +378 -0
- package/dist/business-categories.js.map +1 -0
- package/dist/business-intents.d.ts +31 -0
- package/dist/business-intents.js +142 -0
- package/dist/business-intents.js.map +1 -0
- package/dist/capability-context.d.ts +63 -0
- package/dist/capability-context.js +84 -0
- package/dist/capability-context.js.map +1 -0
- package/dist/carriers.d.ts +83 -0
- package/dist/carriers.js +124 -0
- package/dist/carriers.js.map +1 -0
- package/dist/commerce-build/api.d.ts +29 -0
- package/dist/commerce-build/api.js +152 -0
- package/dist/commerce-build/api.js.map +1 -0
- package/dist/commerce-build/contracts-profile.d.ts +83 -0
- package/dist/commerce-build/contracts-profile.js +1 -0
- package/dist/commerce-build/contracts-profile.js.map +1 -0
- package/dist/commerce-build/contracts-spec.d.ts +217 -0
- package/dist/commerce-build/contracts-spec.js +1 -0
- package/dist/commerce-build/contracts-spec.js.map +1 -0
- package/dist/commerce-build/contracts.d.ts +2 -0
- package/dist/commerce-build/contracts.js +1 -0
- package/dist/commerce-build/contracts.js.map +1 -0
- package/dist/commerce-build/launch-state.d.ts +20 -0
- package/dist/commerce-build/launch-state.js +72 -0
- package/dist/commerce-build/launch-state.js.map +1 -0
- package/dist/commerce-build/profile-utils.d.ts +5 -0
- package/dist/commerce-build/profile-utils.js +14 -0
- package/dist/commerce-build/profile-utils.js.map +1 -0
- package/dist/commerce-build/setup-flow.d.ts +10 -0
- package/dist/commerce-build/setup-flow.js +24 -0
- package/dist/commerce-build/setup-flow.js.map +1 -0
- package/dist/commerce-build/setup-session.d.ts +26 -0
- package/dist/commerce-build/setup-session.js +70 -0
- package/dist/commerce-build/setup-session.js.map +1 -0
- package/dist/commerce-build/turn-streaming.d.ts +21 -0
- package/dist/commerce-build/turn-streaming.js +113 -0
- package/dist/commerce-build/turn-streaming.js.map +1 -0
- package/dist/commerce-build/workspace-components.d.ts +23 -0
- package/dist/commerce-build/workspace-components.js +66 -0
- package/dist/commerce-build/workspace-components.js.map +1 -0
- package/dist/commerce-build/workspace-config.d.ts +7 -0
- package/dist/commerce-build/workspace-config.js +74 -0
- package/dist/commerce-build/workspace-config.js.map +1 -0
- package/dist/companion/config.d.ts +31 -0
- package/dist/companion/config.js +59 -0
- package/dist/companion/config.js.map +1 -0
- package/dist/connect/catalog.d.ts +32 -0
- package/dist/connect/catalog.js +268 -0
- package/dist/connect/catalog.js.map +1 -0
- package/dist/connect/fixtures/commands.d.ts +8 -0
- package/dist/connect/fixtures/commands.js +146 -0
- package/dist/connect/fixtures/commands.js.map +1 -0
- package/dist/connect/fixtures/connections.d.ts +21 -0
- package/dist/connect/fixtures/connections.js +370 -0
- package/dist/connect/fixtures/connections.js.map +1 -0
- package/dist/connect/fixtures/identities.d.ts +10 -0
- package/dist/connect/fixtures/identities.js +61 -0
- package/dist/connect/fixtures/identities.js.map +1 -0
- package/dist/connect/fixtures/index.d.ts +11 -0
- package/dist/connect/fixtures/index.js +11 -0
- package/dist/connect/fixtures/index.js.map +1 -0
- package/dist/connect/fixtures/usage.d.ts +2 -0
- package/dist/connect/fixtures/usage.js +21 -0
- package/dist/connect/fixtures/usage.js.map +1 -0
- package/dist/connect/fixtures.d.ts +1 -0
- package/dist/connect/fixtures.js +1 -0
- package/dist/connect/from-notifications.d.ts +3 -0
- package/dist/connect/from-notifications.js +78 -0
- package/dist/connect/from-notifications.js.map +1 -0
- package/dist/connect/identity.d.ts +67 -0
- package/dist/connect/identity.js +24 -0
- package/dist/connect/identity.js.map +1 -0
- package/dist/connect/index.d.ts +13 -0
- package/dist/connect/index.js +22 -0
- package/dist/connect/index.js.map +1 -0
- package/dist/connect/next-up.d.ts +18 -0
- package/dist/connect/next-up.js +45 -0
- package/dist/connect/next-up.js.map +1 -0
- package/dist/connect/types.d.ts +354 -0
- package/dist/connect/types.js +68 -0
- package/dist/connect/types.js.map +1 -0
- package/dist/connect/use-connect.d.ts +51 -0
- package/dist/connect/use-connect.js +85 -0
- package/dist/connect/use-connect.js.map +1 -0
- package/dist/connect.d.ts +1 -0
- package/dist/connect.js +1 -0
- package/dist/converted-tag.d.ts +7 -0
- package/dist/converted-tag.js +9 -0
- package/dist/converted-tag.js.map +1 -0
- package/dist/countries.d.ts +65 -0
- package/dist/countries.js +374 -0
- package/dist/countries.js.map +1 -0
- package/dist/country-regions.d.ts +12 -0
- package/dist/country-regions.js +36 -0
- package/dist/country-regions.js.map +1 -0
- package/dist/csv.d.ts +28 -0
- package/dist/csv.js +91 -0
- package/dist/csv.js.map +1 -0
- package/dist/currency.d.ts +5 -0
- package/dist/currency.js +25 -0
- package/dist/currency.js.map +1 -0
- package/dist/customer-helpers.d.ts +30 -0
- package/dist/customer-helpers.js +66 -0
- package/dist/customer-helpers.js.map +1 -0
- package/dist/customer-stage.d.ts +125 -0
- package/dist/customer-stage.js +113 -0
- package/dist/customer-stage.js.map +1 -0
- package/dist/dashboard-destinations.d.ts +5 -0
- package/dist/dashboard-destinations.js +29 -0
- package/dist/dashboard-destinations.js.map +1 -0
- package/dist/demo-content-mock.d.ts +22 -0
- package/dist/demo-content-mock.js +70 -0
- package/dist/demo-content-mock.js.map +1 -0
- package/dist/demo-content-poller.d.ts +33 -0
- package/dist/demo-content-poller.js +80 -0
- package/dist/demo-content-poller.js.map +1 -0
- package/dist/demo-content.d.ts +43 -0
- package/dist/demo-content.js +78 -0
- package/dist/demo-content.js.map +1 -0
- package/dist/describe-activity.d.ts +44 -0
- package/dist/describe-activity.js +16 -0
- package/dist/describe-activity.js.map +1 -0
- package/dist/describe-invite.d.ts +19 -0
- package/dist/describe-invite.js +46 -0
- package/dist/describe-invite.js.map +1 -0
- package/dist/design-schema.d.ts +76 -0
- package/dist/design-schema.js +47 -0
- package/dist/design-schema.js.map +1 -0
- package/dist/destination-alias.d.ts +43 -0
- package/dist/destination-alias.js +146 -0
- package/dist/destination-alias.js.map +1 -0
- package/dist/document-numbering.d.ts +40 -0
- package/dist/document-numbering.js +48 -0
- package/dist/document-numbering.js.map +1 -0
- package/dist/document-title.d.ts +22 -0
- package/dist/document-title.js +85 -0
- package/dist/document-title.js.map +1 -0
- package/dist/editor/row-ops.d.ts +39 -0
- package/dist/editor/row-ops.js +25 -0
- package/dist/editor/row-ops.js.map +1 -0
- package/dist/editor-agent/apply-proposal.d.ts +12 -0
- package/dist/editor-agent/apply-proposal.js +44 -0
- package/dist/editor-agent/apply-proposal.js.map +1 -0
- package/dist/editor-agent/contracts.d.ts +174 -0
- package/dist/editor-agent/contracts.js +1 -0
- package/dist/editor-agent/contracts.js.map +1 -0
- package/dist/editor-agent/converse.d.ts +34 -0
- package/dist/editor-agent/converse.js +141 -0
- package/dist/editor-agent/converse.js.map +1 -0
- package/dist/editor-agent/flag.d.ts +12 -0
- package/dist/editor-agent/flag.js +19 -0
- package/dist/editor-agent/flag.js.map +1 -0
- package/dist/editor-agent/template-document.d.ts +52 -0
- package/dist/editor-agent/template-document.js +50 -0
- package/dist/editor-agent/template-document.js.map +1 -0
- package/dist/editor-agent/use-converse.d.ts +30 -0
- package/dist/editor-agent/use-converse.js +130 -0
- package/dist/editor-agent/use-converse.js.map +1 -0
- package/dist/effective-module-labels.d.ts +17 -0
- package/dist/effective-module-labels.js +14 -0
- package/dist/effective-module-labels.js.map +1 -0
- package/dist/embedded-frame.d.ts +30 -0
- package/dist/embedded-frame.js +23 -0
- package/dist/embedded-frame.js.map +1 -0
- package/dist/empty-state-copy.d.ts +27 -0
- package/dist/empty-state-copy.js +167 -0
- package/dist/empty-state-copy.js.map +1 -0
- package/dist/end-session.d.ts +23 -0
- package/dist/end-session.js +30 -0
- package/dist/end-session.js.map +1 -0
- package/dist/file-intake.d.ts +65 -0
- package/dist/file-intake.js +162 -0
- package/dist/file-intake.js.map +1 -0
- package/dist/first-run.d.ts +5 -0
- package/dist/first-run.js +13 -0
- package/dist/first-run.js.map +1 -0
- package/dist/form-answers.d.ts +57 -0
- package/dist/form-answers.js +79 -0
- package/dist/form-answers.js.map +1 -0
- package/dist/form-draft.d.ts +30 -0
- package/dist/form-draft.js +73 -0
- package/dist/form-draft.js.map +1 -0
- package/dist/format.d.ts +29 -0
- package/dist/format.js +21 -0
- package/dist/format.js.map +1 -0
- package/dist/fulfilment-nav.d.ts +79 -0
- package/dist/fulfilment-nav.js +18 -0
- package/dist/fulfilment-nav.js.map +1 -0
- package/dist/go-live-gate.d.ts +55 -0
- package/dist/go-live-gate.js +17 -0
- package/dist/go-live-gate.js.map +1 -0
- package/dist/group-activity.d.ts +37 -0
- package/dist/group-activity.js +43 -0
- package/dist/group-activity.js.map +1 -0
- package/dist/haptic.d.ts +5 -0
- package/dist/haptic.js +16 -0
- package/dist/haptic.js.map +1 -0
- package/dist/help-topics.d.ts +77 -0
- package/dist/help-topics.js +308 -0
- package/dist/help-topics.js.map +1 -0
- package/dist/icon-resolver.d.ts +45 -0
- package/dist/icon-resolver.js +40 -0
- package/dist/icon-resolver.js.map +1 -0
- package/dist/icons/commerce.d.ts +9 -0
- package/dist/icons/commerce.js +168 -0
- package/dist/icons/commerce.js.map +1 -0
- package/dist/icons/core.d.ts +9 -0
- package/dist/icons/core.js +173 -0
- package/dist/icons/core.js.map +1 -0
- package/dist/icons/making.d.ts +9 -0
- package/dist/icons/making.js +209 -0
- package/dist/icons/making.js.map +1 -0
- package/dist/icons/places.d.ts +9 -0
- package/dist/icons/places.js +232 -0
- package/dist/icons/places.js.map +1 -0
- package/dist/icons/world.d.ts +9 -0
- package/dist/icons/world.js +87 -0
- package/dist/icons/world.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/industry-configs/beauty.d.ts +2 -0
- package/dist/industry-configs/beauty.js +152 -0
- package/dist/industry-configs/beauty.js.map +1 -0
- package/dist/industry-configs/creative.d.ts +2 -0
- package/dist/industry-configs/creative.js +131 -0
- package/dist/industry-configs/creative.js.map +1 -0
- package/dist/industry-configs/default.d.ts +2 -0
- package/dist/industry-configs/default.js +77 -0
- package/dist/industry-configs/default.js.map +1 -0
- package/dist/industry-configs/education.d.ts +2 -0
- package/dist/industry-configs/education.js +137 -0
- package/dist/industry-configs/education.js.map +1 -0
- package/dist/industry-configs/events.d.ts +2 -0
- package/dist/industry-configs/events.js +118 -0
- package/dist/industry-configs/events.js.map +1 -0
- package/dist/industry-configs/fashion.d.ts +2 -0
- package/dist/industry-configs/fashion.js +128 -0
- package/dist/industry-configs/fashion.js.map +1 -0
- package/dist/industry-configs/fitness.d.ts +2 -0
- package/dist/industry-configs/fitness.js +128 -0
- package/dist/industry-configs/fitness.js.map +1 -0
- package/dist/industry-configs/food.d.ts +2 -0
- package/dist/industry-configs/food.js +138 -0
- package/dist/industry-configs/food.js.map +1 -0
- package/dist/industry-configs/hospitality.d.ts +2 -0
- package/dist/industry-configs/hospitality.js +157 -0
- package/dist/industry-configs/hospitality.js.map +1 -0
- package/dist/industry-configs/index.d.ts +25 -0
- package/dist/industry-configs/index.js +77 -0
- package/dist/industry-configs/index.js.map +1 -0
- package/dist/industry-configs/professional.d.ts +2 -0
- package/dist/industry-configs/professional.js +129 -0
- package/dist/industry-configs/professional.js.map +1 -0
- package/dist/industry-configs/realestate.d.ts +2 -0
- package/dist/industry-configs/realestate.js +146 -0
- package/dist/industry-configs/realestate.js.map +1 -0
- package/dist/industry-configs/retail.d.ts +2 -0
- package/dist/industry-configs/retail.js +108 -0
- package/dist/industry-configs/retail.js.map +1 -0
- package/dist/industry-configs/services.d.ts +2 -0
- package/dist/industry-configs/services.js +120 -0
- package/dist/industry-configs/services.js.map +1 -0
- package/dist/industry-configs/technology.d.ts +2 -0
- package/dist/industry-configs/technology.js +120 -0
- package/dist/industry-configs/technology.js.map +1 -0
- package/dist/industry-configs/types.d.ts +99 -0
- package/dist/industry-configs/types.js +1 -0
- package/dist/industry-configs/types.js.map +1 -0
- package/dist/industry-configs/wellness.d.ts +2 -0
- package/dist/industry-configs/wellness.js +112 -0
- package/dist/industry-configs/wellness.js.map +1 -0
- package/dist/industry-configs.d.ts +1 -0
- package/dist/industry-configs.js +1 -0
- package/dist/intents/analytics-labels.d.ts +70 -0
- package/dist/intents/analytics-labels.js +39 -0
- package/dist/intents/analytics-labels.js.map +1 -0
- package/dist/intents/archetype-flow.d.ts +146 -0
- package/dist/intents/archetype-flow.js +185 -0
- package/dist/intents/archetype-flow.js.map +1 -0
- package/dist/intents/booking-query-style.d.ts +32 -0
- package/dist/intents/booking-query-style.js +22 -0
- package/dist/intents/booking-query-style.js.map +1 -0
- package/dist/intents/capture-leads.config.d.ts +31 -0
- package/dist/intents/capture-leads.config.js +231 -0
- package/dist/intents/capture-leads.config.js.map +1 -0
- package/dist/intents/catalog-stock.d.ts +43 -0
- package/dist/intents/catalog-stock.js +43 -0
- package/dist/intents/catalog-stock.js.map +1 -0
- package/dist/intents/collapse-shared-nav.d.ts +95 -0
- package/dist/intents/collapse-shared-nav.js +171 -0
- package/dist/intents/collapse-shared-nav.js.map +1 -0
- package/dist/intents/default-commerce.config.d.ts +6 -0
- package/dist/intents/default-commerce.config.js +281 -0
- package/dist/intents/default-commerce.config.js.map +1 -0
- package/dist/intents/digital-products.config.d.ts +2 -0
- package/dist/intents/digital-products.config.js +239 -0
- package/dist/intents/digital-products.config.js.map +1 -0
- package/dist/intents/dine-in.config.d.ts +15 -0
- package/dist/intents/dine-in.config.js +331 -0
- package/dist/intents/dine-in.config.js.map +1 -0
- package/dist/intents/event-tickets.config.d.ts +2 -0
- package/dist/intents/event-tickets.config.js +368 -0
- package/dist/intents/event-tickets.config.js.map +1 -0
- package/dist/intents/food-orders.config.d.ts +2 -0
- package/dist/intents/food-orders.config.js +299 -0
- package/dist/intents/food-orders.config.js.map +1 -0
- package/dist/intents/icon-map.d.ts +15 -0
- package/dist/intents/icon-map.js +104 -0
- package/dist/intents/icon-map.js.map +1 -0
- package/dist/intents/index.d.ts +12 -0
- package/dist/intents/index.js +50 -0
- package/dist/intents/index.js.map +1 -0
- package/dist/intents/infer-intents.d.ts +10 -0
- package/dist/intents/infer-intents.js +23 -0
- package/dist/intents/infer-intents.js.map +1 -0
- package/dist/intents/intent-chips.d.ts +47 -0
- package/dist/intents/intent-chips.js +38 -0
- package/dist/intents/intent-chips.js.map +1 -0
- package/dist/intents/intent-nav.d.ts +95 -0
- package/dist/intents/intent-nav.js +423 -0
- package/dist/intents/intent-nav.js.map +1 -0
- package/dist/intents/intent-scope.d.ts +52 -0
- package/dist/intents/intent-scope.js +19 -0
- package/dist/intents/intent-scope.js.map +1 -0
- package/dist/intents/nav-coverage.d.ts +71 -0
- package/dist/intents/nav-coverage.js +132 -0
- package/dist/intents/nav-coverage.js.map +1 -0
- package/dist/intents/operating-shell.d.ts +45 -0
- package/dist/intents/operating-shell.js +142 -0
- package/dist/intents/operating-shell.js.map +1 -0
- package/dist/intents/order-display.d.ts +21 -0
- package/dist/intents/order-display.js +110 -0
- package/dist/intents/order-display.js.map +1 -0
- package/dist/intents/order-intent.d.ts +18 -0
- package/dist/intents/order-intent.js +14 -0
- package/dist/intents/order-intent.js.map +1 -0
- package/dist/intents/order-progress.d.ts +81 -0
- package/dist/intents/order-progress.js +91 -0
- package/dist/intents/order-progress.js.map +1 -0
- package/dist/intents/order-sections.d.ts +173 -0
- package/dist/intents/order-sections.js +188 -0
- package/dist/intents/order-sections.js.map +1 -0
- package/dist/intents/order-stats.d.ts +24 -0
- package/dist/intents/order-stats.js +16 -0
- package/dist/intents/order-stats.js.map +1 -0
- package/dist/intents/order-transitions.d.ts +19 -0
- package/dist/intents/order-transitions.js +66 -0
- package/dist/intents/order-transitions.js.map +1 -0
- package/dist/intents/product-editor-config.d.ts +23 -0
- package/dist/intents/product-editor-config.js +13 -0
- package/dist/intents/product-editor-config.js.map +1 -0
- package/dist/intents/product-intent.d.ts +38 -0
- package/dist/intents/product-intent.js +19 -0
- package/dist/intents/product-intent.js.map +1 -0
- package/dist/intents/registry.d.ts +32 -0
- package/dist/intents/registry.js +41 -0
- package/dist/intents/registry.js.map +1 -0
- package/dist/intents/rent-property.config.d.ts +2 -0
- package/dist/intents/rent-property.config.js +284 -0
- package/dist/intents/rent-property.config.js.map +1 -0
- package/dist/intents/resolve-stats.d.ts +7 -0
- package/dist/intents/resolve-stats.js +29 -0
- package/dist/intents/resolve-stats.js.map +1 -0
- package/dist/intents/resolve-tenant-intents.d.ts +11 -0
- package/dist/intents/resolve-tenant-intents.js +61 -0
- package/dist/intents/resolve-tenant-intents.js.map +1 -0
- package/dist/intents/resolvers.d.ts +52 -0
- package/dist/intents/resolvers.js +177 -0
- package/dist/intents/resolvers.js.map +1 -0
- package/dist/intents/row-identity.d.ts +62 -0
- package/dist/intents/row-identity.js +25 -0
- package/dist/intents/row-identity.js.map +1 -0
- package/dist/intents/sales-verb.d.ts +8 -0
- package/dist/intents/sales-verb.js +12 -0
- package/dist/intents/sales-verb.js.map +1 -0
- package/dist/intents/scoped-config.d.ts +12 -0
- package/dist/intents/scoped-config.js +17 -0
- package/dist/intents/scoped-config.js.map +1 -0
- package/dist/intents/screen-title.d.ts +27 -0
- package/dist/intents/screen-title.js +59 -0
- package/dist/intents/screen-title.js.map +1 -0
- package/dist/intents/section-registry.d.ts +48 -0
- package/dist/intents/section-registry.js +33 -0
- package/dist/intents/section-registry.js.map +1 -0
- package/dist/intents/sell-products.config.d.ts +2 -0
- package/dist/intents/sell-products.config.js +275 -0
- package/dist/intents/sell-products.config.js.map +1 -0
- package/dist/intents/send-invoices.config.d.ts +16 -0
- package/dist/intents/send-invoices.config.js +223 -0
- package/dist/intents/send-invoices.config.js.map +1 -0
- package/dist/intents/subscriptions.config.d.ts +2 -0
- package/dist/intents/subscriptions.config.js +260 -0
- package/dist/intents/subscriptions.config.js.map +1 -0
- package/dist/intents/take-bookings.config.d.ts +2 -0
- package/dist/intents/take-bookings.config.js +298 -0
- package/dist/intents/take-bookings.config.js.map +1 -0
- package/dist/intents/types.d.ts +246 -0
- package/dist/intents/types.js +1 -0
- package/dist/intents/types.js.map +1 -0
- package/dist/intents/use-active-intent.d.ts +27 -0
- package/dist/intents/use-active-intent.js +74 -0
- package/dist/intents/use-active-intent.js.map +1 -0
- package/dist/intents/use-destination-label.d.ts +18 -0
- package/dist/intents/use-destination-label.js +45 -0
- package/dist/intents/use-destination-label.js.map +1 -0
- package/dist/intents/use-entity-label.d.ts +32 -0
- package/dist/intents/use-entity-label.js +75 -0
- package/dist/intents/use-entity-label.js.map +1 -0
- package/dist/intents/use-intent-config.d.ts +20 -0
- package/dist/intents/use-intent-config.js +91 -0
- package/dist/intents/use-intent-config.js.map +1 -0
- package/dist/intents/use-intent-nav-rows.d.ts +26 -0
- package/dist/intents/use-intent-nav-rows.js +49 -0
- package/dist/intents/use-intent-nav-rows.js.map +1 -0
- package/dist/intents/use-resource-label.d.ts +10 -0
- package/dist/intents/use-resource-label.js +9 -0
- package/dist/intents/use-resource-label.js.map +1 -0
- package/dist/intents/use-row-noun.d.ts +19 -0
- package/dist/intents/use-row-noun.js +13 -0
- package/dist/intents/use-row-noun.js.map +1 -0
- package/dist/intents/use-screen-title.d.ts +9 -0
- package/dist/intents/use-screen-title.js +25 -0
- package/dist/intents/use-screen-title.js.map +1 -0
- package/dist/intents/what-it-adds.d.ts +70 -0
- package/dist/intents/what-it-adds.js +29 -0
- package/dist/intents/what-it-adds.js.map +1 -0
- package/dist/intents/workflow-shape.d.ts +66 -0
- package/dist/intents/workflow-shape.js +151 -0
- package/dist/intents/workflow-shape.js.map +1 -0
- package/dist/intents.d.ts +1 -0
- package/dist/intents.js +1 -0
- package/dist/invite-refusal.d.ts +37 -0
- package/dist/invite-refusal.js +26 -0
- package/dist/invite-refusal.js.map +1 -0
- package/dist/invoice-brand.d.ts +28 -0
- package/dist/invoice-brand.js +33 -0
- package/dist/invoice-brand.js.map +1 -0
- package/dist/ios-navigation-context.d.ts +11 -0
- package/dist/ios-navigation-context.js +52 -0
- package/dist/ios-navigation-context.js.map +1 -0
- package/dist/legal-links.d.ts +10 -0
- package/dist/legal-links.js +7 -0
- package/dist/legal-links.js.map +1 -0
- package/dist/letting-policy.d.ts +85 -0
- package/dist/letting-policy.js +47 -0
- package/dist/letting-policy.js.map +1 -0
- package/dist/list-page-size.d.ts +24 -0
- package/dist/list-page-size.js +5 -0
- package/dist/list-page-size.js.map +1 -0
- package/dist/live-events/sse-frames.d.ts +15 -0
- package/dist/live-events/sse-frames.js +37 -0
- package/dist/live-events/sse-frames.js.map +1 -0
- package/dist/location-options.d.ts +16 -0
- package/dist/location-options.js +94 -0
- package/dist/location-options.js.map +1 -0
- package/dist/location-scope-context.d.ts +47 -0
- package/dist/location-scope-context.js +85 -0
- package/dist/location-scope-context.js.map +1 -0
- package/dist/media-service.d.ts +97 -0
- package/dist/media-service.js +282 -0
- package/dist/media-service.js.map +1 -0
- package/dist/media-utils.d.ts +51 -0
- package/dist/media-utils.js +85 -0
- package/dist/media-utils.js.map +1 -0
- package/dist/member-presence.d.ts +40 -0
- package/dist/member-presence.js +77 -0
- package/dist/member-presence.js.map +1 -0
- package/dist/member-subscription-enrollment.d.ts +16 -0
- package/dist/member-subscription-enrollment.js +32 -0
- package/dist/member-subscription-enrollment.js.map +1 -0
- package/dist/membership-freshness.d.ts +31 -0
- package/dist/membership-freshness.js +21 -0
- package/dist/membership-freshness.js.map +1 -0
- package/dist/mobile-header-context.d.ts +32 -0
- package/dist/mobile-header-context.js +59 -0
- package/dist/mobile-header-context.js.map +1 -0
- package/dist/mobile-routes.d.ts +81 -0
- package/dist/mobile-routes.js +406 -0
- package/dist/mobile-routes.js.map +1 -0
- package/dist/mobile-tab-config.d.ts +18 -0
- package/dist/mobile-tab-config.js +43 -0
- package/dist/mobile-tab-config.js.map +1 -0
- package/dist/money-coming-soon.d.ts +16 -0
- package/dist/money-coming-soon.js +22 -0
- package/dist/money-coming-soon.js.map +1 -0
- package/dist/money-minor.d.ts +17 -0
- package/dist/money-minor.js +53 -0
- package/dist/money-minor.js.map +1 -0
- package/dist/money-visibility.d.ts +38 -0
- package/dist/money-visibility.js +13 -0
- package/dist/money-visibility.js.map +1 -0
- package/dist/motion.d.ts +160 -0
- package/dist/motion.js +130 -0
- package/dist/motion.js.map +1 -0
- package/dist/nav-pending.d.ts +42 -0
- package/dist/nav-pending.js +84 -0
- package/dist/nav-pending.js.map +1 -0
- package/dist/navigation-groups.d.ts +52 -0
- package/dist/navigation-groups.js +64 -0
- package/dist/navigation-groups.js.map +1 -0
- package/dist/onboarding-draft.d.ts +23 -0
- package/dist/onboarding-draft.js +35 -0
- package/dist/onboarding-draft.js.map +1 -0
- package/dist/operating-model/index.d.ts +4 -0
- package/dist/operating-model/index.js +13 -0
- package/dist/operating-model/index.js.map +1 -0
- package/dist/operating-model/order-display.d.ts +10 -0
- package/dist/operating-model/order-display.js +24 -0
- package/dist/operating-model/order-display.js.map +1 -0
- package/dist/operating-model/resolver.d.ts +9 -0
- package/dist/operating-model/resolver.js +110 -0
- package/dist/operating-model/resolver.js.map +1 -0
- package/dist/operating-model/types.d.ts +36 -0
- package/dist/operating-model/types.js +1 -0
- package/dist/operating-model/types.js.map +1 -0
- package/dist/operating-model/use-operating-model.d.ts +7 -0
- package/dist/operating-model/use-operating-model.js +65 -0
- package/dist/operating-model/use-operating-model.js.map +1 -0
- package/dist/operating-model.d.ts +1 -0
- package/dist/operating-model.js +1 -0
- package/dist/order-config.d.ts +30 -0
- package/dist/order-config.js +56 -0
- package/dist/order-config.js.map +1 -0
- package/dist/order-discounts.d.ts +25 -0
- package/dist/order-discounts.js +27 -0
- package/dist/order-discounts.js.map +1 -0
- package/dist/order-shipping.d.ts +33 -0
- package/dist/order-shipping.js +49 -0
- package/dist/order-shipping.js.map +1 -0
- package/dist/order-tax.d.ts +28 -0
- package/dist/order-tax.js +21 -0
- package/dist/order-tax.js.map +1 -0
- package/dist/page-intros.d.ts +78 -0
- package/dist/page-intros.js +164 -0
- package/dist/page-intros.js.map +1 -0
- package/dist/page-transition.d.ts +20 -0
- package/dist/page-transition.js +19 -0
- package/dist/page-transition.js.map +1 -0
- package/dist/pages-api-response.d.ts +8 -0
- package/dist/pages-api-response.js +18 -0
- package/dist/pages-api-response.js.map +1 -0
- package/dist/payment-method-label.d.ts +6 -0
- package/dist/payment-method-label.js +14 -0
- package/dist/payment-method-label.js.map +1 -0
- package/dist/permission-aliases.d.ts +18 -0
- package/dist/permission-aliases.js +20 -0
- package/dist/permission-aliases.js.map +1 -0
- package/dist/permission-catalog-fallback.d.ts +17 -0
- package/dist/permission-catalog-fallback.js +147 -0
- package/dist/permission-catalog-fallback.js.map +1 -0
- package/dist/permission-change.d.ts +42 -0
- package/dist/permission-change.js +33 -0
- package/dist/permission-change.js.map +1 -0
- package/dist/phone.d.ts +16 -0
- package/dist/phone.js +20 -0
- package/dist/phone.js.map +1 -0
- package/dist/plan-access.d.ts +39 -0
- package/dist/plan-access.js +57 -0
- package/dist/plan-access.js.map +1 -0
- package/dist/plan-card-api.d.ts +34 -0
- package/dist/plan-card-api.js +30 -0
- package/dist/plan-card-api.js.map +1 -0
- package/dist/plan-price.d.ts +34 -0
- package/dist/plan-price.js +57 -0
- package/dist/plan-price.js.map +1 -0
- package/dist/post-login-target.d.ts +24 -0
- package/dist/post-login-target.js +12 -0
- package/dist/post-login-target.js.map +1 -0
- package/dist/potter-mark-paths.d.ts +21 -0
- package/dist/potter-mark-paths.js +9 -0
- package/dist/potter-mark-paths.js.map +1 -0
- package/dist/pricing-plans-types.d.ts +143 -0
- package/dist/pricing-plans-types.js +1 -0
- package/dist/pricing-plans-types.js.map +1 -0
- package/dist/product-assignees.d.ts +1 -0
- package/dist/product-assignees.js +18 -0
- package/dist/product-assignees.js.map +1 -0
- package/dist/product-collection-sync.d.ts +12 -0
- package/dist/product-collection-sync.js +97 -0
- package/dist/product-collection-sync.js.map +1 -0
- package/dist/product-cost.d.ts +12 -0
- package/dist/product-cost.js +24 -0
- package/dist/product-cost.js.map +1 -0
- package/dist/product-insights-api.d.ts +38 -0
- package/dist/product-insights-api.js +51 -0
- package/dist/product-insights-api.js.map +1 -0
- package/dist/product-types.d.ts +311 -0
- package/dist/product-types.js +38 -0
- package/dist/product-types.js.map +1 -0
- package/dist/promised-day.d.ts +33 -0
- package/dist/promised-day.js +38 -0
- package/dist/promised-day.js.map +1 -0
- package/dist/proposals-api.d.ts +96 -0
- package/dist/proposals-api.js +41 -0
- package/dist/proposals-api.js.map +1 -0
- package/dist/proxy-allowlist.d.ts +15 -0
- package/dist/proxy-allowlist.js +153 -0
- package/dist/proxy-allowlist.js.map +1 -0
- package/dist/public-config-loader.d.ts +27 -0
- package/dist/public-config-loader.js +12 -0
- package/dist/public-config-loader.js.map +1 -0
- package/dist/public-config-provider.d.ts +16 -0
- package/dist/public-config-provider.js +14 -0
- package/dist/public-config-provider.js.map +1 -0
- package/dist/resolve-enabled-behaviors.d.ts +55 -0
- package/dist/resolve-enabled-behaviors.js +134 -0
- package/dist/resolve-enabled-behaviors.js.map +1 -0
- package/dist/resource-types.d.ts +198 -0
- package/dist/resource-types.js +96 -0
- package/dist/resource-types.js.map +1 -0
- package/dist/resume-screen.d.ts +31 -0
- package/dist/resume-screen.js +25 -0
- package/dist/resume-screen.js.map +1 -0
- package/dist/rider-display.d.ts +37 -0
- package/dist/rider-display.js +110 -0
- package/dist/rider-display.js.map +1 -0
- package/dist/rider-view.d.ts +37 -0
- package/dist/rider-view.js +47 -0
- package/dist/rider-view.js.map +1 -0
- package/dist/roster-label.d.ts +27 -0
- package/dist/roster-label.js +8 -0
- package/dist/roster-label.js.map +1 -0
- package/dist/route-pattern.d.ts +11 -0
- package/dist/route-pattern.js +20 -0
- package/dist/route-pattern.js.map +1 -0
- package/dist/route-permission.d.ts +60 -0
- package/dist/route-permission.js +48 -0
- package/dist/route-permission.js.map +1 -0
- package/dist/runtime-config.d.ts +33 -0
- package/dist/runtime-config.js +23 -0
- package/dist/runtime-config.js.map +1 -0
- package/dist/schema-validation.d.ts +172 -0
- package/dist/schema-validation.js +252 -0
- package/dist/schema-validation.js.map +1 -0
- package/dist/service-areas.d.ts +30 -0
- package/dist/service-areas.js +24 -0
- package/dist/service-areas.js.map +1 -0
- package/dist/service-operations-api.d.ts +78 -0
- package/dist/service-operations-api.js +37 -0
- package/dist/service-operations-api.js.map +1 -0
- package/dist/settings-relevance.d.ts +64 -0
- package/dist/settings-relevance.js +25 -0
- package/dist/settings-relevance.js.map +1 -0
- package/dist/singularise.d.ts +16 -0
- package/dist/singularise.js +37 -0
- package/dist/singularise.js.map +1 -0
- package/dist/site-address.d.ts +14 -0
- package/dist/site-address.js +28 -0
- package/dist/site-address.js.map +1 -0
- package/dist/slug.d.ts +26 -0
- package/dist/slug.js +15 -0
- package/dist/slug.js.map +1 -0
- package/dist/sound.d.ts +14 -0
- package/dist/sound.js +166 -0
- package/dist/sound.js.map +1 -0
- package/dist/staff-arrival.d.ts +3 -0
- package/dist/staff-arrival.js +11 -0
- package/dist/staff-arrival.js.map +1 -0
- package/dist/staff-home.d.ts +58 -0
- package/dist/staff-home.js +90 -0
- package/dist/staff-home.js.map +1 -0
- package/dist/staff-landing.d.ts +1 -0
- package/dist/staff-landing.js +15 -0
- package/dist/staff-landing.js.map +1 -0
- package/dist/stat-card-types.d.ts +19 -0
- package/dist/stat-card-types.js +1 -0
- package/dist/stat-card-types.js.map +1 -0
- package/dist/stock-levels.d.ts +32 -0
- package/dist/stock-levels.js +17 -0
- package/dist/stock-levels.js.map +1 -0
- package/dist/stored-token.d.ts +1 -0
- package/dist/stored-token.js +11 -0
- package/dist/stored-token.js.map +1 -0
- package/dist/storefront-url.d.ts +31 -0
- package/dist/storefront-url.js +40 -0
- package/dist/storefront-url.js.map +1 -0
- package/dist/storefront.d.ts +64 -0
- package/dist/storefront.js +51 -0
- package/dist/storefront.js.map +1 -0
- package/dist/subscription-billing-api.d.ts +115 -0
- package/dist/subscription-billing-api.js +27 -0
- package/dist/subscription-billing-api.js.map +1 -0
- package/dist/subscription-billing-model.d.ts +26 -0
- package/dist/subscription-billing-model.js +58 -0
- package/dist/subscription-billing-model.js.map +1 -0
- package/dist/support-case-subject.d.ts +10 -0
- package/dist/support-case-subject.js +13 -0
- package/dist/support-case-subject.js.map +1 -0
- package/dist/support-inbox.d.ts +6 -0
- package/dist/support-inbox.js +5 -0
- package/dist/support-inbox.js.map +1 -0
- package/dist/support.d.ts +7 -0
- package/dist/support.js +16 -0
- package/dist/support.js.map +1 -0
- package/dist/team-page.d.ts +9 -0
- package/dist/team-page.js +5 -0
- package/dist/team-page.js.map +1 -0
- package/dist/team-roles.d.ts +140 -0
- package/dist/team-roles.js +247 -0
- package/dist/team-roles.js.map +1 -0
- package/dist/team-successors.d.ts +20 -0
- package/dist/team-successors.js +13 -0
- package/dist/team-successors.js.map +1 -0
- package/dist/template-asset-url.d.ts +11 -0
- package/dist/template-asset-url.js +8 -0
- package/dist/template-asset-url.js.map +1 -0
- package/dist/template-capabilities.d.ts +2 -0
- package/dist/template-capabilities.js +71 -0
- package/dist/template-capabilities.js.map +1 -0
- package/dist/template-context.d.ts +111 -0
- package/dist/template-context.js +1278 -0
- package/dist/template-context.js.map +1 -0
- package/dist/template-filter.d.ts +29 -0
- package/dist/template-filter.js +41 -0
- package/dist/template-filter.js.map +1 -0
- package/dist/template-preview/preview-author-patch.d.ts +24 -0
- package/dist/template-preview/preview-author-patch.js +78 -0
- package/dist/template-preview/preview-author-patch.js.map +1 -0
- package/dist/template-preview/use-template-document.d.ts +38 -0
- package/dist/template-preview/use-template-document.js +45 -0
- package/dist/template-preview/use-template-document.js.map +1 -0
- package/dist/template-requirements.d.ts +38 -0
- package/dist/template-requirements.js +13 -0
- package/dist/template-requirements.js.map +1 -0
- package/dist/template-types.d.ts +317 -0
- package/dist/template-types.js +1 -0
- package/dist/template-types.js.map +1 -0
- package/dist/templates.d.ts +22 -0
- package/dist/templates.js +1 -0
- package/dist/templates.js.map +1 -0
- package/dist/theme-context.d.ts +58 -0
- package/dist/theme-context.js +283 -0
- package/dist/theme-context.js.map +1 -0
- package/dist/theme-policy.d.ts +41 -0
- package/dist/theme-policy.js +32 -0
- package/dist/theme-policy.js.map +1 -0
- package/dist/ticket-access.d.ts +20 -0
- package/dist/ticket-access.js +39 -0
- package/dist/ticket-access.js.map +1 -0
- package/dist/timeline-copy.d.ts +65 -0
- package/dist/timeline-copy.js +150 -0
- package/dist/timeline-copy.js.map +1 -0
- package/dist/url-params.d.ts +23 -0
- package/dist/url-params.js +43 -0
- package/dist/url-params.js.map +1 -0
- package/dist/use-behaviors.d.ts +13 -0
- package/dist/use-behaviors.js +41 -0
- package/dist/use-behaviors.js.map +1 -0
- package/dist/use-business-locations.d.ts +35 -0
- package/dist/use-business-locations.js +71 -0
- package/dist/use-business-locations.js.map +1 -0
- package/dist/use-currency.d.ts +12 -0
- package/dist/use-currency.js +16 -0
- package/dist/use-currency.js.map +1 -0
- package/dist/use-empty-state-copy.d.ts +12 -0
- package/dist/use-empty-state-copy.js +13 -0
- package/dist/use-empty-state-copy.js.map +1 -0
- package/dist/use-geo-cities.d.ts +1 -0
- package/dist/use-geo-cities.js +42 -0
- package/dist/use-geo-cities.js.map +1 -0
- package/dist/use-has-hardware.d.ts +13 -0
- package/dist/use-has-hardware.js +14 -0
- package/dist/use-has-hardware.js.map +1 -0
- package/dist/use-industry-key.d.ts +10 -0
- package/dist/use-industry-key.js +16 -0
- package/dist/use-industry-key.js.map +1 -0
- package/dist/use-item-links.d.ts +20 -0
- package/dist/use-item-links.js +30 -0
- package/dist/use-item-links.js.map +1 -0
- package/dist/use-job-roles.d.ts +21 -0
- package/dist/use-job-roles.js +76 -0
- package/dist/use-job-roles.js.map +1 -0
- package/dist/use-merchant-plan.d.ts +36 -0
- package/dist/use-merchant-plan.js +78 -0
- package/dist/use-merchant-plan.js.map +1 -0
- package/dist/use-module-label.d.ts +12 -0
- package/dist/use-module-label.js +13 -0
- package/dist/use-module-label.js.map +1 -0
- package/dist/use-money-visibility.d.ts +14 -0
- package/dist/use-money-visibility.js +13 -0
- package/dist/use-money-visibility.js.map +1 -0
- package/dist/use-nav-groups.d.ts +27 -0
- package/dist/use-nav-groups.js +141 -0
- package/dist/use-nav-groups.js.map +1 -0
- package/dist/use-pathname.d.ts +15 -0
- package/dist/use-pathname.js +29 -0
- package/dist/use-pathname.js.map +1 -0
- package/dist/use-permissions.d.ts +43 -0
- package/dist/use-permissions.js +158 -0
- package/dist/use-permissions.js.map +1 -0
- package/dist/use-platform-modules.d.ts +49 -0
- package/dist/use-platform-modules.js +416 -0
- package/dist/use-platform-modules.js.map +1 -0
- package/dist/use-staff-home.d.ts +9 -0
- package/dist/use-staff-home.js +24 -0
- package/dist/use-staff-home.js.map +1 -0
- package/dist/use-workspace-invite.d.ts +37 -0
- package/dist/use-workspace-invite.js +69 -0
- package/dist/use-workspace-invite.js.map +1 -0
- package/dist/utils.d.ts +53 -0
- package/dist/utils.js +161 -0
- package/dist/utils.js.map +1 -0
- package/dist/wallet-format.d.ts +8 -0
- package/dist/wallet-format.js +36 -0
- package/dist/wallet-format.js.map +1 -0
- package/dist/wallet-settlement.d.ts +14 -0
- package/dist/wallet-settlement.js +5 -0
- package/dist/wallet-settlement.js.map +1 -0
- package/dist/web-url.d.ts +1 -0
- package/dist/web-url.js +50 -0
- package/dist/web-url.js.map +1 -0
- package/dist/whats-new.d.ts +59 -0
- package/dist/whats-new.js +77 -0
- package/dist/whats-new.js.map +1 -0
- package/dist/workspace-recents.d.ts +30 -0
- package/dist/workspace-recents.js +37 -0
- package/dist/workspace-recents.js.map +1 -0
- package/dist/workspace-slug.d.ts +1 -0
- package/dist/workspace-slug.js +15 -0
- package/dist/workspace-slug.js.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { apiFetch } from "./core";
|
|
2
|
+
const businessLocationsApi = {
|
|
3
|
+
list: (tenantSlug, opts = {}) => apiFetch(
|
|
4
|
+
opts.includeArchived ? "/business-locations?includeArchived=true" : "/business-locations",
|
|
5
|
+
{ tenantSlug }
|
|
6
|
+
),
|
|
7
|
+
create: (tenantSlug, data) => apiFetch("/business-locations", {
|
|
8
|
+
method: "POST",
|
|
9
|
+
tenantSlug,
|
|
10
|
+
body: JSON.stringify(data)
|
|
11
|
+
}),
|
|
12
|
+
update: (tenantSlug, id, data) => apiFetch(`/business-locations/${id}`, {
|
|
13
|
+
method: "PATCH",
|
|
14
|
+
tenantSlug,
|
|
15
|
+
body: JSON.stringify(data)
|
|
16
|
+
}),
|
|
17
|
+
/**
|
|
18
|
+
* Orders and revenue per branch over the last `days`, or all-time when
|
|
19
|
+
* omitted. Order-sourced rather than analytics-sourced on purpose: analytics
|
|
20
|
+
* is session-keyed and would miss every in-person sale, which on a business
|
|
21
|
+
* with a counter is most of them.
|
|
22
|
+
*
|
|
23
|
+
* Locations that sold nothing come back with `orders: 0` — a quiet branch is
|
|
24
|
+
* the finding, so it must not be filtered out server-side.
|
|
25
|
+
*/
|
|
26
|
+
performance: (tenantSlug, days) => apiFetch(
|
|
27
|
+
`/business-locations/performance${days ? `?days=${days}` : ""}`,
|
|
28
|
+
{ tenantSlug }
|
|
29
|
+
),
|
|
30
|
+
/** Closes the location. Archived, not deleted — its history has to survive. */
|
|
31
|
+
archive: (tenantSlug, id) => apiFetch(`/business-locations/${id}`, {
|
|
32
|
+
method: "DELETE",
|
|
33
|
+
tenantSlug
|
|
34
|
+
})
|
|
35
|
+
};
|
|
36
|
+
export {
|
|
37
|
+
businessLocationsApi
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=business-locations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/api/business-locations.ts"],"sourcesContent":["import { apiFetch } from './core';\nimport type {\n BusinessLocation,\n CreateBusinessLocationData,\n UpdateBusinessLocationData,\n LocationPerformance,\n} from './types';\n\n/**\n * Physical places the business operates from.\n *\n * Not to be confused with `locationsApi`, which is the served-cities\n * footprint behind Settings → Service areas.\n */\nexport const businessLocationsApi = {\n list: (tenantSlug: string, opts: { includeArchived?: boolean } = {}) =>\n apiFetch<BusinessLocation[]>(\n opts.includeArchived\n ? '/business-locations?includeArchived=true'\n : '/business-locations',\n { tenantSlug },\n ),\n\n create: (tenantSlug: string, data: CreateBusinessLocationData) =>\n apiFetch<BusinessLocation>('/business-locations', {\n method: 'POST',\n tenantSlug,\n body: JSON.stringify(data),\n }),\n\n update: (tenantSlug: string, id: string, data: UpdateBusinessLocationData) =>\n apiFetch<BusinessLocation>(`/business-locations/${id}`, {\n method: 'PATCH',\n tenantSlug,\n body: JSON.stringify(data),\n }),\n\n /**\n * Orders and revenue per branch over the last `days`, or all-time when\n * omitted. Order-sourced rather than analytics-sourced on purpose: analytics\n * is session-keyed and would miss every in-person sale, which on a business\n * with a counter is most of them.\n *\n * Locations that sold nothing come back with `orders: 0` — a quiet branch is\n * the finding, so it must not be filtered out server-side.\n */\n performance: (tenantSlug: string, days?: number) =>\n apiFetch<LocationPerformance[]>(\n `/business-locations/performance${days ? `?days=${days}` : ''}`,\n { tenantSlug },\n ),\n\n /** Closes the location. Archived, not deleted — its history has to survive. */\n archive: (tenantSlug: string, id: string) =>\n apiFetch<void>(`/business-locations/${id}`, {\n method: 'DELETE',\n tenantSlug,\n }),\n};\n"],"mappings":"AAAA,SAAS,gBAAgB;AAclB,MAAM,uBAAuB;AAAA,EAClC,MAAM,CAAC,YAAoB,OAAsC,CAAC,MAChE;AAAA,IACE,KAAK,kBACD,6CACA;AAAA,IACJ,EAAE,WAAW;AAAA,EACf;AAAA,EAEF,QAAQ,CAAC,YAAoB,SAC3B,SAA2B,uBAAuB;AAAA,IAChD,QAAQ;AAAA,IACR;AAAA,IACA,MAAM,KAAK,UAAU,IAAI;AAAA,EAC3B,CAAC;AAAA,EAEH,QAAQ,CAAC,YAAoB,IAAY,SACvC,SAA2B,uBAAuB,EAAE,IAAI;AAAA,IACtD,QAAQ;AAAA,IACR;AAAA,IACA,MAAM,KAAK,UAAU,IAAI;AAAA,EAC3B,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWH,aAAa,CAAC,YAAoB,SAChC;AAAA,IACE,kCAAkC,OAAO,SAAS,IAAI,KAAK,EAAE;AAAA,IAC7D,EAAE,WAAW;AAAA,EACf;AAAA;AAAA,EAGF,SAAS,CAAC,YAAoB,OAC5B,SAAe,uBAAuB,EAAE,IAAI;AAAA,IAC1C,QAAQ;AAAA,IACR;AAAA,EACF,CAAC;AACL;","names":[]}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The seam between "something was written" and "the screen is now wrong".
|
|
3
|
+
*
|
|
4
|
+
* ────────────────────────────────────────────────────────────────────────────
|
|
5
|
+
* THE BUG THIS EXISTS TO END.
|
|
6
|
+
*
|
|
7
|
+
* 102 files read through `useApiQuery`. NINE ever called `invalidateQueries`.
|
|
8
|
+
* So the overwhelming majority of writes in this product told the cache
|
|
9
|
+
* nothing: create a booking and walk to the bookings list, and the list served
|
|
10
|
+
* a snapshot taken before the booking existed — for the full `staleTime`, and
|
|
11
|
+
* longer if the component never unmounted, because `refetchOnWindowFocus` was
|
|
12
|
+
* off too. John, 2026-08-23: *"creating booking, waitlist and other things take
|
|
13
|
+
* so much time to load when we create them, its not realtime why is this
|
|
14
|
+
* possible"*.
|
|
15
|
+
*
|
|
16
|
+
* It is possible because remembering to invalidate is a per-call-site
|
|
17
|
+
* discipline, and a per-call-site discipline over a hundred surfaces is not a
|
|
18
|
+
* discipline, it is a coin toss. The nine that did it were the nine somebody
|
|
19
|
+
* happened to be looking at.
|
|
20
|
+
*
|
|
21
|
+
* ────────────────────────────────────────────────────────────────────────────
|
|
22
|
+
* WHY IT LIVES HERE AND NOT IN A HOOK.
|
|
23
|
+
*
|
|
24
|
+
* `apiFetch` already computes the request method — it has to, for the CSRF
|
|
25
|
+
* header. That makes it the one place in the app that knows a write happened,
|
|
26
|
+
* whoever issued it and whatever they did with the result. A hook can only
|
|
27
|
+
* cover the call sites that remember to use it, which is the failure mode
|
|
28
|
+
* again with extra steps.
|
|
29
|
+
*
|
|
30
|
+
* The module holds a callback rather than the QueryClient itself: `core.ts` is
|
|
31
|
+
* plain TypeScript with no React in it and it stays that way. `Providers`
|
|
32
|
+
* registers the invalidator on mount, and until it does this is inert — which
|
|
33
|
+
* is what makes the server render and the tests unaffected.
|
|
34
|
+
*
|
|
35
|
+
* ────────────────────────────────────────────────────────────────────────────
|
|
36
|
+
* COALESCED, because one merchant action is often several writes. Saving a
|
|
37
|
+
* product can PATCH the product, POST its collections and PUT its stock in the
|
|
38
|
+
* same breath; three invalidations would mean three rounds of refetching the
|
|
39
|
+
* same lists. They collapse into one on the next microtask.
|
|
40
|
+
*/
|
|
41
|
+
type WriteListener = () => void;
|
|
42
|
+
/**
|
|
43
|
+
* Register the thing that refreshes data after a write. Called once, by
|
|
44
|
+
* `Providers`. Passing `null` unregisters, which only matters in tests.
|
|
45
|
+
*/
|
|
46
|
+
export declare function setWriteListener(fn: WriteListener | null): void;
|
|
47
|
+
/**
|
|
48
|
+
* Announce that a write succeeded.
|
|
49
|
+
*
|
|
50
|
+
* `queueMicrotask` rather than a timer: the refresh should happen before the
|
|
51
|
+
* browser paints the next frame, so a merchant never sees the old list even
|
|
52
|
+
* for a moment — but after the current call stack, so a burst of writes from
|
|
53
|
+
* one handler is one refresh.
|
|
54
|
+
*/
|
|
55
|
+
export declare function notifyWrite(): void;
|
|
56
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
let listener = null;
|
|
2
|
+
let queued = false;
|
|
3
|
+
function setWriteListener(fn) {
|
|
4
|
+
listener = fn;
|
|
5
|
+
}
|
|
6
|
+
function notifyWrite() {
|
|
7
|
+
if (!listener || queued) return;
|
|
8
|
+
queued = true;
|
|
9
|
+
queueMicrotask(() => {
|
|
10
|
+
queued = false;
|
|
11
|
+
listener?.();
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
export {
|
|
15
|
+
notifyWrite,
|
|
16
|
+
setWriteListener
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=cache-bus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/api/cache-bus.ts"],"sourcesContent":["/**\n * The seam between \"something was written\" and \"the screen is now wrong\".\n *\n * ────────────────────────────────────────────────────────────────────────────\n * THE BUG THIS EXISTS TO END.\n *\n * 102 files read through `useApiQuery`. NINE ever called `invalidateQueries`.\n * So the overwhelming majority of writes in this product told the cache\n * nothing: create a booking and walk to the bookings list, and the list served\n * a snapshot taken before the booking existed — for the full `staleTime`, and\n * longer if the component never unmounted, because `refetchOnWindowFocus` was\n * off too. John, 2026-08-23: *\"creating booking, waitlist and other things take\n * so much time to load when we create them, its not realtime why is this\n * possible\"*.\n *\n * It is possible because remembering to invalidate is a per-call-site\n * discipline, and a per-call-site discipline over a hundred surfaces is not a\n * discipline, it is a coin toss. The nine that did it were the nine somebody\n * happened to be looking at.\n *\n * ────────────────────────────────────────────────────────────────────────────\n * WHY IT LIVES HERE AND NOT IN A HOOK.\n *\n * `apiFetch` already computes the request method — it has to, for the CSRF\n * header. That makes it the one place in the app that knows a write happened,\n * whoever issued it and whatever they did with the result. A hook can only\n * cover the call sites that remember to use it, which is the failure mode\n * again with extra steps.\n *\n * The module holds a callback rather than the QueryClient itself: `core.ts` is\n * plain TypeScript with no React in it and it stays that way. `Providers`\n * registers the invalidator on mount, and until it does this is inert — which\n * is what makes the server render and the tests unaffected.\n *\n * ────────────────────────────────────────────────────────────────────────────\n * COALESCED, because one merchant action is often several writes. Saving a\n * product can PATCH the product, POST its collections and PUT its stock in the\n * same breath; three invalidations would mean three rounds of refetching the\n * same lists. They collapse into one on the next microtask.\n */\n\ntype WriteListener = () => void;\n\nlet listener: WriteListener | null = null;\nlet queued = false;\n\n/**\n * Register the thing that refreshes data after a write. Called once, by\n * `Providers`. Passing `null` unregisters, which only matters in tests.\n */\nexport function setWriteListener(fn: WriteListener | null): void {\n listener = fn;\n}\n\n/**\n * Announce that a write succeeded.\n *\n * `queueMicrotask` rather than a timer: the refresh should happen before the\n * browser paints the next frame, so a merchant never sees the old list even\n * for a moment — but after the current call stack, so a burst of writes from\n * one handler is one refresh.\n */\nexport function notifyWrite(): void {\n if (!listener || queued) return;\n queued = true;\n queueMicrotask(() => {\n queued = false;\n listener?.();\n });\n}\n"],"mappings":"AA2CA,IAAI,WAAiC;AACrC,IAAI,SAAS;AAMN,SAAS,iBAAiB,IAAgC;AAC/D,aAAW;AACb;AAUO,SAAS,cAAoB;AAClC,MAAI,CAAC,YAAY,OAAQ;AACzB,WAAS;AACT,iBAAe,MAAM;AACnB,aAAS;AACT,eAAW;AAAA,EACb,CAAC;AACH;","names":[]}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { CalendarConnectionItem } from './types';
|
|
2
|
+
/** What came back from reading a channel's calendar. */
|
|
3
|
+
export interface ICalImportResult {
|
|
4
|
+
connectionId: string;
|
|
5
|
+
eventsFound: number;
|
|
6
|
+
created: number;
|
|
7
|
+
updated: number;
|
|
8
|
+
removed: number;
|
|
9
|
+
}
|
|
10
|
+
/** How the connected calendars are doing. */
|
|
11
|
+
export interface CalendarSyncStats {
|
|
12
|
+
totalConnections: number;
|
|
13
|
+
connectedCount: number;
|
|
14
|
+
errorCount: number;
|
|
15
|
+
totalSyncedEvents: number;
|
|
16
|
+
providerCounts: Record<string, number>;
|
|
17
|
+
}
|
|
18
|
+
export declare const calendarSyncApi: {
|
|
19
|
+
getStats: (tenantSlug: string) => Promise<CalendarSyncStats>;
|
|
20
|
+
getOAuthUrl: (tenantSlug: string, provider: string) => Promise<{
|
|
21
|
+
url: string;
|
|
22
|
+
}>;
|
|
23
|
+
listConnections: (tenantSlug: string) => Promise<CalendarConnectionItem[]>;
|
|
24
|
+
getConnection: (tenantSlug: string, id: string) => Promise<CalendarConnectionItem>;
|
|
25
|
+
triggerSync: (tenantSlug: string, id: string) => Promise<{
|
|
26
|
+
success: boolean;
|
|
27
|
+
eventsSynced: number;
|
|
28
|
+
message: string;
|
|
29
|
+
}>;
|
|
30
|
+
/**
|
|
31
|
+
* Subscribe to a channel's exported calendar so its bookings hold the
|
|
32
|
+
* property here too. Scoped to one listing: a feed is per listing, and left
|
|
33
|
+
* unscoped one flat's Airbnb calendar would black out every other property.
|
|
34
|
+
*
|
|
35
|
+
* Imports immediately, so a wrong or private link fails now rather than on
|
|
36
|
+
* the day two guests turn up for the same flat.
|
|
37
|
+
*/
|
|
38
|
+
subscribeToFeed: (tenantSlug: string, data: {
|
|
39
|
+
feedUrl: string;
|
|
40
|
+
name: string;
|
|
41
|
+
propertyId: string;
|
|
42
|
+
}) => Promise<ICalImportResult>;
|
|
43
|
+
/** Re-read a subscribed feed now. */
|
|
44
|
+
syncFeed: (tenantSlug: string, connectionId: string) => Promise<ICalImportResult>;
|
|
45
|
+
deleteConnection: (tenantSlug: string, id: string) => Promise<void>;
|
|
46
|
+
disconnectConnection: (tenantSlug: string, id: string) => Promise<{
|
|
47
|
+
success: boolean;
|
|
48
|
+
}>;
|
|
49
|
+
};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { apiFetch } from "./core";
|
|
2
|
+
const calendarSyncApi = {
|
|
3
|
+
getStats: (tenantSlug) => apiFetch("/calendar-sync/stats", { tenantSlug }),
|
|
4
|
+
getOAuthUrl: (tenantSlug, provider) => apiFetch(`/calendar-sync/oauth/${provider}/url`, {
|
|
5
|
+
tenantSlug
|
|
6
|
+
}),
|
|
7
|
+
listConnections: (tenantSlug) => apiFetch("/calendar-sync/connections", {
|
|
8
|
+
tenantSlug
|
|
9
|
+
}),
|
|
10
|
+
getConnection: (tenantSlug, id) => apiFetch(`/calendar-sync/connections/${id}`, {
|
|
11
|
+
tenantSlug
|
|
12
|
+
}),
|
|
13
|
+
triggerSync: (tenantSlug, id) => apiFetch(
|
|
14
|
+
`/calendar-sync/connections/${id}/sync`,
|
|
15
|
+
{ method: "POST", tenantSlug }
|
|
16
|
+
),
|
|
17
|
+
/**
|
|
18
|
+
* Subscribe to a channel's exported calendar so its bookings hold the
|
|
19
|
+
* property here too. Scoped to one listing: a feed is per listing, and left
|
|
20
|
+
* unscoped one flat's Airbnb calendar would black out every other property.
|
|
21
|
+
*
|
|
22
|
+
* Imports immediately, so a wrong or private link fails now rather than on
|
|
23
|
+
* the day two guests turn up for the same flat.
|
|
24
|
+
*/
|
|
25
|
+
subscribeToFeed: (tenantSlug, data) => apiFetch(`/bookings/calendar/ical/subscribe`, {
|
|
26
|
+
method: "POST",
|
|
27
|
+
tenantSlug,
|
|
28
|
+
body: JSON.stringify(data)
|
|
29
|
+
}),
|
|
30
|
+
/** Re-read a subscribed feed now. */
|
|
31
|
+
syncFeed: (tenantSlug, connectionId) => apiFetch(`/bookings/calendar/ical/${connectionId}/sync`, {
|
|
32
|
+
method: "POST",
|
|
33
|
+
tenantSlug
|
|
34
|
+
}),
|
|
35
|
+
deleteConnection: (tenantSlug, id) => apiFetch(`/calendar-sync/connections/${id}`, {
|
|
36
|
+
method: "DELETE",
|
|
37
|
+
tenantSlug
|
|
38
|
+
}),
|
|
39
|
+
disconnectConnection: (tenantSlug, id) => apiFetch(
|
|
40
|
+
`/calendar-sync/connections/${id}/disconnect`,
|
|
41
|
+
{
|
|
42
|
+
method: "POST",
|
|
43
|
+
tenantSlug
|
|
44
|
+
}
|
|
45
|
+
)
|
|
46
|
+
};
|
|
47
|
+
export {
|
|
48
|
+
calendarSyncApi
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=calendar-sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/api/calendar-sync.ts"],"sourcesContent":["import { apiFetch } from './core';\nimport type { CalendarConnectionItem } from './types';\n\n/** What came back from reading a channel's calendar. */\nexport interface ICalImportResult {\n connectionId: string;\n eventsFound: number;\n created: number;\n updated: number;\n removed: number;\n}\n\n/** How the connected calendars are doing. */\nexport interface CalendarSyncStats {\n totalConnections: number;\n connectedCount: number;\n errorCount: number;\n totalSyncedEvents: number;\n providerCounts: Record<string, number>;\n}\n\nexport const calendarSyncApi = {\n getStats: (tenantSlug: string) =>\n apiFetch<CalendarSyncStats>('/calendar-sync/stats', { tenantSlug }),\n\n getOAuthUrl: (tenantSlug: string, provider: string) =>\n apiFetch<{ url: string }>(`/calendar-sync/oauth/${provider}/url`, {\n tenantSlug,\n }),\n\n listConnections: (tenantSlug: string) =>\n apiFetch<CalendarConnectionItem[]>('/calendar-sync/connections', {\n tenantSlug,\n }),\n\n getConnection: (tenantSlug: string, id: string) =>\n apiFetch<CalendarConnectionItem>(`/calendar-sync/connections/${id}`, {\n tenantSlug,\n }),\n\n triggerSync: (tenantSlug: string, id: string) =>\n apiFetch<{ success: boolean; eventsSynced: number; message: string }>(\n `/calendar-sync/connections/${id}/sync`,\n { method: 'POST', tenantSlug },\n ),\n\n /**\n * Subscribe to a channel's exported calendar so its bookings hold the\n * property here too. Scoped to one listing: a feed is per listing, and left\n * unscoped one flat's Airbnb calendar would black out every other property.\n *\n * Imports immediately, so a wrong or private link fails now rather than on\n * the day two guests turn up for the same flat.\n */\n subscribeToFeed: (\n tenantSlug: string,\n data: { feedUrl: string; name: string; propertyId: string },\n ) =>\n apiFetch<ICalImportResult>(`/bookings/calendar/ical/subscribe`, {\n method: 'POST',\n tenantSlug,\n body: JSON.stringify(data),\n }),\n\n /** Re-read a subscribed feed now. */\n syncFeed: (tenantSlug: string, connectionId: string) =>\n apiFetch<ICalImportResult>(`/bookings/calendar/ical/${connectionId}/sync`, {\n method: 'POST',\n tenantSlug,\n }),\n\n deleteConnection: (tenantSlug: string, id: string) =>\n apiFetch<void>(`/calendar-sync/connections/${id}`, {\n method: 'DELETE',\n tenantSlug,\n }),\n\n disconnectConnection: (tenantSlug: string, id: string) =>\n apiFetch<{ success: boolean }>(\n `/calendar-sync/connections/${id}/disconnect`,\n {\n method: 'POST',\n tenantSlug,\n },\n ),\n};\n\n// ============================================\n// BOOKING CALENDAR API\n// ============================================\n"],"mappings":"AAAA,SAAS,gBAAgB;AAqBlB,MAAM,kBAAkB;AAAA,EAC7B,UAAU,CAAC,eACT,SAA4B,wBAAwB,EAAE,WAAW,CAAC;AAAA,EAEpE,aAAa,CAAC,YAAoB,aAChC,SAA0B,wBAAwB,QAAQ,QAAQ;AAAA,IAChE;AAAA,EACF,CAAC;AAAA,EAEH,iBAAiB,CAAC,eAChB,SAAmC,8BAA8B;AAAA,IAC/D;AAAA,EACF,CAAC;AAAA,EAEH,eAAe,CAAC,YAAoB,OAClC,SAAiC,8BAA8B,EAAE,IAAI;AAAA,IACnE;AAAA,EACF,CAAC;AAAA,EAEH,aAAa,CAAC,YAAoB,OAChC;AAAA,IACE,8BAA8B,EAAE;AAAA,IAChC,EAAE,QAAQ,QAAQ,WAAW;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUF,iBAAiB,CACf,YACA,SAEA,SAA2B,qCAAqC;AAAA,IAC9D,QAAQ;AAAA,IACR;AAAA,IACA,MAAM,KAAK,UAAU,IAAI;AAAA,EAC3B,CAAC;AAAA;AAAA,EAGH,UAAU,CAAC,YAAoB,iBAC7B,SAA2B,2BAA2B,YAAY,SAAS;AAAA,IACzE,QAAQ;AAAA,IACR;AAAA,EACF,CAAC;AAAA,EAEH,kBAAkB,CAAC,YAAoB,OACrC,SAAe,8BAA8B,EAAE,IAAI;AAAA,IACjD,QAAQ;AAAA,IACR;AAAA,EACF,CAAC;AAAA,EAEH,sBAAsB,CAAC,YAAoB,OACzC;AAAA,IACE,8BAA8B,EAAE;AAAA,IAChC;AAAA,MACE,QAAQ;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACJ;","names":[]}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A campaign that is the PROMO, not the message.
|
|
3
|
+
*
|
|
4
|
+
* The API calls it an initiative; the merchant calls it a campaign, and the
|
|
5
|
+
* sends inside it are messages — which is what the campaigns table's own first
|
|
6
|
+
* column has always been headed. The word "promotion" was unavailable: it
|
|
7
|
+
* already means a discount or a gift card one row down in this section, and two
|
|
8
|
+
* near-identical words in one nav is the failure this codebase has spent the
|
|
9
|
+
* day removing.
|
|
10
|
+
*/
|
|
11
|
+
export interface CampaignInitiative {
|
|
12
|
+
id: string;
|
|
13
|
+
name: string;
|
|
14
|
+
/**
|
|
15
|
+
* The `utm_campaign` this promo claims, generated from the name and never
|
|
16
|
+
* edited — a link already in a bio cannot be renamed.
|
|
17
|
+
*
|
|
18
|
+
* Null only on rows made before the column existed. The link is the half of
|
|
19
|
+
* attribution the merchant does not have to get right: typing "Instagram
|
|
20
|
+
* Stories" when the UTM says `instagram` reports nothing and looks broken.
|
|
21
|
+
*/
|
|
22
|
+
slug: string | null;
|
|
23
|
+
startsAt: string | null;
|
|
24
|
+
endsAt: string | null;
|
|
25
|
+
/** Codes as typed, not ids — a code travels, a row does not. */
|
|
26
|
+
discountCodes: string[];
|
|
27
|
+
/** `utm_source` values this campaign claims. */
|
|
28
|
+
sources: string[];
|
|
29
|
+
/**
|
|
30
|
+
* What running it cost, in the tenant's currency, or null when nobody has
|
|
31
|
+
* said. NOT zero-defaulted: "free" and "unpriced" are different states, and
|
|
32
|
+
* only one of them can be divided into revenue.
|
|
33
|
+
*/
|
|
34
|
+
spend: number | null;
|
|
35
|
+
notes: string | null;
|
|
36
|
+
createdAt: string;
|
|
37
|
+
updatedAt: string;
|
|
38
|
+
}
|
|
39
|
+
export interface InitiativeLine {
|
|
40
|
+
kind: 'campaign' | 'source' | 'discount';
|
|
41
|
+
key: string;
|
|
42
|
+
label: string;
|
|
43
|
+
revenue: number;
|
|
44
|
+
orders: number;
|
|
45
|
+
}
|
|
46
|
+
export interface InitiativePerformance {
|
|
47
|
+
initiativeId: string;
|
|
48
|
+
from: string;
|
|
49
|
+
to: string;
|
|
50
|
+
/** What the merchant said it cost. Null when nobody has said. */
|
|
51
|
+
spend: number | null;
|
|
52
|
+
/** Revenue per unit of spend. Null when there is no spend to divide by. */
|
|
53
|
+
returnOnSpend: number | null;
|
|
54
|
+
/**
|
|
55
|
+
* NOT the sum of `lines`, and never presented as one.
|
|
56
|
+
*
|
|
57
|
+
* An order that arrived on a message's link carrying `utm_source=instagram`
|
|
58
|
+
* belongs to two of the campaign's keys, so the API counts distinct orders
|
|
59
|
+
* for the total rather than adding the rows. The lines can exceed it.
|
|
60
|
+
*/
|
|
61
|
+
revenue: number;
|
|
62
|
+
orders: number;
|
|
63
|
+
lines: InitiativeLine[];
|
|
64
|
+
/** Parts that earned nothing in the window, named rather than dropped. */
|
|
65
|
+
silent: string[];
|
|
66
|
+
}
|
|
67
|
+
export interface InitiativeInput {
|
|
68
|
+
name?: string;
|
|
69
|
+
startsAt?: string | null;
|
|
70
|
+
endsAt?: string | null;
|
|
71
|
+
discountCodes?: string[];
|
|
72
|
+
sources?: string[];
|
|
73
|
+
/** `null` clears it; absent leaves it — this is a PATCH on the API side. */
|
|
74
|
+
spend?: number | null;
|
|
75
|
+
notes?: string | null;
|
|
76
|
+
}
|
|
77
|
+
/** GET /campaign-initiatives/return-on-spend: spend, return and cost per new customer. */
|
|
78
|
+
export interface AcquisitionCost {
|
|
79
|
+
from: string;
|
|
80
|
+
to: string;
|
|
81
|
+
/** Promos the merchant typed a cost onto that overlap the window. */
|
|
82
|
+
priced: {
|
|
83
|
+
initiativeId: string;
|
|
84
|
+
name: string;
|
|
85
|
+
spend: number;
|
|
86
|
+
revenue: number;
|
|
87
|
+
returnOnSpend: number | null;
|
|
88
|
+
}[];
|
|
89
|
+
/** Overlapping promos with no cost entered. */
|
|
90
|
+
unpriced: number;
|
|
91
|
+
totalSpend: number;
|
|
92
|
+
attributedRevenue: number;
|
|
93
|
+
/** Revenue per unit of spend; null with no spend. */
|
|
94
|
+
returnOnSpend: number | null;
|
|
95
|
+
/** Customers whose first paid order fell in the window. */
|
|
96
|
+
newCustomers: number;
|
|
97
|
+
/** Total spend over every new customer, not only promo-attributed ones. */
|
|
98
|
+
costPerNewCustomer: number | null;
|
|
99
|
+
}
|
|
100
|
+
export declare const campaignInitiativesApi: {
|
|
101
|
+
returnOnSpend: (tenantSlug: string, query: {
|
|
102
|
+
startDate: string;
|
|
103
|
+
endDate: string;
|
|
104
|
+
}) => Promise<AcquisitionCost>;
|
|
105
|
+
list: (tenantSlug: string) => Promise<CampaignInitiative[]>;
|
|
106
|
+
create: (tenantSlug: string, body: InitiativeInput) => Promise<CampaignInitiative>;
|
|
107
|
+
update: (tenantSlug: string, id: string, body: InitiativeInput) => Promise<CampaignInitiative>;
|
|
108
|
+
remove: (tenantSlug: string, id: string) => Promise<void>;
|
|
109
|
+
/** The whole set, not a diff — the screen is a list of tick boxes. */
|
|
110
|
+
setCampaigns: (tenantSlug: string, id: string, campaignIds: string[]) => Promise<void>;
|
|
111
|
+
performance: (tenantSlug: string, id: string, range?: {
|
|
112
|
+
startDate: string;
|
|
113
|
+
endDate: string;
|
|
114
|
+
}) => Promise<InitiativePerformance>;
|
|
115
|
+
};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { apiFetch } from "./core";
|
|
2
|
+
const campaignInitiativesApi = {
|
|
3
|
+
returnOnSpend: (tenantSlug, query) => {
|
|
4
|
+
const params = new URLSearchParams(query);
|
|
5
|
+
return apiFetch(
|
|
6
|
+
`/campaign-initiatives/return-on-spend?${params}`,
|
|
7
|
+
{ tenantSlug }
|
|
8
|
+
);
|
|
9
|
+
},
|
|
10
|
+
list: (tenantSlug) => apiFetch("/campaign-initiatives", { tenantSlug }),
|
|
11
|
+
create: (tenantSlug, body) => apiFetch("/campaign-initiatives", {
|
|
12
|
+
method: "POST",
|
|
13
|
+
tenantSlug,
|
|
14
|
+
body: JSON.stringify(body)
|
|
15
|
+
}),
|
|
16
|
+
update: (tenantSlug, id, body) => apiFetch(`/campaign-initiatives/${id}`, {
|
|
17
|
+
method: "PATCH",
|
|
18
|
+
tenantSlug,
|
|
19
|
+
body: JSON.stringify(body)
|
|
20
|
+
}),
|
|
21
|
+
remove: (tenantSlug, id) => apiFetch(`/campaign-initiatives/${id}`, {
|
|
22
|
+
method: "DELETE",
|
|
23
|
+
tenantSlug
|
|
24
|
+
}),
|
|
25
|
+
/** The whole set, not a diff — the screen is a list of tick boxes. */
|
|
26
|
+
setCampaigns: (tenantSlug, id, campaignIds) => apiFetch(`/campaign-initiatives/${id}/campaigns`, {
|
|
27
|
+
method: "PUT",
|
|
28
|
+
tenantSlug,
|
|
29
|
+
body: JSON.stringify({ campaignIds })
|
|
30
|
+
}),
|
|
31
|
+
performance: (tenantSlug, id, range) => {
|
|
32
|
+
const qs = range ? `?${new URLSearchParams({ startDate: range.startDate, endDate: range.endDate })}` : "";
|
|
33
|
+
return apiFetch(
|
|
34
|
+
`/campaign-initiatives/${id}/performance${qs}`,
|
|
35
|
+
{ tenantSlug }
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
export {
|
|
40
|
+
campaignInitiativesApi
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=campaign-initiatives.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/api/campaign-initiatives.ts"],"sourcesContent":["import { apiFetch } from './core';\n\n/**\n * A campaign that is the PROMO, not the message.\n *\n * The API calls it an initiative; the merchant calls it a campaign, and the\n * sends inside it are messages — which is what the campaigns table's own first\n * column has always been headed. The word \"promotion\" was unavailable: it\n * already means a discount or a gift card one row down in this section, and two\n * near-identical words in one nav is the failure this codebase has spent the\n * day removing.\n */\nexport interface CampaignInitiative {\n id: string;\n name: string;\n /**\n * The `utm_campaign` this promo claims, generated from the name and never\n * edited — a link already in a bio cannot be renamed.\n *\n * Null only on rows made before the column existed. The link is the half of\n * attribution the merchant does not have to get right: typing \"Instagram\n * Stories\" when the UTM says `instagram` reports nothing and looks broken.\n */\n slug: string | null;\n startsAt: string | null;\n endsAt: string | null;\n /** Codes as typed, not ids — a code travels, a row does not. */\n discountCodes: string[];\n /** `utm_source` values this campaign claims. */\n sources: string[];\n /**\n * What running it cost, in the tenant's currency, or null when nobody has\n * said. NOT zero-defaulted: \"free\" and \"unpriced\" are different states, and\n * only one of them can be divided into revenue.\n */\n spend: number | null;\n notes: string | null;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface InitiativeLine {\n kind: 'campaign' | 'source' | 'discount';\n key: string;\n label: string;\n revenue: number;\n orders: number;\n}\n\nexport interface InitiativePerformance {\n initiativeId: string;\n from: string;\n to: string;\n /** What the merchant said it cost. Null when nobody has said. */\n spend: number | null;\n /** Revenue per unit of spend. Null when there is no spend to divide by. */\n returnOnSpend: number | null;\n /**\n * NOT the sum of `lines`, and never presented as one.\n *\n * An order that arrived on a message's link carrying `utm_source=instagram`\n * belongs to two of the campaign's keys, so the API counts distinct orders\n * for the total rather than adding the rows. The lines can exceed it.\n */\n revenue: number;\n orders: number;\n lines: InitiativeLine[];\n /** Parts that earned nothing in the window, named rather than dropped. */\n silent: string[];\n}\n\nexport interface InitiativeInput {\n name?: string;\n startsAt?: string | null;\n endsAt?: string | null;\n discountCodes?: string[];\n sources?: string[];\n /** `null` clears it; absent leaves it — this is a PATCH on the API side. */\n spend?: number | null;\n notes?: string | null;\n}\n\n/** GET /campaign-initiatives/return-on-spend: spend, return and cost per new customer. */\nexport interface AcquisitionCost {\n from: string;\n to: string;\n /** Promos the merchant typed a cost onto that overlap the window. */\n priced: {\n initiativeId: string;\n name: string;\n spend: number;\n revenue: number;\n returnOnSpend: number | null;\n }[];\n /** Overlapping promos with no cost entered. */\n unpriced: number;\n totalSpend: number;\n attributedRevenue: number;\n /** Revenue per unit of spend; null with no spend. */\n returnOnSpend: number | null;\n /** Customers whose first paid order fell in the window. */\n newCustomers: number;\n /** Total spend over every new customer, not only promo-attributed ones. */\n costPerNewCustomer: number | null;\n}\n\nexport const campaignInitiativesApi = {\n returnOnSpend: (\n tenantSlug: string,\n query: { startDate: string; endDate: string },\n ) => {\n const params = new URLSearchParams(query);\n return apiFetch<AcquisitionCost>(\n `/campaign-initiatives/return-on-spend?${params}`,\n { tenantSlug },\n );\n },\n\n list: (tenantSlug: string) =>\n apiFetch<CampaignInitiative[]>('/campaign-initiatives', { tenantSlug }),\n\n create: (tenantSlug: string, body: InitiativeInput) =>\n apiFetch<CampaignInitiative>('/campaign-initiatives', {\n method: 'POST',\n tenantSlug,\n body: JSON.stringify(body),\n }),\n\n update: (tenantSlug: string, id: string, body: InitiativeInput) =>\n apiFetch<CampaignInitiative>(`/campaign-initiatives/${id}`, {\n method: 'PATCH',\n tenantSlug,\n body: JSON.stringify(body),\n }),\n\n remove: (tenantSlug: string, id: string) =>\n apiFetch<void>(`/campaign-initiatives/${id}`, {\n method: 'DELETE',\n tenantSlug,\n }),\n\n /** The whole set, not a diff — the screen is a list of tick boxes. */\n setCampaigns: (tenantSlug: string, id: string, campaignIds: string[]) =>\n apiFetch<void>(`/campaign-initiatives/${id}/campaigns`, {\n method: 'PUT',\n tenantSlug,\n body: JSON.stringify({ campaignIds }),\n }),\n\n performance: (\n tenantSlug: string,\n id: string,\n range?: { startDate: string; endDate: string },\n ) => {\n const qs = range\n ? `?${new URLSearchParams({ startDate: range.startDate, endDate: range.endDate })}`\n : '';\n return apiFetch<InitiativePerformance>(\n `/campaign-initiatives/${id}/performance${qs}`,\n { tenantSlug },\n );\n },\n};\n"],"mappings":"AAAA,SAAS,gBAAgB;AA0GlB,MAAM,yBAAyB;AAAA,EACpC,eAAe,CACb,YACA,UACG;AACH,UAAM,SAAS,IAAI,gBAAgB,KAAK;AACxC,WAAO;AAAA,MACL,yCAAyC,MAAM;AAAA,MAC/C,EAAE,WAAW;AAAA,IACf;AAAA,EACF;AAAA,EAEA,MAAM,CAAC,eACL,SAA+B,yBAAyB,EAAE,WAAW,CAAC;AAAA,EAExE,QAAQ,CAAC,YAAoB,SAC3B,SAA6B,yBAAyB;AAAA,IACpD,QAAQ;AAAA,IACR;AAAA,IACA,MAAM,KAAK,UAAU,IAAI;AAAA,EAC3B,CAAC;AAAA,EAEH,QAAQ,CAAC,YAAoB,IAAY,SACvC,SAA6B,yBAAyB,EAAE,IAAI;AAAA,IAC1D,QAAQ;AAAA,IACR;AAAA,IACA,MAAM,KAAK,UAAU,IAAI;AAAA,EAC3B,CAAC;AAAA,EAEH,QAAQ,CAAC,YAAoB,OAC3B,SAAe,yBAAyB,EAAE,IAAI;AAAA,IAC5C,QAAQ;AAAA,IACR;AAAA,EACF,CAAC;AAAA;AAAA,EAGH,cAAc,CAAC,YAAoB,IAAY,gBAC7C,SAAe,yBAAyB,EAAE,cAAc;AAAA,IACtD,QAAQ;AAAA,IACR;AAAA,IACA,MAAM,KAAK,UAAU,EAAE,YAAY,CAAC;AAAA,EACtC,CAAC;AAAA,EAEH,aAAa,CACX,YACA,IACA,UACG;AACH,UAAM,KAAK,QACP,IAAI,IAAI,gBAAgB,EAAE,WAAW,MAAM,WAAW,SAAS,MAAM,QAAQ,CAAC,CAAC,KAC/E;AACJ,WAAO;AAAA,MACL,yBAAyB,EAAE,eAAe,EAAE;AAAA,MAC5C,EAAE,WAAW;AAAA,IACf;AAAA,EACF;AACF;","names":[]}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import type { CampaignChannel, CampaignStatus, Campaign, CampaignStats, CreateCampaignInput, PaginatedCampaigns } from './types';
|
|
2
|
+
export type DeliverabilityStatus = 'ok' | 'watch' | 'paused' | 'too_early';
|
|
3
|
+
/** How a workspace's email sending is going, over a rolling window. */
|
|
4
|
+
export interface Deliverability {
|
|
5
|
+
windowDays: number;
|
|
6
|
+
campaigns: number;
|
|
7
|
+
sent: number;
|
|
8
|
+
bounced: number;
|
|
9
|
+
complained: number;
|
|
10
|
+
unsubscribed: number;
|
|
11
|
+
/** Fractions of `sent` (0.003 is 0.3%); null while nothing has been sent. */
|
|
12
|
+
bounceRate: number | null;
|
|
13
|
+
complaintRate: number | null;
|
|
14
|
+
unsubscribeRate: number | null;
|
|
15
|
+
status: DeliverabilityStatus;
|
|
16
|
+
message: string | null;
|
|
17
|
+
limits: {
|
|
18
|
+
complaintWatch: number;
|
|
19
|
+
complaintLimit: number;
|
|
20
|
+
bounceWatch: number;
|
|
21
|
+
};
|
|
22
|
+
problemAddressesByProvider: Array<{
|
|
23
|
+
domain: string;
|
|
24
|
+
bounced: number;
|
|
25
|
+
complained: number;
|
|
26
|
+
}>;
|
|
27
|
+
}
|
|
28
|
+
export declare const campaignsApi: {
|
|
29
|
+
/**
|
|
30
|
+
* Complaint, bounce and unsubscribe rates for email sent in the last 30 days
|
|
31
|
+
* (7 to 90). Mailbox providers reject mail at a 0.3% complaint rate and ask
|
|
32
|
+
* for under 0.1%, so the API pauses email campaigns when it is reached.
|
|
33
|
+
*/
|
|
34
|
+
deliverability: (tenantSlug: string, days?: number) => Promise<Deliverability>;
|
|
35
|
+
list: (tenantSlug: string, query?: {
|
|
36
|
+
channel?: CampaignChannel;
|
|
37
|
+
status?: CampaignStatus;
|
|
38
|
+
/** Matches the subject or the body, case-insensitively. */
|
|
39
|
+
search?: string;
|
|
40
|
+
page?: number;
|
|
41
|
+
limit?: number;
|
|
42
|
+
}) => Promise<PaginatedCampaigns>;
|
|
43
|
+
/**
|
|
44
|
+
* Omit the channel for totals across every channel. GET /campaigns/stats has
|
|
45
|
+
* always taken `channel` as optional; the client required it, so the hub was
|
|
46
|
+
* asking twice (email, then whatsapp) and adding the two together.
|
|
47
|
+
*/
|
|
48
|
+
getStats: (tenantSlug: string, channel?: CampaignChannel) => Promise<CampaignStats>;
|
|
49
|
+
getById: (tenantSlug: string, id: string) => Promise<Campaign>;
|
|
50
|
+
/**
|
|
51
|
+
* Mirrors `CreateCampaignDto` on the API, which is narrower than the Campaign
|
|
52
|
+
* entity. The app validates with `forbidNonWhitelisted`, so any extra
|
|
53
|
+
* property is a 400 — `status` in particular is server-assigned ('draft') and
|
|
54
|
+
* sending it fails the whole request.
|
|
55
|
+
*
|
|
56
|
+
* This used to be typed `Omit<Campaign, 'id' | 'createdAt'>`, which does not
|
|
57
|
+
* describe the endpoint at all; every caller had to cast through `as any` to
|
|
58
|
+
* satisfy it, and the cast is what hid the mismatch.
|
|
59
|
+
*/
|
|
60
|
+
create: (tenantSlug: string, payload: CreateCampaignInput) => Promise<Campaign>;
|
|
61
|
+
/** A new draft with this campaign's content; nothing is sent or scheduled. */
|
|
62
|
+
duplicate: (tenantSlug: string, id: string) => Promise<Campaign>;
|
|
63
|
+
delete: (tenantSlug: string, id: string) => Promise<void>;
|
|
64
|
+
send: (tenantSlug: string, id: string, recipients: string[]) => Promise<Campaign>;
|
|
65
|
+
/**
|
|
66
|
+
* Who a push campaign would reach: the member ids with a browser subscribed,
|
|
67
|
+
* optionally narrowed to a segment. The other channels are resolved here from
|
|
68
|
+
* addresses; a browser subscription is only visible to the API.
|
|
69
|
+
*/
|
|
70
|
+
pushAudience: (tenantSlug: string, segmentId?: string) => Promise<{
|
|
71
|
+
recipients: string[];
|
|
72
|
+
skipped: number;
|
|
73
|
+
}>;
|
|
74
|
+
/**
|
|
75
|
+
* Send an email campaign now to an audience resolved server-side from members
|
|
76
|
+
* (a saved segment, or all marketing-opted-in customers when segmentId is
|
|
77
|
+
* omitted). Only emailable members are dispatched to (real send via Resend).
|
|
78
|
+
*/
|
|
79
|
+
sendToAudience: (tenantSlug: string, id: string, segmentId?: string) => Promise<Campaign>;
|
|
80
|
+
/** Queue an email campaign for future dispatch to a resolved audience. */
|
|
81
|
+
/**
|
|
82
|
+
* Queue a draft for later. The audience is sent as a spec, not a recipient
|
|
83
|
+
* list, because the API resolves it when the campaign fires — a list frozen
|
|
84
|
+
* now would send to an audience that no longer exists by then.
|
|
85
|
+
*/
|
|
86
|
+
schedule: (tenantSlug: string, id: string, scheduledAt: string, segmentId?: string) => Promise<Campaign>;
|
|
87
|
+
/** Cancel a pending schedule and return the campaign to draft. */
|
|
88
|
+
unschedule: (tenantSlug: string, id: string) => Promise<Campaign>;
|
|
89
|
+
};
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { apiFetch } from "./core";
|
|
2
|
+
const campaignsApi = {
|
|
3
|
+
/**
|
|
4
|
+
* Complaint, bounce and unsubscribe rates for email sent in the last 30 days
|
|
5
|
+
* (7 to 90). Mailbox providers reject mail at a 0.3% complaint rate and ask
|
|
6
|
+
* for under 0.1%, so the API pauses email campaigns when it is reached.
|
|
7
|
+
*/
|
|
8
|
+
deliverability: (tenantSlug, days = 30) => apiFetch(`/campaigns/deliverability?days=${days}`, {
|
|
9
|
+
tenantSlug
|
|
10
|
+
}),
|
|
11
|
+
list: (tenantSlug, query) => apiFetch(
|
|
12
|
+
`/campaigns?${new URLSearchParams(
|
|
13
|
+
Object.fromEntries(
|
|
14
|
+
Object.entries(query ?? {}).filter(([, v]) => v != null).map(([k, v]) => [k, String(v)])
|
|
15
|
+
)
|
|
16
|
+
)}`,
|
|
17
|
+
{ tenantSlug }
|
|
18
|
+
),
|
|
19
|
+
/**
|
|
20
|
+
* Omit the channel for totals across every channel. GET /campaigns/stats has
|
|
21
|
+
* always taken `channel` as optional; the client required it, so the hub was
|
|
22
|
+
* asking twice (email, then whatsapp) and adding the two together.
|
|
23
|
+
*/
|
|
24
|
+
getStats: (tenantSlug, channel) => apiFetch(
|
|
25
|
+
`/campaigns/stats${channel ? `?channel=${channel}` : ""}`,
|
|
26
|
+
{ tenantSlug }
|
|
27
|
+
),
|
|
28
|
+
getById: (tenantSlug, id) => apiFetch(`/campaigns/${id}`, { tenantSlug }),
|
|
29
|
+
/**
|
|
30
|
+
* Mirrors `CreateCampaignDto` on the API, which is narrower than the Campaign
|
|
31
|
+
* entity. The app validates with `forbidNonWhitelisted`, so any extra
|
|
32
|
+
* property is a 400 — `status` in particular is server-assigned ('draft') and
|
|
33
|
+
* sending it fails the whole request.
|
|
34
|
+
*
|
|
35
|
+
* This used to be typed `Omit<Campaign, 'id' | 'createdAt'>`, which does not
|
|
36
|
+
* describe the endpoint at all; every caller had to cast through `as any` to
|
|
37
|
+
* satisfy it, and the cast is what hid the mismatch.
|
|
38
|
+
*/
|
|
39
|
+
create: (tenantSlug, payload) => apiFetch("/campaigns", {
|
|
40
|
+
method: "POST",
|
|
41
|
+
tenantSlug,
|
|
42
|
+
body: JSON.stringify(payload)
|
|
43
|
+
}),
|
|
44
|
+
/** A new draft with this campaign's content; nothing is sent or scheduled. */
|
|
45
|
+
duplicate: (tenantSlug, id) => apiFetch(`/campaigns/${id}/duplicate`, {
|
|
46
|
+
method: "POST",
|
|
47
|
+
tenantSlug
|
|
48
|
+
}),
|
|
49
|
+
delete: (tenantSlug, id) => apiFetch(`/campaigns/${id}`, { method: "DELETE", tenantSlug }),
|
|
50
|
+
send: (tenantSlug, id, recipients) => apiFetch(`/campaigns/${id}/send`, {
|
|
51
|
+
method: "POST",
|
|
52
|
+
tenantSlug,
|
|
53
|
+
body: JSON.stringify({ recipients })
|
|
54
|
+
}),
|
|
55
|
+
/**
|
|
56
|
+
* Who a push campaign would reach: the member ids with a browser subscribed,
|
|
57
|
+
* optionally narrowed to a segment. The other channels are resolved here from
|
|
58
|
+
* addresses; a browser subscription is only visible to the API.
|
|
59
|
+
*/
|
|
60
|
+
pushAudience: (tenantSlug, segmentId) => apiFetch(
|
|
61
|
+
`/campaigns/push-audience${segmentId ? `?segmentId=${segmentId}` : ""}`,
|
|
62
|
+
{ tenantSlug }
|
|
63
|
+
),
|
|
64
|
+
/**
|
|
65
|
+
* Send an email campaign now to an audience resolved server-side from members
|
|
66
|
+
* (a saved segment, or all marketing-opted-in customers when segmentId is
|
|
67
|
+
* omitted). Only emailable members are dispatched to (real send via Resend).
|
|
68
|
+
*/
|
|
69
|
+
sendToAudience: (tenantSlug, id, segmentId) => apiFetch(`/campaigns/${id}/send-audience`, {
|
|
70
|
+
method: "POST",
|
|
71
|
+
tenantSlug,
|
|
72
|
+
body: JSON.stringify(segmentId ? { segmentId } : {})
|
|
73
|
+
}),
|
|
74
|
+
/** Queue an email campaign for future dispatch to a resolved audience. */
|
|
75
|
+
/**
|
|
76
|
+
* Queue a draft for later. The audience is sent as a spec, not a recipient
|
|
77
|
+
* list, because the API resolves it when the campaign fires — a list frozen
|
|
78
|
+
* now would send to an audience that no longer exists by then.
|
|
79
|
+
*/
|
|
80
|
+
schedule: (tenantSlug, id, scheduledAt, segmentId) => apiFetch(`/campaigns/${id}/schedule`, {
|
|
81
|
+
method: "POST",
|
|
82
|
+
tenantSlug,
|
|
83
|
+
body: JSON.stringify({
|
|
84
|
+
scheduledAt,
|
|
85
|
+
// Required by ScheduleCampaignDto. Omitting it (as this did) fails
|
|
86
|
+
// validation before the request reaches the use-case.
|
|
87
|
+
audienceType: segmentId ? "segment" : "all_opted_in",
|
|
88
|
+
...segmentId ? { segmentId } : {}
|
|
89
|
+
})
|
|
90
|
+
}),
|
|
91
|
+
/** Cancel a pending schedule and return the campaign to draft. */
|
|
92
|
+
unschedule: (tenantSlug, id) => apiFetch(`/campaigns/${id}/unschedule`, {
|
|
93
|
+
method: "POST",
|
|
94
|
+
tenantSlug
|
|
95
|
+
})
|
|
96
|
+
};
|
|
97
|
+
export {
|
|
98
|
+
campaignsApi
|
|
99
|
+
};
|
|
100
|
+
//# sourceMappingURL=campaigns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/api/campaigns.ts"],"sourcesContent":["import { apiFetch } from './core';\nimport type {\n CampaignChannel,\n CampaignStatus,\n Campaign,\n CampaignStats,\n CreateCampaignInput,\n PaginatedCampaigns,\n} from './types';\n\nexport type DeliverabilityStatus = 'ok' | 'watch' | 'paused' | 'too_early';\n\n/** How a workspace's email sending is going, over a rolling window. */\nexport interface Deliverability {\n windowDays: number;\n campaigns: number;\n sent: number;\n bounced: number;\n complained: number;\n unsubscribed: number;\n /** Fractions of `sent` (0.003 is 0.3%); null while nothing has been sent. */\n bounceRate: number | null;\n complaintRate: number | null;\n unsubscribeRate: number | null;\n status: DeliverabilityStatus;\n message: string | null;\n limits: {\n complaintWatch: number;\n complaintLimit: number;\n bounceWatch: number;\n };\n problemAddressesByProvider: Array<{\n domain: string;\n bounced: number;\n complained: number;\n }>;\n}\n\nexport const campaignsApi = {\n /**\n * Complaint, bounce and unsubscribe rates for email sent in the last 30 days\n * (7 to 90). Mailbox providers reject mail at a 0.3% complaint rate and ask\n * for under 0.1%, so the API pauses email campaigns when it is reached.\n */\n deliverability: (tenantSlug: string, days = 30) =>\n apiFetch<Deliverability>(`/campaigns/deliverability?days=${days}`, {\n tenantSlug,\n }),\n\n list: (\n tenantSlug: string,\n query?: {\n channel?: CampaignChannel;\n status?: CampaignStatus;\n /** Matches the subject or the body, case-insensitively. */\n search?: string;\n page?: number;\n limit?: number;\n },\n ) =>\n apiFetch<PaginatedCampaigns>(\n `/campaigns?${new URLSearchParams(\n Object.fromEntries(\n Object.entries(query ?? {})\n .filter(([, v]) => v != null)\n .map(([k, v]) => [k, String(v)]),\n ),\n )}`,\n { tenantSlug },\n ),\n\n /**\n * Omit the channel for totals across every channel. GET /campaigns/stats has\n * always taken `channel` as optional; the client required it, so the hub was\n * asking twice (email, then whatsapp) and adding the two together.\n */\n getStats: (tenantSlug: string, channel?: CampaignChannel) =>\n apiFetch<CampaignStats>(\n `/campaigns/stats${channel ? `?channel=${channel}` : ''}`,\n { tenantSlug },\n ),\n\n getById: (tenantSlug: string, id: string) =>\n apiFetch<Campaign>(`/campaigns/${id}`, { tenantSlug }),\n\n /**\n * Mirrors `CreateCampaignDto` on the API, which is narrower than the Campaign\n * entity. The app validates with `forbidNonWhitelisted`, so any extra\n * property is a 400 — `status` in particular is server-assigned ('draft') and\n * sending it fails the whole request.\n *\n * This used to be typed `Omit<Campaign, 'id' | 'createdAt'>`, which does not\n * describe the endpoint at all; every caller had to cast through `as any` to\n * satisfy it, and the cast is what hid the mismatch.\n */\n create: (tenantSlug: string, payload: CreateCampaignInput) =>\n apiFetch<Campaign>('/campaigns', {\n method: 'POST',\n tenantSlug,\n body: JSON.stringify(payload),\n }),\n\n /** A new draft with this campaign's content; nothing is sent or scheduled. */\n duplicate: (tenantSlug: string, id: string) =>\n apiFetch<Campaign>(`/campaigns/${id}/duplicate`, {\n method: 'POST',\n tenantSlug,\n }),\n\n delete: (tenantSlug: string, id: string) =>\n apiFetch<void>(`/campaigns/${id}`, { method: 'DELETE', tenantSlug }),\n\n send: (tenantSlug: string, id: string, recipients: string[]) =>\n apiFetch<Campaign>(`/campaigns/${id}/send`, {\n method: 'POST',\n tenantSlug,\n body: JSON.stringify({ recipients }),\n }),\n\n /**\n * Who a push campaign would reach: the member ids with a browser subscribed,\n * optionally narrowed to a segment. The other channels are resolved here from\n * addresses; a browser subscription is only visible to the API.\n */\n pushAudience: (tenantSlug: string, segmentId?: string) =>\n apiFetch<{ recipients: string[]; skipped: number }>(\n `/campaigns/push-audience${segmentId ? `?segmentId=${segmentId}` : ''}`,\n { tenantSlug },\n ),\n\n /**\n * Send an email campaign now to an audience resolved server-side from members\n * (a saved segment, or all marketing-opted-in customers when segmentId is\n * omitted). Only emailable members are dispatched to (real send via Resend).\n */\n sendToAudience: (tenantSlug: string, id: string, segmentId?: string) =>\n apiFetch<Campaign>(`/campaigns/${id}/send-audience`, {\n method: 'POST',\n tenantSlug,\n body: JSON.stringify(segmentId ? { segmentId } : {}),\n }),\n\n /** Queue an email campaign for future dispatch to a resolved audience. */\n /**\n * Queue a draft for later. The audience is sent as a spec, not a recipient\n * list, because the API resolves it when the campaign fires — a list frozen\n * now would send to an audience that no longer exists by then.\n */\n schedule: (\n tenantSlug: string,\n id: string,\n scheduledAt: string,\n segmentId?: string,\n ) =>\n apiFetch<Campaign>(`/campaigns/${id}/schedule`, {\n method: 'POST',\n tenantSlug,\n body: JSON.stringify({\n scheduledAt,\n // Required by ScheduleCampaignDto. Omitting it (as this did) fails\n // validation before the request reaches the use-case.\n audienceType: segmentId ? 'segment' : 'all_opted_in',\n ...(segmentId ? { segmentId } : {}),\n }),\n }),\n\n /** Cancel a pending schedule and return the campaign to draft. */\n unschedule: (tenantSlug: string, id: string) =>\n apiFetch<Campaign>(`/campaigns/${id}/unschedule`, {\n method: 'POST',\n tenantSlug,\n }),\n};\n\n// ============================================\n// AUTOMATIONS API\n// ============================================\n"],"mappings":"AAAA,SAAS,gBAAgB;AAsClB,MAAM,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAM1B,gBAAgB,CAAC,YAAoB,OAAO,OAC1C,SAAyB,kCAAkC,IAAI,IAAI;AAAA,IACjE;AAAA,EACF,CAAC;AAAA,EAEH,MAAM,CACJ,YACA,UASA;AAAA,IACE,cAAc,IAAI;AAAA,MAChB,OAAO;AAAA,QACL,OAAO,QAAQ,SAAS,CAAC,CAAC,EACvB,OAAO,CAAC,CAAC,EAAE,CAAC,MAAM,KAAK,IAAI,EAC3B,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;AAAA,MACnC;AAAA,IACF,CAAC;AAAA,IACD,EAAE,WAAW;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOF,UAAU,CAAC,YAAoB,YAC7B;AAAA,IACE,mBAAmB,UAAU,YAAY,OAAO,KAAK,EAAE;AAAA,IACvD,EAAE,WAAW;AAAA,EACf;AAAA,EAEF,SAAS,CAAC,YAAoB,OAC5B,SAAmB,cAAc,EAAE,IAAI,EAAE,WAAW,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYvD,QAAQ,CAAC,YAAoB,YAC3B,SAAmB,cAAc;AAAA,IAC/B,QAAQ;AAAA,IACR;AAAA,IACA,MAAM,KAAK,UAAU,OAAO;AAAA,EAC9B,CAAC;AAAA;AAAA,EAGH,WAAW,CAAC,YAAoB,OAC9B,SAAmB,cAAc,EAAE,cAAc;AAAA,IAC/C,QAAQ;AAAA,IACR;AAAA,EACF,CAAC;AAAA,EAEH,QAAQ,CAAC,YAAoB,OAC3B,SAAe,cAAc,EAAE,IAAI,EAAE,QAAQ,UAAU,WAAW,CAAC;AAAA,EAErE,MAAM,CAAC,YAAoB,IAAY,eACrC,SAAmB,cAAc,EAAE,SAAS;AAAA,IAC1C,QAAQ;AAAA,IACR;AAAA,IACA,MAAM,KAAK,UAAU,EAAE,WAAW,CAAC;AAAA,EACrC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOH,cAAc,CAAC,YAAoB,cACjC;AAAA,IACE,2BAA2B,YAAY,cAAc,SAAS,KAAK,EAAE;AAAA,IACrE,EAAE,WAAW;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOF,gBAAgB,CAAC,YAAoB,IAAY,cAC/C,SAAmB,cAAc,EAAE,kBAAkB;AAAA,IACnD,QAAQ;AAAA,IACR;AAAA,IACA,MAAM,KAAK,UAAU,YAAY,EAAE,UAAU,IAAI,CAAC,CAAC;AAAA,EACrD,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQH,UAAU,CACR,YACA,IACA,aACA,cAEA,SAAmB,cAAc,EAAE,aAAa;AAAA,IAC9C,QAAQ;AAAA,IACR;AAAA,IACA,MAAM,KAAK,UAAU;AAAA,MACnB;AAAA;AAAA;AAAA,MAGA,cAAc,YAAY,YAAY;AAAA,MACtC,GAAI,YAAY,EAAE,UAAU,IAAI,CAAC;AAAA,IACnC,CAAC;AAAA,EACH,CAAC;AAAA;AAAA,EAGH,YAAY,CAAC,YAAoB,OAC/B,SAAmB,cAAc,EAAE,eAAe;AAAA,IAChD,QAAQ;AAAA,IACR;AAAA,EACF,CAAC;AACL;","names":[]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ApiFeatures } from './types';
|
|
2
|
+
export declare const capabilitiesApi: {
|
|
3
|
+
/**
|
|
4
|
+
* Which optional endpoints this deployment serves.
|
|
5
|
+
*
|
|
6
|
+
* `tenantSlug` is optional because this describes the BUILD, not the account,
|
|
7
|
+
* and the screen that needs it most has no session and no workspace: the
|
|
8
|
+
* login page decides whether to offer a passkey from this answer. Requiring a
|
|
9
|
+
* slug meant the request never fired there.
|
|
10
|
+
*/
|
|
11
|
+
getFeatures: (tenantSlug?: string) => Promise<ApiFeatures>;
|
|
12
|
+
};
|