@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,53 @@
|
|
|
1
|
+
import { Action } from '@stacksjs/actions'
|
|
2
|
+
import { createPermission, findPermission } from '@stacksjs/auth'
|
|
3
|
+
|
|
4
|
+
interface PermissionInput {
|
|
5
|
+
name?: unknown
|
|
6
|
+
guardName?: unknown
|
|
7
|
+
description?: unknown
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* `POST /api/dashboard/rbac/permissions` (stacksjs/stacks#1845).
|
|
12
|
+
*
|
|
13
|
+
* Mirrors RoleStoreAction. Permissions are typically dotted names
|
|
14
|
+
* like `posts.publish` or `users.delete` — the dashboard imposes
|
|
15
|
+
* no naming convention, that's an app-layer concern.
|
|
16
|
+
*/
|
|
17
|
+
export default new Action({
|
|
18
|
+
name: 'Dashboard RBAC Permission Store',
|
|
19
|
+
description: 'Create a new permission.',
|
|
20
|
+
method: 'POST',
|
|
21
|
+
apiResponse: true,
|
|
22
|
+
async handle(request) {
|
|
23
|
+
const body = (request as any).jsonBody as PermissionInput | undefined ?? {}
|
|
24
|
+
|
|
25
|
+
const name = typeof body.name === 'string' ? body.name.trim() : ''
|
|
26
|
+
if (!name || name.length > 100) {
|
|
27
|
+
return { error: '`name` is required and must be 1-100 characters.', status: 400 }
|
|
28
|
+
}
|
|
29
|
+
const guardName = typeof body.guardName === 'string' && body.guardName ? body.guardName.trim() : 'web'
|
|
30
|
+
const description = typeof body.description === 'string' ? body.description.trim() : undefined
|
|
31
|
+
|
|
32
|
+
try {
|
|
33
|
+
const existing = await findPermission(name, guardName)
|
|
34
|
+
if (existing) {
|
|
35
|
+
return { error: 'A permission with that name and guard already exists.', status: 409 }
|
|
36
|
+
}
|
|
37
|
+
const permission = await createPermission(name, guardName, description)
|
|
38
|
+
return {
|
|
39
|
+
permission: {
|
|
40
|
+
id: permission.id,
|
|
41
|
+
name: permission.name,
|
|
42
|
+
guardName: permission.guard_name,
|
|
43
|
+
description: permission.description ?? null,
|
|
44
|
+
createdAt: permission.created_at ?? null,
|
|
45
|
+
},
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
console.error('[dashboard/rbac] PermissionStoreAction failed:', err)
|
|
50
|
+
return { error: err instanceof Error ? err.message : 'unknown error', status: 500 }
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
})
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Action } from '@stacksjs/actions'
|
|
2
|
+
import { getAllPermissions } from '@stacksjs/auth'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* `GET /api/dashboard/rbac/permissions` (stacksjs/stacks#1845).
|
|
6
|
+
*
|
|
7
|
+
* Same shape as RolesIndexAction but against permissions. Drives the
|
|
8
|
+
* Permissions tab on the management page + the column headers of the
|
|
9
|
+
* Role-Permission matrix.
|
|
10
|
+
*/
|
|
11
|
+
export default new Action({
|
|
12
|
+
name: 'Dashboard RBAC Permissions Index',
|
|
13
|
+
description: 'List every permission known to the RBAC store.',
|
|
14
|
+
method: 'GET',
|
|
15
|
+
apiResponse: true,
|
|
16
|
+
async handle() {
|
|
17
|
+
try {
|
|
18
|
+
const permissions = await getAllPermissions()
|
|
19
|
+
return {
|
|
20
|
+
permissions: permissions.map(p => ({
|
|
21
|
+
id: p.id,
|
|
22
|
+
name: p.name,
|
|
23
|
+
guardName: p.guard_name,
|
|
24
|
+
description: p.description ?? null,
|
|
25
|
+
createdAt: p.created_at ?? null,
|
|
26
|
+
})),
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
catch (err) {
|
|
30
|
+
console.error('[dashboard/rbac] PermissionsIndexAction failed:', err)
|
|
31
|
+
return { permissions: [], error: err instanceof Error ? err.message : 'unknown error' }
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
})
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Action } from '@stacksjs/actions'
|
|
2
|
+
import { deleteRole } from '@stacksjs/auth'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* `DELETE /api/dashboard/rbac/roles/:name` (stacksjs/stacks#1845).
|
|
6
|
+
*
|
|
7
|
+
* Removes a role by name + guard. The underlying store cascades the
|
|
8
|
+
* user_roles + role_permissions pivot rows so a deleted role doesn't
|
|
9
|
+
* leave orphan attachments. No notification to formerly-assigned
|
|
10
|
+
* users — the dashboard's role-gated visibility re-evaluates on the
|
|
11
|
+
* next page load.
|
|
12
|
+
*/
|
|
13
|
+
export default new Action({
|
|
14
|
+
name: 'Dashboard RBAC Role Destroy',
|
|
15
|
+
description: 'Hard-delete a role + its pivot rows.',
|
|
16
|
+
method: 'DELETE',
|
|
17
|
+
apiResponse: true,
|
|
18
|
+
async handle(request) {
|
|
19
|
+
const name = String((request as any)?.params?.name ?? '').trim()
|
|
20
|
+
if (!name) {
|
|
21
|
+
return { error: '`name` route param is required.', status: 400 }
|
|
22
|
+
}
|
|
23
|
+
const url = new URL(request.url ?? 'http://localhost/')
|
|
24
|
+
const guardName = url.searchParams.get('guard') || 'web'
|
|
25
|
+
|
|
26
|
+
try {
|
|
27
|
+
await deleteRole(name, guardName)
|
|
28
|
+
return { deleted: true, name, guardName }
|
|
29
|
+
}
|
|
30
|
+
catch (err) {
|
|
31
|
+
console.error('[dashboard/rbac] RoleDestroyAction failed:', err)
|
|
32
|
+
return { error: err instanceof Error ? err.message : 'unknown error', status: 500 }
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
})
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { Action } from '@stacksjs/actions'
|
|
2
|
+
import { findRole, getRolePermissions } from '@stacksjs/auth'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* `GET /api/dashboard/rbac/roles/:name/permissions` (stacksjs/stacks#1845).
|
|
6
|
+
*
|
|
7
|
+
* Returns the permissions attached to a role. Drives the
|
|
8
|
+
* Role-Permission matrix on the management page — when an admin
|
|
9
|
+
* picks a role, this populates which permission checkboxes are
|
|
10
|
+
* currently on.
|
|
11
|
+
*/
|
|
12
|
+
export default new Action({
|
|
13
|
+
name: 'Dashboard RBAC Role Permissions Show',
|
|
14
|
+
description: 'List permissions attached to one role.',
|
|
15
|
+
method: 'GET',
|
|
16
|
+
apiResponse: true,
|
|
17
|
+
async handle(request) {
|
|
18
|
+
const name = String((request as any)?.params?.name ?? '').trim()
|
|
19
|
+
if (!name) {
|
|
20
|
+
return { error: '`name` route param is required.', status: 400 }
|
|
21
|
+
}
|
|
22
|
+
const url = new URL(request.url ?? 'http://localhost/')
|
|
23
|
+
const guardName = url.searchParams.get('guard') || 'web'
|
|
24
|
+
|
|
25
|
+
try {
|
|
26
|
+
const role = await findRole(name, guardName)
|
|
27
|
+
if (!role) {
|
|
28
|
+
return { error: 'Role not found.', status: 404 }
|
|
29
|
+
}
|
|
30
|
+
const permissions = await getRolePermissions(role.id)
|
|
31
|
+
return {
|
|
32
|
+
role: { id: role.id, name: role.name, guardName: role.guard_name },
|
|
33
|
+
permissions: permissions.map(p => ({
|
|
34
|
+
id: p.id,
|
|
35
|
+
name: p.name,
|
|
36
|
+
guardName: p.guard_name,
|
|
37
|
+
})),
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
console.error('[dashboard/rbac] RolePermissionsShowAction failed:', err)
|
|
42
|
+
return { permissions: [], error: err instanceof Error ? err.message : 'unknown error' }
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
})
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { Action } from '@stacksjs/actions'
|
|
2
|
+
import { getRolePermissions, findRole, syncRolePermissions } from '@stacksjs/auth'
|
|
3
|
+
|
|
4
|
+
interface SyncInput {
|
|
5
|
+
permissions?: unknown
|
|
6
|
+
guardName?: unknown
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* `POST /api/dashboard/rbac/roles/:name/permissions` (stacksjs/stacks#1845).
|
|
11
|
+
*
|
|
12
|
+
* Replace-all: pass the full new permission-name list. The facade
|
|
13
|
+
* resolves names → ids and calls the store's syncRolePermissions
|
|
14
|
+
* (which is `delete-then-insert` under the hood, transactional).
|
|
15
|
+
*/
|
|
16
|
+
export default new Action({
|
|
17
|
+
name: 'Dashboard RBAC Role Permissions Sync',
|
|
18
|
+
description: 'Replace the permission set attached to one role.',
|
|
19
|
+
method: 'POST',
|
|
20
|
+
apiResponse: true,
|
|
21
|
+
async handle(request) {
|
|
22
|
+
const roleName = String((request as any)?.params?.name ?? '').trim()
|
|
23
|
+
if (!roleName) {
|
|
24
|
+
return { error: '`name` route param is required.', status: 400 }
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const body = (request as any).jsonBody as SyncInput | undefined ?? {}
|
|
28
|
+
if (!Array.isArray(body.permissions)) {
|
|
29
|
+
return { error: '`permissions` must be an array of permission names (possibly empty).', status: 400 }
|
|
30
|
+
}
|
|
31
|
+
const names: string[] = []
|
|
32
|
+
for (const v of body.permissions) {
|
|
33
|
+
if (typeof v !== 'string' || !v.trim()) {
|
|
34
|
+
return { error: '`permissions` must contain non-empty strings.', status: 400 }
|
|
35
|
+
}
|
|
36
|
+
names.push(v.trim())
|
|
37
|
+
}
|
|
38
|
+
const guardName = typeof body.guardName === 'string' && body.guardName ? body.guardName.trim() : 'web'
|
|
39
|
+
|
|
40
|
+
try {
|
|
41
|
+
await syncRolePermissions(roleName, Array.from(new Set(names)), guardName)
|
|
42
|
+
// Re-fetch the role + its current permissions so the optimistic
|
|
43
|
+
// UI can reconcile against canonical state.
|
|
44
|
+
const role = await findRole(roleName, guardName)
|
|
45
|
+
if (!role) {
|
|
46
|
+
return { error: 'Role not found after sync.', status: 404 }
|
|
47
|
+
}
|
|
48
|
+
const after = await getRolePermissions(role.id)
|
|
49
|
+
return {
|
|
50
|
+
role: { id: role.id, name: role.name, guardName: role.guard_name },
|
|
51
|
+
permissions: after.map(p => ({ id: p.id, name: p.name, guardName: p.guard_name })),
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
const msg = err instanceof Error ? err.message : 'unknown error'
|
|
56
|
+
if (msg.includes('not found')) {
|
|
57
|
+
return { error: msg, status: 400 }
|
|
58
|
+
}
|
|
59
|
+
console.error('[dashboard/rbac] RolePermissionsSyncAction failed:', err)
|
|
60
|
+
return { error: msg, status: 500 }
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
})
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { Action } from '@stacksjs/actions'
|
|
2
|
+
import { createRole, findRole } from '@stacksjs/auth'
|
|
3
|
+
|
|
4
|
+
interface RoleInput {
|
|
5
|
+
name?: unknown
|
|
6
|
+
guardName?: unknown
|
|
7
|
+
description?: unknown
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* `POST /api/dashboard/rbac/roles` (stacksjs/stacks#1845).
|
|
12
|
+
*
|
|
13
|
+
* Creates a new role. Pre-checks uniqueness for (name, guard_name)
|
|
14
|
+
* up front so the response carries a clean 409 instead of letting
|
|
15
|
+
* the DB's unique-constraint surface bubble through as a 500.
|
|
16
|
+
*
|
|
17
|
+
* Idempotency note: the underlying BqbRbacStore swallows the
|
|
18
|
+
* unique-violation race at the SQL level too, so concurrent calls
|
|
19
|
+
* with the same (name, guard) settle on a single row regardless of
|
|
20
|
+
* which one wins the SELECT-then-INSERT race.
|
|
21
|
+
*/
|
|
22
|
+
export default new Action({
|
|
23
|
+
name: 'Dashboard RBAC Role Store',
|
|
24
|
+
description: 'Create a new role.',
|
|
25
|
+
method: 'POST',
|
|
26
|
+
apiResponse: true,
|
|
27
|
+
async handle(request) {
|
|
28
|
+
const body = (request as any).jsonBody as RoleInput | undefined ?? {}
|
|
29
|
+
|
|
30
|
+
const name = typeof body.name === 'string' ? body.name.trim() : ''
|
|
31
|
+
if (!name || name.length > 60) {
|
|
32
|
+
return { error: '`name` is required and must be 1-60 characters.', status: 400 }
|
|
33
|
+
}
|
|
34
|
+
const guardName = typeof body.guardName === 'string' && body.guardName ? body.guardName.trim() : 'web'
|
|
35
|
+
const description = typeof body.description === 'string' ? body.description.trim() : undefined
|
|
36
|
+
|
|
37
|
+
try {
|
|
38
|
+
const existing = await findRole(name, guardName)
|
|
39
|
+
if (existing) {
|
|
40
|
+
return { error: 'A role with that name and guard already exists.', status: 409 }
|
|
41
|
+
}
|
|
42
|
+
const role = await createRole(name, guardName, description)
|
|
43
|
+
return {
|
|
44
|
+
role: {
|
|
45
|
+
id: role.id,
|
|
46
|
+
name: role.name,
|
|
47
|
+
guardName: role.guard_name,
|
|
48
|
+
description: role.description ?? null,
|
|
49
|
+
createdAt: role.created_at ?? null,
|
|
50
|
+
},
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
console.error('[dashboard/rbac] RoleStoreAction failed:', err)
|
|
55
|
+
return { error: err instanceof Error ? err.message : 'unknown error', status: 500 }
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
})
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Action } from '@stacksjs/actions'
|
|
2
|
+
import { getAllRoles } from '@stacksjs/auth'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* `GET /api/dashboard/rbac/roles` (stacksjs/stacks#1845).
|
|
6
|
+
*
|
|
7
|
+
* Returns every role in the system. The dashboard's permissions page
|
|
8
|
+
* renders this as a list users can pick from when assigning roles.
|
|
9
|
+
* Soft-errors to an empty list rather than 500 so a broken RBAC store
|
|
10
|
+
* (e.g., migrations not run) renders an empty-state instead of
|
|
11
|
+
* yelling at the user.
|
|
12
|
+
*/
|
|
13
|
+
export default new Action({
|
|
14
|
+
name: 'Dashboard RBAC Roles Index',
|
|
15
|
+
description: 'List every role known to the RBAC store.',
|
|
16
|
+
method: 'GET',
|
|
17
|
+
apiResponse: true,
|
|
18
|
+
async handle() {
|
|
19
|
+
try {
|
|
20
|
+
const roles = await getAllRoles()
|
|
21
|
+
return {
|
|
22
|
+
roles: roles.map(r => ({
|
|
23
|
+
id: r.id,
|
|
24
|
+
name: r.name,
|
|
25
|
+
guardName: r.guard_name,
|
|
26
|
+
description: r.description ?? null,
|
|
27
|
+
createdAt: r.created_at ?? null,
|
|
28
|
+
})),
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
catch (err) {
|
|
32
|
+
console.error('[dashboard/rbac] RolesIndexAction failed:', err)
|
|
33
|
+
return { roles: [], error: err instanceof Error ? err.message : 'unknown error' }
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
})
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Action } from '@stacksjs/actions'
|
|
2
|
+
import { getUserRoles } from '@stacksjs/auth'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* `GET /api/dashboard/rbac/users/:id/roles` (stacksjs/stacks#1845).
|
|
6
|
+
*
|
|
7
|
+
* Returns the roles attached to a single user. Drives the per-user
|
|
8
|
+
* picker on the Users tab of the management page — when an admin
|
|
9
|
+
* clicks a user, this populates the "currently assigned" set so
|
|
10
|
+
* the sync UI can diff against it.
|
|
11
|
+
*/
|
|
12
|
+
export default new Action({
|
|
13
|
+
name: 'Dashboard RBAC User Roles Show',
|
|
14
|
+
description: 'List roles attached to one user.',
|
|
15
|
+
method: 'GET',
|
|
16
|
+
apiResponse: true,
|
|
17
|
+
async handle(request) {
|
|
18
|
+
const rawId = (request as any)?.params?.id
|
|
19
|
+
const userId = Number(rawId)
|
|
20
|
+
if (!Number.isFinite(userId) || userId <= 0) {
|
|
21
|
+
return { error: 'Invalid user id.', status: 400 }
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
try {
|
|
25
|
+
const roles = await getUserRoles(userId)
|
|
26
|
+
return {
|
|
27
|
+
userId,
|
|
28
|
+
roles: roles.map(r => ({
|
|
29
|
+
id: r.id,
|
|
30
|
+
name: r.name,
|
|
31
|
+
guardName: r.guard_name,
|
|
32
|
+
})),
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
console.error('[dashboard/rbac] UserRolesShowAction failed:', err)
|
|
37
|
+
return { userId, roles: [], error: err instanceof Error ? err.message : 'unknown error' }
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
})
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { Action } from '@stacksjs/actions'
|
|
2
|
+
import { getUserRoles, syncRoles } from '@stacksjs/auth'
|
|
3
|
+
|
|
4
|
+
interface SyncInput {
|
|
5
|
+
roles?: unknown
|
|
6
|
+
guardName?: unknown
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* `POST /api/dashboard/rbac/users/:id/roles` (stacksjs/stacks#1845).
|
|
11
|
+
*
|
|
12
|
+
* Replace-all sync: pass the full new role-name list and the
|
|
13
|
+
* underlying facade attaches/detaches to match. Same semantics as
|
|
14
|
+
* the kanban label/assignee sync endpoints.
|
|
15
|
+
*
|
|
16
|
+
* The facade resolves role names → role ids internally (and throws
|
|
17
|
+
* if any name doesn't exist), so we surface those as 400s rather
|
|
18
|
+
* than letting them bubble as 500s.
|
|
19
|
+
*/
|
|
20
|
+
export default new Action({
|
|
21
|
+
name: 'Dashboard RBAC User Roles Sync',
|
|
22
|
+
description: 'Replace the role set attached to one user.',
|
|
23
|
+
method: 'POST',
|
|
24
|
+
apiResponse: true,
|
|
25
|
+
async handle(request) {
|
|
26
|
+
const rawId = (request as any)?.params?.id
|
|
27
|
+
const userId = Number(rawId)
|
|
28
|
+
if (!Number.isFinite(userId) || userId <= 0) {
|
|
29
|
+
return { error: 'Invalid user id.', status: 400 }
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const body = (request as any).jsonBody as SyncInput | undefined ?? {}
|
|
33
|
+
if (!Array.isArray(body.roles)) {
|
|
34
|
+
return { error: '`roles` must be an array of role names (possibly empty).', status: 400 }
|
|
35
|
+
}
|
|
36
|
+
const names: string[] = []
|
|
37
|
+
for (const v of body.roles) {
|
|
38
|
+
if (typeof v !== 'string' || !v.trim()) {
|
|
39
|
+
return { error: '`roles` must contain non-empty strings.', status: 400 }
|
|
40
|
+
}
|
|
41
|
+
names.push(v.trim())
|
|
42
|
+
}
|
|
43
|
+
const guardName = typeof body.guardName === 'string' && body.guardName ? body.guardName.trim() : 'web'
|
|
44
|
+
|
|
45
|
+
try {
|
|
46
|
+
await syncRoles(userId, Array.from(new Set(names)), guardName)
|
|
47
|
+
const after = await getUserRoles(userId)
|
|
48
|
+
return {
|
|
49
|
+
userId,
|
|
50
|
+
roles: after.map(r => ({ id: r.id, name: r.name, guardName: r.guard_name })),
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
const msg = err instanceof Error ? err.message : 'unknown error'
|
|
55
|
+
// The facade throws "Role 'X' not found" — surface as 400 so
|
|
56
|
+
// the UI can show "this role doesn't exist anymore" rather
|
|
57
|
+
// than a 500.
|
|
58
|
+
if (msg.includes('not found')) {
|
|
59
|
+
return { error: msg, status: 400 }
|
|
60
|
+
}
|
|
61
|
+
console.error('[dashboard/rbac] UserRolesSyncAction failed:', err)
|
|
62
|
+
return { error: msg, status: 500 }
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
})
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Action } from '@stacksjs/actions'
|
|
2
|
+
import { db } from '@stacksjs/database'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* `GET /api/dashboard/rbac/users` (stacksjs/stacks#1845).
|
|
6
|
+
*
|
|
7
|
+
* Lightweight user list for the RBAC Users tab. Returns `{ id,
|
|
8
|
+
* name, email }` only — enough to show a row label + run the
|
|
9
|
+
* per-user role-sync UI. Bounded to 500 rows so a typo doesn't
|
|
10
|
+
* dump the whole users table into one response (the page can
|
|
11
|
+
* paginate / filter later if needed).
|
|
12
|
+
*
|
|
13
|
+
* Scoped to RBAC rather than reusing the kanban users list because:
|
|
14
|
+
* - The two surfaces have different role-gating contracts
|
|
15
|
+
* (kanban: admin+dev; RBAC: admin-only when the auth middleware
|
|
16
|
+
* is applied).
|
|
17
|
+
* - Future RBAC-specific filters (e.g. `?withoutRole=admin`)
|
|
18
|
+
* belong on this endpoint, not on the kanban one.
|
|
19
|
+
*/
|
|
20
|
+
export default new Action({
|
|
21
|
+
name: 'Dashboard RBAC Users List',
|
|
22
|
+
description: 'Lightweight user list for the RBAC assignment UI.',
|
|
23
|
+
method: 'GET',
|
|
24
|
+
apiResponse: true,
|
|
25
|
+
async handle() {
|
|
26
|
+
try {
|
|
27
|
+
const rows = await db.unsafe(
|
|
28
|
+
'SELECT id, name, email FROM users ORDER BY name ASC, id ASC LIMIT 500',
|
|
29
|
+
).execute() as Array<{ id: number, name: string | null, email: string | null }>
|
|
30
|
+
return {
|
|
31
|
+
users: (rows ?? []).map(r => ({ id: r.id, name: r.name, email: r.email })),
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
console.error('[dashboard/rbac] UsersListAction failed:', err)
|
|
36
|
+
return { users: [], error: err instanceof Error ? err.message : 'unknown error' }
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
})
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { Action } from '@stacksjs/actions'
|
|
2
|
+
import { Websocket } from '@stacksjs/orm'
|
|
3
|
+
|
|
4
|
+
export default new Action({
|
|
5
|
+
name: 'RealtimeStatsAction',
|
|
6
|
+
description: 'Returns realtime connection statistics.',
|
|
7
|
+
method: 'GET',
|
|
8
|
+
async handle() {
|
|
9
|
+
try {
|
|
10
|
+
const allConnections = await Websocket.all()
|
|
11
|
+
const totalConnections = await Websocket.count()
|
|
12
|
+
|
|
13
|
+
// Group connections by channel
|
|
14
|
+
const channelMap: Record<string, { connections: number, messages: number }> = {}
|
|
15
|
+
for (const conn of allConnections) {
|
|
16
|
+
const channel = String(conn.get('channel') || conn.get('name') || 'default')
|
|
17
|
+
if (!channelMap[channel]) {
|
|
18
|
+
channelMap[channel] = { connections: 0, messages: 0 }
|
|
19
|
+
}
|
|
20
|
+
channelMap[channel].connections++
|
|
21
|
+
channelMap[channel].messages += Number(conn.get('message_count') || 0)
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const channels = Object.entries(channelMap).map(([name, data]) => ({
|
|
25
|
+
name,
|
|
26
|
+
connections: data.connections,
|
|
27
|
+
messages: `${data.messages}/min`,
|
|
28
|
+
}))
|
|
29
|
+
|
|
30
|
+
return {
|
|
31
|
+
channels,
|
|
32
|
+
stats: {
|
|
33
|
+
activeConnections: totalConnections,
|
|
34
|
+
messagesPerMinute: '-',
|
|
35
|
+
avgLatency: '-',
|
|
36
|
+
},
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return {
|
|
41
|
+
channels: [],
|
|
42
|
+
stats: {
|
|
43
|
+
activeConnections: 0,
|
|
44
|
+
messagesPerMinute: '0',
|
|
45
|
+
avgLatency: '-',
|
|
46
|
+
},
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
})
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Action } from '@stacksjs/actions'
|
|
2
|
+
|
|
3
|
+
export default new Action({
|
|
4
|
+
name: 'ReleaseIndexAction',
|
|
5
|
+
description: 'Returns the list of releases with download stats.',
|
|
6
|
+
method: 'GET',
|
|
7
|
+
async handle() {
|
|
8
|
+
return {
|
|
9
|
+
data: [
|
|
10
|
+
{ version: '0.72.0', codename: 'Nebula', size: '2.4 MB', path: '/releases/0.72.0', createdAt: '2024-03-15T10:00:00Z' },
|
|
11
|
+
{ version: '0.71.0', codename: 'Aurora', size: '2.3 MB', path: '/releases/0.71.0', createdAt: '2024-03-01T10:00:00Z' },
|
|
12
|
+
{ version: '0.70.0', codename: 'Zenith', size: '2.2 MB', path: '/releases/0.70.0', createdAt: '2024-02-15T10:00:00Z' },
|
|
13
|
+
],
|
|
14
|
+
stats: {
|
|
15
|
+
labels: Array.from({ length: 30 }, (_, i) => new Date(Date.now() - (29 - i) * 86400000).toISOString().split('T')[0]),
|
|
16
|
+
downloads: Array.from({ length: 30 }, () => Math.floor(Math.random() * 500) + 100),
|
|
17
|
+
releaseTimes: Array.from({ length: 30 }, () => Math.floor(Math.random() * 30) + 5),
|
|
18
|
+
},
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
})
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Action } from '@stacksjs/actions'
|
|
2
|
+
// import { Library } from '@stacksjs/orm'
|
|
3
|
+
|
|
4
|
+
export default new Action({
|
|
5
|
+
name: 'GetAverageReleaseTime',
|
|
6
|
+
description: 'Gets the average release time of your library.',
|
|
7
|
+
apiResponse: true,
|
|
8
|
+
|
|
9
|
+
async handle() {
|
|
10
|
+
// return Library.averageReleaseTime()
|
|
11
|
+
},
|
|
12
|
+
})
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Action } from '@stacksjs/actions'
|
|
2
|
+
// import { Request } from '@stacksjs/orm'
|
|
3
|
+
|
|
4
|
+
export default new Action({
|
|
5
|
+
name: 'GetRequestCount',
|
|
6
|
+
description: 'Gets the total number of requests.',
|
|
7
|
+
apiResponse: true,
|
|
8
|
+
|
|
9
|
+
async handle() {
|
|
10
|
+
// return Request.count()
|
|
11
|
+
},
|
|
12
|
+
})
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Action } from '@stacksjs/actions'
|
|
2
|
+
// import { Request } from '@stacksjs/orm'
|
|
3
|
+
|
|
4
|
+
export default new Action({
|
|
5
|
+
name: 'GetRequestSuccessRate',
|
|
6
|
+
description: 'Gets the request success rate of your application.',
|
|
7
|
+
apiResponse: true,
|
|
8
|
+
|
|
9
|
+
async handle() {
|
|
10
|
+
// return Request.successRate()
|
|
11
|
+
},
|
|
12
|
+
})
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Action } from '@stacksjs/actions'
|
|
2
|
+
// import { Request } from '@stacksjs/orm'
|
|
3
|
+
|
|
4
|
+
export default new Action({
|
|
5
|
+
name: 'GetRequests',
|
|
6
|
+
description: 'Gets your requests.',
|
|
7
|
+
apiResponse: true,
|
|
8
|
+
|
|
9
|
+
async handle() {
|
|
10
|
+
// return Request.all()
|
|
11
|
+
},
|
|
12
|
+
})
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Action } from '@stacksjs/actions'
|
|
2
|
+
|
|
3
|
+
export default new Action({
|
|
4
|
+
name: 'GlobalSearchAction',
|
|
5
|
+
description: 'Returns global search results grouped by model.',
|
|
6
|
+
method: 'GET',
|
|
7
|
+
async handle(request: RequestInstance) {
|
|
8
|
+
const q = request?.get('q') || ''
|
|
9
|
+
|
|
10
|
+
if (!q) return { results: {} }
|
|
11
|
+
|
|
12
|
+
return {
|
|
13
|
+
results: {
|
|
14
|
+
users: [
|
|
15
|
+
{ id: 1, title: 'Chris Breuer', subtitle: 'chris@stacks.dev', href: '/data/users', icon: 'i-hugeicons-user-02' },
|
|
16
|
+
],
|
|
17
|
+
posts: [
|
|
18
|
+
{ id: 1, title: 'Getting Started with Stacks', subtitle: 'Published 2 days ago', href: '/content/posts', icon: 'i-hugeicons-note-edit' },
|
|
19
|
+
],
|
|
20
|
+
products: [
|
|
21
|
+
{ id: 1, title: 'Premium Plan', subtitle: '$99/mo', href: '/commerce/products', icon: 'i-hugeicons-shopping-bag-02' },
|
|
22
|
+
],
|
|
23
|
+
},
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
})
|