@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,43 @@
|
|
|
1
|
+
import { Action } from '@stacksjs/actions'
|
|
2
|
+
import { currentAccessToken, revokeTokenById, tokens } from '@stacksjs/auth'
|
|
3
|
+
import { response } from '@stacksjs/router'
|
|
4
|
+
|
|
5
|
+
export default new Action({
|
|
6
|
+
name: 'RevokeTokenAction',
|
|
7
|
+
description: 'Revoke a specific access token',
|
|
8
|
+
method: 'DELETE',
|
|
9
|
+
async handle(request: RequestInstance) {
|
|
10
|
+
const user = await request.user()
|
|
11
|
+
|
|
12
|
+
if (!user) {
|
|
13
|
+
return response.unauthorized('Authentication required')
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const tokenId = Number(request.getParam('id'))
|
|
17
|
+
|
|
18
|
+
if (!tokenId || Number.isNaN(tokenId)) {
|
|
19
|
+
return response.badRequest('Invalid token ID')
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// Verify the token belongs to the user
|
|
23
|
+
const userTokens = await tokens(user.id)
|
|
24
|
+
const tokenToRevoke = userTokens.find(t => t.id === tokenId)
|
|
25
|
+
|
|
26
|
+
if (!tokenToRevoke) {
|
|
27
|
+
return response.notFound('Token not found')
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// Check if trying to revoke current token
|
|
31
|
+
const current = await currentAccessToken()
|
|
32
|
+
if (current && current.id === tokenId) {
|
|
33
|
+
return response.badRequest('Cannot revoke the current token. Use /logout instead.')
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
await revokeTokenById(tokenId)
|
|
37
|
+
|
|
38
|
+
return response.json({
|
|
39
|
+
message: 'Token revoked successfully',
|
|
40
|
+
token_id: tokenId,
|
|
41
|
+
})
|
|
42
|
+
},
|
|
43
|
+
})
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { Action } from '@stacksjs/actions'
|
|
2
|
+
import { currentAccessToken, tokenAbilities, tokenCan, tokenCanAll, tokenCanAny } from '@stacksjs/auth'
|
|
3
|
+
import { response } from '@stacksjs/router'
|
|
4
|
+
|
|
5
|
+
export default new Action({
|
|
6
|
+
name: 'TestAbilitiesAction',
|
|
7
|
+
description: 'Test token abilities/scopes - useful for debugging',
|
|
8
|
+
method: 'GET',
|
|
9
|
+
async handle(request: RequestInstance) {
|
|
10
|
+
const user = await request.user()
|
|
11
|
+
|
|
12
|
+
if (!user) {
|
|
13
|
+
return response.unauthorized('Authentication required')
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const accessToken = await currentAccessToken()
|
|
17
|
+
const abilities = await tokenAbilities()
|
|
18
|
+
|
|
19
|
+
// Get test scopes from query params
|
|
20
|
+
const testScope = request.get('scope') as string | undefined
|
|
21
|
+
const testScopes = request.get('scopes') as string | undefined
|
|
22
|
+
|
|
23
|
+
const result: any = {
|
|
24
|
+
user: {
|
|
25
|
+
id: user.id,
|
|
26
|
+
email: user.email,
|
|
27
|
+
name: user.name,
|
|
28
|
+
},
|
|
29
|
+
token: accessToken
|
|
30
|
+
? {
|
|
31
|
+
id: accessToken.id,
|
|
32
|
+
name: accessToken.name,
|
|
33
|
+
scopes: accessToken.scopes,
|
|
34
|
+
expires_at: accessToken.expiresAt?.toISOString() || null,
|
|
35
|
+
}
|
|
36
|
+
: null,
|
|
37
|
+
abilities,
|
|
38
|
+
has_wildcard: abilities.includes('*'),
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// Test specific scope if provided
|
|
42
|
+
if (testScope) {
|
|
43
|
+
result.test = {
|
|
44
|
+
scope: testScope,
|
|
45
|
+
can: await tokenCan(testScope),
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// Test multiple scopes if provided (comma-separated)
|
|
50
|
+
if (testScopes) {
|
|
51
|
+
const scopeList = testScopes.split(',').map(s => s.trim())
|
|
52
|
+
result.test_multiple = {
|
|
53
|
+
scopes: scopeList,
|
|
54
|
+
can_all: await tokenCanAll(scopeList),
|
|
55
|
+
can_any: await tokenCanAny(scopeList),
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return response.json(result)
|
|
60
|
+
},
|
|
61
|
+
})
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import type { AuthenticationCredential } from '@stacksjs/auth'
|
|
2
|
+
import { Action } from '@stacksjs/actions'
|
|
3
|
+
import {
|
|
4
|
+
consumeWebAuthnChallenge,
|
|
5
|
+
getUserPasskey,
|
|
6
|
+
updatePasskeyCounter,
|
|
7
|
+
verifyAuthenticationResponse,
|
|
8
|
+
} from '@stacksjs/auth'
|
|
9
|
+
import { config } from '@stacksjs/config'
|
|
10
|
+
import { response } from '@stacksjs/router'
|
|
11
|
+
import { User } from '@stacksjs/orm'
|
|
12
|
+
|
|
13
|
+
export default new Action({
|
|
14
|
+
name: 'VerifyAuthenticationAction',
|
|
15
|
+
description: 'Verify authentication from passkey',
|
|
16
|
+
method: 'POST',
|
|
17
|
+
async handle(request: RequestInstance) {
|
|
18
|
+
const body = request.all()
|
|
19
|
+
const credential = body.res as AuthenticationCredential
|
|
20
|
+
|
|
21
|
+
const email = request.get('email') ?? ''
|
|
22
|
+
|
|
23
|
+
const user = await User.where('email', email).first()
|
|
24
|
+
|
|
25
|
+
if (!user)
|
|
26
|
+
return response.notFound('User not found')
|
|
27
|
+
|
|
28
|
+
const userPasskey = await getUserPasskey(user.id as number, credential.id)
|
|
29
|
+
|
|
30
|
+
if (!userPasskey)
|
|
31
|
+
return response.notFound('Passkey not found')
|
|
32
|
+
|
|
33
|
+
// Read + delete the server-stored challenge for this user. The
|
|
34
|
+
// previous flow trusted `body.challenge` from the client, which
|
|
35
|
+
// let an attacker replay a captured assertion as long as they
|
|
36
|
+
// had the original challenge. Closing this gap was stacksjs/stacks#1866.
|
|
37
|
+
const expectedChallenge = await consumeWebAuthnChallenge(user.id as number, 'authentication')
|
|
38
|
+
if (!expectedChallenge)
|
|
39
|
+
return response.unauthorized('Authentication challenge missing or expired — please retry from the start.')
|
|
40
|
+
|
|
41
|
+
const pubkeyString = userPasskey.cred_public_key
|
|
42
|
+
let jsonParse: Record<string, number>
|
|
43
|
+
try {
|
|
44
|
+
jsonParse = JSON.parse(pubkeyString) as Record<string, number>
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return response.serverError('Invalid public key format')
|
|
48
|
+
}
|
|
49
|
+
const publicKey = new Uint8Array(Object.values(jsonParse)).buffer
|
|
50
|
+
|
|
51
|
+
// Convert challenge string to Uint8Array. The challenge is stored
|
|
52
|
+
// as base64url (the same form generateAuthenticationOptions emits).
|
|
53
|
+
const challengeBytes = Uint8Array.from(atob(expectedChallenge), c => c.charCodeAt(0))
|
|
54
|
+
|
|
55
|
+
// Derive origin and rpID from app config instead of hardcoding localhost
|
|
56
|
+
const appUrl = config.app?.url || 'http://localhost:3333'
|
|
57
|
+
const expectedOrigin = appUrl.startsWith('http') ? appUrl : `https://${appUrl}`
|
|
58
|
+
const expectedRPID = new URL(expectedOrigin).hostname
|
|
59
|
+
|
|
60
|
+
try {
|
|
61
|
+
const verification = await verifyAuthenticationResponse(
|
|
62
|
+
credential,
|
|
63
|
+
challengeBytes,
|
|
64
|
+
expectedOrigin,
|
|
65
|
+
expectedRPID,
|
|
66
|
+
publicKey,
|
|
67
|
+
userPasskey.counter,
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
if (!verification.verified)
|
|
71
|
+
return response.unauthorized('Authentication failed')
|
|
72
|
+
|
|
73
|
+
// Anti-cloning: persist the new counter and reject if it didn't
|
|
74
|
+
// advance. WebAuthn authenticators monotonically increment on
|
|
75
|
+
// every use; a counter that's not strictly greater than the
|
|
76
|
+
// stored value indicates a cloned/replayed credential. See
|
|
77
|
+
// updatePasskeyCounter() and stacksjs/stacks#1861 A-4.
|
|
78
|
+
const newCounter = verification.authenticationInfo?.newCounter
|
|
79
|
+
if (typeof newCounter === 'number') {
|
|
80
|
+
const advanced = await updatePasskeyCounter(user.id as number, credential.id, newCounter)
|
|
81
|
+
if (!advanced) {
|
|
82
|
+
console.warn(`[VerifyAuthenticationAction] Refusing passkey login for user ${user.id} (${credential.id}): counter did not advance (stored=${userPasskey.counter}, received=${newCounter}) — possible cloned authenticator`)
|
|
83
|
+
return response.unauthorized('Authentication failed')
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return response.json(verification)
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
console.error('Authentication verification failed:', error)
|
|
91
|
+
return response.serverError('Authentication verification failed')
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
})
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// No imports needed - everything is auto-imported!
|
|
2
|
+
|
|
3
|
+
export default new Action({
|
|
4
|
+
name: 'VerifyEmailAction',
|
|
5
|
+
description: 'Verify user email address',
|
|
6
|
+
method: 'GET',
|
|
7
|
+
|
|
8
|
+
async handle(request: RequestInstance) {
|
|
9
|
+
const userId = request.getParamAsInt('id')
|
|
10
|
+
const token = request.getParam('token')
|
|
11
|
+
|
|
12
|
+
if (!userId || !token) {
|
|
13
|
+
return response.json({ success: false, message: 'Invalid verification link.' }, 422)
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const { verifyEmail } = await import('@stacksjs/auth')
|
|
17
|
+
const result = await verifyEmail(userId, token)
|
|
18
|
+
|
|
19
|
+
if (!result.success) {
|
|
20
|
+
return response.json({ success: false, message: result.message }, 422)
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
return response.json({ success: true, message: 'Email verified successfully.' })
|
|
24
|
+
},
|
|
25
|
+
})
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { Action } from '@stacksjs/actions'
|
|
2
|
+
import {
|
|
3
|
+
consumeWebAuthnChallenge,
|
|
4
|
+
setCurrentRegistrationOptions,
|
|
5
|
+
verifyRegistrationResponse,
|
|
6
|
+
} from '@stacksjs/auth'
|
|
7
|
+
import { config } from '@stacksjs/config'
|
|
8
|
+
|
|
9
|
+
export default new Action({
|
|
10
|
+
name: 'VerifyRegistrationAction',
|
|
11
|
+
description: 'Verify the registration passkey',
|
|
12
|
+
method: 'POST',
|
|
13
|
+
async handle(request: RequestInstance) {
|
|
14
|
+
const body = request.all()
|
|
15
|
+
|
|
16
|
+
// Same identity rule as GenerateRegistrationAction: the account a
|
|
17
|
+
// passkey gets attached to must be the caller's own authenticated
|
|
18
|
+
// session, never a client-supplied `email` field. This route must
|
|
19
|
+
// stay behind `middleware('auth')` — see routes/dashboard.ts.
|
|
20
|
+
const user = await request.user()
|
|
21
|
+
|
|
22
|
+
if (!user)
|
|
23
|
+
return Response.json({ error: 'Unauthorized' }, { status: 401 })
|
|
24
|
+
|
|
25
|
+
// Read + delete the server-stored registration challenge for this
|
|
26
|
+
// user. The previous flow accepted `body.challenge` from the
|
|
27
|
+
// client; persisting it here closes the same replay vector that
|
|
28
|
+
// the authentication path closed in stacksjs/stacks#1866.
|
|
29
|
+
const expectedChallenge = await consumeWebAuthnChallenge(user.id as number, 'registration')
|
|
30
|
+
if (!expectedChallenge) {
|
|
31
|
+
return Response.json(
|
|
32
|
+
{ error: 'Registration challenge missing or expired — please retry from the start.' },
|
|
33
|
+
{ status: 401 },
|
|
34
|
+
)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Derive origin and rpID from app config instead of hardcoding localhost
|
|
38
|
+
const appUrl = config.app?.url || 'http://localhost:3333'
|
|
39
|
+
const expectedOrigin = appUrl.startsWith('http') ? appUrl : `https://${appUrl}`
|
|
40
|
+
const expectedRPID = new URL(expectedOrigin).hostname
|
|
41
|
+
|
|
42
|
+
try {
|
|
43
|
+
const verification = await verifyRegistrationResponse({
|
|
44
|
+
response: body.attResp,
|
|
45
|
+
expectedChallenge,
|
|
46
|
+
expectedOrigin,
|
|
47
|
+
expectedRPID,
|
|
48
|
+
})
|
|
49
|
+
|
|
50
|
+
await setCurrentRegistrationOptions(user, verification)
|
|
51
|
+
|
|
52
|
+
return verification
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
console.error('Passkey verification failed:', error)
|
|
56
|
+
return Response.json({ error: 'Registration verification failed' }, { status: 400 })
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
})
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { Action } from '@stacksjs/actions'
|
|
2
|
+
import { Auth, consumeTwoFactorChallenge, verifyTwoFactorLoginCode } from '@stacksjs/auth'
|
|
3
|
+
import { response } from '@stacksjs/router'
|
|
4
|
+
import { schema } from '@stacksjs/validation'
|
|
5
|
+
|
|
6
|
+
export default new Action({
|
|
7
|
+
name: 'VerifyTwoFactorLoginAction',
|
|
8
|
+
description: 'Exchange a LoginAction 2FA challenge + TOTP code for a real token pack',
|
|
9
|
+
method: 'POST',
|
|
10
|
+
|
|
11
|
+
validations: {
|
|
12
|
+
challenge_token: {
|
|
13
|
+
rule: schema.string().min(1),
|
|
14
|
+
message: 'A challenge token is required.',
|
|
15
|
+
},
|
|
16
|
+
code: {
|
|
17
|
+
rule: schema.string().min(6).max(6),
|
|
18
|
+
message: 'Code must be a 6-digit TOTP code.',
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
|
|
22
|
+
async handle(request: RequestInstance) {
|
|
23
|
+
const challengeToken = request.get('challenge_token')
|
|
24
|
+
const code = request.get('code')
|
|
25
|
+
|
|
26
|
+
// Single-use: a second attempt with the same challenge token
|
|
27
|
+
// (whether the code was right or wrong) must start over from
|
|
28
|
+
// LoginAction, not retry — mirrors the WebAuthn challenge
|
|
29
|
+
// delete-on-read semantics in passkey.ts (stacksjs/stacks#1866).
|
|
30
|
+
const userId = await consumeTwoFactorChallenge(challengeToken)
|
|
31
|
+
if (!userId)
|
|
32
|
+
return response.unauthorized('This login attempt has expired — please sign in again.')
|
|
33
|
+
|
|
34
|
+
const valid = await verifyTwoFactorLoginCode(userId, code)
|
|
35
|
+
if (!valid)
|
|
36
|
+
return response.unauthorized('Invalid code — please sign in again.')
|
|
37
|
+
|
|
38
|
+
const result = await Auth.loginUsingId(userId)
|
|
39
|
+
if (!result)
|
|
40
|
+
return response.unauthorized('Invalid code — please sign in again.')
|
|
41
|
+
|
|
42
|
+
const user = result.user
|
|
43
|
+
|
|
44
|
+
return response.json({
|
|
45
|
+
access_token: result.token,
|
|
46
|
+
refresh_token: result.refreshToken,
|
|
47
|
+
token_type: 'Bearer',
|
|
48
|
+
expires_in: result.expiresIn,
|
|
49
|
+
token: result.token,
|
|
50
|
+
user: {
|
|
51
|
+
id: user?.id,
|
|
52
|
+
email: user?.email,
|
|
53
|
+
name: user?.name,
|
|
54
|
+
},
|
|
55
|
+
})
|
|
56
|
+
},
|
|
57
|
+
})
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Action } from '@stacksjs/actions'
|
|
2
|
+
import { manageCheckout } from '@stacksjs/payments'
|
|
3
|
+
import { response } from '@stacksjs/router'
|
|
4
|
+
|
|
5
|
+
export default new Action({
|
|
6
|
+
name: 'Checkout',
|
|
7
|
+
description: 'Checkout Action',
|
|
8
|
+
method: 'POST',
|
|
9
|
+
async handle(request: RequestInstance) {
|
|
10
|
+
const user = await request.user()
|
|
11
|
+
|
|
12
|
+
if (!user) {
|
|
13
|
+
return response.json({ message: 'User not found' }, 404)
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const params = {
|
|
17
|
+
success_url: 'https://localhost:3000/success',
|
|
18
|
+
cancel_url: 'https://localhost:3000/cancel',
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const session = await manageCheckout.create(user, params)
|
|
22
|
+
|
|
23
|
+
return response.json({ url: session.url })
|
|
24
|
+
},
|
|
25
|
+
})
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Action } from '@stacksjs/actions'
|
|
2
|
+
import { response } from '@stacksjs/router'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Open a native folder picker dialog (macOS)
|
|
6
|
+
*
|
|
7
|
+
* Uses osascript to display a native folder selection dialog
|
|
8
|
+
* and returns the selected path.
|
|
9
|
+
*/
|
|
10
|
+
export default new Action({
|
|
11
|
+
name: 'BuddyBrowseAction',
|
|
12
|
+
description: 'Open folder picker dialog',
|
|
13
|
+
method: 'POST',
|
|
14
|
+
async handle(_request: RequestInstance) {
|
|
15
|
+
try {
|
|
16
|
+
const { $: _$ } = await import('bun')
|
|
17
|
+
|
|
18
|
+
// Use osascript to open native folder picker on macOS
|
|
19
|
+
const script = `osascript -e 'POSIX path of (choose folder with prompt "Select project folder")'`
|
|
20
|
+
const result = await _$`sh -c ${script}`.quiet()
|
|
21
|
+
const selectedPath = result.text().trim().replace(/\/$/, '') // Remove trailing slash
|
|
22
|
+
|
|
23
|
+
if (selectedPath) {
|
|
24
|
+
return response.json({ path: selectedPath })
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
return response.json({ error: 'No folder selected' })
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
// User cancelled the dialog
|
|
31
|
+
return response.json({ error: 'Folder selection cancelled' })
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
})
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Action } from '@stacksjs/actions'
|
|
2
|
+
import { response } from '@stacksjs/router'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Cancel the current running AI query
|
|
6
|
+
*
|
|
7
|
+
* This attempts to terminate any running claude CLI processes.
|
|
8
|
+
*/
|
|
9
|
+
export default new Action({
|
|
10
|
+
name: 'BuddyCancelAction',
|
|
11
|
+
description: 'Cancel the current AI query',
|
|
12
|
+
method: 'POST',
|
|
13
|
+
async handle(_request: RequestInstance) {
|
|
14
|
+
try {
|
|
15
|
+
const { $: _$ } = await import('bun')
|
|
16
|
+
|
|
17
|
+
// Find and kill claude CLI processes
|
|
18
|
+
const _result = await _$`pkill -f "claude --print" || true`.quiet().nothrow()
|
|
19
|
+
|
|
20
|
+
return response.json({
|
|
21
|
+
success: true,
|
|
22
|
+
message: 'Cancel signal sent',
|
|
23
|
+
})
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
return response.json({
|
|
27
|
+
success: false,
|
|
28
|
+
error: (error as Error).message,
|
|
29
|
+
})
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
})
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Action } from '@stacksjs/actions'
|
|
2
|
+
import { response } from '@stacksjs/router'
|
|
3
|
+
import { commitChanges, CONFIG } from '@stacksjs/ai'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Stage and commit all changes in the repository
|
|
7
|
+
*/
|
|
8
|
+
export default new Action({
|
|
9
|
+
name: 'BuddyCommitAction',
|
|
10
|
+
description: 'Commit all staged changes in the repository',
|
|
11
|
+
method: 'POST',
|
|
12
|
+
async handle(_request: RequestInstance) {
|
|
13
|
+
try {
|
|
14
|
+
const hash = await commitChanges()
|
|
15
|
+
return response.json({
|
|
16
|
+
success: true,
|
|
17
|
+
hash,
|
|
18
|
+
message: CONFIG.commitMessage,
|
|
19
|
+
})
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
return response.json({ success: false, error: (error as Error).message }, { status: 400 })
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
})
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Action } from '@stacksjs/actions'
|
|
2
|
+
import { response } from '@stacksjs/router'
|
|
3
|
+
import type { GitHubCredentials } from '@stacksjs/ai'
|
|
4
|
+
import { buddyState } from '@stacksjs/ai'
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Connect a GitHub account for commits
|
|
8
|
+
*
|
|
9
|
+
* Request body:
|
|
10
|
+
* - token: GitHub personal access token
|
|
11
|
+
* - username: GitHub username
|
|
12
|
+
* - name: Display name for git commits
|
|
13
|
+
* - email: Email for git commits
|
|
14
|
+
*/
|
|
15
|
+
export default new Action({
|
|
16
|
+
name: 'BuddyGitHubConnectAction',
|
|
17
|
+
description: 'Connect a GitHub account for authenticated operations',
|
|
18
|
+
method: 'POST',
|
|
19
|
+
async handle(request: RequestInstance) {
|
|
20
|
+
try {
|
|
21
|
+
const body = await request.json() as GitHubCredentials
|
|
22
|
+
const { token, username, name, email } = body
|
|
23
|
+
|
|
24
|
+
if (!token || !username || !name || !email) {
|
|
25
|
+
return response.json({
|
|
26
|
+
success: false,
|
|
27
|
+
error: 'token, username, name, and email are required',
|
|
28
|
+
}, { status: 400 })
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
buddyState.setGitHub({ token, username, name, email })
|
|
32
|
+
console.log(`GitHub connected: ${username} <${email}>`)
|
|
33
|
+
|
|
34
|
+
return response.json({ success: true, username, name, email })
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
return response.json({ success: false, error: (error as Error).message }, { status: 400 })
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
})
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Action } from '@stacksjs/actions'
|
|
2
|
+
import { response } from '@stacksjs/router'
|
|
3
|
+
import { buddyState } from '@stacksjs/ai'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Disconnect the GitHub account
|
|
7
|
+
*/
|
|
8
|
+
export default new Action({
|
|
9
|
+
name: 'BuddyGitHubDisconnectAction',
|
|
10
|
+
description: 'Disconnect the GitHub account',
|
|
11
|
+
method: 'POST',
|
|
12
|
+
async handle(_request: RequestInstance) {
|
|
13
|
+
const state = buddyState.getState()
|
|
14
|
+
const previousUser = state.github?.username
|
|
15
|
+
buddyState.setGitHub(null)
|
|
16
|
+
console.log(`GitHub disconnected: ${previousUser || 'unknown'}`)
|
|
17
|
+
return response.json({ success: true })
|
|
18
|
+
},
|
|
19
|
+
})
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { Action } from '@stacksjs/actions'
|
|
2
|
+
import { response } from '@stacksjs/router'
|
|
3
|
+
import { schema } from '@stacksjs/validation'
|
|
4
|
+
import { applyChanges, buddyState, openRepository, processCommand } from '@stacksjs/ai'
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Process a command with the AI driver
|
|
8
|
+
*
|
|
9
|
+
* Accepts params via JSON body OR query string:
|
|
10
|
+
* - command: The user's command/instruction (required)
|
|
11
|
+
* - repo/repository: Repository path or GitHub URL (required if no repo is currently open)
|
|
12
|
+
* - driver: (optional) AI driver to use (claude-cli-local, claude-cli-ec2, claude, openai, ollama, mock)
|
|
13
|
+
*/
|
|
14
|
+
export default new Action({
|
|
15
|
+
name: 'BuddyProcessAction',
|
|
16
|
+
description: 'Process a command with the selected AI driver',
|
|
17
|
+
method: 'POST',
|
|
18
|
+
|
|
19
|
+
validations: {
|
|
20
|
+
command: {
|
|
21
|
+
rule: schema.string().min(1).required(),
|
|
22
|
+
message: 'Command is required',
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
|
|
26
|
+
async handle(request: RequestInstance) {
|
|
27
|
+
try {
|
|
28
|
+
// Get params using Laravel-style methods (body is already parsed by stacks-router)
|
|
29
|
+
const command = request.get<string>('command')
|
|
30
|
+
const repo = request.get<string>('repo') || request.get<string>('repository')
|
|
31
|
+
const driver = request.get<string>('driver')
|
|
32
|
+
|
|
33
|
+
// Check if we need to open a repo
|
|
34
|
+
const currentState = buddyState.getState()
|
|
35
|
+
if (!currentState.repo) {
|
|
36
|
+
if (!repo) {
|
|
37
|
+
return response.unprocessableEntity('No repository is currently open. Please provide a repo path or URL.', {
|
|
38
|
+
repo: ['Repository path or URL is required when no repo is currently open'],
|
|
39
|
+
})
|
|
40
|
+
}
|
|
41
|
+
// Open the repo
|
|
42
|
+
await openRepository(repo)
|
|
43
|
+
}
|
|
44
|
+
else if (repo && repo !== currentState.repo.path) {
|
|
45
|
+
// User wants to switch to a different repo
|
|
46
|
+
await openRepository(repo)
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const aiResponse = await processCommand(command!, driver)
|
|
50
|
+
const modifiedFiles = await applyChanges(aiResponse)
|
|
51
|
+
|
|
52
|
+
return response.success({
|
|
53
|
+
message: aiResponse,
|
|
54
|
+
hasChanges: modifiedFiles.length > 0,
|
|
55
|
+
modifiedFiles,
|
|
56
|
+
repo: buddyState.getState().repo,
|
|
57
|
+
})
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
console.error('[BuddyProcessAction] Error:', error)
|
|
61
|
+
console.error('[BuddyProcessAction] Stack:', (error as Error).stack)
|
|
62
|
+
return response.serverError((error as Error).message)
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
})
|