@mohasinac/appkit 4.30.19 → 4.31.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_internal/client/features/layout/useSidebarSearch.d.ts +21 -5
- package/dist/_internal/client/features/layout/useSidebarSearch.js +27 -6
- package/dist/_internal/client/features/lottery/LotteryAdminEditView.d.ts +23 -3
- package/dist/_internal/client/features/lottery/LotteryAdminEditView.js +106 -87
- package/dist/_internal/client/features/lottery/LotteryPullForm.d.ts +16 -5
- package/dist/_internal/client/features/lottery/LotteryPullForm.js +65 -40
- package/dist/_internal/server/features/auth/permissions.d.ts +2 -0
- package/dist/_internal/server/features/auth/permissions.js +3 -2
- package/dist/_internal/server/features/categories/data.js +15 -4
- package/dist/_internal/server/features/classified/index.d.ts +0 -1
- package/dist/_internal/server/features/classified/index.js +0 -1
- package/dist/_internal/server/features/digital-code/index.d.ts +0 -1
- package/dist/_internal/server/features/digital-code/index.js +0 -1
- package/dist/_internal/server/features/live/index.d.ts +0 -1
- package/dist/_internal/server/features/live/index.js +0 -1
- package/dist/_internal/server/features/products/data.js +15 -5
- package/dist/_internal/server/features/products/list-public.d.ts +9 -0
- package/dist/_internal/server/features/products/list-public.js +95 -7
- package/dist/_internal/server/features/site-settings/adapters.d.ts +2 -2
- package/dist/_internal/server/features/site-settings/adapters.js +8 -5
- package/dist/_internal/server/features/tester/visibility.d.ts +2 -1
- package/dist/_internal/server/features/tester/visibility.js +2 -2
- package/dist/_internal/server/functions/scheduled.d.ts +3 -1
- package/dist/_internal/server/functions/scheduled.js +27 -1
- package/dist/_internal/server/jobs/core/hardBanCascade.js +4 -0
- package/dist/_internal/server/jobs/core/index.d.ts +2 -0
- package/dist/_internal/server/jobs/core/index.js +2 -0
- package/dist/_internal/server/jobs/core/pageViewPrune.d.ts +10 -0
- package/dist/_internal/server/jobs/core/pageViewPrune.js +44 -0
- package/dist/_internal/server/jobs/core/pageViewRollup.d.ts +2 -0
- package/dist/_internal/server/jobs/core/pageViewRollup.js +87 -0
- package/dist/_internal/server/jobs/handlers/index.d.ts +2 -0
- package/dist/_internal/server/jobs/handlers/index.js +2 -0
- package/dist/_internal/server/jobs/handlers/pageViewPrune.d.ts +2 -0
- package/dist/_internal/server/jobs/handlers/pageViewPrune.js +2 -0
- package/dist/_internal/server/jobs/handlers/pageViewRollup.d.ts +2 -0
- package/dist/_internal/server/jobs/handlers/pageViewRollup.js +2 -0
- package/dist/_internal/shared/actions/action-registry.d.ts +1 -1
- package/dist/_internal/shared/actions/action-registry.js +69 -22
- package/dist/_internal/shared/checkout/rules/classified.rule.d.ts +9 -4
- package/dist/_internal/shared/checkout/rules/classified.rule.js +7 -2
- package/dist/_internal/shared/features/layout/matchesNavQuery.d.ts +14 -0
- package/dist/_internal/shared/features/layout/matchesNavQuery.js +72 -0
- package/dist/_internal/shared/features/layout/types.d.ts +37 -1
- package/dist/_internal/shared/features/layout/types.js +19 -1
- package/dist/_internal/shared/features/notifications/action-url.d.ts +9 -1
- package/dist/_internal/shared/features/notifications/action-url.js +47 -0
- package/dist/_internal/shared/features/offers/config.d.ts +65 -0
- package/dist/_internal/shared/features/offers/config.js +73 -2
- package/dist/_internal/shared/features/orders/schema.d.ts +19 -1
- package/dist/_internal/shared/features/orders/schema.js +22 -2
- package/dist/_internal/shared/features/site-settings/types.d.ts +12 -3
- package/dist/_internal/shared/listing-types/capabilities.d.ts +8 -2
- package/dist/_internal/shared/listing-types/capabilities.js +6 -1
- package/dist/_internal/shared/listing-types/classified/ctas.js +6 -1
- package/dist/_internal/shared/listing-types/feature-flags.d.ts +10 -5
- package/dist/_internal/shared/listing-types/feature-flags.js +11 -6
- package/dist/client.d.ts +37 -20
- package/dist/client.js +36 -14
- package/dist/configs/next.js +10 -2
- package/dist/constants/api-endpoints.d.ts +18 -54
- package/dist/constants/api-endpoints.js +6 -26
- package/dist/constants/field-names.d.ts +6 -24
- package/dist/constants/field-names.js +10 -27
- package/dist/constants/geo/countries.d.ts +50 -0
- package/dist/constants/geo/countries.js +129 -0
- package/dist/constants/geo/subdivisions.d.ts +13 -0
- package/dist/constants/geo/subdivisions.js +104 -0
- package/dist/constants/index.d.ts +2 -2
- package/dist/constants/index.js +2 -2
- package/dist/constants/table-keys.d.ts +24 -0
- package/dist/constants/table-keys.js +28 -0
- package/dist/contracts/extend.d.ts +0 -9
- package/dist/contracts/index.d.ts +1 -1
- package/dist/contracts/realtime-session.js +7 -0
- package/dist/core/browser.d.ts +1 -1
- package/dist/core/browser.js +1 -1
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.js +1 -1
- package/dist/core/site-config.d.ts +0 -3
- package/dist/core/site-config.js +0 -3
- package/dist/errors/messages.d.ts +0 -8
- package/dist/errors/messages.js +0 -9
- package/dist/features/about/schemas/index.d.ts +8 -8
- package/dist/features/account/components/AddressFilters.js +32 -11
- package/dist/features/account/components/AddressForm.d.ts +26 -25
- package/dist/features/account/components/AddressForm.js +81 -103
- package/dist/features/account/components/AddressesIndexListing.js +8 -4
- package/dist/features/account/components/UserSidebar.d.ts +3 -4
- package/dist/features/account/components/UserSupportView.js +89 -58
- package/dist/features/account/components/index.d.ts +1 -7
- package/dist/features/account/components/index.js +0 -3
- package/dist/features/account/hooks/useAddresses.d.ts +4 -3
- package/dist/features/account/hooks/useAddresses.js +4 -6
- package/dist/features/account/hooks/useCollapsedSections.d.ts +51 -10
- package/dist/features/account/hooks/useCollapsedSections.js +211 -38
- package/dist/features/account/hooks/useProfile.d.ts +8 -0
- package/dist/features/account/index.d.ts +0 -3
- package/dist/features/account/index.js +0 -3
- package/dist/features/account/schemas/index.d.ts +0 -92
- package/dist/features/account/schemas/index.js +42 -20
- package/dist/features/addresses/components/AddressLocationFields.d.ts +13 -0
- package/dist/features/addresses/components/AddressLocationFields.js +41 -0
- package/dist/features/addresses/hooks/usePostalLookup.d.ts +17 -0
- package/dist/features/addresses/hooks/usePostalLookup.js +133 -0
- package/dist/features/addresses/schemas/address-form.d.ts +423 -0
- package/dist/features/addresses/schemas/address-form.js +212 -0
- package/dist/features/addresses/schemas/index.d.ts +1 -0
- package/dist/features/addresses/schemas/index.js +8 -0
- package/dist/features/admin/actions/admin-read-actions.d.ts +1 -1
- package/dist/features/admin/actions/index.d.ts +0 -1
- package/dist/features/admin/actions/index.js +0 -1
- package/dist/features/admin/actions/notification-actions.js +1 -41
- package/dist/features/admin/components/AdminActionIndexView.d.ts +32 -0
- package/dist/features/admin/components/AdminActionIndexView.js +128 -0
- package/dist/features/admin/components/AdminAdEditorView.js +159 -163
- package/dist/features/admin/components/AdminAddressEditorView.js +97 -55
- package/dist/features/admin/components/AdminBrandEditorView.d.ts +15 -0
- package/dist/features/admin/components/AdminBrandEditorView.js +113 -77
- package/dist/features/admin/components/AdminBundleEditorView.d.ts +19 -9
- package/dist/features/admin/components/AdminBundleEditorView.js +136 -168
- package/dist/features/admin/components/AdminCategoryEditorView.js +120 -43
- package/dist/features/admin/components/AdminCouponEditorView.js +145 -109
- package/dist/features/admin/components/AdminEmployeeEditorView.js +125 -56
- package/dist/features/admin/components/AdminFaqEditorView.js +112 -58
- package/dist/features/admin/components/AdminFeatureEditorView.js +108 -68
- package/dist/features/admin/components/AdminNavEditorView.js +69 -44
- package/dist/features/admin/components/AdminOrderEditorView.js +47 -10
- package/dist/features/admin/components/AdminPrizeDrawsView.js +16 -2
- package/dist/features/admin/components/AdminSidebar.d.ts +11 -7
- package/dist/features/admin/components/AdminSiteSettingsView.js +37 -37
- package/dist/features/admin/components/AdminStoreEditorView.js +75 -52
- package/dist/features/admin/components/AdminSublistingCategoryEditorView.js +71 -30
- package/dist/features/admin/components/AdminTesterChecklistItemEditorView.js +95 -65
- package/dist/features/admin/components/BrandQuickCreateForm.d.ts +10 -0
- package/dist/features/admin/components/BrandQuickCreateForm.js +49 -26
- package/dist/features/admin/components/CategoryQuickCreateForm.d.ts +11 -0
- package/dist/features/admin/components/CategoryQuickCreateForm.js +48 -26
- package/dist/features/admin/components/index.d.ts +2 -2
- package/dist/features/admin/components/index.js +1 -1
- package/dist/features/admin/constants/site-settings-tabs.d.ts +120 -0
- package/dist/features/admin/constants/site-settings-tabs.js +152 -0
- package/dist/features/admin/index.d.ts +0 -3
- package/dist/features/admin/index.js +0 -2
- package/dist/features/admin/repository/analytics-rollup.repository.d.ts +35 -0
- package/dist/features/admin/repository/analytics-rollup.repository.js +30 -0
- package/dist/features/admin/schemas/admin-editor-forms.d.ts +56 -57
- package/dist/features/admin/schemas/admin-editor-forms.js +97 -54
- package/dist/features/admin/schemas/admin-ops-forms.d.ts +57 -5
- package/dist/features/admin/schemas/admin-ops-forms.js +104 -20
- package/dist/features/admin/schemas/admin-user-form.js +7 -0
- package/dist/features/admin/schemas/firestore.d.ts +48 -95
- package/dist/features/admin/schemas/firestore.js +15 -151
- package/dist/features/admin/schemas/nav-item-form.js +9 -2
- package/dist/features/admin/server.d.ts +0 -4
- package/dist/features/admin/server.js +0 -2
- package/dist/features/admin/types/index.d.ts +0 -7
- package/dist/features/analytics/repository/page-views.repository.d.ts +14 -0
- package/dist/features/analytics/repository/page-views.repository.js +24 -0
- package/dist/features/auth/actions/index.d.ts +0 -1
- package/dist/features/auth/actions/index.js +0 -1
- package/dist/features/auth/actions/realtime-token-actions.js +1 -12
- package/dist/features/auth/auth-helpers.js +5 -7
- package/dist/features/auth/components/Guards.js +2 -1
- package/dist/features/auth/components/LoginForm.d.ts +0 -2
- package/dist/features/auth/components/LoginForm.js +1 -3
- package/dist/features/auth/components/RegisterForm.js +62 -19
- package/dist/features/auth/permissions/constants.d.ts +27 -1
- package/dist/features/auth/role-predicates.d.ts +75 -7
- package/dist/features/auth/role-predicates.js +28 -2
- package/dist/features/auth/schemas/firestore.d.ts +22 -0
- package/dist/features/auth/schemas/index.d.ts +1 -1
- package/dist/features/auth/schemas/index.js +44 -8
- package/dist/features/auth/types/index.d.ts +14 -1
- package/dist/features/blog/api/route.js +10 -2
- package/dist/features/blog/components/BlogIndexListing.js +1 -1
- package/dist/features/blog/hooks/useBlog.js +2 -2
- package/dist/features/blog/schemas/index.d.ts +4 -0
- package/dist/features/blog/schemas/index.js +2 -0
- package/dist/features/blog/types/index.d.ts +1 -1
- package/dist/features/catalogue/components/CatalogueItemEditorView.d.ts +22 -0
- package/dist/features/catalogue/components/CatalogueItemEditorView.js +112 -52
- package/dist/features/catalogue/schemas/validation.d.ts +4 -4
- package/dist/features/catalogue/schemas/validation.js +47 -10
- package/dist/features/categories/schemas/bundle-form.d.ts +142 -0
- package/dist/features/categories/schemas/bundle-form.js +149 -0
- package/dist/features/classified/components/ClassifiedDetailPageView.d.ts +5 -4
- package/dist/features/classified/components/ClassifiedDetailPageView.js +37 -16
- package/dist/features/consultation/components/ConsultationForm.js +1 -1
- package/dist/features/consultation/schemas/index.js +34 -10
- package/dist/features/corporate/schemas/index.js +36 -15
- package/dist/features/filters/FilterPanel.js +3 -3
- package/dist/features/filters/RangeFilter.d.ts +10 -0
- package/dist/features/filters/RangeFilter.js +41 -4
- package/dist/features/homepage/components/MarketplaceHomepageView.js +24 -5
- package/dist/features/homepage/hooks/useBlogArticles.js +1 -1
- package/dist/features/layout/BottomActions.js +84 -11
- package/dist/features/layout/BottomActionsContext.d.ts +1 -6
- package/dist/features/layout/BottomActionsContext.js +1 -1
- package/dist/features/layout/hooks/useBottomActions.js +2 -2
- package/dist/features/layout/hooks/useFormBottomActions.d.ts +12 -1
- package/dist/features/layout/hooks/useFormBottomActions.js +12 -6
- package/dist/features/lottery/schemas/config-write.d.ts +9 -5
- package/dist/features/lottery/schemas/config-write.js +69 -9
- package/dist/features/orders/schemas/buyer-forms.d.ts +6 -3
- package/dist/features/orders/schemas/buyer-forms.js +31 -3
- package/dist/features/orders/schemas/index.d.ts +2 -2
- package/dist/features/products/components/GroupSettingsPanel.js +3 -1
- package/dist/features/products/components/MakeOfferButton.d.ts +13 -2
- package/dist/features/products/components/MakeOfferButton.js +33 -11
- package/dist/features/products/components/ProductDetailActions.js +0 -1
- package/dist/features/products/components/ProductDetailPageView.d.ts +7 -3
- package/dist/features/products/components/ProductDetailPageView.js +8 -5
- package/dist/features/products/constants/action-defs.d.ts +1 -2
- package/dist/features/products/constants/action-defs.js +40 -43
- package/dist/features/products/repository/products.repository.d.ts +5 -1
- package/dist/features/products/repository/products.repository.js +23 -1
- package/dist/features/products/schemas/firestore.d.ts +7 -3
- package/dist/features/products/schemas/product-features.validators.js +3 -0
- package/dist/features/promotions/components/CouponCard.js +8 -7
- package/dist/features/scams/schemas/firestore.d.ts +15 -1
- package/dist/features/scams/schemas/report-form.d.ts +5 -5
- package/dist/features/scams/schemas/report-form.js +18 -3
- package/dist/features/search/action-index/derive.d.ts +49 -0
- package/dist/features/search/action-index/derive.js +121 -0
- package/dist/features/search/action-index/repository.d.ts +42 -0
- package/dist/features/search/action-index/repository.js +100 -0
- package/dist/features/search/action-index/settings-entries.d.ts +41 -0
- package/dist/features/search/action-index/settings-entries.js +268 -0
- package/dist/features/search/action-index/types.d.ts +81 -0
- package/dist/features/search/action-index/types.js +102 -0
- package/dist/features/search/action-index/validate-entry.d.ts +34 -0
- package/dist/features/search/action-index/validate-entry.js +114 -0
- package/dist/features/search/hooks/useNavSuggestions.d.ts +5 -1
- package/dist/features/search/hooks/useNavSuggestions.js +23 -3
- package/dist/features/search/repository/search.repository.js +3 -1
- package/dist/features/seller/actions/offer-actions.js +43 -24
- package/dist/features/seller/actions/seller-actions.js +29 -5
- package/dist/features/seller/components/CategoryChipPicker.d.ts +9 -0
- package/dist/features/seller/components/CategoryChipPicker.js +12 -0
- package/dist/features/seller/components/SellerAddressesView.js +5 -1
- package/dist/features/seller/components/SellerAnalyticsAlertsView.js +83 -43
- package/dist/features/seller/components/SellerArtView.d.ts +14 -7
- package/dist/features/seller/components/SellerArtView.js +4 -119
- package/dist/features/seller/components/SellerClassifiedView.d.ts +14 -7
- package/dist/features/seller/components/SellerClassifiedView.js +4 -124
- package/dist/features/seller/components/SellerCouponEditorView.d.ts +22 -1
- package/dist/features/seller/components/SellerCouponEditorView.js +91 -45
- package/dist/features/seller/components/SellerDigitalCodesView.d.ts +14 -7
- package/dist/features/seller/components/SellerDigitalCodesView.js +4 -126
- package/dist/features/seller/components/SellerListingTypeView.d.ts +66 -0
- package/dist/features/seller/components/SellerListingTypeView.js +277 -0
- package/dist/features/seller/components/SellerLiveView.d.ts +14 -7
- package/dist/features/seller/components/SellerLiveView.js +4 -126
- package/dist/features/seller/components/SellerSidebar.d.ts +3 -6
- package/dist/features/seller/components/SellerStickersView.d.ts +14 -7
- package/dist/features/seller/components/SellerStickersView.js +4 -119
- package/dist/features/seller/components/SellerSupportView.d.ts +31 -0
- package/dist/features/seller/components/SellerSupportView.js +100 -0
- package/dist/features/seller/components/index.d.ts +4 -8
- package/dist/features/seller/components/index.js +2 -4
- package/dist/features/seller/index.d.ts +0 -1
- package/dist/features/seller/index.js +0 -1
- package/dist/features/seller/schemas/coupon-form.d.ts +214 -0
- package/dist/features/seller/schemas/coupon-form.js +155 -23
- package/dist/features/seller/schemas/offer-forms.d.ts +16 -7
- package/dist/features/seller/schemas/offer-forms.js +28 -12
- package/dist/features/shell/FormShell.js +2 -2
- package/dist/features/shell/QuickFormDrawer.js +2 -2
- package/dist/features/shell/SectionForm.d.ts +19 -1
- package/dist/features/shell/SectionForm.js +104 -17
- package/dist/features/shell/build-sections.d.ts +23 -0
- package/dist/features/shell/build-sections.js +106 -8
- package/dist/features/shell/field-ui-meta.d.ts +44 -0
- package/dist/features/shell/field-ui-meta.js +14 -7
- package/dist/features/shell/form-sections.d.ts +46 -0
- package/dist/features/shell/form-sections.js +114 -0
- package/dist/features/shipments/components/AdminShipmentEditorView.js +87 -64
- package/dist/features/shipments/schemas/validation.d.ts +2 -2
- package/dist/features/shipments/schemas/validation.js +44 -13
- package/dist/features/store-extensions/schemas/custom-role-form.js +6 -2
- package/dist/features/store-extensions/schemas/listing-template-form.d.ts +7 -7
- package/dist/features/store-extensions/schemas/payout-method-form.js +14 -0
- package/dist/features/stores/actions/store-query-actions.js +3 -2
- package/dist/features/stores/api/[storeSlug]/auctions/route.js +3 -1
- package/dist/features/stores/api/[storeSlug]/products/route.js +3 -1
- package/dist/features/support/repository/support.repository.d.ts +21 -0
- package/dist/features/support/repository/support.repository.js +63 -0
- package/dist/features/support/schemas/firestore.d.ts +27 -2
- package/dist/features/support/schemas/firestore.js +2 -0
- package/dist/features/support/schemas/ticket-create-form.js +7 -0
- package/dist/features/tester/schemas/checklist-item-form.d.ts +43 -0
- package/dist/features/tester/schemas/checklist-item-form.js +109 -0
- package/dist/features/tester/seed-data/blog-tester-seed-data.js +2 -2
- package/dist/features/tester/seed-data/categories-tester-seed-data.js +2 -2
- package/dist/features/tester/seed-data/events-tester-seed-data.js +5 -5
- package/dist/features/tester/seed-data/orders-tester-seed-data.js +2 -2
- package/dist/features/tester/seed-data/products-tester-seed-data.js +48 -49
- package/dist/features/tester/seed-data/stores-tester-seed-data.js +3 -3
- package/dist/features/tester/seed-data/tester-checklist-seed-data.js +275 -29
- package/dist/features/whatsapp-bot/components/SellerWhatsAppSettingsView.js +48 -12
- package/dist/http/api-handler.js +2 -1
- package/dist/index.d.ts +24 -103
- package/dist/index.js +33 -141
- package/dist/jobs.d.ts +1 -1
- package/dist/jobs.js +1 -1
- package/dist/monitoring/browser.d.ts +0 -2
- package/dist/monitoring/browser.js +12 -1
- package/dist/monitoring/index.d.ts +0 -2
- package/dist/monitoring/index.js +0 -1
- package/dist/next/api/routeHandler.js +6 -3
- package/dist/next/index.d.ts +1 -2
- package/dist/next/index.js +0 -1
- package/dist/next/middleware/index.d.ts +0 -2
- package/dist/next/middleware/index.js +0 -1
- package/dist/next/routing/route-map.d.ts +8 -7
- package/dist/next/routing/route-map.js +10 -3
- package/dist/providers/db-firebase/admin.js +15 -1
- package/dist/providers/db-firebase/sieve.d.ts +22 -0
- package/dist/react/hooks/useListingTypeFlags.d.ts +1 -1
- package/dist/react/hooks/useListingTypeFlags.js +1 -1
- package/dist/react/hooks/usePendingFilters.js +5 -3
- package/dist/react/hooks/usePendingTable.js +15 -3
- package/dist/repositories/index.d.ts +0 -1
- package/dist/repositories/index.js +0 -1
- package/dist/schemas/registry.d.ts +197 -232
- package/dist/schemas/registry.js +5 -6
- package/dist/schemas/webhooks/razorpay.d.ts +50 -50
- package/dist/security/authorization.d.ts +9 -0
- package/dist/security/authorization.js +16 -2
- package/dist/security/browser.d.ts +1 -3
- package/dist/security/browser.js +5 -2
- package/dist/security/index.d.ts +1 -3
- package/dist/security/index.js +19 -2
- package/dist/security/pii-encrypt.js +16 -0
- package/dist/security/pii-schemas.d.ts +0 -14
- package/dist/security/pii-schemas.js +7 -15
- package/dist/seed/_helpers/category-forest.js +2 -2
- package/dist/seed/_helpers/media.d.ts +19 -0
- package/dist/seed/_helpers/media.js +75 -0
- package/dist/seed/blog-posts-seed-data.js +17 -17
- package/dist/seed/carousel-slides-seed-data.js +7 -7
- package/dist/seed/cart-seed-data.js +13 -13
- package/dist/seed/categories-seed-data.js +10 -10
- package/dist/seed/events-seed-data.js +24 -24
- package/dist/seed/factories/product.factory.js +4 -4
- package/dist/seed/factories/store.factory.js +3 -3
- package/dist/seed/factories/user.factory.js +2 -2
- package/dist/seed/grouped-listings-seed-data.js +11 -11
- package/dist/seed/homepage-sections-seed-data.js +2 -2
- package/dist/seed/index.d.ts +0 -1
- package/dist/seed/index.js +0 -1
- package/dist/seed/manifest.d.ts +1 -1
- package/dist/seed/manifest.js +0 -5
- package/dist/seed/notifications-seed-data.js +20 -1
- package/dist/seed/orders-seed-data.js +2 -2
- package/dist/seed/products-art-seed-data.js +16 -16
- package/dist/seed/products-auctions-seed-data.js +34 -34
- package/dist/seed/products-classifieds-seed-data.js +35 -37
- package/dist/seed/products-digital-codes-seed-data.js +20 -20
- package/dist/seed/products-live-items-seed-data.js +11 -11
- package/dist/seed/products-preorders-seed-data.js +13 -13
- package/dist/seed/products-prize-draws-seed-data.js +43 -43
- package/dist/seed/products-standard-seed-data.js +54 -54
- package/dist/seed/products-stickers-seed-data.js +15 -15
- package/dist/seed/reviews-seed-data.js +4 -4
- package/dist/seed/scammers-seed-data.js +3 -3
- package/dist/seed/site-settings-seed-data.js +11 -24
- package/dist/seed/store-extensions-seed-data.js +10 -10
- package/dist/seed/stores-seed-data.js +11 -11
- package/dist/seed/support-tickets-seed-data.d.ts +14 -0
- package/dist/seed/support-tickets-seed-data.js +20 -1
- package/dist/seed/users-seed-data.js +20 -20
- package/dist/server-entry.d.ts +0 -1
- package/dist/server-entry.js +0 -1
- package/dist/server.d.ts +9 -6
- package/dist/server.js +7 -13
- package/dist/styles.css +248 -68
- package/dist/tailwind-utilities.css +1 -1
- package/dist/tokens/themes/default-dark.js +2 -2
- package/dist/tokens/themes/default-light.js +2 -2
- package/dist/tokens/tokens.css +24 -4
- package/dist/ui/components/ActionRow.d.ts +50 -0
- package/dist/ui/components/ActionRow.js +53 -0
- package/dist/ui/components/ActionRow.style.css +145 -0
- package/dist/ui/components/Drawer.d.ts +10 -0
- package/dist/ui/components/Drawer.js +2 -1
- package/dist/ui/components/FilterDrawer.js +4 -1
- package/dist/ui/components/FilterDrawer.style.css +6 -12
- package/dist/ui/components/FormActionBar.js +14 -1
- package/dist/ui/components/FormActionBar.style.css +12 -11
- package/dist/ui/components/ListingLayout.js +8 -1
- package/dist/ui/components/ListingLayout.style.css +6 -13
- package/dist/ui/components/Modal.d.ts +15 -1
- package/dist/ui/components/Modal.js +17 -3
- package/dist/ui/components/QuickCreateModal.js +2 -2
- package/dist/ui/components/QuickCreateModal.style.css +78 -84
- package/dist/ui/components/RecordDetailModal.js +2 -2
- package/dist/ui/components/SideDrawer.d.ts +8 -0
- package/dist/ui/components/SideDrawer.js +2 -1
- package/dist/ui/components/SideDrawer.style.css +6 -3
- package/dist/ui/components/SideModal.d.ts +11 -1
- package/dist/ui/components/SideModal.js +3 -2
- package/dist/ui/components/SideModal.style.css +14 -0
- package/dist/ui/components/Typography.style.css +33 -24
- package/dist/ui/components/index.style.css +1 -0
- package/dist/ui/forms/FormShell.style.css +260 -311
- package/dist/ui/index.d.ts +2 -0
- package/dist/ui/index.js +1 -0
- package/dist/utils/index.d.ts +0 -1
- package/dist/utils/index.js +0 -1
- package/dist/validation/index.d.ts +1 -1
- package/dist/validation/index.js +1 -1
- package/dist/validation/schemas.d.ts +0 -19
- package/dist/validation/schemas.js +8 -19
- package/package.json +1 -1
- package/scripts/seed-cli.mjs +3 -6
|
@@ -0,0 +1,423 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* The ONE postal rule.
|
|
4
|
+
*
|
|
5
|
+
* Fifteen used to disagree — two of them server-side rules on the same
|
|
6
|
+
* entity — and this is the only one now, shared by every form and every route
|
|
7
|
+
* that writes an address.
|
|
8
|
+
*
|
|
9
|
+
* The message names what the country itself calls the field, so a Canadian
|
|
10
|
+
* address is never told to enter a "PIN code". An unknown country falls back
|
|
11
|
+
* to a length bound inside `isValidPostalCode`, because a postal rule exists
|
|
12
|
+
* to catch a typo and must never block a save.
|
|
13
|
+
*/
|
|
14
|
+
export declare function refineAddressPostal(v: {
|
|
15
|
+
postalCode?: string;
|
|
16
|
+
country?: string;
|
|
17
|
+
}, ctx: z.RefinementCtx): void;
|
|
18
|
+
/**
|
|
19
|
+
* 🛑 `annotate()` must be the OUTERMOST call on each field — it keys a WeakMap
|
|
20
|
+
* by schema instance and every zod wrapper returns a new one.
|
|
21
|
+
*/
|
|
22
|
+
export declare const addressFormSchema: z.ZodEffects<z.ZodObject<{
|
|
23
|
+
label: z.ZodString;
|
|
24
|
+
fullName: z.ZodString;
|
|
25
|
+
phone: z.ZodString;
|
|
26
|
+
addressLine1: z.ZodString;
|
|
27
|
+
addressLine2: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
|
|
28
|
+
landmark: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
|
|
29
|
+
city: z.ZodString;
|
|
30
|
+
state: z.ZodString;
|
|
31
|
+
postalCode: z.ZodString;
|
|
32
|
+
country: z.ZodDefault<z.ZodString>;
|
|
33
|
+
isDefault: z.ZodDefault<z.ZodBoolean>;
|
|
34
|
+
}, "strip", z.ZodTypeAny, {
|
|
35
|
+
country: string;
|
|
36
|
+
label: string;
|
|
37
|
+
isDefault: boolean;
|
|
38
|
+
fullName: string;
|
|
39
|
+
phone: string;
|
|
40
|
+
addressLine1: string;
|
|
41
|
+
city: string;
|
|
42
|
+
state: string;
|
|
43
|
+
postalCode: string;
|
|
44
|
+
addressLine2?: string | undefined;
|
|
45
|
+
landmark?: string | undefined;
|
|
46
|
+
}, {
|
|
47
|
+
label: string;
|
|
48
|
+
fullName: string;
|
|
49
|
+
phone: string;
|
|
50
|
+
addressLine1: string;
|
|
51
|
+
city: string;
|
|
52
|
+
state: string;
|
|
53
|
+
postalCode: string;
|
|
54
|
+
country?: string | undefined;
|
|
55
|
+
isDefault?: boolean | undefined;
|
|
56
|
+
addressLine2?: string | undefined;
|
|
57
|
+
landmark?: string | undefined;
|
|
58
|
+
}>, {
|
|
59
|
+
country: string;
|
|
60
|
+
label: string;
|
|
61
|
+
isDefault: boolean;
|
|
62
|
+
fullName: string;
|
|
63
|
+
phone: string;
|
|
64
|
+
addressLine1: string;
|
|
65
|
+
city: string;
|
|
66
|
+
state: string;
|
|
67
|
+
postalCode: string;
|
|
68
|
+
addressLine2?: string | undefined;
|
|
69
|
+
landmark?: string | undefined;
|
|
70
|
+
}, {
|
|
71
|
+
label: string;
|
|
72
|
+
fullName: string;
|
|
73
|
+
phone: string;
|
|
74
|
+
addressLine1: string;
|
|
75
|
+
city: string;
|
|
76
|
+
state: string;
|
|
77
|
+
postalCode: string;
|
|
78
|
+
country?: string | undefined;
|
|
79
|
+
isDefault?: boolean | undefined;
|
|
80
|
+
addressLine2?: string | undefined;
|
|
81
|
+
landmark?: string | undefined;
|
|
82
|
+
}>;
|
|
83
|
+
export type AddressFormValues = z.infer<typeof addressFormSchema>;
|
|
84
|
+
/**
|
|
85
|
+
* A partial update.
|
|
86
|
+
*
|
|
87
|
+
* `.partial()` on the inner object, then the same refinement — an edit that
|
|
88
|
+
* changes only the label must not be told its postal code is missing, but an
|
|
89
|
+
* edit that changes the postal code must still be checked against the country.
|
|
90
|
+
*/
|
|
91
|
+
export declare const addressUpdateSchema: z.ZodEffects<z.ZodObject<{
|
|
92
|
+
label: z.ZodOptional<z.ZodString>;
|
|
93
|
+
fullName: z.ZodOptional<z.ZodString>;
|
|
94
|
+
phone: z.ZodOptional<z.ZodString>;
|
|
95
|
+
addressLine1: z.ZodOptional<z.ZodString>;
|
|
96
|
+
addressLine2: z.ZodOptional<z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>>;
|
|
97
|
+
landmark: z.ZodOptional<z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>>;
|
|
98
|
+
city: z.ZodOptional<z.ZodString>;
|
|
99
|
+
state: z.ZodOptional<z.ZodString>;
|
|
100
|
+
postalCode: z.ZodOptional<z.ZodString>;
|
|
101
|
+
country: z.ZodOptional<z.ZodDefault<z.ZodString>>;
|
|
102
|
+
isDefault: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
|
|
103
|
+
}, "strip", z.ZodTypeAny, {
|
|
104
|
+
country?: string | undefined;
|
|
105
|
+
label?: string | undefined;
|
|
106
|
+
isDefault?: boolean | undefined;
|
|
107
|
+
fullName?: string | undefined;
|
|
108
|
+
phone?: string | undefined;
|
|
109
|
+
addressLine1?: string | undefined;
|
|
110
|
+
city?: string | undefined;
|
|
111
|
+
state?: string | undefined;
|
|
112
|
+
postalCode?: string | undefined;
|
|
113
|
+
addressLine2?: string | undefined;
|
|
114
|
+
landmark?: string | undefined;
|
|
115
|
+
}, {
|
|
116
|
+
country?: string | undefined;
|
|
117
|
+
label?: string | undefined;
|
|
118
|
+
isDefault?: boolean | undefined;
|
|
119
|
+
fullName?: string | undefined;
|
|
120
|
+
phone?: string | undefined;
|
|
121
|
+
addressLine1?: string | undefined;
|
|
122
|
+
city?: string | undefined;
|
|
123
|
+
state?: string | undefined;
|
|
124
|
+
postalCode?: string | undefined;
|
|
125
|
+
addressLine2?: string | undefined;
|
|
126
|
+
landmark?: string | undefined;
|
|
127
|
+
}>, {
|
|
128
|
+
country?: string | undefined;
|
|
129
|
+
label?: string | undefined;
|
|
130
|
+
isDefault?: boolean | undefined;
|
|
131
|
+
fullName?: string | undefined;
|
|
132
|
+
phone?: string | undefined;
|
|
133
|
+
addressLine1?: string | undefined;
|
|
134
|
+
city?: string | undefined;
|
|
135
|
+
state?: string | undefined;
|
|
136
|
+
postalCode?: string | undefined;
|
|
137
|
+
addressLine2?: string | undefined;
|
|
138
|
+
landmark?: string | undefined;
|
|
139
|
+
}, {
|
|
140
|
+
country?: string | undefined;
|
|
141
|
+
label?: string | undefined;
|
|
142
|
+
isDefault?: boolean | undefined;
|
|
143
|
+
fullName?: string | undefined;
|
|
144
|
+
phone?: string | undefined;
|
|
145
|
+
addressLine1?: string | undefined;
|
|
146
|
+
city?: string | undefined;
|
|
147
|
+
state?: string | undefined;
|
|
148
|
+
postalCode?: string | undefined;
|
|
149
|
+
addressLine2?: string | undefined;
|
|
150
|
+
landmark?: string | undefined;
|
|
151
|
+
}>;
|
|
152
|
+
export type AddressUpdateValues = z.infer<typeof addressUpdateSchema>;
|
|
153
|
+
/**
|
|
154
|
+
* An address as an ADMIN writes it — the shared shape plus the owner it
|
|
155
|
+
* belongs to, which only an admin may choose.
|
|
156
|
+
*
|
|
157
|
+
* Extended from the same base rather than restated. It was restated: the admin
|
|
158
|
+
* route declared its own eleven fields with `postalCode: z.string().min(6).max(6)`
|
|
159
|
+
* — a LENGTH check with no character class, so `"abcdef"` was a valid Indian
|
|
160
|
+
* PIN code as far as that route was concerned.
|
|
161
|
+
*/
|
|
162
|
+
export declare const adminAddressCreateSchema: z.ZodEffects<z.ZodObject<{
|
|
163
|
+
label: z.ZodString;
|
|
164
|
+
fullName: z.ZodString;
|
|
165
|
+
phone: z.ZodString;
|
|
166
|
+
addressLine1: z.ZodString;
|
|
167
|
+
addressLine2: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
|
|
168
|
+
landmark: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
|
|
169
|
+
city: z.ZodString;
|
|
170
|
+
state: z.ZodString;
|
|
171
|
+
postalCode: z.ZodString;
|
|
172
|
+
country: z.ZodDefault<z.ZodString>;
|
|
173
|
+
isDefault: z.ZodDefault<z.ZodBoolean>;
|
|
174
|
+
} & {
|
|
175
|
+
ownerType: z.ZodEnum<["user", "store"]>;
|
|
176
|
+
ownerId: z.ZodString;
|
|
177
|
+
}, "strip", z.ZodTypeAny, {
|
|
178
|
+
country: string;
|
|
179
|
+
label: string;
|
|
180
|
+
isDefault: boolean;
|
|
181
|
+
ownerId: string;
|
|
182
|
+
ownerType: "user" | "store";
|
|
183
|
+
fullName: string;
|
|
184
|
+
phone: string;
|
|
185
|
+
addressLine1: string;
|
|
186
|
+
city: string;
|
|
187
|
+
state: string;
|
|
188
|
+
postalCode: string;
|
|
189
|
+
addressLine2?: string | undefined;
|
|
190
|
+
landmark?: string | undefined;
|
|
191
|
+
}, {
|
|
192
|
+
label: string;
|
|
193
|
+
ownerId: string;
|
|
194
|
+
ownerType: "user" | "store";
|
|
195
|
+
fullName: string;
|
|
196
|
+
phone: string;
|
|
197
|
+
addressLine1: string;
|
|
198
|
+
city: string;
|
|
199
|
+
state: string;
|
|
200
|
+
postalCode: string;
|
|
201
|
+
country?: string | undefined;
|
|
202
|
+
isDefault?: boolean | undefined;
|
|
203
|
+
addressLine2?: string | undefined;
|
|
204
|
+
landmark?: string | undefined;
|
|
205
|
+
}>, {
|
|
206
|
+
country: string;
|
|
207
|
+
label: string;
|
|
208
|
+
isDefault: boolean;
|
|
209
|
+
ownerId: string;
|
|
210
|
+
ownerType: "user" | "store";
|
|
211
|
+
fullName: string;
|
|
212
|
+
phone: string;
|
|
213
|
+
addressLine1: string;
|
|
214
|
+
city: string;
|
|
215
|
+
state: string;
|
|
216
|
+
postalCode: string;
|
|
217
|
+
addressLine2?: string | undefined;
|
|
218
|
+
landmark?: string | undefined;
|
|
219
|
+
}, {
|
|
220
|
+
label: string;
|
|
221
|
+
ownerId: string;
|
|
222
|
+
ownerType: "user" | "store";
|
|
223
|
+
fullName: string;
|
|
224
|
+
phone: string;
|
|
225
|
+
addressLine1: string;
|
|
226
|
+
city: string;
|
|
227
|
+
state: string;
|
|
228
|
+
postalCode: string;
|
|
229
|
+
country?: string | undefined;
|
|
230
|
+
isDefault?: boolean | undefined;
|
|
231
|
+
addressLine2?: string | undefined;
|
|
232
|
+
landmark?: string | undefined;
|
|
233
|
+
}>;
|
|
234
|
+
export declare const adminAddressUpdateSchema: z.ZodEffects<z.ZodObject<{
|
|
235
|
+
label: z.ZodOptional<z.ZodString>;
|
|
236
|
+
fullName: z.ZodOptional<z.ZodString>;
|
|
237
|
+
phone: z.ZodOptional<z.ZodString>;
|
|
238
|
+
addressLine1: z.ZodOptional<z.ZodString>;
|
|
239
|
+
addressLine2: z.ZodOptional<z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>>;
|
|
240
|
+
landmark: z.ZodOptional<z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>>;
|
|
241
|
+
city: z.ZodOptional<z.ZodString>;
|
|
242
|
+
state: z.ZodOptional<z.ZodString>;
|
|
243
|
+
postalCode: z.ZodOptional<z.ZodString>;
|
|
244
|
+
country: z.ZodOptional<z.ZodDefault<z.ZodString>>;
|
|
245
|
+
isDefault: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
|
|
246
|
+
ownerType: z.ZodOptional<z.ZodEnum<["user", "store"]>>;
|
|
247
|
+
ownerId: z.ZodOptional<z.ZodString>;
|
|
248
|
+
}, "strip", z.ZodTypeAny, {
|
|
249
|
+
country?: string | undefined;
|
|
250
|
+
label?: string | undefined;
|
|
251
|
+
isDefault?: boolean | undefined;
|
|
252
|
+
ownerId?: string | undefined;
|
|
253
|
+
ownerType?: "user" | "store" | undefined;
|
|
254
|
+
fullName?: string | undefined;
|
|
255
|
+
phone?: string | undefined;
|
|
256
|
+
addressLine1?: string | undefined;
|
|
257
|
+
city?: string | undefined;
|
|
258
|
+
state?: string | undefined;
|
|
259
|
+
postalCode?: string | undefined;
|
|
260
|
+
addressLine2?: string | undefined;
|
|
261
|
+
landmark?: string | undefined;
|
|
262
|
+
}, {
|
|
263
|
+
country?: string | undefined;
|
|
264
|
+
label?: string | undefined;
|
|
265
|
+
isDefault?: boolean | undefined;
|
|
266
|
+
ownerId?: string | undefined;
|
|
267
|
+
ownerType?: "user" | "store" | undefined;
|
|
268
|
+
fullName?: string | undefined;
|
|
269
|
+
phone?: string | undefined;
|
|
270
|
+
addressLine1?: string | undefined;
|
|
271
|
+
city?: string | undefined;
|
|
272
|
+
state?: string | undefined;
|
|
273
|
+
postalCode?: string | undefined;
|
|
274
|
+
addressLine2?: string | undefined;
|
|
275
|
+
landmark?: string | undefined;
|
|
276
|
+
}>, {
|
|
277
|
+
country?: string | undefined;
|
|
278
|
+
label?: string | undefined;
|
|
279
|
+
isDefault?: boolean | undefined;
|
|
280
|
+
ownerId?: string | undefined;
|
|
281
|
+
ownerType?: "user" | "store" | undefined;
|
|
282
|
+
fullName?: string | undefined;
|
|
283
|
+
phone?: string | undefined;
|
|
284
|
+
addressLine1?: string | undefined;
|
|
285
|
+
city?: string | undefined;
|
|
286
|
+
state?: string | undefined;
|
|
287
|
+
postalCode?: string | undefined;
|
|
288
|
+
addressLine2?: string | undefined;
|
|
289
|
+
landmark?: string | undefined;
|
|
290
|
+
}, {
|
|
291
|
+
country?: string | undefined;
|
|
292
|
+
label?: string | undefined;
|
|
293
|
+
isDefault?: boolean | undefined;
|
|
294
|
+
ownerId?: string | undefined;
|
|
295
|
+
ownerType?: "user" | "store" | undefined;
|
|
296
|
+
fullName?: string | undefined;
|
|
297
|
+
phone?: string | undefined;
|
|
298
|
+
addressLine1?: string | undefined;
|
|
299
|
+
city?: string | undefined;
|
|
300
|
+
state?: string | undefined;
|
|
301
|
+
postalCode?: string | undefined;
|
|
302
|
+
addressLine2?: string | undefined;
|
|
303
|
+
landmark?: string | undefined;
|
|
304
|
+
}>;
|
|
305
|
+
export type AdminAddressCreateValues = z.infer<typeof adminAddressCreateSchema>;
|
|
306
|
+
/**
|
|
307
|
+
* The admin PATCH body — an address edit OR a moderation verb.
|
|
308
|
+
*
|
|
309
|
+
* 🛑 Declared HERE rather than `.extend()`-ed at the route, because the
|
|
310
|
+
* consumer is on zod 4 and appkit compiles against zod 3 (the two-zod split
|
|
311
|
+
* documented in `field-ui-meta.ts`). Extending an appkit schema with
|
|
312
|
+
* consumer-side `z` produces a type error at best and two incompatible
|
|
313
|
+
* validator instances at worst.
|
|
314
|
+
*
|
|
315
|
+
* `action` and `banReason` are not address FIELDS — an admin banning an
|
|
316
|
+
* address is not editing it — which is why they sit alongside the shape
|
|
317
|
+
* rather than inside it.
|
|
318
|
+
*/
|
|
319
|
+
export declare const adminAddressPatchSchema: z.ZodEffects<z.ZodObject<{
|
|
320
|
+
label: z.ZodOptional<z.ZodString>;
|
|
321
|
+
fullName: z.ZodOptional<z.ZodString>;
|
|
322
|
+
phone: z.ZodOptional<z.ZodString>;
|
|
323
|
+
addressLine1: z.ZodOptional<z.ZodString>;
|
|
324
|
+
addressLine2: z.ZodOptional<z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>>;
|
|
325
|
+
landmark: z.ZodOptional<z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>>;
|
|
326
|
+
city: z.ZodOptional<z.ZodString>;
|
|
327
|
+
state: z.ZodOptional<z.ZodString>;
|
|
328
|
+
postalCode: z.ZodOptional<z.ZodString>;
|
|
329
|
+
country: z.ZodOptional<z.ZodDefault<z.ZodString>>;
|
|
330
|
+
isDefault: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
|
|
331
|
+
ownerType: z.ZodOptional<z.ZodEnum<["user", "store"]>>;
|
|
332
|
+
ownerId: z.ZodOptional<z.ZodString>;
|
|
333
|
+
} & {
|
|
334
|
+
action: z.ZodOptional<z.ZodEnum<["ban", "approve_unban", "reject_unban"]>>;
|
|
335
|
+
banReason: z.ZodOptional<z.ZodString>;
|
|
336
|
+
}, "strip", z.ZodTypeAny, {
|
|
337
|
+
country?: string | undefined;
|
|
338
|
+
label?: string | undefined;
|
|
339
|
+
action?: "ban" | "approve_unban" | "reject_unban" | undefined;
|
|
340
|
+
isDefault?: boolean | undefined;
|
|
341
|
+
banReason?: string | undefined;
|
|
342
|
+
ownerId?: string | undefined;
|
|
343
|
+
ownerType?: "user" | "store" | undefined;
|
|
344
|
+
fullName?: string | undefined;
|
|
345
|
+
phone?: string | undefined;
|
|
346
|
+
addressLine1?: string | undefined;
|
|
347
|
+
city?: string | undefined;
|
|
348
|
+
state?: string | undefined;
|
|
349
|
+
postalCode?: string | undefined;
|
|
350
|
+
addressLine2?: string | undefined;
|
|
351
|
+
landmark?: string | undefined;
|
|
352
|
+
}, {
|
|
353
|
+
country?: string | undefined;
|
|
354
|
+
label?: string | undefined;
|
|
355
|
+
action?: "ban" | "approve_unban" | "reject_unban" | undefined;
|
|
356
|
+
isDefault?: boolean | undefined;
|
|
357
|
+
banReason?: string | undefined;
|
|
358
|
+
ownerId?: string | undefined;
|
|
359
|
+
ownerType?: "user" | "store" | undefined;
|
|
360
|
+
fullName?: string | undefined;
|
|
361
|
+
phone?: string | undefined;
|
|
362
|
+
addressLine1?: string | undefined;
|
|
363
|
+
city?: string | undefined;
|
|
364
|
+
state?: string | undefined;
|
|
365
|
+
postalCode?: string | undefined;
|
|
366
|
+
addressLine2?: string | undefined;
|
|
367
|
+
landmark?: string | undefined;
|
|
368
|
+
}>, {
|
|
369
|
+
country?: string | undefined;
|
|
370
|
+
label?: string | undefined;
|
|
371
|
+
action?: "ban" | "approve_unban" | "reject_unban" | undefined;
|
|
372
|
+
isDefault?: boolean | undefined;
|
|
373
|
+
banReason?: string | undefined;
|
|
374
|
+
ownerId?: string | undefined;
|
|
375
|
+
ownerType?: "user" | "store" | undefined;
|
|
376
|
+
fullName?: string | undefined;
|
|
377
|
+
phone?: string | undefined;
|
|
378
|
+
addressLine1?: string | undefined;
|
|
379
|
+
city?: string | undefined;
|
|
380
|
+
state?: string | undefined;
|
|
381
|
+
postalCode?: string | undefined;
|
|
382
|
+
addressLine2?: string | undefined;
|
|
383
|
+
landmark?: string | undefined;
|
|
384
|
+
}, {
|
|
385
|
+
country?: string | undefined;
|
|
386
|
+
label?: string | undefined;
|
|
387
|
+
action?: "ban" | "approve_unban" | "reject_unban" | undefined;
|
|
388
|
+
isDefault?: boolean | undefined;
|
|
389
|
+
banReason?: string | undefined;
|
|
390
|
+
ownerId?: string | undefined;
|
|
391
|
+
ownerType?: "user" | "store" | undefined;
|
|
392
|
+
fullName?: string | undefined;
|
|
393
|
+
phone?: string | undefined;
|
|
394
|
+
addressLine1?: string | undefined;
|
|
395
|
+
city?: string | undefined;
|
|
396
|
+
state?: string | undefined;
|
|
397
|
+
postalCode?: string | undefined;
|
|
398
|
+
addressLine2?: string | undefined;
|
|
399
|
+
landmark?: string | undefined;
|
|
400
|
+
}>;
|
|
401
|
+
export type AdminAddressPatchValues = z.infer<typeof adminAddressPatchSchema>;
|
|
402
|
+
/**
|
|
403
|
+
* A buyer's request that a banned address be restored.
|
|
404
|
+
*
|
|
405
|
+
* 🛑 Lives in appkit, not beside its drawer in the consumer: appkit compiles
|
|
406
|
+
* against zod 3 and the app is on zod 4, so a consumer-built schema handed to
|
|
407
|
+
* `useFormShellState` is a type error and two incompatible validator
|
|
408
|
+
* instances. Every schema a form primitive parses has to be declared on this
|
|
409
|
+
* side of that split.
|
|
410
|
+
*
|
|
411
|
+
* A floor of 20 characters, higher than the 10 an admin ban REASON carries.
|
|
412
|
+
* The asymmetry is deliberate: a ban is written by staff who also have the
|
|
413
|
+
* audit log and the flagged order in front of them, while this note is the
|
|
414
|
+
* only thing a reviewer has. "please unban" costs them a round trip.
|
|
415
|
+
*/
|
|
416
|
+
export declare const addressUnbanRequestSchema: z.ZodObject<{
|
|
417
|
+
note: z.ZodString;
|
|
418
|
+
}, "strip", z.ZodTypeAny, {
|
|
419
|
+
note: string;
|
|
420
|
+
}, {
|
|
421
|
+
note: string;
|
|
422
|
+
}>;
|
|
423
|
+
export type AddressUnbanRequestValues = z.infer<typeof addressUnbanRequestSchema>;
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* WHY: There were **eleven** address field shapes in the tree and three
|
|
3
|
+
* separate naming schisms across them — `postalCode` vs `pincode`,
|
|
4
|
+
* `phone` vs `phoneNumber`, `addressLine1` vs `line1` — plus **fifteen**
|
|
5
|
+
* postal rules that disagreed with each other, two of them server-side
|
|
6
|
+
* rules on the same entity. The client said `.min(1)` and the server said
|
|
7
|
+
* `/^\d{6}$/`, so `abc` passed every check the user could see and came
|
|
8
|
+
* back a 400 with nothing on the field.
|
|
9
|
+
* WHAT: One address shape, one postal rule, used by every form and every
|
|
10
|
+
* route that writes an address.
|
|
11
|
+
*
|
|
12
|
+
* ## The shape is `AddressDocument`, not a new one
|
|
13
|
+
*
|
|
14
|
+
* `postalCode` / `phone` / `addressLine1` — the stored names win, because the
|
|
15
|
+
* alternative is a mapping layer at every boundary and that is precisely how
|
|
16
|
+
* eleven shapes happened.
|
|
17
|
+
*
|
|
18
|
+
* ## The postal rule is per COUNTRY, and that was the real defect
|
|
19
|
+
*
|
|
20
|
+
* `country` is free text, so an India-only `/^\d{6}$/` was being applied to
|
|
21
|
+
* Canadian addresses. `isValidPostalCode` resolves the rule from the country
|
|
22
|
+
* on the same record, and falls back to a permissive length bound when the
|
|
23
|
+
* country is one we do not enumerate — an unknown country must never block a
|
|
24
|
+
* save.
|
|
25
|
+
*
|
|
26
|
+
* EXPORTS:
|
|
27
|
+
* refineAddressPostal, addressFormSchema, addressUpdateSchema,
|
|
28
|
+
* adminAddressCreateSchema, adminAddressUpdateSchema, and their value types
|
|
29
|
+
*
|
|
30
|
+
* @tag domain:addresses
|
|
31
|
+
* @tag layer:schema
|
|
32
|
+
* @tag pattern:none
|
|
33
|
+
* @tag access:isomorphic
|
|
34
|
+
* @tag consumers:AddressForm,AdminAddressEditorView,UserAddressesClient,address routes
|
|
35
|
+
* @tag sideEffects:none
|
|
36
|
+
*/
|
|
37
|
+
import { z } from "zod";
|
|
38
|
+
import { annotate } from "../../shell/field-ui-meta";
|
|
39
|
+
import { DEFAULT_COUNTRY, countryFor, isValidPostalCode, postalLabelFor, } from "../../../constants/geo/countries";
|
|
40
|
+
/**
|
|
41
|
+
* The ONE postal rule.
|
|
42
|
+
*
|
|
43
|
+
* Fifteen used to disagree — two of them server-side rules on the same
|
|
44
|
+
* entity — and this is the only one now, shared by every form and every route
|
|
45
|
+
* that writes an address.
|
|
46
|
+
*
|
|
47
|
+
* The message names what the country itself calls the field, so a Canadian
|
|
48
|
+
* address is never told to enter a "PIN code". An unknown country falls back
|
|
49
|
+
* to a length bound inside `isValidPostalCode`, because a postal rule exists
|
|
50
|
+
* to catch a typo and must never block a save.
|
|
51
|
+
*/
|
|
52
|
+
export function refineAddressPostal(v, ctx) {
|
|
53
|
+
if (!v.postalCode)
|
|
54
|
+
return;
|
|
55
|
+
const country = v.country ?? DEFAULT_COUNTRY;
|
|
56
|
+
if (isValidPostalCode(country, v.postalCode))
|
|
57
|
+
return;
|
|
58
|
+
const known = countryFor(country);
|
|
59
|
+
ctx.addIssue({
|
|
60
|
+
code: z.ZodIssueCode.custom,
|
|
61
|
+
path: ["postalCode"],
|
|
62
|
+
message: known
|
|
63
|
+
? `That is not a valid ${postalLabelFor(country)} for ${known.name}.`
|
|
64
|
+
: "That does not look like a postal code.",
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* 🛑 `annotate()` must be the OUTERMOST call on each field — it keys a WeakMap
|
|
69
|
+
* by schema instance and every zod wrapper returns a new one.
|
|
70
|
+
*/
|
|
71
|
+
export const addressFormSchema = z
|
|
72
|
+
.object({
|
|
73
|
+
/*
|
|
74
|
+
* Required, because `AddressDocument.label` is `string` and not
|
|
75
|
+
* `string | undefined` — four of the six server schemas already had
|
|
76
|
+
* `.min(1)` and the buyer form had it optional, which is one of the eleven
|
|
77
|
+
* shapes this collapses.
|
|
78
|
+
*/
|
|
79
|
+
label: annotate(z.string().trim().min(1, "Give the address a label.").max(60), {
|
|
80
|
+
section: "address", sectionLabel: "Address", sectionRequired: true,
|
|
81
|
+
quick: true, order: 1, row: "pair", label: "Label",
|
|
82
|
+
help: "Home, Work, Warehouse — whatever helps you pick it at checkout.",
|
|
83
|
+
}),
|
|
84
|
+
fullName: annotate(z.string().trim().min(2, "Enter the recipient's full name.").max(120), {
|
|
85
|
+
section: "address", quick: true, order: 2, row: "pair",
|
|
86
|
+
label: "Full name",
|
|
87
|
+
}),
|
|
88
|
+
/*
|
|
89
|
+
* Digits, spaces and the usual separators, 7–15 long — E.164's own bound.
|
|
90
|
+
* It was `.min(1)` on one surface and unchecked on two others, so a phone
|
|
91
|
+
* number of "x" reached the courier.
|
|
92
|
+
*/
|
|
93
|
+
phone: annotate(z
|
|
94
|
+
.string()
|
|
95
|
+
.trim()
|
|
96
|
+
.regex(/^[+\d][\d\s\-()]{6,19}$/, "Enter a phone number the courier can call."), {
|
|
97
|
+
section: "address", quick: true, order: 3, row: "pair",
|
|
98
|
+
label: "Phone", inputType: "tel",
|
|
99
|
+
}),
|
|
100
|
+
addressLine1: annotate(z.string().trim().min(3, "Enter the street address.").max(200), {
|
|
101
|
+
section: "location", sectionLabel: "Where", sectionRequired: true,
|
|
102
|
+
order: 1, row: "full", label: "Address line 1",
|
|
103
|
+
}),
|
|
104
|
+
addressLine2: annotate(z.string().trim().max(200).optional().or(z.literal("")), {
|
|
105
|
+
section: "location", order: 2, row: "full", label: "Address line 2",
|
|
106
|
+
}),
|
|
107
|
+
landmark: annotate(z.string().trim().max(120).optional().or(z.literal("")), {
|
|
108
|
+
section: "location", order: 3, row: "pair", label: "Landmark",
|
|
109
|
+
}),
|
|
110
|
+
city: annotate(z.string().trim().min(2, "Enter the city.").max(120), {
|
|
111
|
+
section: "location", order: 4, row: "pair", label: "City",
|
|
112
|
+
}),
|
|
113
|
+
/*
|
|
114
|
+
* A picker where the country enumerates its subdivisions, free text where
|
|
115
|
+
* it does not — the form decides that from `hasStates`. It was free text
|
|
116
|
+
* on two surfaces and a 36-option `INDIAN_STATES` select on a third, all
|
|
117
|
+
* writing the same field.
|
|
118
|
+
*/
|
|
119
|
+
state: annotate(z.string().trim().min(2, "Enter the state or region.").max(120), {
|
|
120
|
+
section: "location", order: 5, row: "pair", label: "State / region",
|
|
121
|
+
}),
|
|
122
|
+
/*
|
|
123
|
+
* Only checked for emptiness HERE; the real rule is the country-aware one
|
|
124
|
+
* in the `superRefine`, because a per-field rule cannot see `country`.
|
|
125
|
+
*/
|
|
126
|
+
postalCode: annotate(z.string().trim().min(1, "Enter the postal code."), {
|
|
127
|
+
section: "location", order: 6, row: "pair", label: "Postal code",
|
|
128
|
+
}),
|
|
129
|
+
country: annotate(z.string().trim().min(2, "Choose a country.").default(DEFAULT_COUNTRY), {
|
|
130
|
+
section: "location", order: 7, row: "pair", kind: "select", label: "Country",
|
|
131
|
+
}),
|
|
132
|
+
/*
|
|
133
|
+
* `.default(false)` rather than `.optional()`: `AddressDocument.isDefault`
|
|
134
|
+
* is `boolean`, so a create that omits it has to mean "not default"
|
|
135
|
+
* somewhere — and four of the six server schemas were supplying that
|
|
136
|
+
* default themselves, each in its own way.
|
|
137
|
+
*/
|
|
138
|
+
isDefault: annotate(z.boolean().default(false), {
|
|
139
|
+
section: "visibility", sectionLabel: "Preferences", order: 1, row: "full",
|
|
140
|
+
label: "Use as my default address",
|
|
141
|
+
}),
|
|
142
|
+
})
|
|
143
|
+
.superRefine(refineAddressPostal);
|
|
144
|
+
/**
|
|
145
|
+
* A partial update.
|
|
146
|
+
*
|
|
147
|
+
* `.partial()` on the inner object, then the same refinement — an edit that
|
|
148
|
+
* changes only the label must not be told its postal code is missing, but an
|
|
149
|
+
* edit that changes the postal code must still be checked against the country.
|
|
150
|
+
*/
|
|
151
|
+
export const addressUpdateSchema = addressFormSchema.innerType()
|
|
152
|
+
.partial()
|
|
153
|
+
.superRefine(refineAddressPostal);
|
|
154
|
+
/**
|
|
155
|
+
* An address as an ADMIN writes it — the shared shape plus the owner it
|
|
156
|
+
* belongs to, which only an admin may choose.
|
|
157
|
+
*
|
|
158
|
+
* Extended from the same base rather than restated. It was restated: the admin
|
|
159
|
+
* route declared its own eleven fields with `postalCode: z.string().min(6).max(6)`
|
|
160
|
+
* — a LENGTH check with no character class, so `"abcdef"` was a valid Indian
|
|
161
|
+
* PIN code as far as that route was concerned.
|
|
162
|
+
*/
|
|
163
|
+
export const adminAddressCreateSchema = addressFormSchema.innerType()
|
|
164
|
+
.extend({
|
|
165
|
+
ownerType: z.enum(["user", "store"]),
|
|
166
|
+
ownerId: z.string().trim().min(1, "Choose who this address belongs to."),
|
|
167
|
+
})
|
|
168
|
+
.superRefine(refineAddressPostal);
|
|
169
|
+
export const adminAddressUpdateSchema = adminAddressCreateSchema.innerType()
|
|
170
|
+
.partial()
|
|
171
|
+
.superRefine(refineAddressPostal);
|
|
172
|
+
/**
|
|
173
|
+
* The admin PATCH body — an address edit OR a moderation verb.
|
|
174
|
+
*
|
|
175
|
+
* 🛑 Declared HERE rather than `.extend()`-ed at the route, because the
|
|
176
|
+
* consumer is on zod 4 and appkit compiles against zod 3 (the two-zod split
|
|
177
|
+
* documented in `field-ui-meta.ts`). Extending an appkit schema with
|
|
178
|
+
* consumer-side `z` produces a type error at best and two incompatible
|
|
179
|
+
* validator instances at worst.
|
|
180
|
+
*
|
|
181
|
+
* `action` and `banReason` are not address FIELDS — an admin banning an
|
|
182
|
+
* address is not editing it — which is why they sit alongside the shape
|
|
183
|
+
* rather than inside it.
|
|
184
|
+
*/
|
|
185
|
+
export const adminAddressPatchSchema = adminAddressCreateSchema.innerType()
|
|
186
|
+
.partial()
|
|
187
|
+
.extend({
|
|
188
|
+
action: z.enum(["ban", "approve_unban", "reject_unban"]).optional(),
|
|
189
|
+
banReason: z.string().trim().max(500).optional(),
|
|
190
|
+
})
|
|
191
|
+
.superRefine(refineAddressPostal);
|
|
192
|
+
/**
|
|
193
|
+
* A buyer's request that a banned address be restored.
|
|
194
|
+
*
|
|
195
|
+
* 🛑 Lives in appkit, not beside its drawer in the consumer: appkit compiles
|
|
196
|
+
* against zod 3 and the app is on zod 4, so a consumer-built schema handed to
|
|
197
|
+
* `useFormShellState` is a type error and two incompatible validator
|
|
198
|
+
* instances. Every schema a form primitive parses has to be declared on this
|
|
199
|
+
* side of that split.
|
|
200
|
+
*
|
|
201
|
+
* A floor of 20 characters, higher than the 10 an admin ban REASON carries.
|
|
202
|
+
* The asymmetry is deliberate: a ban is written by staff who also have the
|
|
203
|
+
* audit log and the flagged order in front of them, while this note is the
|
|
204
|
+
* only thing a reviewer has. "please unban" costs them a round trip.
|
|
205
|
+
*/
|
|
206
|
+
export const addressUnbanRequestSchema = z.object({
|
|
207
|
+
note: z
|
|
208
|
+
.string()
|
|
209
|
+
.trim()
|
|
210
|
+
.min(20, "Explain what happened — at least 20 characters. This is all the reviewer sees.")
|
|
211
|
+
.max(1000, "Keep it under 1000 characters."),
|
|
212
|
+
});
|
|
@@ -1,9 +1,17 @@
|
|
|
1
1
|
export * from "./firestore";
|
|
2
|
+
export * from "./address-form";
|
|
2
3
|
// ─── Firestore document schema (W2) ───────────────────────────────────────────
|
|
3
4
|
// Mirrors AddressDocument in ./firestore.ts. Registered into SCHEMAS.firestore.addresses.
|
|
4
5
|
import { z } from "zod";
|
|
5
6
|
import { auditTimestampsShape } from "../../../schemas/firestore-helpers";
|
|
6
7
|
export const addressOwnerTypeSchema = z.enum(["user", "store"]);
|
|
8
|
+
/*
|
|
9
|
+
* The stored DOCUMENT, not a form. It carries `id`, `ownerType`, `ownerId` and
|
|
10
|
+
* the audit timestamps that no form collects, and it is what
|
|
11
|
+
* `SCHEMAS.firestore.addresses` validates a read against — a different job
|
|
12
|
+
* from `addressFormSchema`, which validates what a human typed.
|
|
13
|
+
*/
|
|
14
|
+
// audit-address-shape-ok: the Firestore document mirror, registered in SCHEMAS.firestore
|
|
7
15
|
export const addressFirestoreSchema = z.object({
|
|
8
16
|
id: z.string(),
|
|
9
17
|
ownerType: addressOwnerTypeSchema,
|
|
@@ -114,4 +114,4 @@ export declare function listAdminContactSubmissions(params?: {
|
|
|
114
114
|
sorts?: string;
|
|
115
115
|
page?: number;
|
|
116
116
|
pageSize?: number;
|
|
117
|
-
}): Promise<import("../../..").PagedResult<import("
|
|
117
|
+
}): Promise<import("../../..").PagedResult<import("../../..").ContactSubmissionDocument>>;
|