@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
package/dist/api/core.js
ADDED
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
const IS_BROWSER = typeof window !== "undefined";
|
|
2
|
+
import posthog from "posthog-js";
|
|
3
|
+
import { notifyWrite } from "./cache-bus";
|
|
4
|
+
import { announceFeatureLocked, featureNotInPlan } from "./feature-locked";
|
|
5
|
+
import { announcePlanRefusal, planRefusal } from "./plan-refusal";
|
|
6
|
+
import { isUnservedRoute, unservedMessage } from "./unserved-routes";
|
|
7
|
+
import { refreshSession, wantsRefresh } from "./session-refresh";
|
|
8
|
+
import {
|
|
9
|
+
isSessionExpiryResponse,
|
|
10
|
+
merchantIdentity,
|
|
11
|
+
sessionExpiryTarget
|
|
12
|
+
} from "./session-scope";
|
|
13
|
+
const getApiUrl = () => {
|
|
14
|
+
if (IS_BROWSER) {
|
|
15
|
+
return "/api/proxy";
|
|
16
|
+
}
|
|
17
|
+
return process.env.NEXT_PUBLIC_API_URL || "http://localhost:4000";
|
|
18
|
+
};
|
|
19
|
+
function getAccountId() {
|
|
20
|
+
if (typeof window === "undefined") return null;
|
|
21
|
+
const pbUser = localStorage.getItem("pb_user");
|
|
22
|
+
if (pbUser) {
|
|
23
|
+
try {
|
|
24
|
+
const user = JSON.parse(pbUser);
|
|
25
|
+
return user.id || null;
|
|
26
|
+
} catch {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
function getCsrfToken() {
|
|
33
|
+
if (typeof window === "undefined" || typeof document === "undefined")
|
|
34
|
+
return null;
|
|
35
|
+
const match = document.cookie.match(/pb_csrf_token=([^;]+)/);
|
|
36
|
+
return match ? match[1] : null;
|
|
37
|
+
}
|
|
38
|
+
class SessionExpiredError extends Error {
|
|
39
|
+
constructor() {
|
|
40
|
+
super("Your session has expired");
|
|
41
|
+
this.name = "SessionExpiredError";
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
class ApiRequestError extends Error {
|
|
45
|
+
constructor(message, status, details) {
|
|
46
|
+
super(message);
|
|
47
|
+
this.status = status;
|
|
48
|
+
this.details = details;
|
|
49
|
+
this.name = "ApiRequestError";
|
|
50
|
+
}
|
|
51
|
+
status;
|
|
52
|
+
details;
|
|
53
|
+
}
|
|
54
|
+
import { AUTH_ROUTES, isSessionExpiryResponse as isSessionExpiryResponse2 } from "./session-scope";
|
|
55
|
+
let sessionExpiryHandled = false;
|
|
56
|
+
const BOUNCE_KEY = "pb_session_bounce";
|
|
57
|
+
const BOUNCE_WINDOW_MS = 15e3;
|
|
58
|
+
function bouncedRecently(path) {
|
|
59
|
+
try {
|
|
60
|
+
const raw = sessionStorage.getItem(BOUNCE_KEY);
|
|
61
|
+
if (!raw) return false;
|
|
62
|
+
const { path: last, at } = JSON.parse(raw);
|
|
63
|
+
return last === path && Date.now() - at < BOUNCE_WINDOW_MS;
|
|
64
|
+
} catch {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function recordBounce(path) {
|
|
69
|
+
try {
|
|
70
|
+
sessionStorage.setItem(
|
|
71
|
+
BOUNCE_KEY,
|
|
72
|
+
JSON.stringify({ path, at: Date.now() })
|
|
73
|
+
);
|
|
74
|
+
} catch {
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
const inFlightGets = /* @__PURE__ */ new Map();
|
|
78
|
+
const READ_ONLY_POSTS = [/^\/crm\/segments\/preview(\?|$)/];
|
|
79
|
+
const onlyReads = (endpoint) => READ_ONLY_POSTS.some((pattern) => pattern.test(endpoint));
|
|
80
|
+
async function apiFetch(endpoint, options = {}) {
|
|
81
|
+
const { tenantSlug, token, accountId, ...fetchOptions } = options;
|
|
82
|
+
const headers = {
|
|
83
|
+
...fetchOptions.headers
|
|
84
|
+
};
|
|
85
|
+
if (fetchOptions.body && !(fetchOptions.body instanceof FormData)) {
|
|
86
|
+
headers["Content-Type"] = "application/json";
|
|
87
|
+
}
|
|
88
|
+
if (tenantSlug) {
|
|
89
|
+
headers["X-Tenant-Slug"] = tenantSlug;
|
|
90
|
+
}
|
|
91
|
+
const merchant = merchantIdentity(endpoint, getAccountId(), null);
|
|
92
|
+
const effectiveAccountId = accountId || merchant.accountId;
|
|
93
|
+
if (effectiveAccountId) {
|
|
94
|
+
headers["x-account-id"] = effectiveAccountId;
|
|
95
|
+
}
|
|
96
|
+
const effectiveToken = token || merchant.token;
|
|
97
|
+
if (effectiveToken) {
|
|
98
|
+
headers.Authorization = `Bearer ${effectiveToken}`;
|
|
99
|
+
}
|
|
100
|
+
const method = (fetchOptions.method || "GET").toUpperCase();
|
|
101
|
+
const isWrite = ["POST", "PUT", "PATCH", "DELETE"].includes(method);
|
|
102
|
+
if (isWrite) {
|
|
103
|
+
const csrfToken = getCsrfToken();
|
|
104
|
+
if (csrfToken) {
|
|
105
|
+
headers["X-CSRF-Token"] = csrfToken;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
if (IS_BROWSER) {
|
|
109
|
+
headers["x-request-id"] = crypto.randomUUID?.() ?? `${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;
|
|
110
|
+
const sessionId = posthog.get_session_id?.();
|
|
111
|
+
if (sessionId) {
|
|
112
|
+
headers["x-posthog-session-id"] = sessionId;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
if (isUnservedRoute(endpoint)) {
|
|
116
|
+
throw new ApiRequestError(unservedMessage(method, endpoint), 404);
|
|
117
|
+
}
|
|
118
|
+
const url = `${getApiUrl()}${endpoint}`;
|
|
119
|
+
if (method === "GET") {
|
|
120
|
+
const key = `${url}|${tenantSlug ?? ""}|${effectiveAccountId ?? ""}`;
|
|
121
|
+
const inFlight = inFlightGets.get(key);
|
|
122
|
+
if (inFlight) return inFlight;
|
|
123
|
+
const started = send(url, fetchOptions, headers, isWrite && !onlyReads(endpoint)).finally(() => {
|
|
124
|
+
inFlightGets.delete(key);
|
|
125
|
+
});
|
|
126
|
+
inFlightGets.set(key, started);
|
|
127
|
+
return started;
|
|
128
|
+
}
|
|
129
|
+
return send(url, fetchOptions, headers, isWrite && !onlyReads(endpoint));
|
|
130
|
+
}
|
|
131
|
+
async function send(url, fetchOptions, headers, isWrite, retried = false) {
|
|
132
|
+
const res = await fetch(url, {
|
|
133
|
+
...fetchOptions,
|
|
134
|
+
headers,
|
|
135
|
+
credentials: "include"
|
|
136
|
+
// Include cookies for CSRF
|
|
137
|
+
});
|
|
138
|
+
if (!res.ok) {
|
|
139
|
+
if (res.status === 401 && !retried && wantsRefresh(url)) {
|
|
140
|
+
const body = await res.clone().json().catch(() => null);
|
|
141
|
+
if (wantsRefresh(url, body) && await refreshSession(getApiUrl())) {
|
|
142
|
+
return send(url, fetchOptions, headers, isWrite, true);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
const lockedBody = res.status === 402 ? await res.clone().json().catch(() => null) : null;
|
|
146
|
+
const locked = featureNotInPlan(lockedBody);
|
|
147
|
+
if (locked) {
|
|
148
|
+
announceFeatureLocked(locked);
|
|
149
|
+
throw new ApiRequestError(lockedBody.message ?? "Not in your plan", 402, lockedBody);
|
|
150
|
+
}
|
|
151
|
+
const refusal = planRefusal(lockedBody);
|
|
152
|
+
if (refusal) {
|
|
153
|
+
announcePlanRefusal(refusal);
|
|
154
|
+
throw new ApiRequestError(
|
|
155
|
+
refusal.code === "LIMIT_REACHED" ? "You have reached the limit on your plan" : "This is not available on your plan",
|
|
156
|
+
402,
|
|
157
|
+
lockedBody
|
|
158
|
+
);
|
|
159
|
+
}
|
|
160
|
+
if (res.status === 402 && IS_BROWSER) {
|
|
161
|
+
window.location.href = "/dashboard/settings/billing";
|
|
162
|
+
throw new Error("Payment required");
|
|
163
|
+
}
|
|
164
|
+
if (isSessionExpiryResponse(res.status, url) && IS_BROWSER) {
|
|
165
|
+
const path = window.location.pathname;
|
|
166
|
+
const target = sessionExpiryTarget(url, path, window.location.search);
|
|
167
|
+
if (target && !sessionExpiryHandled && !bouncedRecently(path)) {
|
|
168
|
+
sessionExpiryHandled = true;
|
|
169
|
+
recordBounce(path);
|
|
170
|
+
window.location.href = target;
|
|
171
|
+
}
|
|
172
|
+
throw new SessionExpiredError();
|
|
173
|
+
}
|
|
174
|
+
const error = await res.json().catch(() => ({ message: "Request failed" }));
|
|
175
|
+
let msg;
|
|
176
|
+
if (Array.isArray(error.message)) {
|
|
177
|
+
const items = error.message.map((m) => {
|
|
178
|
+
const colonIdx = m.indexOf(": ");
|
|
179
|
+
return colonIdx > -1 ? m.slice(colonIdx + 2) : m;
|
|
180
|
+
}).filter((m, i, arr) => arr.indexOf(m) === i);
|
|
181
|
+
msg = items.length > 0 ? "\u2022 " + items.join("\n\u2022 ") : error.error || `HTTP ${res.status}`;
|
|
182
|
+
} else {
|
|
183
|
+
msg = error.message || error.error || `HTTP ${res.status}`;
|
|
184
|
+
}
|
|
185
|
+
throw new ApiRequestError(msg, res.status, error);
|
|
186
|
+
}
|
|
187
|
+
if (isWrite) {
|
|
188
|
+
notifyWrite();
|
|
189
|
+
}
|
|
190
|
+
if (res.status === 204) {
|
|
191
|
+
return void 0;
|
|
192
|
+
}
|
|
193
|
+
const contentType = res.headers.get("content-type");
|
|
194
|
+
if (!contentType || !contentType.includes("application/json")) {
|
|
195
|
+
const text = await res.text();
|
|
196
|
+
if (!text) {
|
|
197
|
+
return void 0;
|
|
198
|
+
}
|
|
199
|
+
return text;
|
|
200
|
+
try {
|
|
201
|
+
return JSON.parse(text);
|
|
202
|
+
} catch {
|
|
203
|
+
return void 0;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return res.json();
|
|
207
|
+
}
|
|
208
|
+
export {
|
|
209
|
+
AUTH_ROUTES,
|
|
210
|
+
ApiRequestError,
|
|
211
|
+
BOUNCE_KEY,
|
|
212
|
+
BOUNCE_WINDOW_MS,
|
|
213
|
+
IS_BROWSER,
|
|
214
|
+
SessionExpiredError,
|
|
215
|
+
apiFetch,
|
|
216
|
+
bouncedRecently,
|
|
217
|
+
getAccountId,
|
|
218
|
+
getApiUrl,
|
|
219
|
+
getCsrfToken,
|
|
220
|
+
isSessionExpiryResponse2 as isSessionExpiryResponse,
|
|
221
|
+
recordBounce
|
|
222
|
+
};
|
|
223
|
+
//# sourceMappingURL=core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/api/core.ts"],"sourcesContent":["/**\n * The shared plumbing every API module needs: auth token, CSRF, the bounce\n * guard, and apiFetch itself.\n *\n * Split out of the old 7,657-line src/lib/api.ts. That file was imported by\n * 405 files, so touching any endpoint invalidated all of them, and a route\n * that wanted one call pulled the whole surface.\n */\n// Always use proxy for cookie-based auth to work (same-origin required for cookies)\nexport const IS_BROWSER = typeof window !== 'undefined';\n\nimport posthog from 'posthog-js';\nimport type { FetchOptions } from './types';\nimport { notifyWrite } from './cache-bus';\nimport { announceFeatureLocked, featureNotInPlan } from './feature-locked';\nimport { announcePlanRefusal, planRefusal } from './plan-refusal';\nimport { isUnservedRoute, unservedMessage } from './unserved-routes';\nimport { refreshSession, wantsRefresh } from './session-refresh';\nimport {\n isSessionExpiryResponse,\n merchantIdentity,\n sessionExpiryTarget,\n} from './session-scope';\n\n// Use proxy for all browser requests to ensure cookies are sent correctly\n\n// Use proxy for all browser requests to ensure cookies are sent correctly\nexport const getApiUrl = () => {\n if (IS_BROWSER) {\n // In browser, route through our proxy for same-origin cookie handling\n return '/api/proxy';\n }\n // Server-side, use direct backend URL\n return process.env.NEXT_PUBLIC_API_URL || 'http://localhost:4000';\n};\n\n// Helper to get account ID from localStorage\n\n// Helper to get account ID from localStorage\nexport function getAccountId(): string | null {\n if (typeof window === 'undefined') return null;\n const pbUser = localStorage.getItem('pb_user');\n if (pbUser) {\n try {\n const user = JSON.parse(pbUser);\n return user.id || null;\n } catch {\n return null;\n }\n }\n return null;\n}\n\n// Helper to get CSRF token from cookie\n\n// Helper to get CSRF token from cookie\nexport function getCsrfToken(): string | null {\n if (typeof window === 'undefined' || typeof document === 'undefined')\n return null;\n const match = document.cookie.match(/pb_csrf_token=([^;]+)/);\n return match ? match[1] : null;\n}\n\n/**\n * Thrown when the API rejects the session (401). Typed so a caller can tell an\n * expired session apart from a genuine empty result — the distinction the whole\n * dashboard was previously unable to make.\n */\nexport class SessionExpiredError extends Error {\n constructor() {\n super('Your session has expired');\n this.name = 'SessionExpiredError';\n }\n}\n\nexport class ApiRequestError extends Error {\n constructor(\n message: string,\n readonly status: number,\n readonly details?: unknown,\n ) {\n super(message);\n this.name = 'ApiRequestError';\n }\n}\n\nexport { AUTH_ROUTES, isSessionExpiryResponse } from './session-scope';\n\n/** One redirect per page load, however many requests fail together. */\nlet sessionExpiryHandled = false;\n\n/**\n * Where we last sent someone to log in, and when. Bouncing to login is a full\n * page load, so the in-memory guard above resets every time — it cannot see a\n * loop. This can.\n */\n\n/**\n * Where we last sent someone to log in, and when. Bouncing to login is a full\n * page load, so the in-memory guard above resets every time — it cannot see a\n * loop. This can.\n */\nexport const BOUNCE_KEY = 'pb_session_bounce';\n/** Two bounces off the same path inside this window is a loop, not a login. */\n\n/** Two bounces off the same path inside this window is a loop, not a login. */\nexport const BOUNCE_WINDOW_MS = 15_000;\n\n/**\n * True when we already bounced this path to login and are right back on it.\n *\n * That combination means the session is fine — login only returns you here if\n * it recognises you — and some single endpoint is answering 401 for its own\n * reasons (a missing tenant header, say). Bouncing again just repeats the\n * round trip forever, which the merchant sees as a page that reloads and\n * reloads. Better to let that one panel fail and leave the page standing.\n */\n\n/**\n * True when we already bounced this path to login and are right back on it.\n *\n * That combination means the session is fine — login only returns you here if\n * it recognises you — and some single endpoint is answering 401 for its own\n * reasons (a missing tenant header, say). Bouncing again just repeats the\n * round trip forever, which the merchant sees as a page that reloads and\n * reloads. Better to let that one panel fail and leave the page standing.\n */\nexport function bouncedRecently(path: string): boolean {\n try {\n const raw = sessionStorage.getItem(BOUNCE_KEY);\n if (!raw) return false;\n const { path: last, at } = JSON.parse(raw) as { path: string; at: number };\n return last === path && Date.now() - at < BOUNCE_WINDOW_MS;\n } catch {\n return false;\n }\n}\n\nexport function recordBounce(path: string): void {\n try {\n sessionStorage.setItem(\n BOUNCE_KEY,\n JSON.stringify({ path, at: Date.now() }),\n );\n } catch {\n // Private mode / storage full. The in-memory guard still holds for this\n // page load; we just lose the cross-reload half of the protection.\n }\n}\n\n/**\n * GETS THAT OVERLAP IN TIME ARE ONE REQUEST.\n *\n * Not a cache — an entry lives only while its request is in the air, so this\n * can never hand back a stale answer. It collapses the case the dashboard\n * actually has: several components asking the same question in the same tick,\n * each with its own `useEffect` and nothing to dedupe against.\n *\n * Measured per page load before this, on a real workspace: `/pages` six times\n * on the editor, `products` five on the catalogue, `analytics/dashboard` four,\n * `orders` three. React Query dedupes what goes through it; roughly forty files\n * still fetch in a raw effect and those are all of the above.\n *\n * GET only, and keyed by the things that change the ANSWER — the URL, the\n * workspace and the account. A write is never collapsed: two POSTs that look\n * identical are two things happening.\n */\nconst inFlightGets = new Map<string, Promise<unknown>>();\n\n/**\n * POSTs that ask a question and change nothing: the filters are too large for a\n * query string. They must not announce a write. A query built on one would\n * invalidate every query on success, itself included, and so refetch for ever\n * (the New campaign screen counted its audience a few hundred times a minute).\n */\nconst READ_ONLY_POSTS = [/^\\/crm\\/segments\\/preview(\\?|$)/];\nconst onlyReads = (endpoint: string) =>\n READ_ONLY_POSTS.some((pattern) => pattern.test(endpoint));\n\nexport async function apiFetch<T = unknown>(\n endpoint: string,\n options: FetchOptions = {},\n): Promise<T> {\n const { tenantSlug, token, accountId, ...fetchOptions } = options;\n\n const headers: Record<string, string> = {\n ...(fetchOptions.headers as Record<string, string>),\n };\n\n // Let the runtime add the multipart boundary for FormData uploads.\n if (fetchOptions.body && !(fetchOptions.body instanceof FormData)) {\n headers['Content-Type'] = 'application/json';\n }\n\n if (tenantSlug) {\n headers['X-Tenant-Slug'] = tenantSlug;\n }\n\n // The merchant's account goes on merchant calls only. The session itself is\n // the HttpOnly pb_auth_token cookie, which the browser sends; only a caller\n // holding a fresh one-time token (an invite link) passes `token` here.\n const merchant = merchantIdentity(endpoint, getAccountId(), null);\n const effectiveAccountId = accountId || merchant.accountId;\n if (effectiveAccountId) {\n headers['x-account-id'] = effectiveAccountId;\n }\n\n const effectiveToken = token || merchant.token;\n if (effectiveToken) {\n headers.Authorization = `Bearer ${effectiveToken}`;\n }\n\n // Add CSRF token for state-changing requests (POST, PUT, PATCH, DELETE)\n const method = (fetchOptions.method || 'GET').toUpperCase();\n // Reused below to announce the write. The list is the same one CSRF cares\n // about for the same reason: these are the methods that change something.\n const isWrite = ['POST', 'PUT', 'PATCH', 'DELETE'].includes(method);\n if (isWrite) {\n const csrfToken = getCsrfToken();\n if (csrfToken) {\n headers['X-CSRF-Token'] = csrfToken;\n }\n }\n\n // Request tracing: unique ID per API call + PostHog session correlation\n if (IS_BROWSER) {\n headers['x-request-id'] =\n crypto.randomUUID?.() ??\n `${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;\n const sessionId = posthog.get_session_id?.();\n if (sessionId) {\n headers['x-posthog-session-id'] = sessionId;\n }\n }\n\n // A route this box's engine does not serve fails here, as the engine would.\n if (isUnservedRoute(endpoint)) {\n throw new ApiRequestError(unservedMessage(method, endpoint), 404);\n }\n\n const url = `${getApiUrl()}${endpoint}`;\n\n if (method === 'GET') {\n const key = `${url}|${tenantSlug ?? ''}|${effectiveAccountId ?? ''}`;\n const inFlight = inFlightGets.get(key);\n if (inFlight) return inFlight as Promise<T>;\n const started = send<T>(url, fetchOptions, headers, isWrite && !onlyReads(endpoint)).finally(() => {\n inFlightGets.delete(key);\n });\n inFlightGets.set(key, started);\n return started;\n }\n\n return send<T>(url, fetchOptions, headers, isWrite && !onlyReads(endpoint));\n}\n\n/** The request itself, once `apiFetch` has decided who is making it. */\nasync function send<T>(\n url: string,\n fetchOptions: Omit<FetchOptions, 'tenantSlug' | 'token' | 'accountId'>,\n headers: Record<string, string>,\n isWrite: boolean,\n retried = false,\n): Promise<T> {\n const res = await fetch(url, {\n ...fetchOptions,\n headers,\n credentials: 'include', // Include cookies for CSRF\n });\n\n if (!res.ok) {\n // The 15-minute access token ran out but the refresh cookie may still be\n // good: renew once, shared by every request that failed together, and\n // send this one again. Anything else falls through to the old handling.\n if (res.status === 401 && !retried && wantsRefresh(url)) {\n const body = await res.clone().json().catch(() => null);\n if (wantsRefresh(url, body) && (await refreshSession(getApiUrl()))) {\n return send<T>(url, fetchOptions, headers, isWrite, true);\n }\n }\n\n // 402 Payment Required — subscription inactive, redirect to billing\n // ...unless the plan guard sent it: a page the plan leaves out shows the\n // locked-feature card, and the merchant stays where they are.\n const lockedBody =\n res.status === 402\n ? await res.clone().json().catch(() => null)\n : null;\n const locked = featureNotInPlan(lockedBody);\n if (locked) {\n announceFeatureLocked(locked);\n throw new ApiRequestError(lockedBody.message ?? 'Not in your plan', 402, lockedBody);\n }\n const refusal = planRefusal(lockedBody);\n if (refusal) {\n announcePlanRefusal(refusal);\n throw new ApiRequestError(\n refusal.code === 'LIMIT_REACHED'\n ? 'You have reached the limit on your plan'\n : 'This is not available on your plan',\n 402,\n lockedBody,\n );\n }\n if (res.status === 402 && IS_BROWSER) {\n window.location.href = '/dashboard/settings/billing';\n throw new Error('Payment required');\n }\n\n /**\n * 401 — the session is gone, not the data.\n *\n * Handled here because it cannot be handled well anywhere else: every panel\n * catches its own failure and renders an empty state, so an expired session\n * was being drawn as £0 revenue, 0 bookings and \"nothing yet\" across the\n * whole dashboard. That tells a merchant their business made nothing, when\n * in fact the app cannot talk to the server. A 401 is never an empty state.\n *\n * 403 is deliberately NOT caught: that is a real permission answer for a\n * valid session, and panels are right to hide themselves for it.\n *\n * The guard matters — a dashboard fires a dozen requests at once, and all\n * of them 401 together. Without it they'd each kick off a navigation.\n */\n if (isSessionExpiryResponse(res.status, url) && IS_BROWSER) {\n // An admin 401 goes to the admin sign-in, never the merchant one: that\n // forwards a signed-in merchant to /dashboard.\n const path = window.location.pathname;\n const target = sessionExpiryTarget(url, path, window.location.search);\n if (target && !sessionExpiryHandled && !bouncedRecently(path)) {\n sessionExpiryHandled = true;\n recordBounce(path);\n window.location.href = target;\n }\n throw new SessionExpiredError();\n }\n\n const error = await res.json().catch(() => ({ message: 'Request failed' }));\n // NestJS validation pipes return message as an array of strings\n let msg: string;\n if (Array.isArray(error.message)) {\n const items = error.message\n .map((m: string) => {\n // Strip field prefix like \"maxDiscountAmount: maxDiscountAmount must...\"\n const colonIdx = m.indexOf(': ');\n return colonIdx > -1 ? m.slice(colonIdx + 2) : m;\n })\n .filter((m: string, i: number, arr: string[]) => arr.indexOf(m) === i);\n // When NestJS returns an empty message array, fall back to error.error\n msg =\n items.length > 0\n ? '• ' + items.join('\\n• ')\n : error.error || `HTTP ${res.status}`;\n } else {\n msg = error.message || error.error || `HTTP ${res.status}`;\n }\n // Carry the status. Callers were reduced to matching on message text to\n // tell \"the server refused this\" from \"the server could not be reached\",\n // and those need opposite handling: one means the session is dead, the\n // other means fall back to cache and carry on.\n //\n // `details` carries the parsed body for the same reason, one level in. An\n // API that answers a refusal with a machine-readable code and the id of the\n // thing that caused it was having all of that thrown away here, leaving the\n // caller to substring-match the human sentence — which is how a recoverable\n // refusal (\"you already have one of these, connect it\") becomes a dead end.\n throw new ApiRequestError(msg, res.status, error);\n }\n\n /**\n * THE WRITE LANDED, SO WHAT IS ON SCREEN IS NOW OUT OF DATE.\n *\n * Announced here rather than at a hundred call sites, because this is the\n * only place that knows a write happened at all — see `cache-bus.ts` for why\n * that matters and what it fixes. Only after `res.ok`: a refused write has\n * changed nothing and refetching over it would be noise.\n */\n if (isWrite) {\n notifyWrite();\n }\n\n // 204 No Content has no body — return early to avoid JSON parse error\n if (res.status === 204) {\n return undefined as unknown as T;\n }\n\n // Handle empty response body (e.g., 200 OK with no content)\n const contentType = res.headers.get('content-type');\n if (!contentType || !contentType.includes('application/json')) {\n // Check if response has content\n const text = await res.text();\n if (!text) {\n return undefined as unknown as T;\n }\n return text as T;\n // Try to parse as JSON in case content-type header is missing\n try {\n return JSON.parse(text) as T;\n } catch {\n return undefined as unknown as T;\n }\n }\n\n return res.json();\n}\n\n// ============================================\n// AUTH / ACCOUNTS API\n// ============================================\n"],"mappings":"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","names":["isSessionExpiryResponse"]}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { Band } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Bands, and the balances they point at.
|
|
4
|
+
*
|
|
5
|
+
* The band carries no value — it points at the holder — which is why a lost one
|
|
6
|
+
* is replaced rather than mourned, and why the balance stays put when it is.
|
|
7
|
+
*/
|
|
8
|
+
export declare const bandsApi: {
|
|
9
|
+
list: (tenantSlug: string, memberId?: string) => Promise<{
|
|
10
|
+
credentials: Band[];
|
|
11
|
+
}>;
|
|
12
|
+
issue: (tenantSlug: string, data: {
|
|
13
|
+
memberId: string;
|
|
14
|
+
kind: Band["kind"];
|
|
15
|
+
uid: string;
|
|
16
|
+
label?: string;
|
|
17
|
+
/** Declared, never detected: a cheap tag and a DNA tag both report a UID. */
|
|
18
|
+
secure?: boolean;
|
|
19
|
+
}) => Promise<Band>;
|
|
20
|
+
/** The old one stops working, the new one starts, the balance never moves. */
|
|
21
|
+
replace: (tenantSlug: string, id: string, data: {
|
|
22
|
+
uid: string;
|
|
23
|
+
secure?: boolean;
|
|
24
|
+
}) => Promise<{
|
|
25
|
+
replaced: Band;
|
|
26
|
+
issued: Band;
|
|
27
|
+
}>;
|
|
28
|
+
setStatus: (tenantSlug: string, id: string, status: "active" | "lost" | "expired" | "revoked") => Promise<Band>;
|
|
29
|
+
/** The one moment real money arrives. */
|
|
30
|
+
topUp: (tenantSlug: string, data: {
|
|
31
|
+
memberId: string;
|
|
32
|
+
amount: number;
|
|
33
|
+
channel: string;
|
|
34
|
+
note?: string;
|
|
35
|
+
}) => Promise<{
|
|
36
|
+
memberId: string;
|
|
37
|
+
balance: number;
|
|
38
|
+
transactionId: string;
|
|
39
|
+
}>;
|
|
40
|
+
/** Puts a spend back. No money moves, so nothing is written to the books. */
|
|
41
|
+
voidSpend: (tenantSlug: string, data: {
|
|
42
|
+
memberId: string;
|
|
43
|
+
amount: number;
|
|
44
|
+
note?: string;
|
|
45
|
+
}) => Promise<{
|
|
46
|
+
memberId: string;
|
|
47
|
+
balance: number;
|
|
48
|
+
}>;
|
|
49
|
+
/**
|
|
50
|
+
* Gives back what a customer never spent.
|
|
51
|
+
*
|
|
52
|
+
* Real cash leaves the till, unlike a void — so this writes a refund, and
|
|
53
|
+
* `channel` says where the money came from.
|
|
54
|
+
*/
|
|
55
|
+
cashOut: (tenantSlug: string, data: {
|
|
56
|
+
memberId: string;
|
|
57
|
+
amount?: number;
|
|
58
|
+
channel: string;
|
|
59
|
+
note?: string;
|
|
60
|
+
}) => Promise<{
|
|
61
|
+
memberId: string;
|
|
62
|
+
balance: number;
|
|
63
|
+
transactionId: string;
|
|
64
|
+
}>;
|
|
65
|
+
};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { apiFetch } from "./core";
|
|
2
|
+
const bandsApi = {
|
|
3
|
+
list: (tenantSlug, memberId) => apiFetch(
|
|
4
|
+
memberId ? `/credentials?memberId=${encodeURIComponent(memberId)}` : "/credentials",
|
|
5
|
+
{ tenantSlug }
|
|
6
|
+
),
|
|
7
|
+
issue: (tenantSlug, data) => apiFetch("/credentials", {
|
|
8
|
+
tenantSlug,
|
|
9
|
+
method: "POST",
|
|
10
|
+
body: JSON.stringify(data)
|
|
11
|
+
}),
|
|
12
|
+
/** The old one stops working, the new one starts, the balance never moves. */
|
|
13
|
+
replace: (tenantSlug, id, data) => apiFetch(`/credentials/${id}/replace`, {
|
|
14
|
+
tenantSlug,
|
|
15
|
+
method: "POST",
|
|
16
|
+
body: JSON.stringify(data)
|
|
17
|
+
}),
|
|
18
|
+
setStatus: (tenantSlug, id, status) => apiFetch(`/credentials/${id}/status`, {
|
|
19
|
+
tenantSlug,
|
|
20
|
+
method: "POST",
|
|
21
|
+
body: JSON.stringify({ status })
|
|
22
|
+
}),
|
|
23
|
+
/** The one moment real money arrives. */
|
|
24
|
+
topUp: (tenantSlug, data) => apiFetch(
|
|
25
|
+
"/credentials/top-up",
|
|
26
|
+
{ tenantSlug, method: "POST", body: JSON.stringify(data) }
|
|
27
|
+
),
|
|
28
|
+
/** Puts a spend back. No money moves, so nothing is written to the books. */
|
|
29
|
+
voidSpend: (tenantSlug, data) => apiFetch("/credentials/void", {
|
|
30
|
+
tenantSlug,
|
|
31
|
+
method: "POST",
|
|
32
|
+
body: JSON.stringify(data)
|
|
33
|
+
}),
|
|
34
|
+
/**
|
|
35
|
+
* Gives back what a customer never spent.
|
|
36
|
+
*
|
|
37
|
+
* Real cash leaves the till, unlike a void — so this writes a refund, and
|
|
38
|
+
* `channel` says where the money came from.
|
|
39
|
+
*/
|
|
40
|
+
cashOut: (tenantSlug, data) => apiFetch(
|
|
41
|
+
"/credentials/cash-out",
|
|
42
|
+
{ tenantSlug, method: "POST", body: JSON.stringify(data) }
|
|
43
|
+
)
|
|
44
|
+
};
|
|
45
|
+
export {
|
|
46
|
+
bandsApi
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/api/credentials.ts"],"sourcesContent":["import { apiFetch } from './core';\nimport type { Band } from './types';\n\n/**\n * Bands, and the balances they point at.\n *\n * The band carries no value — it points at the holder — which is why a lost one\n * is replaced rather than mourned, and why the balance stays put when it is.\n */\nexport const bandsApi = {\n list: (tenantSlug: string, memberId?: string) =>\n apiFetch<{ credentials: Band[] }>(\n memberId\n ? `/credentials?memberId=${encodeURIComponent(memberId)}`\n : '/credentials',\n { tenantSlug },\n ),\n\n issue: (\n tenantSlug: string,\n data: {\n memberId: string;\n kind: Band['kind'];\n uid: string;\n label?: string;\n /** Declared, never detected: a cheap tag and a DNA tag both report a UID. */\n secure?: boolean;\n },\n ) =>\n apiFetch<Band>('/credentials', {\n tenantSlug,\n method: 'POST',\n body: JSON.stringify(data),\n }),\n\n /** The old one stops working, the new one starts, the balance never moves. */\n replace: (\n tenantSlug: string,\n id: string,\n data: { uid: string; secure?: boolean },\n ) =>\n apiFetch<{ replaced: Band; issued: Band }>(`/credentials/${id}/replace`, {\n tenantSlug,\n method: 'POST',\n body: JSON.stringify(data),\n }),\n\n setStatus: (\n tenantSlug: string,\n id: string,\n status: 'active' | 'lost' | 'expired' | 'revoked',\n ) =>\n apiFetch<Band>(`/credentials/${id}/status`, {\n tenantSlug,\n method: 'POST',\n body: JSON.stringify({ status }),\n }),\n\n /** The one moment real money arrives. */\n topUp: (\n tenantSlug: string,\n data: {\n memberId: string;\n amount: number;\n channel: string;\n note?: string;\n },\n ) =>\n apiFetch<{ memberId: string; balance: number; transactionId: string }>(\n '/credentials/top-up',\n { tenantSlug, method: 'POST', body: JSON.stringify(data) },\n ),\n\n /** Puts a spend back. No money moves, so nothing is written to the books. */\n voidSpend: (\n tenantSlug: string,\n data: { memberId: string; amount: number; note?: string },\n ) =>\n apiFetch<{ memberId: string; balance: number }>('/credentials/void', {\n tenantSlug,\n method: 'POST',\n body: JSON.stringify(data),\n }),\n\n /**\n * Gives back what a customer never spent.\n *\n * Real cash leaves the till, unlike a void — so this writes a refund, and\n * `channel` says where the money came from.\n */\n cashOut: (\n tenantSlug: string,\n data: { memberId: string; amount?: number; channel: string; note?: string },\n ) =>\n apiFetch<{ memberId: string; balance: number; transactionId: string }>(\n '/credentials/cash-out',\n { tenantSlug, method: 'POST', body: JSON.stringify(data) },\n ),\n};\n"],"mappings":"AAAA,SAAS,gBAAgB;AASlB,MAAM,WAAW;AAAA,EACtB,MAAM,CAAC,YAAoB,aACzB;AAAA,IACE,WACI,yBAAyB,mBAAmB,QAAQ,CAAC,KACrD;AAAA,IACJ,EAAE,WAAW;AAAA,EACf;AAAA,EAEF,OAAO,CACL,YACA,SASA,SAAe,gBAAgB;AAAA,IAC7B;AAAA,IACA,QAAQ;AAAA,IACR,MAAM,KAAK,UAAU,IAAI;AAAA,EAC3B,CAAC;AAAA;AAAA,EAGH,SAAS,CACP,YACA,IACA,SAEA,SAA2C,gBAAgB,EAAE,YAAY;AAAA,IACvE;AAAA,IACA,QAAQ;AAAA,IACR,MAAM,KAAK,UAAU,IAAI;AAAA,EAC3B,CAAC;AAAA,EAEH,WAAW,CACT,YACA,IACA,WAEA,SAAe,gBAAgB,EAAE,WAAW;AAAA,IAC1C;AAAA,IACA,QAAQ;AAAA,IACR,MAAM,KAAK,UAAU,EAAE,OAAO,CAAC;AAAA,EACjC,CAAC;AAAA;AAAA,EAGH,OAAO,CACL,YACA,SAOA;AAAA,IACE;AAAA,IACA,EAAE,YAAY,QAAQ,QAAQ,MAAM,KAAK,UAAU,IAAI,EAAE;AAAA,EAC3D;AAAA;AAAA,EAGF,WAAW,CACT,YACA,SAEA,SAAgD,qBAAqB;AAAA,IACnE;AAAA,IACA,QAAQ;AAAA,IACR,MAAM,KAAK,UAAU,IAAI;AAAA,EAC3B,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQH,SAAS,CACP,YACA,SAEA;AAAA,IACE;AAAA,IACA,EAAE,YAAY,QAAQ,QAAQ,MAAM,KAAK,UAAU,IAAI,EAAE;AAAA,EAC3D;AACJ;","names":[]}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
export type MessagingChannel = 'sms' | 'whatsapp';
|
|
2
|
+
export type MessageCategory = 'marketing' | 'utility' | 'authentication' | 'service';
|
|
3
|
+
/**
|
|
4
|
+
* One grant of credits.
|
|
5
|
+
*
|
|
6
|
+
* Credits used to be a single number, which could not say where any of it came
|
|
7
|
+
* from or when it goes away. A block can: a plan allowance carries an expiry,
|
|
8
|
+
* purchased credits do not, and the two are spent soonest-expiry first.
|
|
9
|
+
*/
|
|
10
|
+
export interface CreditBlock {
|
|
11
|
+
id: string;
|
|
12
|
+
source: 'purchase' | 'plan' | 'bonus' | 'migration' | 'adjustment';
|
|
13
|
+
amount: number;
|
|
14
|
+
remaining: number;
|
|
15
|
+
unitPriceKobo: number;
|
|
16
|
+
expiresAt: string | null;
|
|
17
|
+
grantedAt: string;
|
|
18
|
+
description: string | null;
|
|
19
|
+
}
|
|
20
|
+
export interface CreditSummary {
|
|
21
|
+
spendable: number;
|
|
22
|
+
/** Money taken for credits not yet spent. Box's liability, not revenue. */
|
|
23
|
+
deferredRevenueKobo: number;
|
|
24
|
+
expiringSoon: {
|
|
25
|
+
credits: number;
|
|
26
|
+
at: string | null;
|
|
27
|
+
};
|
|
28
|
+
blocks: CreditBlock[];
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Whether a send can finish, asked before it starts.
|
|
32
|
+
*
|
|
33
|
+
* `reachableNow` is the number that matters when a balance is short: not
|
|
34
|
+
* "insufficient" but "this reaches 40 of your 100 people".
|
|
35
|
+
*/
|
|
36
|
+
export interface CampaignQuote {
|
|
37
|
+
recipients: number;
|
|
38
|
+
channel: MessagingChannel;
|
|
39
|
+
category: MessageCategory;
|
|
40
|
+
creditsPerMessage: number;
|
|
41
|
+
creditsRequired: number;
|
|
42
|
+
creditsAvailable: number;
|
|
43
|
+
shortfall: number;
|
|
44
|
+
affordable: boolean;
|
|
45
|
+
reachableNow: number;
|
|
46
|
+
shortfallKobo: number;
|
|
47
|
+
autoTopUp: {
|
|
48
|
+
enabled: boolean;
|
|
49
|
+
wouldCover: boolean;
|
|
50
|
+
creditsPerTopUp: number;
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
export interface AutoTopUpSettings {
|
|
54
|
+
enabled: boolean;
|
|
55
|
+
threshold: number;
|
|
56
|
+
credits: number;
|
|
57
|
+
amountKobo: number;
|
|
58
|
+
paymentMethodId: string | null;
|
|
59
|
+
monthlyCapKobo: number | null;
|
|
60
|
+
spentThisMonthKobo: number;
|
|
61
|
+
spendable: number;
|
|
62
|
+
belowThreshold: boolean;
|
|
63
|
+
pausedUntil: string | null;
|
|
64
|
+
failureCount: number;
|
|
65
|
+
lastError: string | null;
|
|
66
|
+
/**
|
|
67
|
+
* Why nothing will happen, if nothing will happen. "Enabled" on its own is
|
|
68
|
+
* a lie when the card has been declining since Tuesday.
|
|
69
|
+
*/
|
|
70
|
+
blockedReason: 'disabled' | 'no_payment_method' | 'paused_after_failure' | 'monthly_cap_reached' | null;
|
|
71
|
+
}
|
|
72
|
+
export interface SeatUsage {
|
|
73
|
+
used: number;
|
|
74
|
+
/** null means the plan does not cap seats. */
|
|
75
|
+
limit: number | null;
|
|
76
|
+
remaining: number | null;
|
|
77
|
+
planName: string | null;
|
|
78
|
+
atLimit: boolean;
|
|
79
|
+
}
|
|
80
|
+
export declare const creditsApi: {
|
|
81
|
+
summary: (tenantSlug: string) => Promise<CreditSummary>;
|
|
82
|
+
quote: (tenantSlug: string, body: {
|
|
83
|
+
recipients: number;
|
|
84
|
+
channel: MessagingChannel;
|
|
85
|
+
category?: MessageCategory;
|
|
86
|
+
}) => Promise<CampaignQuote>;
|
|
87
|
+
getAutoTopUp: (tenantSlug: string) => Promise<AutoTopUpSettings>;
|
|
88
|
+
updateAutoTopUp: (tenantSlug: string, body: {
|
|
89
|
+
enabled?: boolean;
|
|
90
|
+
threshold?: number;
|
|
91
|
+
credits?: number;
|
|
92
|
+
paymentMethodId?: string | null;
|
|
93
|
+
monthlyCapKobo?: number | null;
|
|
94
|
+
}) => Promise<AutoTopUpSettings>;
|
|
95
|
+
seats: (tenantSlug: string) => Promise<SeatUsage>;
|
|
96
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { apiFetch } from "./core";
|
|
2
|
+
const creditsApi = {
|
|
3
|
+
summary: (tenantSlug) => apiFetch("/communications/messaging-credits/summary", {
|
|
4
|
+
tenantSlug
|
|
5
|
+
}),
|
|
6
|
+
quote: (tenantSlug, body) => apiFetch("/communications/messaging-credits/quote", {
|
|
7
|
+
method: "POST",
|
|
8
|
+
body: JSON.stringify(body),
|
|
9
|
+
tenantSlug
|
|
10
|
+
}),
|
|
11
|
+
getAutoTopUp: (tenantSlug) => apiFetch(
|
|
12
|
+
"/communications/messaging-credits/auto-top-up",
|
|
13
|
+
{ tenantSlug }
|
|
14
|
+
),
|
|
15
|
+
updateAutoTopUp: (tenantSlug, body) => apiFetch(
|
|
16
|
+
"/communications/messaging-credits/auto-top-up",
|
|
17
|
+
{ method: "PATCH", body: JSON.stringify(body), tenantSlug }
|
|
18
|
+
),
|
|
19
|
+
seats: (tenantSlug) => apiFetch("/team/seats", { tenantSlug })
|
|
20
|
+
};
|
|
21
|
+
export {
|
|
22
|
+
creditsApi
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=credits.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/api/credits.ts"],"sourcesContent":["import { apiFetch } from './core';\n\nexport type MessagingChannel = 'sms' | 'whatsapp';\nexport type MessageCategory =\n | 'marketing'\n | 'utility'\n | 'authentication'\n | 'service';\n\n/**\n * One grant of credits.\n *\n * Credits used to be a single number, which could not say where any of it came\n * from or when it goes away. A block can: a plan allowance carries an expiry,\n * purchased credits do not, and the two are spent soonest-expiry first.\n */\nexport interface CreditBlock {\n id: string;\n source: 'purchase' | 'plan' | 'bonus' | 'migration' | 'adjustment';\n amount: number;\n remaining: number;\n unitPriceKobo: number;\n expiresAt: string | null;\n grantedAt: string;\n description: string | null;\n}\n\nexport interface CreditSummary {\n spendable: number;\n /** Money taken for credits not yet spent. Box's liability, not revenue. */\n deferredRevenueKobo: number;\n expiringSoon: { credits: number; at: string | null };\n blocks: CreditBlock[];\n}\n\n/**\n * Whether a send can finish, asked before it starts.\n *\n * `reachableNow` is the number that matters when a balance is short: not\n * \"insufficient\" but \"this reaches 40 of your 100 people\".\n */\nexport interface CampaignQuote {\n recipients: number;\n channel: MessagingChannel;\n category: MessageCategory;\n creditsPerMessage: number;\n creditsRequired: number;\n creditsAvailable: number;\n shortfall: number;\n affordable: boolean;\n reachableNow: number;\n shortfallKobo: number;\n autoTopUp: {\n enabled: boolean;\n wouldCover: boolean;\n creditsPerTopUp: number;\n };\n}\n\nexport interface AutoTopUpSettings {\n enabled: boolean;\n threshold: number;\n credits: number;\n amountKobo: number;\n paymentMethodId: string | null;\n monthlyCapKobo: number | null;\n spentThisMonthKobo: number;\n spendable: number;\n belowThreshold: boolean;\n pausedUntil: string | null;\n failureCount: number;\n lastError: string | null;\n /**\n * Why nothing will happen, if nothing will happen. \"Enabled\" on its own is\n * a lie when the card has been declining since Tuesday.\n */\n blockedReason:\n | 'disabled'\n | 'no_payment_method'\n | 'paused_after_failure'\n | 'monthly_cap_reached'\n | null;\n}\n\nexport interface SeatUsage {\n used: number;\n /** null means the plan does not cap seats. */\n limit: number | null;\n remaining: number | null;\n planName: string | null;\n atLimit: boolean;\n}\n\nexport const creditsApi = {\n summary: (tenantSlug: string) =>\n apiFetch<CreditSummary>('/communications/messaging-credits/summary', {\n tenantSlug,\n }),\n\n quote: (\n tenantSlug: string,\n body: {\n recipients: number;\n channel: MessagingChannel;\n category?: MessageCategory;\n },\n ) =>\n apiFetch<CampaignQuote>('/communications/messaging-credits/quote', {\n method: 'POST',\n body: JSON.stringify(body),\n tenantSlug,\n }),\n\n getAutoTopUp: (tenantSlug: string) =>\n apiFetch<AutoTopUpSettings>(\n '/communications/messaging-credits/auto-top-up',\n { tenantSlug },\n ),\n\n updateAutoTopUp: (\n tenantSlug: string,\n body: {\n enabled?: boolean;\n threshold?: number;\n credits?: number;\n paymentMethodId?: string | null;\n monthlyCapKobo?: number | null;\n },\n ) =>\n apiFetch<AutoTopUpSettings>(\n '/communications/messaging-credits/auto-top-up',\n { method: 'PATCH', body: JSON.stringify(body), tenantSlug },\n ),\n\n seats: (tenantSlug: string) =>\n apiFetch<SeatUsage>('/team/seats', { tenantSlug }),\n};\n"],"mappings":"AAAA,SAAS,gBAAgB;AA6FlB,MAAM,aAAa;AAAA,EACxB,SAAS,CAAC,eACR,SAAwB,6CAA6C;AAAA,IACnE;AAAA,EACF,CAAC;AAAA,EAEH,OAAO,CACL,YACA,SAMA,SAAwB,2CAA2C;AAAA,IACjE,QAAQ;AAAA,IACR,MAAM,KAAK,UAAU,IAAI;AAAA,IACzB;AAAA,EACF,CAAC;AAAA,EAEH,cAAc,CAAC,eACb;AAAA,IACE;AAAA,IACA,EAAE,WAAW;AAAA,EACf;AAAA,EAEF,iBAAiB,CACf,YACA,SAQA;AAAA,IACE;AAAA,IACA,EAAE,QAAQ,SAAS,MAAM,KAAK,UAAU,IAAI,GAAG,WAAW;AAAA,EAC5D;AAAA,EAEF,OAAO,CAAC,eACN,SAAoB,eAAe,EAAE,WAAW,CAAC;AACrD;","names":[]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { CustomerOverview, AcquisitionDataPoint, RetentionMetrics, LtvDistribution } from './types';
|
|
2
|
+
export declare const crmAnalyticsApi: {
|
|
3
|
+
getOverview: (tenantSlug: string, range?: {
|
|
4
|
+
startDate: string;
|
|
5
|
+
endDate: string;
|
|
6
|
+
}) => Promise<CustomerOverview>;
|
|
7
|
+
getAcquisition: (tenantSlug: string, period?: "daily" | "weekly" | "monthly", months?: number) => Promise<AcquisitionDataPoint[]>;
|
|
8
|
+
getRetention: (tenantSlug: string) => Promise<RetentionMetrics>;
|
|
9
|
+
getLifetimeValue: (tenantSlug: string) => Promise<LtvDistribution>;
|
|
10
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { apiFetch } from "./core";
|
|
2
|
+
const crmAnalyticsApi = {
|
|
3
|
+
// The period is optional and the endpoint answers without it, but every
|
|
4
|
+
// caller inside the analytics hub passes one: the hub renders a period label
|
|
5
|
+
// over these numbers, and unscoped they would silently be all-time.
|
|
6
|
+
getOverview: (tenantSlug, range) => apiFetch(
|
|
7
|
+
range ? `/crm/analytics/overview?startDate=${encodeURIComponent(range.startDate)}&endDate=${encodeURIComponent(range.endDate)}` : "/crm/analytics/overview",
|
|
8
|
+
{ tenantSlug }
|
|
9
|
+
),
|
|
10
|
+
getAcquisition: (tenantSlug, period = "monthly", months = 12) => apiFetch(
|
|
11
|
+
`/crm/analytics/acquisition?period=${period}&months=${months}`,
|
|
12
|
+
{
|
|
13
|
+
tenantSlug
|
|
14
|
+
}
|
|
15
|
+
),
|
|
16
|
+
getRetention: (tenantSlug) => apiFetch("/crm/analytics/retention", { tenantSlug }),
|
|
17
|
+
getLifetimeValue: (tenantSlug) => apiFetch("/crm/analytics/lifetime-value", { tenantSlug })
|
|
18
|
+
};
|
|
19
|
+
export {
|
|
20
|
+
crmAnalyticsApi
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=crm-analytics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/api/crm-analytics.ts"],"sourcesContent":["import { apiFetch } from './core';\nimport type {\n CustomerOverview,\n AcquisitionDataPoint,\n RetentionMetrics,\n LtvDistribution,\n} from './types';\n\n// CRM Analytics API\n\nexport const crmAnalyticsApi = {\n // The period is optional and the endpoint answers without it, but every\n // caller inside the analytics hub passes one: the hub renders a period label\n // over these numbers, and unscoped they would silently be all-time.\n getOverview: (\n tenantSlug: string,\n range?: { startDate: string; endDate: string },\n ) =>\n apiFetch<CustomerOverview>(\n range\n ? `/crm/analytics/overview?startDate=${encodeURIComponent(range.startDate)}&endDate=${encodeURIComponent(range.endDate)}`\n : '/crm/analytics/overview',\n { tenantSlug },\n ),\n\n getAcquisition: (\n tenantSlug: string,\n period: 'daily' | 'weekly' | 'monthly' = 'monthly',\n months = 12,\n ) =>\n apiFetch<AcquisitionDataPoint[]>(\n `/crm/analytics/acquisition?period=${period}&months=${months}`,\n {\n tenantSlug,\n },\n ),\n\n getRetention: (tenantSlug: string) =>\n apiFetch<RetentionMetrics>('/crm/analytics/retention', { tenantSlug }),\n\n getLifetimeValue: (tenantSlug: string) =>\n apiFetch<LtvDistribution>('/crm/analytics/lifetime-value', { tenantSlug }),\n};\n\n// CRM Communications API (bulk email to segment)\n"],"mappings":"AAAA,SAAS,gBAAgB;AAUlB,MAAM,kBAAkB;AAAA;AAAA;AAAA;AAAA,EAI7B,aAAa,CACX,YACA,UAEA;AAAA,IACE,QACI,qCAAqC,mBAAmB,MAAM,SAAS,CAAC,YAAY,mBAAmB,MAAM,OAAO,CAAC,KACrH;AAAA,IACJ,EAAE,WAAW;AAAA,EACf;AAAA,EAEF,gBAAgB,CACd,YACA,SAAyC,WACzC,SAAS,OAET;AAAA,IACE,qCAAqC,MAAM,WAAW,MAAM;AAAA,IAC5D;AAAA,MACE;AAAA,IACF;AAAA,EACF;AAAA,EAEF,cAAc,CAAC,eACb,SAA2B,4BAA4B,EAAE,WAAW,CAAC;AAAA,EAEvE,kBAAkB,CAAC,eACjB,SAA0B,iCAAiC,EAAE,WAAW,CAAC;AAC7E;","names":[]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { SegmentFilters, CustomerSegment, CreateSegmentInput, UpdateSegmentInput, SegmentPreviewResult } from './types';
|
|
2
|
+
export declare const crmSegmentsApi: {
|
|
3
|
+
list: (tenantSlug: string) => Promise<CustomerSegment[]>;
|
|
4
|
+
create: (tenantSlug: string, data: CreateSegmentInput) => Promise<CustomerSegment>;
|
|
5
|
+
getById: (tenantSlug: string, id: string) => Promise<CustomerSegment>;
|
|
6
|
+
update: (tenantSlug: string, id: string, data: UpdateSegmentInput) => Promise<CustomerSegment>;
|
|
7
|
+
delete: (tenantSlug: string, id: string) => Promise<void>;
|
|
8
|
+
getCustomers: (tenantSlug: string, id: string, page?: number, limit?: number) => Promise<SegmentPreviewResult>;
|
|
9
|
+
preview: (tenantSlug: string, filters: SegmentFilters, page?: number, limit?: number) => Promise<SegmentPreviewResult>;
|
|
10
|
+
refreshCounts: (tenantSlug: string) => Promise<{
|
|
11
|
+
total: number;
|
|
12
|
+
updated: number;
|
|
13
|
+
}>;
|
|
14
|
+
};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { LIST_PAGE_SIZE } from "@withpotter/lib/list-page-size";
|
|
2
|
+
import { apiFetch } from "./core";
|
|
3
|
+
const crmSegmentsApi = {
|
|
4
|
+
list: (tenantSlug) => apiFetch("/crm/segments", { tenantSlug }),
|
|
5
|
+
create: (tenantSlug, data) => apiFetch("/crm/segments", {
|
|
6
|
+
method: "POST",
|
|
7
|
+
body: JSON.stringify(data),
|
|
8
|
+
tenantSlug
|
|
9
|
+
}),
|
|
10
|
+
getById: (tenantSlug, id) => apiFetch(`/crm/segments/${id}`, { tenantSlug }),
|
|
11
|
+
update: (tenantSlug, id, data) => apiFetch(`/crm/segments/${id}`, {
|
|
12
|
+
method: "PUT",
|
|
13
|
+
body: JSON.stringify(data),
|
|
14
|
+
tenantSlug
|
|
15
|
+
}),
|
|
16
|
+
delete: (tenantSlug, id) => apiFetch(`/crm/segments/${id}`, {
|
|
17
|
+
method: "DELETE",
|
|
18
|
+
tenantSlug
|
|
19
|
+
}),
|
|
20
|
+
getCustomers: (tenantSlug, id, page = 1, limit = LIST_PAGE_SIZE) => apiFetch(
|
|
21
|
+
`/crm/segments/${id}/customers?page=${page}&limit=${limit}`,
|
|
22
|
+
{
|
|
23
|
+
tenantSlug
|
|
24
|
+
}
|
|
25
|
+
),
|
|
26
|
+
preview: (tenantSlug, filters, page = 1, limit = LIST_PAGE_SIZE) => apiFetch("/crm/segments/preview", {
|
|
27
|
+
method: "POST",
|
|
28
|
+
body: JSON.stringify({ filters, page, limit }),
|
|
29
|
+
tenantSlug
|
|
30
|
+
}),
|
|
31
|
+
refreshCounts: (tenantSlug) => apiFetch(
|
|
32
|
+
"/crm/segments/refresh-counts",
|
|
33
|
+
{
|
|
34
|
+
method: "POST",
|
|
35
|
+
tenantSlug
|
|
36
|
+
}
|
|
37
|
+
)
|
|
38
|
+
};
|
|
39
|
+
export {
|
|
40
|
+
crmSegmentsApi
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=crm-segments.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/api/crm-segments.ts"],"sourcesContent":["import { LIST_PAGE_SIZE } from '@withpotter/lib/list-page-size';\nimport { apiFetch } from './core';\nimport type {\n SegmentFilters,\n CustomerSegment,\n CreateSegmentInput,\n UpdateSegmentInput,\n SegmentPreviewResult,\n} from './types';\n\n// CRM Segments API\n\nexport const crmSegmentsApi = {\n list: (tenantSlug: string) =>\n apiFetch<CustomerSegment[]>('/crm/segments', { tenantSlug }),\n\n create: (tenantSlug: string, data: CreateSegmentInput) =>\n apiFetch<CustomerSegment>('/crm/segments', {\n method: 'POST',\n body: JSON.stringify(data),\n tenantSlug,\n }),\n\n getById: (tenantSlug: string, id: string) =>\n apiFetch<CustomerSegment>(`/crm/segments/${id}`, { tenantSlug }),\n\n update: (tenantSlug: string, id: string, data: UpdateSegmentInput) =>\n apiFetch<CustomerSegment>(`/crm/segments/${id}`, {\n method: 'PUT',\n body: JSON.stringify(data),\n tenantSlug,\n }),\n\n delete: (tenantSlug: string, id: string) =>\n apiFetch<void>(`/crm/segments/${id}`, {\n method: 'DELETE',\n tenantSlug,\n }),\n\n getCustomers: (\n tenantSlug: string,\n id: string,\n page = 1,\n limit = LIST_PAGE_SIZE,\n ) =>\n apiFetch<SegmentPreviewResult>(\n `/crm/segments/${id}/customers?page=${page}&limit=${limit}`,\n {\n tenantSlug,\n },\n ),\n\n preview: (\n tenantSlug: string,\n filters: SegmentFilters,\n page = 1,\n limit = LIST_PAGE_SIZE,\n ) =>\n apiFetch<SegmentPreviewResult>('/crm/segments/preview', {\n method: 'POST',\n body: JSON.stringify({ filters, page, limit }),\n tenantSlug,\n }),\n\n refreshCounts: (tenantSlug: string) =>\n apiFetch<{ total: number; updated: number }>(\n '/crm/segments/refresh-counts',\n {\n method: 'POST',\n tenantSlug,\n },\n ),\n};\n\n// CRM Analytics API\n"],"mappings":"AAAA,SAAS,sBAAsB;AAC/B,SAAS,gBAAgB;AAWlB,MAAM,iBAAiB;AAAA,EAC5B,MAAM,CAAC,eACL,SAA4B,iBAAiB,EAAE,WAAW,CAAC;AAAA,EAE7D,QAAQ,CAAC,YAAoB,SAC3B,SAA0B,iBAAiB;AAAA,IACzC,QAAQ;AAAA,IACR,MAAM,KAAK,UAAU,IAAI;AAAA,IACzB;AAAA,EACF,CAAC;AAAA,EAEH,SAAS,CAAC,YAAoB,OAC5B,SAA0B,iBAAiB,EAAE,IAAI,EAAE,WAAW,CAAC;AAAA,EAEjE,QAAQ,CAAC,YAAoB,IAAY,SACvC,SAA0B,iBAAiB,EAAE,IAAI;AAAA,IAC/C,QAAQ;AAAA,IACR,MAAM,KAAK,UAAU,IAAI;AAAA,IACzB;AAAA,EACF,CAAC;AAAA,EAEH,QAAQ,CAAC,YAAoB,OAC3B,SAAe,iBAAiB,EAAE,IAAI;AAAA,IACpC,QAAQ;AAAA,IACR;AAAA,EACF,CAAC;AAAA,EAEH,cAAc,CACZ,YACA,IACA,OAAO,GACP,QAAQ,mBAER;AAAA,IACE,iBAAiB,EAAE,mBAAmB,IAAI,UAAU,KAAK;AAAA,IACzD;AAAA,MACE;AAAA,IACF;AAAA,EACF;AAAA,EAEF,SAAS,CACP,YACA,SACA,OAAO,GACP,QAAQ,mBAER,SAA+B,yBAAyB;AAAA,IACtD,QAAQ;AAAA,IACR,MAAM,KAAK,UAAU,EAAE,SAAS,MAAM,MAAM,CAAC;AAAA,IAC7C;AAAA,EACF,CAAC;AAAA,EAEH,eAAe,CAAC,eACd;AAAA,IACE;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACJ;","names":[]}
|