@stacksjs/defaults 0.70.58 → 0.70.60
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/app/Actions/AI/AskAction.ts +40 -0
- package/app/Actions/AI/SummaryAction.ts +40 -0
- package/app/Actions/Auth/AuthUserAction.ts +13 -0
- package/app/Actions/Auth/CreateTokenAction.ts +64 -0
- package/app/Actions/Auth/DisableTwoFactorAction.ts +37 -0
- package/app/Actions/Auth/EnableTwoFactorAction.ts +37 -0
- package/app/Actions/Auth/GenerateAuthenticationAction.ts +51 -0
- package/app/Actions/Auth/GenerateRegistrationAction.ts +53 -0
- package/app/Actions/Auth/GenerateTwoFactorSecretAction.ts +26 -0
- package/app/Actions/Auth/ListTokensAction.ts +30 -0
- package/app/Actions/Auth/LoginAction.ts +73 -0
- package/app/Actions/Auth/LogoutAction.ts +16 -0
- package/app/Actions/Auth/LogoutAllAction.ts +28 -0
- package/app/Actions/Auth/RefreshTokenAction.ts +39 -0
- package/app/Actions/Auth/RegisterAction.ts +57 -0
- package/app/Actions/Auth/ResendVerificationAction.ts +24 -0
- package/app/Actions/Auth/RevokeTokenAction.ts +43 -0
- package/app/Actions/Auth/TestAbilitiesAction.ts +61 -0
- package/app/Actions/Auth/VerifyAuthenticationAction.ts +94 -0
- package/app/Actions/Auth/VerifyEmailAction.ts +25 -0
- package/app/Actions/Auth/VerifyRegistrationAction.ts +59 -0
- package/app/Actions/Auth/VerifyTwoFactorLoginAction.ts +57 -0
- package/app/Actions/Billable/CheckoutAction.ts +25 -0
- package/app/Actions/Buddy/BuddyBrowseAction.ts +34 -0
- package/app/Actions/Buddy/BuddyCancelAction.ts +32 -0
- package/app/Actions/Buddy/BuddyCommitAction.ts +25 -0
- package/app/Actions/Buddy/BuddyGitHubConnectAction.ts +40 -0
- package/app/Actions/Buddy/BuddyGitHubDisconnectAction.ts +19 -0
- package/app/Actions/Buddy/BuddyProcessAction.ts +65 -0
- package/app/Actions/Buddy/BuddyProcessStreamAction.ts +128 -0
- package/app/Actions/Buddy/BuddyPushAction.ts +21 -0
- package/app/Actions/Buddy/BuddyRepoOpenAction.ts +44 -0
- package/app/Actions/Buddy/BuddyRepoValidateAction.ts +35 -0
- package/app/Actions/Buddy/BuddySettingsAction.ts +21 -0
- package/app/Actions/Buddy/BuddySettingsUpdateAction.ts +46 -0
- package/app/Actions/Buddy/BuddyStateAction.ts +28 -0
- package/app/Actions/Buddy/BuddyTitleAction.ts +49 -0
- package/app/Actions/Buddy/CommandsAction.ts +802 -0
- package/app/Actions/Buddy/JobCancelAction.ts +32 -0
- package/app/Actions/Buddy/JobRetryAction.ts +49 -0
- package/app/Actions/Buddy/JobsListAction.ts +141 -0
- package/app/Actions/Buddy/ScheduleListAction.ts +52 -0
- package/app/Actions/Buddy/VersionsAction.ts +12 -0
- package/app/Actions/Cms/AuthorDestroyAction.ts +21 -0
- package/app/Actions/Cms/AuthorIndexAction.ts +14 -0
- package/app/Actions/Cms/AuthorShowAction.ts +19 -0
- package/app/Actions/Cms/AuthorStoreAction.ts +20 -0
- package/app/Actions/Cms/AuthorUpdateAction.ts +24 -0
- package/app/Actions/Cms/CategorizableDestroyAction.ts +16 -0
- package/app/Actions/Cms/CategorizableIndexAction.ts +14 -0
- package/app/Actions/Cms/CategorizableShowAction.ts +16 -0
- package/app/Actions/Cms/CategorizableStoreAction.ts +42 -0
- package/app/Actions/Cms/CategorizableUpdateAction.ts +38 -0
- package/app/Actions/Cms/CommentDestroyAction.ts +16 -0
- package/app/Actions/Cms/CommentIndexAction.ts +17 -0
- package/app/Actions/Cms/CommentShowAction.ts +16 -0
- package/app/Actions/Cms/CommentStoreAction.ts +39 -0
- package/app/Actions/Cms/CommentUpdateAction.ts +37 -0
- package/app/Actions/Cms/PageDestroyAction.ts +16 -0
- package/app/Actions/Cms/PageIndexAction.ts +14 -0
- package/app/Actions/Cms/PageStoreAction.ts +31 -0
- package/app/Actions/Cms/PageUpdateAction.ts +27 -0
- package/app/Actions/Cms/PostDestroyAction.ts +17 -0
- package/app/Actions/Cms/PostIndexAction.ts +14 -0
- package/app/Actions/Cms/PostShowAction.ts +16 -0
- package/app/Actions/Cms/PostStoreAction.ts +37 -0
- package/app/Actions/Cms/PostUpdateAction.ts +32 -0
- package/app/Actions/Cms/PostViewsUpdateAction.ts +34 -0
- package/app/Actions/Cms/RssFeedAction.ts +59 -0
- package/app/Actions/Cms/SitemapAction.ts +60 -0
- package/app/Actions/Cms/TaggableDestroyAction.ts +16 -0
- package/app/Actions/Cms/TaggableIndexAction.ts +14 -0
- package/app/Actions/Cms/TaggableShowAction.ts +16 -0
- package/app/Actions/Cms/TaggableStoreAction.ts +36 -0
- package/app/Actions/Cms/TaggableUpdateAction.ts +37 -0
- package/app/Actions/Commerce/CouponDestroyAction.ts +18 -0
- package/app/Actions/Commerce/CouponIndexAction.ts +16 -0
- package/app/Actions/Commerce/CouponShowAction.ts +18 -0
- package/app/Actions/Commerce/CouponStoreAction.ts +21 -0
- package/app/Actions/Commerce/CouponUpdateAction.ts +31 -0
- package/app/Actions/Commerce/CustomerDestroyAction.ts +16 -0
- package/app/Actions/Commerce/CustomerIndexAction.ts +15 -0
- package/app/Actions/Commerce/CustomerShowAction.ts +18 -0
- package/app/Actions/Commerce/CustomerStoreAction.ts +29 -0
- package/app/Actions/Commerce/CustomerUpdateAction.ts +27 -0
- package/app/Actions/Commerce/DriverDestroyAction.ts +18 -0
- package/app/Actions/Commerce/GiftCardDestroyAction.ts +18 -0
- package/app/Actions/Commerce/GiftCardIndexAction.ts +16 -0
- package/app/Actions/Commerce/GiftCardShowAction.ts +18 -0
- package/app/Actions/Commerce/GiftCardStatsAction.ts +30 -0
- package/app/Actions/Commerce/GiftCardStoreAction.ts +35 -0
- package/app/Actions/Commerce/GiftCardUpdateAction.ts +26 -0
- package/app/Actions/Commerce/GiftCardUpdateBalanceAction.ts +36 -0
- package/app/Actions/Commerce/OrderDestroyAction.ts +18 -0
- package/app/Actions/Commerce/OrderExportAction.ts +15 -0
- package/app/Actions/Commerce/OrderIndexAction.ts +15 -0
- package/app/Actions/Commerce/OrderShowAction.ts +18 -0
- package/app/Actions/Commerce/OrderStoreAction.ts +32 -0
- package/app/Actions/Commerce/OrderUpdateAction.ts +34 -0
- package/app/Actions/Commerce/PaymentDestroyAction.ts +16 -0
- package/app/Actions/Commerce/PaymentFetchStatsAction.ts +31 -0
- package/app/Actions/Commerce/PaymentIndexAction.ts +15 -0
- package/app/Actions/Commerce/PaymentMonthlyTrendsAction.ts +21 -0
- package/app/Actions/Commerce/PaymentShowAction.ts +17 -0
- package/app/Actions/Commerce/PaymentStoreAction.ts +24 -0
- package/app/Actions/Commerce/PaymentUpdateAction.ts +35 -0
- package/app/Actions/Commerce/PrintDeviceDestroyAction.ts +18 -0
- package/app/Actions/Commerce/PrintDeviceIndexAction.ts +14 -0
- package/app/Actions/Commerce/PrintDeviceShowAction.ts +17 -0
- package/app/Actions/Commerce/PrintDeviceStoreAction.ts +27 -0
- package/app/Actions/Commerce/PrintDeviceUpdateAction.ts +27 -0
- package/app/Actions/Commerce/Product/ManufacturerDestroyAction.ts +20 -0
- package/app/Actions/Commerce/Product/ManufacturerIndexAction.ts +16 -0
- package/app/Actions/Commerce/Product/ManufacturerShowAction.ts +18 -0
- package/app/Actions/Commerce/Product/ManufacturerStoreAction.ts +14 -0
- package/app/Actions/Commerce/Product/ProductCategoryIndexAction.ts +16 -0
- package/app/Actions/Commerce/Product/ProductCategoryStoreAction.ts +16 -0
- package/app/Actions/Commerce/Product/ProductDestroyAction.ts +16 -0
- package/app/Actions/Commerce/Product/ProductIndexAction.ts +14 -0
- package/app/Actions/Commerce/Product/ProductManufacturerDestroyAction.ts +18 -0
- package/app/Actions/Commerce/Product/ProductManufacturerIndexAction.ts +14 -0
- package/app/Actions/Commerce/Product/ProductManufacturerShowAction.ts +16 -0
- package/app/Actions/Commerce/Product/ProductManufacturerStoreAction.ts +14 -0
- package/app/Actions/Commerce/Product/ProductManufacturerUpdateAction.ts +18 -0
- package/app/Actions/Commerce/Product/ProductShowAction.ts +18 -0
- package/app/Actions/Commerce/Product/ProductStoreAction.ts +17 -0
- package/app/Actions/Commerce/Product/ProductUnitDestroyAction.ts +18 -0
- package/app/Actions/Commerce/Product/ProductUnitIndexAction.ts +14 -0
- package/app/Actions/Commerce/Product/ProductUnitShowAction.ts +18 -0
- package/app/Actions/Commerce/Product/ProductUnitStoreAction.ts +15 -0
- package/app/Actions/Commerce/Product/ProductUpdateAction.ts +17 -0
- package/app/Actions/Commerce/Product/ProductVariantDestroyAction.ts +18 -0
- package/app/Actions/Commerce/Product/ProductVariantIndexAction.ts +14 -0
- package/app/Actions/Commerce/Product/ProductVariantShowAction.ts +17 -0
- package/app/Actions/Commerce/Product/ProductVariantStoreAction.ts +14 -0
- package/app/Actions/Commerce/Product/ProductVariantUpdateAction.ts +16 -0
- package/app/Actions/Commerce/ReceiptDestroyAction.ts +18 -0
- package/app/Actions/Commerce/ReceiptIndexAction.ts +14 -0
- package/app/Actions/Commerce/ReceiptShowAction.ts +18 -0
- package/app/Actions/Commerce/ReceiptStoreAction.ts +28 -0
- package/app/Actions/Commerce/ReceiptUpdateAction.ts +30 -0
- package/app/Actions/Commerce/ReviewIndexAction.ts +14 -0
- package/app/Actions/Commerce/ReviewShowAction.ts +16 -0
- package/app/Actions/Commerce/ReviewStoreAction.ts +26 -0
- package/app/Actions/Commerce/ReviewUpdateAction.ts +28 -0
- package/app/Actions/Commerce/Shipping/DeliveryRouteDestroyAction.ts +18 -0
- package/app/Actions/Commerce/Shipping/DeliveryRouteIndexAction.ts +16 -0
- package/app/Actions/Commerce/Shipping/DeliveryRouteShowAction.ts +18 -0
- package/app/Actions/Commerce/Shipping/DeliveryRouteStoreAction.ts +16 -0
- package/app/Actions/Commerce/Shipping/DeliveryRouteUpdateAction.ts +18 -0
- package/app/Actions/Commerce/Shipping/DigitalDeliveryDestroyAction.ts +18 -0
- package/app/Actions/Commerce/Shipping/DigitalDeliveryIndexAction.ts +16 -0
- package/app/Actions/Commerce/Shipping/DigitalDeliveryShowAction.ts +18 -0
- package/app/Actions/Commerce/Shipping/DigitalDeliveryStoreAction.ts +18 -0
- package/app/Actions/Commerce/Shipping/DigitalDeliveryUpdateAction.ts +18 -0
- package/app/Actions/Commerce/Shipping/DriverIndexAction.ts +16 -0
- package/app/Actions/Commerce/Shipping/DriverShowAction.ts +18 -0
- package/app/Actions/Commerce/Shipping/DriverStoreAction.ts +16 -0
- package/app/Actions/Commerce/Shipping/DriverUpdateAction.ts +18 -0
- package/app/Actions/Commerce/Shipping/LicenseKeyDestroyAction.ts +20 -0
- package/app/Actions/Commerce/Shipping/LicenseKeyIndexAction.ts +16 -0
- package/app/Actions/Commerce/Shipping/LicenseKeyShowAction.ts +18 -0
- package/app/Actions/Commerce/Shipping/LicenseKeyStoreAction.ts +18 -0
- package/app/Actions/Commerce/Shipping/LicenseKeyUpdateAction.ts +18 -0
- package/app/Actions/Commerce/Shipping/ShippingMethodDestroyAction.ts +16 -0
- package/app/Actions/Commerce/Shipping/ShippingMethodIndexAction.ts +14 -0
- package/app/Actions/Commerce/Shipping/ShippingMethodShowAction.ts +16 -0
- package/app/Actions/Commerce/Shipping/ShippingMethodStoreAction.ts +16 -0
- package/app/Actions/Commerce/Shipping/ShippingMethodUpdateAction.ts +15 -0
- package/app/Actions/Commerce/Shipping/ShippingRateDestroyAction.ts +16 -0
- package/app/Actions/Commerce/Shipping/ShippingRateIndexAction.ts +14 -0
- package/app/Actions/Commerce/Shipping/ShippingRateShowAction.ts +16 -0
- package/app/Actions/Commerce/Shipping/ShippingRateStoreAction.ts +16 -0
- package/app/Actions/Commerce/Shipping/ShippingRateUpdateAction.ts +17 -0
- package/app/Actions/Commerce/Shipping/ShippingZoneDestroyAction.ts +16 -0
- package/app/Actions/Commerce/Shipping/ShippingZoneIndexAction.ts +14 -0
- package/app/Actions/Commerce/Shipping/ShippingZoneShowAction.ts +16 -0
- package/app/Actions/Commerce/Shipping/ShippingZoneStoreAction.ts +16 -0
- package/app/Actions/Commerce/Shipping/ShippingZoneUpdateAction.ts +15 -0
- package/app/Actions/Commerce/TaxRateDestroyAction.ts +16 -0
- package/app/Actions/Commerce/TaxRateIndexAction.ts +14 -0
- package/app/Actions/Commerce/TaxRateShowAction.ts +17 -0
- package/app/Actions/Commerce/TaxRateStoreAction.ts +24 -0
- package/app/Actions/Commerce/TaxRateUpdateAction.ts +24 -0
- package/app/Actions/Commerce/WaitlistProductAnalyticsAction.ts +29 -0
- package/app/Actions/Commerce/WaitlistProductDestroyAction.ts +16 -0
- package/app/Actions/Commerce/WaitlistProductIndexAction.ts +14 -0
- package/app/Actions/Commerce/WaitlistProductQuantityDistributionAction.ts +32 -0
- package/app/Actions/Commerce/WaitlistProductShowAction.ts +16 -0
- package/app/Actions/Commerce/WaitlistProductStatusAction.ts +37 -0
- package/app/Actions/Commerce/WaitlistProductStoreAction.ts +27 -0
- package/app/Actions/Commerce/WaitlistProductTimeSeriesAction.ts +25 -0
- package/app/Actions/Commerce/WaitlistProductUpdateAction.ts +29 -0
- package/app/Actions/Commerce/WaitlistRestaurantDashboardAction.ts +29 -0
- package/app/Actions/Commerce/WaitlistRestaurantDestroyAction.ts +16 -0
- package/app/Actions/Commerce/WaitlistRestaurantIndexAction.ts +14 -0
- package/app/Actions/Commerce/WaitlistRestaurantShowAction.ts +16 -0
- package/app/Actions/Commerce/WaitlistRestaurantStoreAction.ts +31 -0
- package/app/Actions/Commerce/WaitlistRestaurantUpdateAction.ts +33 -0
- package/app/Actions/ContactAction.ts +72 -0
- package/app/Actions/Dashboard/Actions/CreateAction.ts +11 -0
- package/app/Actions/Dashboard/Actions/GetActionCount.ts +12 -0
- package/app/Actions/Dashboard/Actions/GetActions.ts +19 -0
- package/app/Actions/Dashboard/Analytics/BlogAnalyticsAction.ts +58 -0
- package/app/Actions/Dashboard/Analytics/BrowserAnalyticsAction.ts +42 -0
- package/app/Actions/Dashboard/Analytics/CommerceAnalyticsAction.ts +64 -0
- package/app/Actions/Dashboard/Analytics/CountryAnalyticsAction.ts +41 -0
- package/app/Actions/Dashboard/Analytics/DeviceAnalyticsAction.ts +58 -0
- package/app/Actions/Dashboard/Analytics/EventAnalyticsAction.ts +90 -0
- package/app/Actions/Dashboard/Analytics/MarketingAnalyticsAction.ts +76 -0
- package/app/Actions/Dashboard/Analytics/PageAnalyticsAction.ts +45 -0
- package/app/Actions/Dashboard/Analytics/ReferrerAnalyticsAction.ts +72 -0
- package/app/Actions/Dashboard/Analytics/SalesAnalyticsAction.ts +73 -0
- package/app/Actions/Dashboard/Analytics/WebAnalyticsAction.ts +114 -0
- package/app/Actions/Dashboard/Auth/MeAction.ts +84 -0
- package/app/Actions/Dashboard/BuddyDashboardAction.ts +34 -0
- package/app/Actions/Dashboard/Ci/RepoRunJobsAction.ts +60 -0
- package/app/Actions/Dashboard/Ci/RepoRunsAction.ts +67 -0
- package/app/Actions/Dashboard/Ci/RunnerHistoryAction.ts +58 -0
- package/app/Actions/Dashboard/Ci/StatusAction.ts +73 -0
- package/app/Actions/Dashboard/Ci/failure-notifier.ts +214 -0
- package/app/Actions/Dashboard/Ci/runner-pressure-monitor.ts +259 -0
- package/app/Actions/Dashboard/Cloud/CloudIndexAction.ts +61 -0
- package/app/Actions/Dashboard/Commands/CreateCommand.ts +11 -0
- package/app/Actions/Dashboard/Commands/GetAverageCommandTime.ts +12 -0
- package/app/Actions/Dashboard/Commands/GetCommandCount.ts +12 -0
- package/app/Actions/Dashboard/Commands/GetCommandSuccessRate.ts +12 -0
- package/app/Actions/Dashboard/Commands/GetCommands.ts +12 -0
- package/app/Actions/Dashboard/Commerce/CommerceCouponsAction.ts +48 -0
- package/app/Actions/Dashboard/Commerce/CommerceCustomersAction.ts +48 -0
- package/app/Actions/Dashboard/Commerce/CommerceDashboardAction.ts +98 -0
- package/app/Actions/Dashboard/Commerce/CommerceDeliveryAction.ts +65 -0
- package/app/Actions/Dashboard/Commerce/CommerceGiftCardsAction.ts +48 -0
- package/app/Actions/Dashboard/Commerce/CommerceOrdersAction.ts +51 -0
- package/app/Actions/Dashboard/Commerce/CommercePaymentsAction.ts +59 -0
- package/app/Actions/Dashboard/Commerce/CommerceProductsAction.ts +50 -0
- package/app/Actions/Dashboard/Commerce/CommerceTaxesAction.ts +46 -0
- package/app/Actions/Dashboard/Commerce/PosIndexAction.ts +57 -0
- package/app/Actions/Dashboard/Commerce/ReviewIndexAction.ts +51 -0
- package/app/Actions/Dashboard/Content/AuthorIndexAction.ts +51 -0
- package/app/Actions/Dashboard/Content/CategoryIndexAction.ts +27 -0
- package/app/Actions/Dashboard/Content/CommentIndexAction.ts +41 -0
- package/app/Actions/Dashboard/Content/ContentDashboardAction.ts +54 -0
- package/app/Actions/Dashboard/Content/FileIndexAction.ts +24 -0
- package/app/Actions/Dashboard/Content/PageIndexAction.ts +25 -0
- package/app/Actions/Dashboard/Content/PostIndexAction.ts +102 -0
- package/app/Actions/Dashboard/Content/SeoIndexAction.ts +17 -0
- package/app/Actions/Dashboard/Content/TagIndexAction.ts +23 -0
- package/app/Actions/Dashboard/CreateDnsRecords.ts +11 -0
- package/app/Actions/Dashboard/CreateMailbox.ts +11 -0
- package/app/Actions/Dashboard/DashboardActivityAction.ts +58 -0
- package/app/Actions/Dashboard/DashboardHealthAction.ts +52 -0
- package/app/Actions/Dashboard/DashboardHomeAction.ts +83 -0
- package/app/Actions/Dashboard/DashboardStatsAction.ts +48 -0
- package/app/Actions/Dashboard/Data/AccessTokenIndexAction.ts +65 -0
- package/app/Actions/Dashboard/Data/ActivityIndexAction.ts +28 -0
- package/app/Actions/Dashboard/Data/DataDashboardAction.ts +67 -0
- package/app/Actions/Dashboard/Data/SubscriberIndexAction.ts +48 -0
- package/app/Actions/Dashboard/Data/TeamIndexAction.ts +43 -0
- package/app/Actions/Dashboard/Data/UserIndexAction.ts +48 -0
- package/app/Actions/Dashboard/Deployments/CreateDeployment.ts +11 -0
- package/app/Actions/Dashboard/Deployments/GetAverageDeploymentTime.ts +15 -0
- package/app/Actions/Dashboard/Deployments/GetDeployScript.ts +12 -0
- package/app/Actions/Dashboard/Deployments/GetDeploymentCount.ts +12 -0
- package/app/Actions/Dashboard/Deployments/GetDeploymentLiveTerminalOutput.ts +12 -0
- package/app/Actions/Dashboard/Deployments/GetDeployments.ts +20 -0
- package/app/Actions/Dashboard/Deployments/GetRecentDeployments.ts +12 -0
- package/app/Actions/Dashboard/Deployments/UpdateDeployScript.ts +11 -0
- package/app/Actions/Dashboard/GetDnsRecords.ts +12 -0
- package/app/Actions/Dashboard/GetEmailInboxes.ts +12 -0
- package/app/Actions/Dashboard/GetProjects.ts +13 -0
- package/app/Actions/Dashboard/GetRecentCommits.ts +13 -0
- package/app/Actions/Dashboard/Inbox/InboxIndexAction.ts +144 -0
- package/app/Actions/Dashboard/Inbox/InboxShowAction.ts +89 -0
- package/app/Actions/Dashboard/Infrastructure/CommandIndexAction.ts +18 -0
- package/app/Actions/Dashboard/Infrastructure/DnsIndexAction.ts +101 -0
- package/app/Actions/Dashboard/Infrastructure/EnvironmentIndexAction.ts +67 -0
- package/app/Actions/Dashboard/Infrastructure/InsightsAction.ts +29 -0
- package/app/Actions/Dashboard/Infrastructure/LogIndexAction.ts +50 -0
- package/app/Actions/Dashboard/Infrastructure/MailboxIndexAction.ts +85 -0
- package/app/Actions/Dashboard/Infrastructure/PermissionIndexAction.ts +54 -0
- package/app/Actions/Dashboard/Infrastructure/RequestIndexAction.ts +44 -0
- package/app/Actions/Dashboard/Infrastructure/ServerIndexAction.ts +101 -0
- package/app/Actions/Dashboard/Jobs/CreateJob.ts +11 -0
- package/app/Actions/Dashboard/Jobs/GetAverageJobTime.ts +12 -0
- package/app/Actions/Dashboard/Jobs/GetJobHistory.ts +12 -0
- package/app/Actions/Dashboard/Jobs/GetJobs.ts +11 -0
- package/app/Actions/Dashboard/Jobs/GetJobsPerMinute.ts +12 -0
- package/app/Actions/Dashboard/Jobs/JobIndexAction.ts +136 -0
- package/app/Actions/Dashboard/Jobs/JobRetryAction.ts +23 -0
- package/app/Actions/Dashboard/Jobs/JobStatsAction.ts +49 -0
- package/app/Actions/Dashboard/Kanban/BoardDestroyAction.ts +84 -0
- package/app/Actions/Dashboard/Kanban/BoardShowAction.ts +215 -0
- package/app/Actions/Dashboard/Kanban/BoardStoreAction.ts +98 -0
- package/app/Actions/Dashboard/Kanban/BoardUpdateAction.ts +96 -0
- package/app/Actions/Dashboard/Kanban/BoardsIndexAction.ts +81 -0
- package/app/Actions/Dashboard/Kanban/BoardsReorderAction.ts +80 -0
- package/app/Actions/Dashboard/Kanban/CardAssigneesSyncAction.ts +103 -0
- package/app/Actions/Dashboard/Kanban/CardCommentDestroyAction.ts +33 -0
- package/app/Actions/Dashboard/Kanban/CardCommentStoreAction.ts +82 -0
- package/app/Actions/Dashboard/Kanban/CardDestroyAction.ts +48 -0
- package/app/Actions/Dashboard/Kanban/CardLabelsSyncAction.ts +103 -0
- package/app/Actions/Dashboard/Kanban/CardShowAction.ts +122 -0
- package/app/Actions/Dashboard/Kanban/CardStoreAction.ts +112 -0
- package/app/Actions/Dashboard/Kanban/CardUpdateAction.ts +91 -0
- package/app/Actions/Dashboard/Kanban/CardsReorderAction.ts +148 -0
- package/app/Actions/Dashboard/Kanban/ColumnDestroyAction.ts +59 -0
- package/app/Actions/Dashboard/Kanban/ColumnStoreAction.ts +94 -0
- package/app/Actions/Dashboard/Kanban/ColumnUpdateAction.ts +89 -0
- package/app/Actions/Dashboard/Kanban/ColumnsReorderAction.ts +85 -0
- package/app/Actions/Dashboard/Kanban/LabelDestroyAction.ts +41 -0
- package/app/Actions/Dashboard/Kanban/LabelStoreAction.ts +70 -0
- package/app/Actions/Dashboard/Kanban/LabelUpdateAction.ts +83 -0
- package/app/Actions/Dashboard/Kanban/UsersListAction.ts +36 -0
- package/app/Actions/Dashboard/Library/CreateComponent.ts +11 -0
- package/app/Actions/Dashboard/Library/CreateFunction.ts +11 -0
- package/app/Actions/Dashboard/Library/DependencyIndexAction.ts +92 -0
- package/app/Actions/Dashboard/Library/GetAverageReleaseTime.ts +12 -0
- package/app/Actions/Dashboard/Library/GetComponents.ts +24 -0
- package/app/Actions/Dashboard/Library/GetComponentsDownloadCount.ts +12 -0
- package/app/Actions/Dashboard/Library/GetDownloadCount.ts +12 -0
- package/app/Actions/Dashboard/Library/GetFunctions.ts +22 -0
- package/app/Actions/Dashboard/Library/GetFunctionsDownloadCount.ts +12 -0
- package/app/Actions/Dashboard/Library/GetReleaseCount.ts +12 -0
- package/app/Actions/Dashboard/Library/GetReleases.ts +28 -0
- package/app/Actions/Dashboard/Library/PackageIndexAction.ts +26 -0
- package/app/Actions/Dashboard/Marketing/CampaignIndexAction.ts +45 -0
- package/app/Actions/Dashboard/Marketing/ListIndexAction.ts +43 -0
- package/app/Actions/Dashboard/Marketing/SocialPostIndexAction.ts +47 -0
- package/app/Actions/Dashboard/Models/GetModels.ts +39 -0
- package/app/Actions/Dashboard/Models/GetSubscriberCount.ts +12 -0
- package/app/Actions/Dashboard/Models/GetUserCount.ts +12 -0
- package/app/Actions/Dashboard/Models/ModelShowAction.ts +131 -0
- package/app/Actions/Dashboard/Models/ModelsIndexAction.ts +169 -0
- package/app/Actions/Dashboard/Notifications/CreateNotification.ts +11 -0
- package/app/Actions/Dashboard/Notifications/GetAverageNotificationTime.ts +12 -0
- package/app/Actions/Dashboard/Notifications/GetNotificationCount.ts +12 -0
- package/app/Actions/Dashboard/Notifications/GetNotificationDeliveryRate.ts +12 -0
- package/app/Actions/Dashboard/Notifications/GetNotificationHistory.ts +12 -0
- package/app/Actions/Dashboard/Notifications/GetNotifications.ts +12 -0
- package/app/Actions/Dashboard/Notifications/NotificationDashboardAction.ts +43 -0
- package/app/Actions/Dashboard/Queries/QueryIndexAction.ts +22 -0
- package/app/Actions/Dashboard/Queue/QueueRetryFailedAction.ts +22 -0
- package/app/Actions/Dashboard/Queue/QueueStatsAction.ts +98 -0
- package/app/Actions/Dashboard/Queue/QueueWorkersAction.ts +46 -0
- package/app/Actions/Dashboard/Rbac/PermissionDestroyAction.ts +33 -0
- package/app/Actions/Dashboard/Rbac/PermissionStoreAction.ts +53 -0
- package/app/Actions/Dashboard/Rbac/PermissionsIndexAction.ts +34 -0
- package/app/Actions/Dashboard/Rbac/RoleDestroyAction.ts +35 -0
- package/app/Actions/Dashboard/Rbac/RolePermissionsShowAction.ts +45 -0
- package/app/Actions/Dashboard/Rbac/RolePermissionsSyncAction.ts +63 -0
- package/app/Actions/Dashboard/Rbac/RoleStoreAction.ts +58 -0
- package/app/Actions/Dashboard/Rbac/RolesIndexAction.ts +36 -0
- package/app/Actions/Dashboard/Rbac/UserRolesShowAction.ts +40 -0
- package/app/Actions/Dashboard/Rbac/UserRolesSyncAction.ts +65 -0
- package/app/Actions/Dashboard/Rbac/UsersListAction.ts +39 -0
- package/app/Actions/Dashboard/Realtime/RealtimeStatsAction.ts +50 -0
- package/app/Actions/Dashboard/Releases/ReleaseIndexAction.ts +21 -0
- package/app/Actions/Dashboard/Requests/GetAverageRequestTime.ts +12 -0
- package/app/Actions/Dashboard/Requests/GetRequestCount.ts +12 -0
- package/app/Actions/Dashboard/Requests/GetRequestSuccessRate.ts +12 -0
- package/app/Actions/Dashboard/Requests/GetRequests.ts +12 -0
- package/app/Actions/Dashboard/Search/GlobalSearchAction.ts +26 -0
- package/app/Actions/Dashboard/ServiceHealthAction.ts +243 -0
- package/app/Actions/Dashboard/Settings/MailSettingsGetAction.ts +20 -0
- package/app/Actions/Dashboard/Settings/MailSettingsUpdateAction.ts +10 -0
- package/app/Actions/Dashboard/Settings/SettingsIndexAction.ts +40 -0
- package/app/Actions/Dashboard/Settings/UpdateAiConfig.ts +27 -0
- package/app/Actions/Dashboard/Settings/UpdateAnalyticsConfig.ts +38 -0
- package/app/Actions/Dashboard/Settings/UpdateAppConfig.ts +38 -0
- package/app/Actions/Dashboard/Settings/UpdateCacheConfig.ts +11 -0
- package/app/Actions/Dashboard/Settings/UpdateCliConfig.ts +11 -0
- package/app/Actions/Dashboard/Settings/UpdateCloudConfig.ts +38 -0
- package/app/Actions/Dashboard/Settings/UpdateDatabaseConfig.ts +38 -0
- package/app/Actions/Dashboard/Settings/UpdateDnsConfig.ts +38 -0
- package/app/Actions/Dashboard/Settings/UpdateDocsConfig.ts +11 -0
- package/app/Actions/Dashboard/Settings/UpdateEmailConfig.ts +38 -0
- package/app/Actions/Dashboard/Settings/UpdateEnvConfig.ts +11 -0
- package/app/Actions/Dashboard/Settings/UpdateErrorsConfig.ts +11 -0
- package/app/Actions/Dashboard/Settings/UpdateFileSystemsConfig.ts +11 -0
- package/app/Actions/Dashboard/Settings/UpdateGitConfig.ts +11 -0
- package/app/Actions/Dashboard/Settings/UpdateHashingConfig.ts +11 -0
- package/app/Actions/Dashboard/Settings/UpdateLibraryConfig.ts +11 -0
- package/app/Actions/Dashboard/Settings/UpdateLoggerConfig.ts +11 -0
- package/app/Actions/Dashboard/Settings/UpdateNotificationConfig.ts +11 -0
- package/app/Actions/Dashboard/Settings/UpdatePaymentConfig.ts +11 -0
- package/app/Actions/Dashboard/Settings/UpdatePortsConfig.ts +38 -0
- package/app/Actions/Dashboard/Settings/UpdateQueueConfig.ts +11 -0
- package/app/Actions/Dashboard/Settings/UpdateSearchEngineConfig.ts +11 -0
- package/app/Actions/Dashboard/Settings/UpdateSecurityConfig.ts +38 -0
- package/app/Actions/Dashboard/Settings/UpdateServicesConfig.ts +38 -0
- package/app/Actions/Dashboard/Settings/UpdateStorageConfig.ts +11 -0
- package/app/Actions/Dashboard/Settings/UpdateTeamConfig.ts +11 -0
- package/app/Actions/Dashboard/Settings/UpdateUiConfig.ts +11 -0
- package/app/Actions/HealthAction.ts +112 -0
- package/app/Actions/InstallAction.ts +83 -0
- package/app/Actions/Locale/SetLocaleAction.ts +51 -0
- package/app/Actions/LogAction.ts +42 -0
- package/app/Actions/Logs/LogFetchStatsAction.ts +50 -0
- package/app/Actions/Logs/LogIndexOrmAction.ts +13 -0
- package/app/Actions/Logs/LogShowOrmAction.ts +17 -0
- package/app/Actions/Logs/LogStoreOrmAction.ts +16 -0
- package/app/Actions/Logs/LogUpdateOrmAction.ts +20 -0
- package/app/Actions/Monitoring/ErrorDestroyAction.ts +25 -0
- package/app/Actions/Monitoring/ErrorGroupAction.ts +21 -0
- package/app/Actions/Monitoring/ErrorIgnoreAction.ts +25 -0
- package/app/Actions/Monitoring/ErrorIndexAction.ts +14 -0
- package/app/Actions/Monitoring/ErrorResolveAction.ts +25 -0
- package/app/Actions/Monitoring/ErrorShowAction.ts +19 -0
- package/app/Actions/Monitoring/ErrorStatsAction.ts +14 -0
- package/app/Actions/Monitoring/ErrorTimelineAction.ts +14 -0
- package/app/Actions/Monitoring/ErrorUnresolveAction.ts +25 -0
- package/app/Actions/NotifyUser.ts +10 -0
- package/app/Actions/Password/PasswordResetAction.ts +54 -0
- package/app/Actions/Password/SendPasswordResetEmailAction.ts +66 -0
- package/app/Actions/Password/VerifyResetTokenAction.ts +27 -0
- package/app/Actions/Payment/CancelSubscriptionAction.ts +20 -0
- package/app/Actions/Payment/CreateCheckoutAction.ts +28 -0
- package/app/Actions/Payment/CreateInvoiceSubscription.ts +18 -0
- package/app/Actions/Payment/CreatePaymentIntentAction.ts +31 -0
- package/app/Actions/Payment/CreateSetupIntentAction.ts +20 -0
- package/app/Actions/Payment/CreateSubscriptionAction.ts +23 -0
- package/app/Actions/Payment/DeleteDefaultPaymentAction.ts +18 -0
- package/app/Actions/Payment/FetchActiveSubscriptionAction.ts +18 -0
- package/app/Actions/Payment/FetchDefaultPaymentMethodAction.ts +18 -0
- package/app/Actions/Payment/FetchPaymentCustomerAction.ts +18 -0
- package/app/Actions/Payment/FetchPaymentMethodsAction.ts +18 -0
- package/app/Actions/Payment/FetchProductAction.ts +15 -0
- package/app/Actions/Payment/FetchTransactionHistoryAction.ts +18 -0
- package/app/Actions/Payment/FetchUserSubscriptionsAction.ts +18 -0
- package/app/Actions/Payment/SetDefaultPaymentAction.ts +20 -0
- package/app/Actions/Payment/SetUserDefaultPaymentAction.ts +20 -0
- package/app/Actions/Payment/StorePaymentMethodAction.ts +20 -0
- package/app/Actions/Payment/StoreTransactionAction.ts +20 -0
- package/app/Actions/Payment/UpdateCustomerAction.ts +24 -0
- package/app/Actions/Payment/UpdateDefaultPaymentMethodAction.ts +18 -0
- package/app/Actions/Payment/UpdateSubscriptionAction.ts +22 -0
- package/app/Actions/Queue/FetchQueuesAction.ts +14 -0
- package/app/Actions/README.md +61 -0
- package/app/Actions/Realtime/FetchWebsocketsAction.ts +14 -0
- package/app/Actions/RobotsAction.ts +61 -0
- package/app/Actions/SendWelcomeEmail.ts +40 -0
- package/app/Actions/SitemapAction.ts +234 -0
- package/app/Actions/Storefront/AddToCartAction.ts +153 -0
- package/app/Actions/Storefront/CheckoutContactAction.ts +50 -0
- package/app/Actions/Storefront/CheckoutShippingAction.ts +61 -0
- package/app/Actions/Storefront/GetCartAction.ts +58 -0
- package/app/Actions/Storefront/PlaceOrderAction.ts +195 -0
- package/app/Actions/Storefront/SubmitReviewAction.ts +140 -0
- package/app/Actions/Storefront/UpdateCartItemAction.ts +83 -0
- package/app/Actions/Storefront/_shipping.ts +64 -0
- package/app/Actions/SubscriberEmailAction.ts +60 -0
- package/app/Actions/TestErrorAction.ts +163 -0
- package/app/Actions/UnsubscribeAction.ts +107 -0
- package/app/Actions/UploadTestAction.ts +57 -0
- package/app/Broadcasts/OrderShipped.ts +57 -0
- package/app/Commands/Inspire.ts +57 -0
- package/app/Commands/README.md +84 -0
- package/app/Commands.ts +38 -0
- package/app/Controllers/ComingSoonController.ts +9 -0
- package/app/Controllers/QueryController.ts +373 -0
- package/app/Events.ts +14 -0
- package/app/Gates.ts +107 -0
- package/app/Jobs/ExampleJob.ts +20 -0
- package/app/Jobs/ExampleTwoJob.ts +12 -0
- package/app/Jobs/PruneModelsJob.ts +61 -0
- package/app/Jobs/PruneQueryLogsJob.ts +51 -0
- package/app/Jobs/README.md +79 -0
- package/app/Jobs/SendCampaignJob.ts +201 -0
- package/app/Jobs/SendEmailJob.ts +52 -0
- package/app/Jobs/SendPasswordResetEmailJob.ts +44 -0
- package/app/Jobs/SyncSearchIndexJob.ts +64 -0
- package/app/Listener.ts +84 -0
- package/app/Listeners/Console.ts +22 -0
- package/app/Listeners/README.md +47 -0
- package/app/Mail/OrderConfirmation.ts +60 -0
- package/app/Mail/SubscriptionConfirmation.ts +41 -0
- package/app/Middleware/Abilities.ts +53 -0
- package/app/Middleware/Api.ts +26 -0
- package/app/Middleware/Auth.ts +59 -0
- package/app/Middleware/Can.ts +68 -0
- package/app/Middleware/Compress.ts +213 -0
- package/app/Middleware/Cors.ts +320 -0
- package/app/Middleware/Csrf.ts +224 -0
- package/app/Middleware/EnsureEmailIsVerified.ts +28 -0
- package/app/Middleware/Env.ts +24 -0
- package/app/Middleware/EnvDevelopment.ts +19 -0
- package/app/Middleware/EnvLocal.ts +19 -0
- package/app/Middleware/EnvNotDevelopment.ts +19 -0
- package/app/Middleware/EnvNotLocal.ts +19 -0
- package/app/Middleware/EnvNotProduction.ts +19 -0
- package/app/Middleware/EnvNotStaging.ts +19 -0
- package/app/Middleware/EnvProduction.ts +19 -0
- package/app/Middleware/EnvStaging.ts +19 -0
- package/app/Middleware/Guest.ts +25 -0
- package/app/Middleware/Logger.ts +20 -0
- package/app/Middleware/Maintenance.ts +36 -0
- package/app/Middleware/Permission.ts +42 -0
- package/app/Middleware/README.md +48 -0
- package/app/Middleware/Role.ts +42 -0
- package/app/Middleware/Signed.ts +31 -0
- package/app/Middleware/Team.ts +36 -0
- package/app/Middleware/Throttle.ts +96 -0
- package/app/Middleware.ts +35 -0
- package/app/Models/Activity.ts +94 -0
- package/app/Models/Board.ts +103 -0
- package/app/Models/BoardColumn.ts +87 -0
- package/app/Models/Campaign.ts +239 -0
- package/app/Models/CampaignSend.ts +107 -0
- package/app/Models/Card.ts +117 -0
- package/app/Models/CardComment.ts +68 -0
- package/app/Models/Comment.ts +108 -0
- package/app/Models/Content/Author.ts +104 -0
- package/app/Models/Content/Page.ts +99 -0
- package/app/Models/Content/Post.ts +144 -0
- package/app/Models/Deployment.ts +116 -0
- package/app/Models/EmailList.ts +126 -0
- package/app/Models/EmailListSubscriber.ts +91 -0
- package/app/Models/Error.ts +70 -0
- package/app/Models/FailedJob.ts +62 -0
- package/app/Models/Job.ts +63 -0
- package/app/Models/Label.ts +66 -0
- package/app/Models/Log.ts +110 -0
- package/app/Models/Notification.ts +118 -0
- package/app/Models/PaymentMethod.ts +98 -0
- package/app/Models/PaymentProduct.ts +91 -0
- package/app/Models/PaymentTransaction.ts +78 -0
- package/app/Models/README.md +31 -0
- package/app/Models/Release.ts +89 -0
- package/app/Models/Request.ts +114 -0
- package/app/Models/SocialPost.ts +136 -0
- package/app/Models/Subscriber.ts +89 -0
- package/app/Models/SubscriberEmail.ts +55 -0
- package/app/Models/Subscription.ts +153 -0
- package/app/Models/Tag.ts +82 -0
- package/app/Models/Team.ts +72 -0
- package/app/Models/User.ts +134 -0
- package/app/Models/commerce/Cart.ts +139 -0
- package/app/Models/commerce/CartItem.ts +137 -0
- package/app/Models/commerce/Category.ts +105 -0
- package/app/Models/commerce/Coupon.ts +181 -0
- package/app/Models/commerce/Customer.ts +132 -0
- package/app/Models/commerce/DeliveryRoute.ts +93 -0
- package/app/Models/commerce/DigitalDelivery.ts +105 -0
- package/app/Models/commerce/Driver.ts +97 -0
- package/app/Models/commerce/GiftCard.ts +191 -0
- package/app/Models/commerce/LicenseKey.ts +87 -0
- package/app/Models/commerce/LoyaltyPoint.ts +107 -0
- package/app/Models/commerce/LoyaltyReward.ts +124 -0
- package/app/Models/commerce/Manufacturer.ts +84 -0
- package/app/Models/commerce/Order.ts +142 -0
- package/app/Models/commerce/OrderItem.ts +51 -0
- package/app/Models/commerce/Payment.ts +163 -0
- package/app/Models/commerce/PrintDevice.ts +117 -0
- package/app/Models/commerce/Product.ts +148 -0
- package/app/Models/commerce/ProductUnit.ts +107 -0
- package/app/Models/commerce/ProductVariant.ts +106 -0
- package/app/Models/commerce/Receipt.ts +128 -0
- package/app/Models/commerce/Review.ts +140 -0
- package/app/Models/commerce/ShippingMethod.ts +97 -0
- package/app/Models/commerce/ShippingRate.ts +74 -0
- package/app/Models/commerce/ShippingZone.ts +111 -0
- package/app/Models/commerce/TaxRate.ts +114 -0
- package/app/Models/commerce/Transaction.ts +126 -0
- package/app/Models/commerce/WaitlistProduct.ts +149 -0
- package/app/Models/commerce/WaitlistRestaurant.ts +187 -0
- package/app/Models/realtime/Websocket.ts +77 -0
- package/app/Notifications/README.md +31 -0
- package/app/Notifications/Welcome.ts +32 -0
- package/app/Policies/PostPolicy.ts +131 -0
- package/app/README.md +23 -0
- package/app/Routes.ts +47 -0
- package/app/Scheduler.ts +28 -0
- package/app/Storefront/CartCookie.ts +109 -0
- package/package.json +3 -2
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { defineModel } from '@stacksjs/orm'
|
|
2
|
+
import { schema } from '@stacksjs/validation'
|
|
3
|
+
|
|
4
|
+
export default defineModel({
|
|
5
|
+
name: 'WaitlistRestaurant',
|
|
6
|
+
table: 'waitlist_restaurants',
|
|
7
|
+
primaryKey: 'id',
|
|
8
|
+
autoIncrement: true,
|
|
9
|
+
belongsTo: ['Customer'],
|
|
10
|
+
traits: {
|
|
11
|
+
useUuid: true,
|
|
12
|
+
useTimestamps: true,
|
|
13
|
+
useSearch: {
|
|
14
|
+
displayable: ['id', 'name', 'email', 'phone', 'partySize', 'checkInTime', 'tablePreference', 'status', 'quotedWaitTime', 'actualWaitTime', 'queuePosition'],
|
|
15
|
+
searchable: ['name', 'email', 'phone'],
|
|
16
|
+
sortable: ['name', 'partySize', 'checkInTime', 'createdAt', 'updatedAt', 'status', 'queuePosition'],
|
|
17
|
+
filterable: ['tablePreference', 'status'],
|
|
18
|
+
},
|
|
19
|
+
|
|
20
|
+
useSeeder: {
|
|
21
|
+
count: 10,
|
|
22
|
+
},
|
|
23
|
+
|
|
24
|
+
useApi: {
|
|
25
|
+
uri: 'waitlist-restaurants',
|
|
26
|
+
},
|
|
27
|
+
|
|
28
|
+
observe: true,
|
|
29
|
+
},
|
|
30
|
+
|
|
31
|
+
attributes: {
|
|
32
|
+
name: {
|
|
33
|
+
order: 1,
|
|
34
|
+
fillable: true,
|
|
35
|
+
validation: {
|
|
36
|
+
rule: schema.string().required().max(255),
|
|
37
|
+
message: {
|
|
38
|
+
max: 'Name must have a maximum of 255 characters',
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
factory: faker => faker.person.fullName(),
|
|
42
|
+
},
|
|
43
|
+
|
|
44
|
+
email: {
|
|
45
|
+
order: 2,
|
|
46
|
+
fillable: true,
|
|
47
|
+
validation: {
|
|
48
|
+
rule: schema.string().required().email().max(255),
|
|
49
|
+
message: {
|
|
50
|
+
max: 'Email must have a maximum of 255 characters',
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
factory: faker => faker.internet.email(),
|
|
54
|
+
},
|
|
55
|
+
|
|
56
|
+
phone: {
|
|
57
|
+
order: 3,
|
|
58
|
+
fillable: true,
|
|
59
|
+
validation: {
|
|
60
|
+
rule: schema.string().max(100),
|
|
61
|
+
message: {
|
|
62
|
+
max: 'Phone number must have a maximum of 100 characters',
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
factory: faker => faker.phone.number(),
|
|
66
|
+
},
|
|
67
|
+
|
|
68
|
+
partySize: {
|
|
69
|
+
order: 4,
|
|
70
|
+
fillable: true,
|
|
71
|
+
validation: {
|
|
72
|
+
rule: schema.number().required().min(1),
|
|
73
|
+
message: {
|
|
74
|
+
min: 'Party size must be at least 1',
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
factory: faker => faker.number.int({ min: 1, max: 20 }),
|
|
78
|
+
},
|
|
79
|
+
|
|
80
|
+
checkInTime: {
|
|
81
|
+
order: 5,
|
|
82
|
+
fillable: true,
|
|
83
|
+
validation: {
|
|
84
|
+
rule: schema.timestamp().required(),
|
|
85
|
+
},
|
|
86
|
+
factory: (faker) => {
|
|
87
|
+
const date = faker.date.future()
|
|
88
|
+
return date.toISOString().slice(0, 19).replace('T', ' ')
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
|
|
92
|
+
tablePreference: {
|
|
93
|
+
order: 6,
|
|
94
|
+
fillable: true,
|
|
95
|
+
validation: {
|
|
96
|
+
rule: schema.enum(['indoor', 'bar', 'booth', 'no_preference']).required(),
|
|
97
|
+
},
|
|
98
|
+
factory: faker => faker.helpers.arrayElement(['indoor', 'bar', 'booth', 'no_preference']),
|
|
99
|
+
},
|
|
100
|
+
|
|
101
|
+
status: {
|
|
102
|
+
default: 'waiting',
|
|
103
|
+
order: 7,
|
|
104
|
+
fillable: true,
|
|
105
|
+
validation: {
|
|
106
|
+
rule: schema.enum(['waiting', 'seated', 'cancelled', 'no_show']).required(),
|
|
107
|
+
},
|
|
108
|
+
factory: faker => faker.helpers.arrayElement(['waiting', 'seated', 'cancelled', 'no_show']),
|
|
109
|
+
},
|
|
110
|
+
|
|
111
|
+
quoted_wait_time: {
|
|
112
|
+
order: 8,
|
|
113
|
+
fillable: true,
|
|
114
|
+
validation: {
|
|
115
|
+
rule: schema.number().required().min(0),
|
|
116
|
+
message: {
|
|
117
|
+
min: 'Quoted wait time must be at least 0 minutes',
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
factory: faker => faker.number.int({ min: 0, max: 120 }),
|
|
121
|
+
},
|
|
122
|
+
|
|
123
|
+
actual_wait_time: {
|
|
124
|
+
order: 9,
|
|
125
|
+
fillable: true,
|
|
126
|
+
validation: {
|
|
127
|
+
rule: schema.number().min(0),
|
|
128
|
+
message: {
|
|
129
|
+
min: 'Actual wait time must be at least 0 minutes',
|
|
130
|
+
},
|
|
131
|
+
},
|
|
132
|
+
factory: faker => faker.helpers.maybe(() => faker.number.int({ min: 0, max: 180 }), { probability: 0.7 }),
|
|
133
|
+
},
|
|
134
|
+
|
|
135
|
+
queue_position: {
|
|
136
|
+
order: 10,
|
|
137
|
+
fillable: true,
|
|
138
|
+
validation: {
|
|
139
|
+
rule: schema.number().min(1),
|
|
140
|
+
message: {
|
|
141
|
+
min: 'Queue position must be at least 1',
|
|
142
|
+
},
|
|
143
|
+
},
|
|
144
|
+
factory: faker => faker.helpers.maybe(() => faker.number.int({ min: 1, max: 50 }), { probability: 0.7 }),
|
|
145
|
+
},
|
|
146
|
+
|
|
147
|
+
seatedAt: {
|
|
148
|
+
order: 11,
|
|
149
|
+
fillable: true,
|
|
150
|
+
validation: {
|
|
151
|
+
rule: schema.timestamp(),
|
|
152
|
+
},
|
|
153
|
+
factory: (faker) => {
|
|
154
|
+
const date = faker.date.future()
|
|
155
|
+
return date.toISOString().slice(0, 19).replace('T', ' ')
|
|
156
|
+
},
|
|
157
|
+
},
|
|
158
|
+
|
|
159
|
+
noShowAt: {
|
|
160
|
+
order: 12,
|
|
161
|
+
fillable: true,
|
|
162
|
+
validation: {
|
|
163
|
+
rule: schema.timestamp(),
|
|
164
|
+
},
|
|
165
|
+
factory: (faker) => {
|
|
166
|
+
const date = faker.date.future()
|
|
167
|
+
return date.toISOString().slice(0, 19).replace('T', ' ')
|
|
168
|
+
},
|
|
169
|
+
},
|
|
170
|
+
|
|
171
|
+
cancelledAt: {
|
|
172
|
+
order: 13,
|
|
173
|
+
fillable: true,
|
|
174
|
+
validation: {
|
|
175
|
+
rule: schema.timestamp(),
|
|
176
|
+
},
|
|
177
|
+
factory: (faker) => {
|
|
178
|
+
const date = faker.date.future()
|
|
179
|
+
return date.toISOString().slice(0, 19).replace('T', ' ')
|
|
180
|
+
},
|
|
181
|
+
},
|
|
182
|
+
},
|
|
183
|
+
|
|
184
|
+
dashboard: {
|
|
185
|
+
highlight: true,
|
|
186
|
+
},
|
|
187
|
+
} as const)
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { defineModel } from '@stacksjs/orm'
|
|
2
|
+
import { schema } from '@stacksjs/validation'
|
|
3
|
+
|
|
4
|
+
export default defineModel({
|
|
5
|
+
name: 'Websocket',
|
|
6
|
+
table: 'websockets',
|
|
7
|
+
primaryKey: 'id',
|
|
8
|
+
autoIncrement: true,
|
|
9
|
+
|
|
10
|
+
traits: {
|
|
11
|
+
useTimestamps: true,
|
|
12
|
+
useSeeder: {
|
|
13
|
+
count: 20,
|
|
14
|
+
},
|
|
15
|
+
useApi: {
|
|
16
|
+
uri: 'websockets',
|
|
17
|
+
routes: ['index', 'store', 'show'],
|
|
18
|
+
},
|
|
19
|
+
observe: true,
|
|
20
|
+
},
|
|
21
|
+
|
|
22
|
+
attributes: {
|
|
23
|
+
type: {
|
|
24
|
+
required: true,
|
|
25
|
+
order: 1,
|
|
26
|
+
fillable: true,
|
|
27
|
+
validation: {
|
|
28
|
+
rule: schema.enum(['disconnection', 'error', 'success']),
|
|
29
|
+
message: {
|
|
30
|
+
in: 'Type must be one of: disconnection, error, success',
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
factory: faker => faker.helpers.arrayElement(['success', 'success', 'success', 'disconnection', 'error']),
|
|
34
|
+
},
|
|
35
|
+
|
|
36
|
+
socket: {
|
|
37
|
+
required: true,
|
|
38
|
+
order: 2,
|
|
39
|
+
fillable: true,
|
|
40
|
+
validation: {
|
|
41
|
+
rule: schema.string().min(1).max(255),
|
|
42
|
+
message: {
|
|
43
|
+
min: 'Socket identifier must be provided',
|
|
44
|
+
max: 'Socket identifier must not exceed 255 characters',
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
factory: faker => faker.string.alphanumeric(20),
|
|
48
|
+
},
|
|
49
|
+
|
|
50
|
+
details: {
|
|
51
|
+
required: true,
|
|
52
|
+
order: 3,
|
|
53
|
+
fillable: true,
|
|
54
|
+
validation: {
|
|
55
|
+
rule: schema.string().min(1).max(1000),
|
|
56
|
+
message: {
|
|
57
|
+
min: 'Details must be provided',
|
|
58
|
+
max: 'Details must not exceed 1000 characters',
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
factory: faker => faker.lorem.sentence(),
|
|
62
|
+
},
|
|
63
|
+
|
|
64
|
+
time: {
|
|
65
|
+
required: true,
|
|
66
|
+
order: 4,
|
|
67
|
+
fillable: true,
|
|
68
|
+
validation: {
|
|
69
|
+
rule: schema.number(),
|
|
70
|
+
message: {
|
|
71
|
+
date: 'Time must be a valid timestamp',
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
factory: faker => faker.date.recent().getTime(),
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
} as const)
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# What are Notifications
|
|
2
|
+
|
|
3
|
+
Notifications are a way to define a message that should be sent somewhere. It is a unified API to send a message across multiple channels, such as email, SMS, Push Notifications, and social channels.
|
|
4
|
+
|
|
5
|
+
## Get Started
|
|
6
|
+
|
|
7
|
+
The following command will bootstrap a new notification in the `app/Notifications` directory.
|
|
8
|
+
|
|
9
|
+
```sh
|
|
10
|
+
buddy make:notification Welcome
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## 🚜 Contributing
|
|
14
|
+
|
|
15
|
+
Please review the [Contributing Guide](https://github.com/stacksjs/contributing) for details.
|
|
16
|
+
|
|
17
|
+
## 🏝 Community
|
|
18
|
+
|
|
19
|
+
For help, discussion about best practices, or any other conversation that would benefit from being searchable:
|
|
20
|
+
|
|
21
|
+
[Discussions on GitHub](https://github.com/stacksjs/stacks/discussions)
|
|
22
|
+
|
|
23
|
+
For casual chit-chat with others using this package:
|
|
24
|
+
|
|
25
|
+
[Join the Stacks Discord Server](https://discord.gg/stacksjs)
|
|
26
|
+
|
|
27
|
+
## 📄 License
|
|
28
|
+
|
|
29
|
+
The MIT License (MIT). Please see [LICENSE](../../LICENSE.md) for more information.
|
|
30
|
+
|
|
31
|
+
Made with 💙
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { config } from '@stacksjs/config'
|
|
2
|
+
import { Email } from '@stacksjs/email'
|
|
3
|
+
import { log } from '@stacksjs/logging'
|
|
4
|
+
|
|
5
|
+
export default new Email({
|
|
6
|
+
// or Sms or Push or Webhook or Chat
|
|
7
|
+
name: 'welcome', // optional, defaults to the file name
|
|
8
|
+
subject: 'Welcome to Stacks', // optional, but recommended
|
|
9
|
+
to: 'some@email.com', // optional, has to be defined here or set when sending
|
|
10
|
+
from: config.email.from, // optional, defaults to the config value
|
|
11
|
+
template: 'Welcome', // resources/emails/Welcome.stx
|
|
12
|
+
|
|
13
|
+
handle: async () => {
|
|
14
|
+
// if needed, trigger some custom logic here
|
|
15
|
+
// or simply return a custom HTTP message
|
|
16
|
+
return {
|
|
17
|
+
message: 'Email sent',
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
|
|
21
|
+
onError: async (error: Error) => {
|
|
22
|
+
log.error(error)
|
|
23
|
+
// if needed, trigger some custom logic here
|
|
24
|
+
return {
|
|
25
|
+
message: 'Email failed to send',
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
|
|
29
|
+
onSuccess: () => {
|
|
30
|
+
log.info('Some additional logging here...')
|
|
31
|
+
},
|
|
32
|
+
})
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import type { UserModel } from '@stacksjs/orm'
|
|
2
|
+
import { BasePolicy } from '@stacksjs/auth'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Post Policy
|
|
6
|
+
*
|
|
7
|
+
* This policy controls authorization for Post model actions.
|
|
8
|
+
* Each method returns true to allow, false to deny, or an
|
|
9
|
+
* AuthorizationResponse for custom messages.
|
|
10
|
+
*
|
|
11
|
+
* Usage:
|
|
12
|
+
* 1. Register in app/Gates.ts:
|
|
13
|
+
* policies: { 'Post': 'PostPolicy' }
|
|
14
|
+
*
|
|
15
|
+
* 2. Use in your code:
|
|
16
|
+
* import { Gate } from '@stacksjs/auth'
|
|
17
|
+
* await Gate.authorize('view', user, post)
|
|
18
|
+
*
|
|
19
|
+
* 3. Or use the middleware:
|
|
20
|
+
* route.put('/posts/:post', 'UpdatePost').middleware('can:update,post')
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
// Define your Post type (or import from your models)
|
|
24
|
+
interface Post {
|
|
25
|
+
id: number
|
|
26
|
+
user_id: number
|
|
27
|
+
published: boolean
|
|
28
|
+
title?: string
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export default class PostPolicy extends BasePolicy<Post> {
|
|
32
|
+
/**
|
|
33
|
+
* Run before any other checks.
|
|
34
|
+
* Return true to allow, false to deny, null to continue.
|
|
35
|
+
*/
|
|
36
|
+
before(user: UserModel | null, ability: string): boolean | null {
|
|
37
|
+
// Example: Admins can do anything with posts
|
|
38
|
+
// if (user?.role === 'admin') {
|
|
39
|
+
// return true
|
|
40
|
+
// }
|
|
41
|
+
return null // Continue to specific checks
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Determine if the user can view any posts.
|
|
46
|
+
*/
|
|
47
|
+
viewAny(user: UserModel | null): boolean {
|
|
48
|
+
// Anyone can view the posts list
|
|
49
|
+
return true
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Determine if the user can view a specific post.
|
|
54
|
+
*/
|
|
55
|
+
view(user: UserModel | null, post: Post): boolean {
|
|
56
|
+
// Published posts are visible to everyone
|
|
57
|
+
if (post.published) {
|
|
58
|
+
return true
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Unpublished posts only visible to the author
|
|
62
|
+
return user?.id === post.user_id
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Determine if the user can create posts.
|
|
67
|
+
*/
|
|
68
|
+
create(user: UserModel | null): boolean {
|
|
69
|
+
// Must be logged in to create posts
|
|
70
|
+
return user !== null
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Determine if the user can update the post.
|
|
75
|
+
*/
|
|
76
|
+
update(user: UserModel | null, post: Post): boolean {
|
|
77
|
+
// Only the author can update their post
|
|
78
|
+
return user?.id === post.user_id
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Determine if the user can delete the post.
|
|
83
|
+
*/
|
|
84
|
+
delete(user: UserModel | null, post: Post): boolean {
|
|
85
|
+
// Only the author can delete their post
|
|
86
|
+
return user?.id === post.user_id
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Determine if the user can restore a soft-deleted post.
|
|
91
|
+
*/
|
|
92
|
+
restore(user: UserModel | null, post: Post): boolean {
|
|
93
|
+
return user?.id === post.user_id
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Determine if the user can permanently delete the post.
|
|
98
|
+
*/
|
|
99
|
+
forceDelete(user: UserModel | null, post: Post): boolean {
|
|
100
|
+
// Only allow force delete if you're the author
|
|
101
|
+
return user?.id === post.user_id
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Custom ability: Can the user publish the post?
|
|
106
|
+
*/
|
|
107
|
+
publish(user: UserModel | null, post: Post): boolean {
|
|
108
|
+
return user?.id === post.user_id
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Custom ability: Can the user feature the post?
|
|
113
|
+
* Returns a detailed response.
|
|
114
|
+
*/
|
|
115
|
+
feature(user: UserModel | null, post: Post) {
|
|
116
|
+
if (!user) {
|
|
117
|
+
return this.deny('You must be logged in to feature posts.')
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
if (!post.published) {
|
|
121
|
+
return this.deny('Only published posts can be featured.')
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// Only admins can feature posts (example)
|
|
125
|
+
// if (user.role !== 'admin') {
|
|
126
|
+
// return this.deny('Only administrators can feature posts.')
|
|
127
|
+
// }
|
|
128
|
+
|
|
129
|
+
return this.allow()
|
|
130
|
+
}
|
|
131
|
+
}
|
package/app/README.md
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# The App Folder
|
|
2
|
+
|
|
3
|
+
The Stacks App directory is where you would store
|
|
4
|
+
|
|
5
|
+
## 🚜 Contributing
|
|
6
|
+
|
|
7
|
+
Please review the [Contributing Guide](https://github.com/stacksjs/contributing) for details.
|
|
8
|
+
|
|
9
|
+
## 🏝 Community
|
|
10
|
+
|
|
11
|
+
For help, discussion about best practices, or any other conversation that would benefit from being searchable:
|
|
12
|
+
|
|
13
|
+
[Discussions on GitHub](https://github.com/stacksjs/stacks/discussions)
|
|
14
|
+
|
|
15
|
+
For casual chit-chat with others using this package:
|
|
16
|
+
|
|
17
|
+
[Join the Stacks Discord Server](https://discord.gg/stacksjs)
|
|
18
|
+
|
|
19
|
+
## 📄 License
|
|
20
|
+
|
|
21
|
+
The MIT License (MIT). Please see [LICENSE](../../LICENSE.md) for more information.
|
|
22
|
+
|
|
23
|
+
Made with 💙
|
package/app/Routes.ts
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
// Route registry types live in `@stacksjs/router` (the consumer) — see
|
|
2
|
+
// stacksjs/stacks#1863. Re-exported here for backwards compatibility
|
|
3
|
+
// with any project code that imports them via `app/Routes`.
|
|
4
|
+
import type { RouteDefinition, RouteRegistry } from '@stacksjs/router'
|
|
5
|
+
|
|
6
|
+
export type { RouteDefinition, RouteRegistry }
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Application route registry.
|
|
10
|
+
*
|
|
11
|
+
* Define your route files here. The key becomes the URL prefix
|
|
12
|
+
* automatically. The `'web'` key is the only one that loads at root
|
|
13
|
+
* (`/`) with no prefix — see the route-loader's `NO_PREFIX_KEYS` for
|
|
14
|
+
* the canonical list.
|
|
15
|
+
*
|
|
16
|
+
* `'api'` auto-prefixes with `/api` so user routes line up with the
|
|
17
|
+
* rpx proxy forward path (stacksjs/stacks#1835). Writing
|
|
18
|
+
* `route.get('/cart/add', ...)` in `routes/api.ts` registers as
|
|
19
|
+
* `/api/cart/add` — exactly what `https://<domain>/api/cart/add`
|
|
20
|
+
* resolves to via the dev proxy.
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* // Default API routes - routes/api.ts loaded at /api/*
|
|
24
|
+
* 'api': 'api',
|
|
25
|
+
*
|
|
26
|
+
* // Auto prefix from key - routes/v1.ts loaded at /v1/*
|
|
27
|
+
* 'v1': 'v1',
|
|
28
|
+
*
|
|
29
|
+
* // Explicit prefix - routes/api/v1.ts loaded at /api/v1/*
|
|
30
|
+
* 'legacy': { path: 'api/v1', prefix: '/api/v1' },
|
|
31
|
+
*
|
|
32
|
+
* // No prefix override - routes/internal.ts loaded at /* (no prefix)
|
|
33
|
+
* 'internal': { path: 'internal', prefix: '' },
|
|
34
|
+
*
|
|
35
|
+
* // With middleware - routes/admin.ts loaded at /admin/* with auth
|
|
36
|
+
* 'admin': { path: 'admin', middleware: ['auth'] },
|
|
37
|
+
*/
|
|
38
|
+
export default {
|
|
39
|
+
// Default API routes — auto-prefixed with /api by the route-loader
|
|
40
|
+
// so `routes/api.ts` aligns with the proxy forward path.
|
|
41
|
+
'api': 'api',
|
|
42
|
+
|
|
43
|
+
// Add versioned or prefixed routes here:
|
|
44
|
+
'v1': { path: 'v1', prefix: 'v1' }
|
|
45
|
+
// 'v2': 'api/v2',
|
|
46
|
+
// 'admin': { path: 'admin', middleware: ['auth'] },
|
|
47
|
+
} satisfies RouteRegistry
|
package/app/Scheduler.ts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import process from 'node:process'
|
|
2
|
+
import { schedule } from '@stacksjs/scheduler'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* **Scheduler**
|
|
6
|
+
*
|
|
7
|
+
* Define your scheduled tasks here. Jobs, actions, and shell commands
|
|
8
|
+
* can all be scheduled with a fluent, expressive API.
|
|
9
|
+
*
|
|
10
|
+
* @see https://docs.stacksjs.com/scheduling
|
|
11
|
+
*/
|
|
12
|
+
export default function () {
|
|
13
|
+
// Run the Inspire job every hour
|
|
14
|
+
schedule
|
|
15
|
+
.job('Inspire')
|
|
16
|
+
.hourly()
|
|
17
|
+
.setTimeZone('America/Los_Angeles')
|
|
18
|
+
|
|
19
|
+
// Run a custom action every five minutes
|
|
20
|
+
// schedule.action('CleanupTempFiles').everyFiveMinutes()
|
|
21
|
+
|
|
22
|
+
// Run a shell command daily at midnight
|
|
23
|
+
// schedule.command('echo "Daily maintenance complete"').daily()
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
process.on('SIGINT', () => {
|
|
27
|
+
schedule.gracefulShutdown().then(() => process.exit(0))
|
|
28
|
+
})
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cart cookie helper — signs / verifies the `stacks_cart` token.
|
|
3
|
+
*
|
|
4
|
+
* Storefront cart actions used to set the cookie to a raw UUIDv7. The
|
|
5
|
+
* value is hard to *guess* (122 bits of randomness) but trivially
|
|
6
|
+
* *tamperable* — a hostile client can replace it with any other
|
|
7
|
+
* known token to read someone else's cart. Signing the cookie with
|
|
8
|
+
* an HMAC over APP_KEY closes that hole: on read, we reject any
|
|
9
|
+
* value whose signature doesn't match, falling back to "no cart" so
|
|
10
|
+
* the action mints a fresh one.
|
|
11
|
+
*
|
|
12
|
+
* Format: `<token>.<sig>` where `<sig>` is the first 22 base64url
|
|
13
|
+
* characters of `HMAC-SHA256(APP_KEY, token)` (16 bytes → 128 bits,
|
|
14
|
+
* plenty for tamper detection without bloating the cookie).
|
|
15
|
+
*
|
|
16
|
+
* Backwards compat: legacy unsigned tokens still parse (we treat
|
|
17
|
+
* "no `.`" as unsigned) so existing carts don't get orphaned by the
|
|
18
|
+
* upgrade. Once the cookie expires (30 days) every shopper has the
|
|
19
|
+
* signed form.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
import { createHmac } from 'node:crypto'
|
|
23
|
+
|
|
24
|
+
const SIG_BYTES = 16
|
|
25
|
+
const SIG_CHARS = 22 // 16 bytes → 22 base64url chars (no padding)
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Resolve the APP_KEY at call time so test envs that swap `process.env`
|
|
29
|
+
* pick up the new value. Strips the `base64:` prefix Stacks uses for
|
|
30
|
+
* keys generated by `buddy key:generate`. Falls back to a short
|
|
31
|
+
* sentinel so a missing key doesn't crash the request — but the
|
|
32
|
+
* resulting signature is predictable and easy to forge, so the
|
|
33
|
+
* sentinel doubles as a "fix your env" smell in dev.
|
|
34
|
+
*/
|
|
35
|
+
function getKey(): string {
|
|
36
|
+
const raw = process.env.APP_KEY || ''
|
|
37
|
+
if (raw.startsWith('base64:'))
|
|
38
|
+
return raw.slice('base64:'.length)
|
|
39
|
+
return raw || 'unsigned-fallback-set-APP_KEY'
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function sign(token: string): string {
|
|
43
|
+
const sig = createHmac('sha256', getKey())
|
|
44
|
+
.update(token)
|
|
45
|
+
.digest('base64url')
|
|
46
|
+
.slice(0, SIG_CHARS)
|
|
47
|
+
return `${token}.${sig}`
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Constant-time string compare so signature verification doesn't
|
|
52
|
+
* leak timing info. Both sides are the same length here (22 chars),
|
|
53
|
+
* so the early-exit length check is safe.
|
|
54
|
+
*/
|
|
55
|
+
function timingSafeEqual(a: string, b: string): boolean {
|
|
56
|
+
if (a.length !== b.length) return false
|
|
57
|
+
let diff = 0
|
|
58
|
+
for (let i = 0; i < a.length; i++)
|
|
59
|
+
diff |= a.charCodeAt(i) ^ b.charCodeAt(i)
|
|
60
|
+
return diff === 0
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Pull a verified cart token out of the request, or null if the
|
|
65
|
+
* cookie is missing/malformed/forged. Legacy unsigned tokens
|
|
66
|
+
* (no `.`) are accepted once and re-signed on the next write.
|
|
67
|
+
*/
|
|
68
|
+
export function readCartCookie(request: any, cookieName: string): string | null {
|
|
69
|
+
const raw = request.cookies?.get?.(cookieName)
|
|
70
|
+
if (!raw || typeof raw !== 'string') return null
|
|
71
|
+
|
|
72
|
+
// Legacy: unsigned UUID. Accept and let the caller re-sign on write.
|
|
73
|
+
// We can't tell apart "valid legacy" from "client-forged garbage",
|
|
74
|
+
// but the action's existing flow already does a DB lookup that
|
|
75
|
+
// returns no row for unknown tokens — same fallback path.
|
|
76
|
+
if (!raw.includes('.')) return raw
|
|
77
|
+
|
|
78
|
+
const dot = raw.lastIndexOf('.')
|
|
79
|
+
const token = raw.slice(0, dot)
|
|
80
|
+
const presented = raw.slice(dot + 1)
|
|
81
|
+
if (!token || presented.length !== SIG_CHARS) return null
|
|
82
|
+
|
|
83
|
+
const expected = createHmac('sha256', getKey())
|
|
84
|
+
.update(token)
|
|
85
|
+
.digest('base64url')
|
|
86
|
+
.slice(0, SIG_CHARS)
|
|
87
|
+
|
|
88
|
+
return timingSafeEqual(expected, presented) ? token : null
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Write a signed cart token to the response cookies. `opts` mirrors
|
|
93
|
+
* the existing `request.cookies.set(name, value, opts)` shape.
|
|
94
|
+
*/
|
|
95
|
+
export function writeCartCookie(
|
|
96
|
+
request: any,
|
|
97
|
+
cookieName: string,
|
|
98
|
+
token: string,
|
|
99
|
+
opts: Record<string, unknown>,
|
|
100
|
+
): void {
|
|
101
|
+
request.cookies?.set?.(cookieName, sign(token), opts)
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export const cartCookie = { read: readCartCookie, write: writeCartCookie, sign }
|
|
105
|
+
export default cartCookie
|
|
106
|
+
|
|
107
|
+
// Re-export `SIG_BYTES` so tests can assert the byte budget without
|
|
108
|
+
// recomputing it. Not used at runtime in the storefront flow.
|
|
109
|
+
export const _internals = { SIG_BYTES, SIG_CHARS }
|
package/package.json
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stacksjs/defaults",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.70.
|
|
4
|
+
"version": "0.70.60",
|
|
5
5
|
"description": "Default Stacks scaffold resources (views, layouts, components, preloader) — shipped so apps consuming the framework from node_modules get the same fallback resources a vendored checkout provides. Source of truth: storage/framework/defaults.",
|
|
6
6
|
"author": "Chris Breuer",
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"homepage": "https://github.com/stacksjs/stacks/tree/main/storage/framework/defaults",
|
|
9
9
|
"files": [
|
|
10
10
|
"README.md",
|
|
11
|
-
"resources"
|
|
11
|
+
"resources",
|
|
12
|
+
"app"
|
|
12
13
|
],
|
|
13
14
|
"exports": {
|
|
14
15
|
"./*": "./*",
|