@stacksjs/defaults 0.70.57 → 0.70.59

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.
Files changed (575) hide show
  1. package/app/Actions/AI/AskAction.ts +40 -0
  2. package/app/Actions/AI/SummaryAction.ts +40 -0
  3. package/app/Actions/Auth/AuthUserAction.ts +13 -0
  4. package/app/Actions/Auth/CreateTokenAction.ts +64 -0
  5. package/app/Actions/Auth/DisableTwoFactorAction.ts +37 -0
  6. package/app/Actions/Auth/EnableTwoFactorAction.ts +37 -0
  7. package/app/Actions/Auth/GenerateAuthenticationAction.ts +51 -0
  8. package/app/Actions/Auth/GenerateRegistrationAction.ts +53 -0
  9. package/app/Actions/Auth/GenerateTwoFactorSecretAction.ts +26 -0
  10. package/app/Actions/Auth/ListTokensAction.ts +30 -0
  11. package/app/Actions/Auth/LoginAction.ts +73 -0
  12. package/app/Actions/Auth/LogoutAction.ts +16 -0
  13. package/app/Actions/Auth/LogoutAllAction.ts +28 -0
  14. package/app/Actions/Auth/RefreshTokenAction.ts +39 -0
  15. package/app/Actions/Auth/RegisterAction.ts +57 -0
  16. package/app/Actions/Auth/ResendVerificationAction.ts +24 -0
  17. package/app/Actions/Auth/RevokeTokenAction.ts +43 -0
  18. package/app/Actions/Auth/TestAbilitiesAction.ts +61 -0
  19. package/app/Actions/Auth/VerifyAuthenticationAction.ts +94 -0
  20. package/app/Actions/Auth/VerifyEmailAction.ts +25 -0
  21. package/app/Actions/Auth/VerifyRegistrationAction.ts +59 -0
  22. package/app/Actions/Auth/VerifyTwoFactorLoginAction.ts +57 -0
  23. package/app/Actions/Billable/CheckoutAction.ts +25 -0
  24. package/app/Actions/Buddy/BuddyBrowseAction.ts +34 -0
  25. package/app/Actions/Buddy/BuddyCancelAction.ts +32 -0
  26. package/app/Actions/Buddy/BuddyCommitAction.ts +25 -0
  27. package/app/Actions/Buddy/BuddyGitHubConnectAction.ts +40 -0
  28. package/app/Actions/Buddy/BuddyGitHubDisconnectAction.ts +19 -0
  29. package/app/Actions/Buddy/BuddyProcessAction.ts +65 -0
  30. package/app/Actions/Buddy/BuddyProcessStreamAction.ts +128 -0
  31. package/app/Actions/Buddy/BuddyPushAction.ts +21 -0
  32. package/app/Actions/Buddy/BuddyRepoOpenAction.ts +44 -0
  33. package/app/Actions/Buddy/BuddyRepoValidateAction.ts +35 -0
  34. package/app/Actions/Buddy/BuddySettingsAction.ts +21 -0
  35. package/app/Actions/Buddy/BuddySettingsUpdateAction.ts +46 -0
  36. package/app/Actions/Buddy/BuddyStateAction.ts +28 -0
  37. package/app/Actions/Buddy/BuddyTitleAction.ts +49 -0
  38. package/app/Actions/Buddy/CommandsAction.ts +802 -0
  39. package/app/Actions/Buddy/JobCancelAction.ts +32 -0
  40. package/app/Actions/Buddy/JobRetryAction.ts +49 -0
  41. package/app/Actions/Buddy/JobsListAction.ts +141 -0
  42. package/app/Actions/Buddy/ScheduleListAction.ts +52 -0
  43. package/app/Actions/Buddy/VersionsAction.ts +12 -0
  44. package/app/Actions/Cms/AuthorDestroyAction.ts +21 -0
  45. package/app/Actions/Cms/AuthorIndexAction.ts +14 -0
  46. package/app/Actions/Cms/AuthorShowAction.ts +19 -0
  47. package/app/Actions/Cms/AuthorStoreAction.ts +20 -0
  48. package/app/Actions/Cms/AuthorUpdateAction.ts +24 -0
  49. package/app/Actions/Cms/CategorizableDestroyAction.ts +16 -0
  50. package/app/Actions/Cms/CategorizableIndexAction.ts +14 -0
  51. package/app/Actions/Cms/CategorizableShowAction.ts +16 -0
  52. package/app/Actions/Cms/CategorizableStoreAction.ts +42 -0
  53. package/app/Actions/Cms/CategorizableUpdateAction.ts +38 -0
  54. package/app/Actions/Cms/CommentDestroyAction.ts +16 -0
  55. package/app/Actions/Cms/CommentIndexAction.ts +17 -0
  56. package/app/Actions/Cms/CommentShowAction.ts +16 -0
  57. package/app/Actions/Cms/CommentStoreAction.ts +39 -0
  58. package/app/Actions/Cms/CommentUpdateAction.ts +37 -0
  59. package/app/Actions/Cms/PageDestroyAction.ts +16 -0
  60. package/app/Actions/Cms/PageIndexAction.ts +14 -0
  61. package/app/Actions/Cms/PageStoreAction.ts +31 -0
  62. package/app/Actions/Cms/PageUpdateAction.ts +27 -0
  63. package/app/Actions/Cms/PostDestroyAction.ts +17 -0
  64. package/app/Actions/Cms/PostIndexAction.ts +14 -0
  65. package/app/Actions/Cms/PostShowAction.ts +16 -0
  66. package/app/Actions/Cms/PostStoreAction.ts +37 -0
  67. package/app/Actions/Cms/PostUpdateAction.ts +32 -0
  68. package/app/Actions/Cms/PostViewsUpdateAction.ts +34 -0
  69. package/app/Actions/Cms/RssFeedAction.ts +59 -0
  70. package/app/Actions/Cms/SitemapAction.ts +60 -0
  71. package/app/Actions/Cms/TaggableDestroyAction.ts +16 -0
  72. package/app/Actions/Cms/TaggableIndexAction.ts +14 -0
  73. package/app/Actions/Cms/TaggableShowAction.ts +16 -0
  74. package/app/Actions/Cms/TaggableStoreAction.ts +36 -0
  75. package/app/Actions/Cms/TaggableUpdateAction.ts +37 -0
  76. package/app/Actions/Commerce/CouponDestroyAction.ts +18 -0
  77. package/app/Actions/Commerce/CouponIndexAction.ts +16 -0
  78. package/app/Actions/Commerce/CouponShowAction.ts +18 -0
  79. package/app/Actions/Commerce/CouponStoreAction.ts +21 -0
  80. package/app/Actions/Commerce/CouponUpdateAction.ts +31 -0
  81. package/app/Actions/Commerce/CustomerDestroyAction.ts +16 -0
  82. package/app/Actions/Commerce/CustomerIndexAction.ts +15 -0
  83. package/app/Actions/Commerce/CustomerShowAction.ts +18 -0
  84. package/app/Actions/Commerce/CustomerStoreAction.ts +29 -0
  85. package/app/Actions/Commerce/CustomerUpdateAction.ts +27 -0
  86. package/app/Actions/Commerce/DriverDestroyAction.ts +18 -0
  87. package/app/Actions/Commerce/GiftCardDestroyAction.ts +18 -0
  88. package/app/Actions/Commerce/GiftCardIndexAction.ts +16 -0
  89. package/app/Actions/Commerce/GiftCardShowAction.ts +18 -0
  90. package/app/Actions/Commerce/GiftCardStatsAction.ts +30 -0
  91. package/app/Actions/Commerce/GiftCardStoreAction.ts +35 -0
  92. package/app/Actions/Commerce/GiftCardUpdateAction.ts +26 -0
  93. package/app/Actions/Commerce/GiftCardUpdateBalanceAction.ts +36 -0
  94. package/app/Actions/Commerce/OrderDestroyAction.ts +18 -0
  95. package/app/Actions/Commerce/OrderExportAction.ts +15 -0
  96. package/app/Actions/Commerce/OrderIndexAction.ts +15 -0
  97. package/app/Actions/Commerce/OrderShowAction.ts +18 -0
  98. package/app/Actions/Commerce/OrderStoreAction.ts +32 -0
  99. package/app/Actions/Commerce/OrderUpdateAction.ts +34 -0
  100. package/app/Actions/Commerce/PaymentDestroyAction.ts +16 -0
  101. package/app/Actions/Commerce/PaymentFetchStatsAction.ts +31 -0
  102. package/app/Actions/Commerce/PaymentIndexAction.ts +15 -0
  103. package/app/Actions/Commerce/PaymentMonthlyTrendsAction.ts +21 -0
  104. package/app/Actions/Commerce/PaymentShowAction.ts +17 -0
  105. package/app/Actions/Commerce/PaymentStoreAction.ts +24 -0
  106. package/app/Actions/Commerce/PaymentUpdateAction.ts +35 -0
  107. package/app/Actions/Commerce/PrintDeviceDestroyAction.ts +18 -0
  108. package/app/Actions/Commerce/PrintDeviceIndexAction.ts +14 -0
  109. package/app/Actions/Commerce/PrintDeviceShowAction.ts +17 -0
  110. package/app/Actions/Commerce/PrintDeviceStoreAction.ts +27 -0
  111. package/app/Actions/Commerce/PrintDeviceUpdateAction.ts +27 -0
  112. package/app/Actions/Commerce/Product/ManufacturerDestroyAction.ts +20 -0
  113. package/app/Actions/Commerce/Product/ManufacturerIndexAction.ts +16 -0
  114. package/app/Actions/Commerce/Product/ManufacturerShowAction.ts +18 -0
  115. package/app/Actions/Commerce/Product/ManufacturerStoreAction.ts +14 -0
  116. package/app/Actions/Commerce/Product/ProductCategoryIndexAction.ts +16 -0
  117. package/app/Actions/Commerce/Product/ProductCategoryStoreAction.ts +16 -0
  118. package/app/Actions/Commerce/Product/ProductDestroyAction.ts +16 -0
  119. package/app/Actions/Commerce/Product/ProductIndexAction.ts +14 -0
  120. package/app/Actions/Commerce/Product/ProductManufacturerDestroyAction.ts +18 -0
  121. package/app/Actions/Commerce/Product/ProductManufacturerIndexAction.ts +14 -0
  122. package/app/Actions/Commerce/Product/ProductManufacturerShowAction.ts +16 -0
  123. package/app/Actions/Commerce/Product/ProductManufacturerStoreAction.ts +14 -0
  124. package/app/Actions/Commerce/Product/ProductManufacturerUpdateAction.ts +18 -0
  125. package/app/Actions/Commerce/Product/ProductShowAction.ts +18 -0
  126. package/app/Actions/Commerce/Product/ProductStoreAction.ts +17 -0
  127. package/app/Actions/Commerce/Product/ProductUnitDestroyAction.ts +18 -0
  128. package/app/Actions/Commerce/Product/ProductUnitIndexAction.ts +14 -0
  129. package/app/Actions/Commerce/Product/ProductUnitShowAction.ts +18 -0
  130. package/app/Actions/Commerce/Product/ProductUnitStoreAction.ts +15 -0
  131. package/app/Actions/Commerce/Product/ProductUpdateAction.ts +17 -0
  132. package/app/Actions/Commerce/Product/ProductVariantDestroyAction.ts +18 -0
  133. package/app/Actions/Commerce/Product/ProductVariantIndexAction.ts +14 -0
  134. package/app/Actions/Commerce/Product/ProductVariantShowAction.ts +17 -0
  135. package/app/Actions/Commerce/Product/ProductVariantStoreAction.ts +14 -0
  136. package/app/Actions/Commerce/Product/ProductVariantUpdateAction.ts +16 -0
  137. package/app/Actions/Commerce/ReceiptDestroyAction.ts +18 -0
  138. package/app/Actions/Commerce/ReceiptIndexAction.ts +14 -0
  139. package/app/Actions/Commerce/ReceiptShowAction.ts +18 -0
  140. package/app/Actions/Commerce/ReceiptStoreAction.ts +28 -0
  141. package/app/Actions/Commerce/ReceiptUpdateAction.ts +30 -0
  142. package/app/Actions/Commerce/ReviewIndexAction.ts +14 -0
  143. package/app/Actions/Commerce/ReviewShowAction.ts +16 -0
  144. package/app/Actions/Commerce/ReviewStoreAction.ts +26 -0
  145. package/app/Actions/Commerce/ReviewUpdateAction.ts +28 -0
  146. package/app/Actions/Commerce/Shipping/DeliveryRouteDestroyAction.ts +18 -0
  147. package/app/Actions/Commerce/Shipping/DeliveryRouteIndexAction.ts +16 -0
  148. package/app/Actions/Commerce/Shipping/DeliveryRouteShowAction.ts +18 -0
  149. package/app/Actions/Commerce/Shipping/DeliveryRouteStoreAction.ts +16 -0
  150. package/app/Actions/Commerce/Shipping/DeliveryRouteUpdateAction.ts +18 -0
  151. package/app/Actions/Commerce/Shipping/DigitalDeliveryDestroyAction.ts +18 -0
  152. package/app/Actions/Commerce/Shipping/DigitalDeliveryIndexAction.ts +16 -0
  153. package/app/Actions/Commerce/Shipping/DigitalDeliveryShowAction.ts +18 -0
  154. package/app/Actions/Commerce/Shipping/DigitalDeliveryStoreAction.ts +18 -0
  155. package/app/Actions/Commerce/Shipping/DigitalDeliveryUpdateAction.ts +18 -0
  156. package/app/Actions/Commerce/Shipping/DriverIndexAction.ts +16 -0
  157. package/app/Actions/Commerce/Shipping/DriverShowAction.ts +18 -0
  158. package/app/Actions/Commerce/Shipping/DriverStoreAction.ts +16 -0
  159. package/app/Actions/Commerce/Shipping/DriverUpdateAction.ts +18 -0
  160. package/app/Actions/Commerce/Shipping/LicenseKeyDestroyAction.ts +20 -0
  161. package/app/Actions/Commerce/Shipping/LicenseKeyIndexAction.ts +16 -0
  162. package/app/Actions/Commerce/Shipping/LicenseKeyShowAction.ts +18 -0
  163. package/app/Actions/Commerce/Shipping/LicenseKeyStoreAction.ts +18 -0
  164. package/app/Actions/Commerce/Shipping/LicenseKeyUpdateAction.ts +18 -0
  165. package/app/Actions/Commerce/Shipping/ShippingMethodDestroyAction.ts +16 -0
  166. package/app/Actions/Commerce/Shipping/ShippingMethodIndexAction.ts +14 -0
  167. package/app/Actions/Commerce/Shipping/ShippingMethodShowAction.ts +16 -0
  168. package/app/Actions/Commerce/Shipping/ShippingMethodStoreAction.ts +16 -0
  169. package/app/Actions/Commerce/Shipping/ShippingMethodUpdateAction.ts +15 -0
  170. package/app/Actions/Commerce/Shipping/ShippingRateDestroyAction.ts +16 -0
  171. package/app/Actions/Commerce/Shipping/ShippingRateIndexAction.ts +14 -0
  172. package/app/Actions/Commerce/Shipping/ShippingRateShowAction.ts +16 -0
  173. package/app/Actions/Commerce/Shipping/ShippingRateStoreAction.ts +16 -0
  174. package/app/Actions/Commerce/Shipping/ShippingRateUpdateAction.ts +17 -0
  175. package/app/Actions/Commerce/Shipping/ShippingZoneDestroyAction.ts +16 -0
  176. package/app/Actions/Commerce/Shipping/ShippingZoneIndexAction.ts +14 -0
  177. package/app/Actions/Commerce/Shipping/ShippingZoneShowAction.ts +16 -0
  178. package/app/Actions/Commerce/Shipping/ShippingZoneStoreAction.ts +16 -0
  179. package/app/Actions/Commerce/Shipping/ShippingZoneUpdateAction.ts +15 -0
  180. package/app/Actions/Commerce/TaxRateDestroyAction.ts +16 -0
  181. package/app/Actions/Commerce/TaxRateIndexAction.ts +14 -0
  182. package/app/Actions/Commerce/TaxRateShowAction.ts +17 -0
  183. package/app/Actions/Commerce/TaxRateStoreAction.ts +24 -0
  184. package/app/Actions/Commerce/TaxRateUpdateAction.ts +24 -0
  185. package/app/Actions/Commerce/WaitlistProductAnalyticsAction.ts +29 -0
  186. package/app/Actions/Commerce/WaitlistProductDestroyAction.ts +16 -0
  187. package/app/Actions/Commerce/WaitlistProductIndexAction.ts +14 -0
  188. package/app/Actions/Commerce/WaitlistProductQuantityDistributionAction.ts +32 -0
  189. package/app/Actions/Commerce/WaitlistProductShowAction.ts +16 -0
  190. package/app/Actions/Commerce/WaitlistProductStatusAction.ts +37 -0
  191. package/app/Actions/Commerce/WaitlistProductStoreAction.ts +27 -0
  192. package/app/Actions/Commerce/WaitlistProductTimeSeriesAction.ts +25 -0
  193. package/app/Actions/Commerce/WaitlistProductUpdateAction.ts +29 -0
  194. package/app/Actions/Commerce/WaitlistRestaurantDashboardAction.ts +29 -0
  195. package/app/Actions/Commerce/WaitlistRestaurantDestroyAction.ts +16 -0
  196. package/app/Actions/Commerce/WaitlistRestaurantIndexAction.ts +14 -0
  197. package/app/Actions/Commerce/WaitlistRestaurantShowAction.ts +16 -0
  198. package/app/Actions/Commerce/WaitlistRestaurantStoreAction.ts +31 -0
  199. package/app/Actions/Commerce/WaitlistRestaurantUpdateAction.ts +33 -0
  200. package/app/Actions/ContactAction.ts +72 -0
  201. package/app/Actions/Dashboard/Actions/CreateAction.ts +11 -0
  202. package/app/Actions/Dashboard/Actions/GetActionCount.ts +12 -0
  203. package/app/Actions/Dashboard/Actions/GetActions.ts +19 -0
  204. package/app/Actions/Dashboard/Analytics/BlogAnalyticsAction.ts +58 -0
  205. package/app/Actions/Dashboard/Analytics/BrowserAnalyticsAction.ts +42 -0
  206. package/app/Actions/Dashboard/Analytics/CommerceAnalyticsAction.ts +64 -0
  207. package/app/Actions/Dashboard/Analytics/CountryAnalyticsAction.ts +41 -0
  208. package/app/Actions/Dashboard/Analytics/DeviceAnalyticsAction.ts +58 -0
  209. package/app/Actions/Dashboard/Analytics/EventAnalyticsAction.ts +90 -0
  210. package/app/Actions/Dashboard/Analytics/MarketingAnalyticsAction.ts +76 -0
  211. package/app/Actions/Dashboard/Analytics/PageAnalyticsAction.ts +45 -0
  212. package/app/Actions/Dashboard/Analytics/ReferrerAnalyticsAction.ts +72 -0
  213. package/app/Actions/Dashboard/Analytics/SalesAnalyticsAction.ts +73 -0
  214. package/app/Actions/Dashboard/Analytics/WebAnalyticsAction.ts +114 -0
  215. package/app/Actions/Dashboard/Auth/MeAction.ts +84 -0
  216. package/app/Actions/Dashboard/BuddyDashboardAction.ts +34 -0
  217. package/app/Actions/Dashboard/Ci/RepoRunJobsAction.ts +60 -0
  218. package/app/Actions/Dashboard/Ci/RepoRunsAction.ts +67 -0
  219. package/app/Actions/Dashboard/Ci/RunnerHistoryAction.ts +58 -0
  220. package/app/Actions/Dashboard/Ci/StatusAction.ts +73 -0
  221. package/app/Actions/Dashboard/Ci/failure-notifier.ts +214 -0
  222. package/app/Actions/Dashboard/Ci/runner-pressure-monitor.ts +259 -0
  223. package/app/Actions/Dashboard/Cloud/CloudIndexAction.ts +61 -0
  224. package/app/Actions/Dashboard/Commands/CreateCommand.ts +11 -0
  225. package/app/Actions/Dashboard/Commands/GetAverageCommandTime.ts +12 -0
  226. package/app/Actions/Dashboard/Commands/GetCommandCount.ts +12 -0
  227. package/app/Actions/Dashboard/Commands/GetCommandSuccessRate.ts +12 -0
  228. package/app/Actions/Dashboard/Commands/GetCommands.ts +12 -0
  229. package/app/Actions/Dashboard/Commerce/CommerceCouponsAction.ts +48 -0
  230. package/app/Actions/Dashboard/Commerce/CommerceCustomersAction.ts +48 -0
  231. package/app/Actions/Dashboard/Commerce/CommerceDashboardAction.ts +98 -0
  232. package/app/Actions/Dashboard/Commerce/CommerceDeliveryAction.ts +65 -0
  233. package/app/Actions/Dashboard/Commerce/CommerceGiftCardsAction.ts +48 -0
  234. package/app/Actions/Dashboard/Commerce/CommerceOrdersAction.ts +51 -0
  235. package/app/Actions/Dashboard/Commerce/CommercePaymentsAction.ts +59 -0
  236. package/app/Actions/Dashboard/Commerce/CommerceProductsAction.ts +50 -0
  237. package/app/Actions/Dashboard/Commerce/CommerceTaxesAction.ts +46 -0
  238. package/app/Actions/Dashboard/Commerce/PosIndexAction.ts +57 -0
  239. package/app/Actions/Dashboard/Commerce/ReviewIndexAction.ts +51 -0
  240. package/app/Actions/Dashboard/Content/AuthorIndexAction.ts +51 -0
  241. package/app/Actions/Dashboard/Content/CategoryIndexAction.ts +27 -0
  242. package/app/Actions/Dashboard/Content/CommentIndexAction.ts +41 -0
  243. package/app/Actions/Dashboard/Content/ContentDashboardAction.ts +54 -0
  244. package/app/Actions/Dashboard/Content/FileIndexAction.ts +24 -0
  245. package/app/Actions/Dashboard/Content/PageIndexAction.ts +25 -0
  246. package/app/Actions/Dashboard/Content/PostIndexAction.ts +102 -0
  247. package/app/Actions/Dashboard/Content/SeoIndexAction.ts +17 -0
  248. package/app/Actions/Dashboard/Content/TagIndexAction.ts +23 -0
  249. package/app/Actions/Dashboard/CreateDnsRecords.ts +11 -0
  250. package/app/Actions/Dashboard/CreateMailbox.ts +11 -0
  251. package/app/Actions/Dashboard/DashboardActivityAction.ts +58 -0
  252. package/app/Actions/Dashboard/DashboardHealthAction.ts +52 -0
  253. package/app/Actions/Dashboard/DashboardHomeAction.ts +83 -0
  254. package/app/Actions/Dashboard/DashboardStatsAction.ts +48 -0
  255. package/app/Actions/Dashboard/Data/AccessTokenIndexAction.ts +65 -0
  256. package/app/Actions/Dashboard/Data/ActivityIndexAction.ts +28 -0
  257. package/app/Actions/Dashboard/Data/DataDashboardAction.ts +67 -0
  258. package/app/Actions/Dashboard/Data/SubscriberIndexAction.ts +48 -0
  259. package/app/Actions/Dashboard/Data/TeamIndexAction.ts +43 -0
  260. package/app/Actions/Dashboard/Data/UserIndexAction.ts +48 -0
  261. package/app/Actions/Dashboard/Deployments/CreateDeployment.ts +11 -0
  262. package/app/Actions/Dashboard/Deployments/GetAverageDeploymentTime.ts +15 -0
  263. package/app/Actions/Dashboard/Deployments/GetDeployScript.ts +12 -0
  264. package/app/Actions/Dashboard/Deployments/GetDeploymentCount.ts +12 -0
  265. package/app/Actions/Dashboard/Deployments/GetDeploymentLiveTerminalOutput.ts +12 -0
  266. package/app/Actions/Dashboard/Deployments/GetDeployments.ts +20 -0
  267. package/app/Actions/Dashboard/Deployments/GetRecentDeployments.ts +12 -0
  268. package/app/Actions/Dashboard/Deployments/UpdateDeployScript.ts +11 -0
  269. package/app/Actions/Dashboard/GetDnsRecords.ts +12 -0
  270. package/app/Actions/Dashboard/GetEmailInboxes.ts +12 -0
  271. package/app/Actions/Dashboard/GetProjects.ts +13 -0
  272. package/app/Actions/Dashboard/GetRecentCommits.ts +13 -0
  273. package/app/Actions/Dashboard/Inbox/InboxIndexAction.ts +144 -0
  274. package/app/Actions/Dashboard/Inbox/InboxShowAction.ts +89 -0
  275. package/app/Actions/Dashboard/Infrastructure/CommandIndexAction.ts +18 -0
  276. package/app/Actions/Dashboard/Infrastructure/DnsIndexAction.ts +101 -0
  277. package/app/Actions/Dashboard/Infrastructure/EnvironmentIndexAction.ts +67 -0
  278. package/app/Actions/Dashboard/Infrastructure/InsightsAction.ts +29 -0
  279. package/app/Actions/Dashboard/Infrastructure/LogIndexAction.ts +50 -0
  280. package/app/Actions/Dashboard/Infrastructure/MailboxIndexAction.ts +85 -0
  281. package/app/Actions/Dashboard/Infrastructure/PermissionIndexAction.ts +54 -0
  282. package/app/Actions/Dashboard/Infrastructure/RequestIndexAction.ts +44 -0
  283. package/app/Actions/Dashboard/Infrastructure/ServerIndexAction.ts +101 -0
  284. package/app/Actions/Dashboard/Jobs/CreateJob.ts +11 -0
  285. package/app/Actions/Dashboard/Jobs/GetAverageJobTime.ts +12 -0
  286. package/app/Actions/Dashboard/Jobs/GetJobHistory.ts +12 -0
  287. package/app/Actions/Dashboard/Jobs/GetJobs.ts +11 -0
  288. package/app/Actions/Dashboard/Jobs/GetJobsPerMinute.ts +12 -0
  289. package/app/Actions/Dashboard/Jobs/JobIndexAction.ts +136 -0
  290. package/app/Actions/Dashboard/Jobs/JobRetryAction.ts +23 -0
  291. package/app/Actions/Dashboard/Jobs/JobStatsAction.ts +49 -0
  292. package/app/Actions/Dashboard/Kanban/BoardDestroyAction.ts +84 -0
  293. package/app/Actions/Dashboard/Kanban/BoardShowAction.ts +215 -0
  294. package/app/Actions/Dashboard/Kanban/BoardStoreAction.ts +98 -0
  295. package/app/Actions/Dashboard/Kanban/BoardUpdateAction.ts +96 -0
  296. package/app/Actions/Dashboard/Kanban/BoardsIndexAction.ts +81 -0
  297. package/app/Actions/Dashboard/Kanban/BoardsReorderAction.ts +80 -0
  298. package/app/Actions/Dashboard/Kanban/CardAssigneesSyncAction.ts +103 -0
  299. package/app/Actions/Dashboard/Kanban/CardCommentDestroyAction.ts +33 -0
  300. package/app/Actions/Dashboard/Kanban/CardCommentStoreAction.ts +82 -0
  301. package/app/Actions/Dashboard/Kanban/CardDestroyAction.ts +48 -0
  302. package/app/Actions/Dashboard/Kanban/CardLabelsSyncAction.ts +103 -0
  303. package/app/Actions/Dashboard/Kanban/CardShowAction.ts +122 -0
  304. package/app/Actions/Dashboard/Kanban/CardStoreAction.ts +112 -0
  305. package/app/Actions/Dashboard/Kanban/CardUpdateAction.ts +91 -0
  306. package/app/Actions/Dashboard/Kanban/CardsReorderAction.ts +148 -0
  307. package/app/Actions/Dashboard/Kanban/ColumnDestroyAction.ts +59 -0
  308. package/app/Actions/Dashboard/Kanban/ColumnStoreAction.ts +94 -0
  309. package/app/Actions/Dashboard/Kanban/ColumnUpdateAction.ts +89 -0
  310. package/app/Actions/Dashboard/Kanban/ColumnsReorderAction.ts +85 -0
  311. package/app/Actions/Dashboard/Kanban/LabelDestroyAction.ts +41 -0
  312. package/app/Actions/Dashboard/Kanban/LabelStoreAction.ts +70 -0
  313. package/app/Actions/Dashboard/Kanban/LabelUpdateAction.ts +83 -0
  314. package/app/Actions/Dashboard/Kanban/UsersListAction.ts +36 -0
  315. package/app/Actions/Dashboard/Library/CreateComponent.ts +11 -0
  316. package/app/Actions/Dashboard/Library/CreateFunction.ts +11 -0
  317. package/app/Actions/Dashboard/Library/DependencyIndexAction.ts +92 -0
  318. package/app/Actions/Dashboard/Library/GetAverageReleaseTime.ts +12 -0
  319. package/app/Actions/Dashboard/Library/GetComponents.ts +24 -0
  320. package/app/Actions/Dashboard/Library/GetComponentsDownloadCount.ts +12 -0
  321. package/app/Actions/Dashboard/Library/GetDownloadCount.ts +12 -0
  322. package/app/Actions/Dashboard/Library/GetFunctions.ts +22 -0
  323. package/app/Actions/Dashboard/Library/GetFunctionsDownloadCount.ts +12 -0
  324. package/app/Actions/Dashboard/Library/GetReleaseCount.ts +12 -0
  325. package/app/Actions/Dashboard/Library/GetReleases.ts +28 -0
  326. package/app/Actions/Dashboard/Library/PackageIndexAction.ts +26 -0
  327. package/app/Actions/Dashboard/Marketing/CampaignIndexAction.ts +45 -0
  328. package/app/Actions/Dashboard/Marketing/ListIndexAction.ts +43 -0
  329. package/app/Actions/Dashboard/Marketing/SocialPostIndexAction.ts +47 -0
  330. package/app/Actions/Dashboard/Models/GetModels.ts +39 -0
  331. package/app/Actions/Dashboard/Models/GetSubscriberCount.ts +12 -0
  332. package/app/Actions/Dashboard/Models/GetUserCount.ts +12 -0
  333. package/app/Actions/Dashboard/Models/ModelShowAction.ts +131 -0
  334. package/app/Actions/Dashboard/Models/ModelsIndexAction.ts +169 -0
  335. package/app/Actions/Dashboard/Notifications/CreateNotification.ts +11 -0
  336. package/app/Actions/Dashboard/Notifications/GetAverageNotificationTime.ts +12 -0
  337. package/app/Actions/Dashboard/Notifications/GetNotificationCount.ts +12 -0
  338. package/app/Actions/Dashboard/Notifications/GetNotificationDeliveryRate.ts +12 -0
  339. package/app/Actions/Dashboard/Notifications/GetNotificationHistory.ts +12 -0
  340. package/app/Actions/Dashboard/Notifications/GetNotifications.ts +12 -0
  341. package/app/Actions/Dashboard/Notifications/NotificationDashboardAction.ts +43 -0
  342. package/app/Actions/Dashboard/Queries/QueryIndexAction.ts +22 -0
  343. package/app/Actions/Dashboard/Queue/QueueRetryFailedAction.ts +22 -0
  344. package/app/Actions/Dashboard/Queue/QueueStatsAction.ts +98 -0
  345. package/app/Actions/Dashboard/Queue/QueueWorkersAction.ts +46 -0
  346. package/app/Actions/Dashboard/Rbac/PermissionDestroyAction.ts +33 -0
  347. package/app/Actions/Dashboard/Rbac/PermissionStoreAction.ts +53 -0
  348. package/app/Actions/Dashboard/Rbac/PermissionsIndexAction.ts +34 -0
  349. package/app/Actions/Dashboard/Rbac/RoleDestroyAction.ts +35 -0
  350. package/app/Actions/Dashboard/Rbac/RolePermissionsShowAction.ts +45 -0
  351. package/app/Actions/Dashboard/Rbac/RolePermissionsSyncAction.ts +63 -0
  352. package/app/Actions/Dashboard/Rbac/RoleStoreAction.ts +58 -0
  353. package/app/Actions/Dashboard/Rbac/RolesIndexAction.ts +36 -0
  354. package/app/Actions/Dashboard/Rbac/UserRolesShowAction.ts +40 -0
  355. package/app/Actions/Dashboard/Rbac/UserRolesSyncAction.ts +65 -0
  356. package/app/Actions/Dashboard/Rbac/UsersListAction.ts +39 -0
  357. package/app/Actions/Dashboard/Realtime/RealtimeStatsAction.ts +50 -0
  358. package/app/Actions/Dashboard/Releases/ReleaseIndexAction.ts +21 -0
  359. package/app/Actions/Dashboard/Requests/GetAverageRequestTime.ts +12 -0
  360. package/app/Actions/Dashboard/Requests/GetRequestCount.ts +12 -0
  361. package/app/Actions/Dashboard/Requests/GetRequestSuccessRate.ts +12 -0
  362. package/app/Actions/Dashboard/Requests/GetRequests.ts +12 -0
  363. package/app/Actions/Dashboard/Search/GlobalSearchAction.ts +26 -0
  364. package/app/Actions/Dashboard/ServiceHealthAction.ts +243 -0
  365. package/app/Actions/Dashboard/Settings/MailSettingsGetAction.ts +20 -0
  366. package/app/Actions/Dashboard/Settings/MailSettingsUpdateAction.ts +10 -0
  367. package/app/Actions/Dashboard/Settings/SettingsIndexAction.ts +40 -0
  368. package/app/Actions/Dashboard/Settings/UpdateAiConfig.ts +27 -0
  369. package/app/Actions/Dashboard/Settings/UpdateAnalyticsConfig.ts +38 -0
  370. package/app/Actions/Dashboard/Settings/UpdateAppConfig.ts +38 -0
  371. package/app/Actions/Dashboard/Settings/UpdateCacheConfig.ts +11 -0
  372. package/app/Actions/Dashboard/Settings/UpdateCliConfig.ts +11 -0
  373. package/app/Actions/Dashboard/Settings/UpdateCloudConfig.ts +38 -0
  374. package/app/Actions/Dashboard/Settings/UpdateDatabaseConfig.ts +38 -0
  375. package/app/Actions/Dashboard/Settings/UpdateDnsConfig.ts +38 -0
  376. package/app/Actions/Dashboard/Settings/UpdateDocsConfig.ts +11 -0
  377. package/app/Actions/Dashboard/Settings/UpdateEmailConfig.ts +38 -0
  378. package/app/Actions/Dashboard/Settings/UpdateEnvConfig.ts +11 -0
  379. package/app/Actions/Dashboard/Settings/UpdateErrorsConfig.ts +11 -0
  380. package/app/Actions/Dashboard/Settings/UpdateFileSystemsConfig.ts +11 -0
  381. package/app/Actions/Dashboard/Settings/UpdateGitConfig.ts +11 -0
  382. package/app/Actions/Dashboard/Settings/UpdateHashingConfig.ts +11 -0
  383. package/app/Actions/Dashboard/Settings/UpdateLibraryConfig.ts +11 -0
  384. package/app/Actions/Dashboard/Settings/UpdateLoggerConfig.ts +11 -0
  385. package/app/Actions/Dashboard/Settings/UpdateNotificationConfig.ts +11 -0
  386. package/app/Actions/Dashboard/Settings/UpdatePaymentConfig.ts +11 -0
  387. package/app/Actions/Dashboard/Settings/UpdatePortsConfig.ts +38 -0
  388. package/app/Actions/Dashboard/Settings/UpdateQueueConfig.ts +11 -0
  389. package/app/Actions/Dashboard/Settings/UpdateSearchEngineConfig.ts +11 -0
  390. package/app/Actions/Dashboard/Settings/UpdateSecurityConfig.ts +38 -0
  391. package/app/Actions/Dashboard/Settings/UpdateServicesConfig.ts +38 -0
  392. package/app/Actions/Dashboard/Settings/UpdateStorageConfig.ts +11 -0
  393. package/app/Actions/Dashboard/Settings/UpdateTeamConfig.ts +11 -0
  394. package/app/Actions/Dashboard/Settings/UpdateUiConfig.ts +11 -0
  395. package/app/Actions/HealthAction.ts +112 -0
  396. package/app/Actions/InstallAction.ts +83 -0
  397. package/app/Actions/Locale/SetLocaleAction.ts +51 -0
  398. package/app/Actions/LogAction.ts +42 -0
  399. package/app/Actions/Logs/LogFetchStatsAction.ts +50 -0
  400. package/app/Actions/Logs/LogIndexOrmAction.ts +13 -0
  401. package/app/Actions/Logs/LogShowOrmAction.ts +17 -0
  402. package/app/Actions/Logs/LogStoreOrmAction.ts +16 -0
  403. package/app/Actions/Logs/LogUpdateOrmAction.ts +20 -0
  404. package/app/Actions/Monitoring/ErrorDestroyAction.ts +25 -0
  405. package/app/Actions/Monitoring/ErrorGroupAction.ts +21 -0
  406. package/app/Actions/Monitoring/ErrorIgnoreAction.ts +25 -0
  407. package/app/Actions/Monitoring/ErrorIndexAction.ts +14 -0
  408. package/app/Actions/Monitoring/ErrorResolveAction.ts +25 -0
  409. package/app/Actions/Monitoring/ErrorShowAction.ts +19 -0
  410. package/app/Actions/Monitoring/ErrorStatsAction.ts +14 -0
  411. package/app/Actions/Monitoring/ErrorTimelineAction.ts +14 -0
  412. package/app/Actions/Monitoring/ErrorUnresolveAction.ts +25 -0
  413. package/app/Actions/NotifyUser.ts +10 -0
  414. package/app/Actions/Password/PasswordResetAction.ts +54 -0
  415. package/app/Actions/Password/SendPasswordResetEmailAction.ts +66 -0
  416. package/app/Actions/Password/VerifyResetTokenAction.ts +27 -0
  417. package/app/Actions/Payment/CancelSubscriptionAction.ts +20 -0
  418. package/app/Actions/Payment/CreateCheckoutAction.ts +28 -0
  419. package/app/Actions/Payment/CreateInvoiceSubscription.ts +18 -0
  420. package/app/Actions/Payment/CreatePaymentIntentAction.ts +31 -0
  421. package/app/Actions/Payment/CreateSetupIntentAction.ts +20 -0
  422. package/app/Actions/Payment/CreateSubscriptionAction.ts +23 -0
  423. package/app/Actions/Payment/DeleteDefaultPaymentAction.ts +18 -0
  424. package/app/Actions/Payment/FetchActiveSubscriptionAction.ts +18 -0
  425. package/app/Actions/Payment/FetchDefaultPaymentMethodAction.ts +18 -0
  426. package/app/Actions/Payment/FetchPaymentCustomerAction.ts +18 -0
  427. package/app/Actions/Payment/FetchPaymentMethodsAction.ts +18 -0
  428. package/app/Actions/Payment/FetchProductAction.ts +15 -0
  429. package/app/Actions/Payment/FetchTransactionHistoryAction.ts +18 -0
  430. package/app/Actions/Payment/FetchUserSubscriptionsAction.ts +18 -0
  431. package/app/Actions/Payment/SetDefaultPaymentAction.ts +20 -0
  432. package/app/Actions/Payment/SetUserDefaultPaymentAction.ts +20 -0
  433. package/app/Actions/Payment/StorePaymentMethodAction.ts +20 -0
  434. package/app/Actions/Payment/StoreTransactionAction.ts +20 -0
  435. package/app/Actions/Payment/UpdateCustomerAction.ts +24 -0
  436. package/app/Actions/Payment/UpdateDefaultPaymentMethodAction.ts +18 -0
  437. package/app/Actions/Payment/UpdateSubscriptionAction.ts +22 -0
  438. package/app/Actions/Queue/FetchQueuesAction.ts +14 -0
  439. package/app/Actions/README.md +61 -0
  440. package/app/Actions/Realtime/FetchWebsocketsAction.ts +14 -0
  441. package/app/Actions/RobotsAction.ts +61 -0
  442. package/app/Actions/SendWelcomeEmail.ts +40 -0
  443. package/app/Actions/SitemapAction.ts +234 -0
  444. package/app/Actions/Storefront/AddToCartAction.ts +153 -0
  445. package/app/Actions/Storefront/CheckoutContactAction.ts +50 -0
  446. package/app/Actions/Storefront/CheckoutShippingAction.ts +61 -0
  447. package/app/Actions/Storefront/GetCartAction.ts +58 -0
  448. package/app/Actions/Storefront/PlaceOrderAction.ts +195 -0
  449. package/app/Actions/Storefront/SubmitReviewAction.ts +140 -0
  450. package/app/Actions/Storefront/UpdateCartItemAction.ts +83 -0
  451. package/app/Actions/Storefront/_shipping.ts +64 -0
  452. package/app/Actions/SubscriberEmailAction.ts +60 -0
  453. package/app/Actions/TestErrorAction.ts +163 -0
  454. package/app/Actions/UnsubscribeAction.ts +107 -0
  455. package/app/Actions/UploadTestAction.ts +57 -0
  456. package/app/Broadcasts/OrderShipped.ts +57 -0
  457. package/app/Commands/Inspire.ts +57 -0
  458. package/app/Commands/README.md +84 -0
  459. package/app/Commands.ts +38 -0
  460. package/app/Controllers/ComingSoonController.ts +9 -0
  461. package/app/Controllers/QueryController.ts +373 -0
  462. package/app/Events.ts +14 -0
  463. package/app/Gates.ts +107 -0
  464. package/app/Jobs/ExampleJob.ts +20 -0
  465. package/app/Jobs/ExampleTwoJob.ts +12 -0
  466. package/app/Jobs/PruneModelsJob.ts +61 -0
  467. package/app/Jobs/PruneQueryLogsJob.ts +51 -0
  468. package/app/Jobs/README.md +79 -0
  469. package/app/Jobs/SendCampaignJob.ts +201 -0
  470. package/app/Jobs/SendEmailJob.ts +52 -0
  471. package/app/Jobs/SendPasswordResetEmailJob.ts +44 -0
  472. package/app/Jobs/SyncSearchIndexJob.ts +64 -0
  473. package/app/Listener.ts +84 -0
  474. package/app/Listeners/Console.ts +22 -0
  475. package/app/Listeners/README.md +47 -0
  476. package/app/Mail/OrderConfirmation.ts +60 -0
  477. package/app/Mail/SubscriptionConfirmation.ts +41 -0
  478. package/app/Middleware/Abilities.ts +53 -0
  479. package/app/Middleware/Api.ts +26 -0
  480. package/app/Middleware/Auth.ts +59 -0
  481. package/app/Middleware/Can.ts +68 -0
  482. package/app/Middleware/Compress.ts +213 -0
  483. package/app/Middleware/Cors.ts +320 -0
  484. package/app/Middleware/Csrf.ts +224 -0
  485. package/app/Middleware/EnsureEmailIsVerified.ts +28 -0
  486. package/app/Middleware/Env.ts +24 -0
  487. package/app/Middleware/EnvDevelopment.ts +19 -0
  488. package/app/Middleware/EnvLocal.ts +19 -0
  489. package/app/Middleware/EnvNotDevelopment.ts +19 -0
  490. package/app/Middleware/EnvNotLocal.ts +19 -0
  491. package/app/Middleware/EnvNotProduction.ts +19 -0
  492. package/app/Middleware/EnvNotStaging.ts +19 -0
  493. package/app/Middleware/EnvProduction.ts +19 -0
  494. package/app/Middleware/EnvStaging.ts +19 -0
  495. package/app/Middleware/Guest.ts +25 -0
  496. package/app/Middleware/Logger.ts +20 -0
  497. package/app/Middleware/Maintenance.ts +36 -0
  498. package/app/Middleware/Permission.ts +42 -0
  499. package/app/Middleware/README.md +48 -0
  500. package/app/Middleware/Role.ts +42 -0
  501. package/app/Middleware/Signed.ts +31 -0
  502. package/app/Middleware/Team.ts +36 -0
  503. package/app/Middleware/Throttle.ts +96 -0
  504. package/app/Middleware.ts +35 -0
  505. package/app/Models/Activity.ts +94 -0
  506. package/app/Models/Board.ts +103 -0
  507. package/app/Models/BoardColumn.ts +87 -0
  508. package/app/Models/Campaign.ts +239 -0
  509. package/app/Models/CampaignSend.ts +107 -0
  510. package/app/Models/Card.ts +117 -0
  511. package/app/Models/CardComment.ts +68 -0
  512. package/app/Models/Comment.ts +108 -0
  513. package/app/Models/Content/Author.ts +104 -0
  514. package/app/Models/Content/Page.ts +99 -0
  515. package/app/Models/Content/Post.ts +144 -0
  516. package/app/Models/Deployment.ts +116 -0
  517. package/app/Models/EmailList.ts +126 -0
  518. package/app/Models/EmailListSubscriber.ts +91 -0
  519. package/app/Models/Error.ts +70 -0
  520. package/app/Models/FailedJob.ts +62 -0
  521. package/app/Models/Job.ts +63 -0
  522. package/app/Models/Label.ts +66 -0
  523. package/app/Models/Log.ts +110 -0
  524. package/app/Models/Notification.ts +118 -0
  525. package/app/Models/PaymentMethod.ts +98 -0
  526. package/app/Models/PaymentProduct.ts +91 -0
  527. package/app/Models/PaymentTransaction.ts +78 -0
  528. package/app/Models/README.md +31 -0
  529. package/app/Models/Release.ts +89 -0
  530. package/app/Models/Request.ts +114 -0
  531. package/app/Models/SocialPost.ts +136 -0
  532. package/app/Models/Subscriber.ts +89 -0
  533. package/app/Models/SubscriberEmail.ts +55 -0
  534. package/app/Models/Subscription.ts +153 -0
  535. package/app/Models/Tag.ts +82 -0
  536. package/app/Models/Team.ts +72 -0
  537. package/app/Models/User.ts +134 -0
  538. package/app/Models/commerce/Cart.ts +139 -0
  539. package/app/Models/commerce/CartItem.ts +137 -0
  540. package/app/Models/commerce/Category.ts +105 -0
  541. package/app/Models/commerce/Coupon.ts +181 -0
  542. package/app/Models/commerce/Customer.ts +132 -0
  543. package/app/Models/commerce/DeliveryRoute.ts +93 -0
  544. package/app/Models/commerce/DigitalDelivery.ts +105 -0
  545. package/app/Models/commerce/Driver.ts +97 -0
  546. package/app/Models/commerce/GiftCard.ts +191 -0
  547. package/app/Models/commerce/LicenseKey.ts +87 -0
  548. package/app/Models/commerce/LoyaltyPoint.ts +107 -0
  549. package/app/Models/commerce/LoyaltyReward.ts +124 -0
  550. package/app/Models/commerce/Manufacturer.ts +84 -0
  551. package/app/Models/commerce/Order.ts +142 -0
  552. package/app/Models/commerce/OrderItem.ts +51 -0
  553. package/app/Models/commerce/Payment.ts +163 -0
  554. package/app/Models/commerce/PrintDevice.ts +117 -0
  555. package/app/Models/commerce/Product.ts +148 -0
  556. package/app/Models/commerce/ProductUnit.ts +107 -0
  557. package/app/Models/commerce/ProductVariant.ts +106 -0
  558. package/app/Models/commerce/Receipt.ts +128 -0
  559. package/app/Models/commerce/Review.ts +140 -0
  560. package/app/Models/commerce/ShippingMethod.ts +97 -0
  561. package/app/Models/commerce/ShippingRate.ts +74 -0
  562. package/app/Models/commerce/ShippingZone.ts +111 -0
  563. package/app/Models/commerce/TaxRate.ts +114 -0
  564. package/app/Models/commerce/Transaction.ts +126 -0
  565. package/app/Models/commerce/WaitlistProduct.ts +149 -0
  566. package/app/Models/commerce/WaitlistRestaurant.ts +187 -0
  567. package/app/Models/realtime/Websocket.ts +77 -0
  568. package/app/Notifications/README.md +31 -0
  569. package/app/Notifications/Welcome.ts +32 -0
  570. package/app/Policies/PostPolicy.ts +131 -0
  571. package/app/README.md +23 -0
  572. package/app/Routes.ts +47 -0
  573. package/app/Scheduler.ts +28 -0
  574. package/app/Storefront/CartCookie.ts +109 -0
  575. package/package.json +3 -2
@@ -0,0 +1,243 @@
1
+ import { Action } from '@stacksjs/actions'
2
+
3
+ export default new Action({
4
+ name: 'ServiceHealthAction',
5
+ description: 'Returns service health and configuration data for the services page.',
6
+ method: 'GET',
7
+ async handle() {
8
+ const { readFileSync, accessSync } = await import('node:fs')
9
+ const { join } = await import('node:path')
10
+ const projectRoot = process.cwd()
11
+
12
+ function readConfig(name: string): string {
13
+ try {
14
+ return readFileSync(join(projectRoot, 'config', name), 'utf-8')
15
+ }
16
+ catch { return '' }
17
+ }
18
+
19
+ function extractValue(content: string, pattern: RegExp): string {
20
+ const m = content.match(pattern)
21
+ return m ? m[1].trim().replace(/['"]/g, '') : ''
22
+ }
23
+
24
+ function fileExists(p: string): boolean {
25
+ try { accessSync(p); return true }
26
+ catch { return false }
27
+ }
28
+
29
+ // Infrastructure Services
30
+ const infra: Array<Record<string, unknown>> = []
31
+
32
+ // Database
33
+ const dbConf = readConfig('database.ts')
34
+ const dbDriver = extractValue(dbConf, /default:\s*['"](\w+)['"]/) || 'sqlite'
35
+ const dbFile = extractValue(dbConf, /filename:\s*['"]([^'"]+)['"]/) || 'database/stacks.sqlite'
36
+ const dbHost = extractValue(dbConf, /host:\s*['"]([^'"]+)['"]/) || 'localhost'
37
+ const dbPort = extractValue(dbConf, /port:\s*(\d+)/) || ''
38
+ infra.push({
39
+ name: 'Database',
40
+ configFile: 'database.ts',
41
+ category: 'data',
42
+ driver: dbDriver,
43
+ status: dbDriver === 'sqlite' && fileExists(join(projectRoot, dbFile)) ? 'running' : 'configured',
44
+ detail: dbDriver === 'sqlite' ? dbFile : `${dbHost}${dbPort ? `:${dbPort}` : ''}`,
45
+ fields: [{ key: 'default', label: 'Driver', value: dbDriver, options: 'sqlite,mysql,postgres,dynamodb' }],
46
+ })
47
+
48
+ // Cache
49
+ const cacheConf = readConfig('cache.ts')
50
+ const cacheDriver = extractValue(cacheConf, /driver:\s*['"](\w+)['"]/) || 'memory'
51
+ const redisHost = extractValue(cacheConf, /host:\s*['"]([^'"]+)['"]/) || '127.0.0.1'
52
+ const redisPort = extractValue(cacheConf, /port:\s*(\d+)/) || '6379'
53
+ infra.push({
54
+ name: 'Cache',
55
+ configFile: 'cache.ts',
56
+ category: 'data',
57
+ driver: cacheDriver,
58
+ status: cacheDriver === 'memory' ? 'running' : 'configured',
59
+ detail: cacheDriver === 'redis' ? `${redisHost}:${redisPort}` : 'In-Memory',
60
+ fields: [{ key: 'driver', label: 'Driver', value: cacheDriver, options: 'memory,redis' }],
61
+ })
62
+
63
+ // Queue
64
+ const queueConf = readConfig('queue.ts')
65
+ const queueDriver = extractValue(queueConf, /default:\s*['"](\w+)['"]/) || 'sync'
66
+ const queueDetail = queueDriver === 'redis' ? 'Redis (bun-queue)' : queueDriver === 'database' ? 'Database' : queueDriver === 'sqs' ? 'AWS SQS' : 'Sync (dev)'
67
+ infra.push({
68
+ name: 'Queue',
69
+ configFile: 'queue.ts',
70
+ category: 'data',
71
+ driver: queueDriver,
72
+ status: 'configured',
73
+ detail: queueDetail,
74
+ fields: [{ key: 'default', label: 'Driver', value: queueDriver, options: 'sync,database,redis,sqs,memory' }],
75
+ })
76
+
77
+ // Search
78
+ const searchConf = readConfig('search-engine.ts')
79
+ const searchDriver = extractValue(searchConf, /driver:\s*['"]([^'"]+)['"]/) || 'opensearch'
80
+ infra.push({
81
+ name: 'Search',
82
+ configFile: 'search-engine.ts',
83
+ category: 'data',
84
+ driver: searchDriver,
85
+ status: 'configured',
86
+ detail: searchDriver,
87
+ fields: [{ key: 'driver', label: 'Driver', value: searchDriver, options: 'opensearch,meilisearch,algolia,typesense' }],
88
+ })
89
+
90
+ // Storage
91
+ const storageConf = readConfig('filesystems.ts')
92
+ const storageDriver = extractValue(storageConf, /driver:\s*['"](\w+)['"]/) || 'bun'
93
+ const storageDetail = storageDriver === 's3' ? 'AWS S3' : storageDriver === 'bun' ? 'Bun Native' : 'Local FS'
94
+ infra.push({
95
+ name: 'Storage',
96
+ configFile: 'filesystems.ts',
97
+ category: 'data',
98
+ driver: storageDriver,
99
+ status: 'configured',
100
+ detail: storageDetail,
101
+ fields: [{ key: 'driver', label: 'Driver', value: storageDriver, options: 'bun,local,s3,memory' }],
102
+ })
103
+
104
+ // Email
105
+ const emailConf = readConfig('email.ts')
106
+ const emailMode = /mode:\s*['"]server['"]/.test(emailConf) ? 'server' : 'serverless'
107
+ const emailDomain = extractValue(emailConf, /domain:\s*['"]([^'"]+)['"]/) || ''
108
+ infra.push({
109
+ name: 'Email',
110
+ configFile: 'email.ts',
111
+ category: 'communication',
112
+ driver: emailMode === 'server' ? 'Zig Server' : 'Serverless',
113
+ status: emailDomain ? 'running' : 'configured',
114
+ detail: emailDomain || 'Not configured',
115
+ fields: [
116
+ { key: 'domain', label: 'Domain', value: emailDomain, options: '' },
117
+ { key: 'mode', label: 'Mode', value: emailMode, options: 'server,serverless' },
118
+ ],
119
+ })
120
+
121
+ // Realtime
122
+ const realtimeConf = readConfig('realtime.ts')
123
+ const rtPort = extractValue(realtimeConf, /port:\s*(\d+)/) || '6001'
124
+ const rtDriver = extractValue(realtimeConf, /driver:\s*['"](\w+)['"]/) || 'socket'
125
+ infra.push({
126
+ name: 'Realtime',
127
+ configFile: 'realtime.ts',
128
+ category: 'communication',
129
+ driver: 'WebSocket',
130
+ status: 'configured',
131
+ detail: `Port ${rtPort}`,
132
+ fields: [
133
+ { key: 'port', label: 'Port', value: rtPort, options: '' },
134
+ { key: 'driver', label: 'Driver', value: rtDriver, options: 'socket,pusher,bun,reverb,ably' },
135
+ ],
136
+ })
137
+
138
+ // AI
139
+ const aiConf = readConfig('ai.ts')
140
+ const aiModel = extractValue(aiConf, /default:\s*['"]([^'"]+)['"]/) || ''
141
+ infra.push({
142
+ name: 'AI',
143
+ configFile: 'ai.ts',
144
+ category: 'compute',
145
+ driver: 'Bedrock',
146
+ status: aiModel ? 'configured' : 'not set',
147
+ detail: aiModel || 'Not configured',
148
+ fields: [{ key: 'default', label: 'Model', value: aiModel, options: '' }],
149
+ })
150
+
151
+ // System Dependencies
152
+ const systemDeps: Array<{ name: string, version: string }> = []
153
+ const depsConf = readConfig('deps.ts')
154
+ const depPattern = /['"]([^'"]+)['"]\s*:\s*['"]([^'"]+)['"]/g
155
+ let depMatch
156
+ // eslint-disable-next-line no-cond-assign
157
+ while ((depMatch = depPattern.exec(depsConf)) !== null) {
158
+ const depName = depMatch[1]
159
+ const depVer = depMatch[2]
160
+ if (depName.includes('.') || depName === 'redis' || depName === 'mailpit') {
161
+ systemDeps.push({ name: depName, version: depVer })
162
+ }
163
+ }
164
+
165
+ // Third-Party API Services
166
+ const apiServices: Array<Record<string, unknown>> = []
167
+ const svcConf = readConfig('services.ts')
168
+ const keyPattern = /^ {2}(\w[\w]*)\s*:\s*\{/gm
169
+ let svcMatch
170
+ // eslint-disable-next-line no-cond-assign
171
+ while ((svcMatch = keyPattern.exec(svcConf)) !== null) {
172
+ const svcName = svcMatch[1]
173
+ const blockStart = svcMatch.index
174
+ let braceCount = 0
175
+ let blockEnd = blockStart
176
+ let inBlock = false
177
+ for (let i = blockStart; i < svcConf.length; i++) {
178
+ if (svcConf[i] === '{') { braceCount++; inBlock = true }
179
+ if (svcConf[i] === '}') { braceCount-- }
180
+ if (inBlock && braceCount === 0) { blockEnd = i; break }
181
+ }
182
+ const block = svcConf.substring(blockStart, blockEnd + 1)
183
+
184
+ const svcFields: Array<Record<string, string>> = []
185
+ const fieldPattern = /(\w+)\s*:\s*(?:env\.(\w+)\s*\?\?\s*)?['"]?([^'",\n}]*)['"]?/g
186
+ let fm
187
+ // eslint-disable-next-line no-cond-assign
188
+ while ((fm = fieldPattern.exec(block)) !== null) {
189
+ const fName = fm[1]
190
+ if (['maxRetries', 'retryTimeout'].includes(fName)) continue
191
+ const fValue = fm[3] ? fm[3].trim().replace(/['"]/g, '') : ''
192
+ const envVar = fm[2] || ''
193
+ svcFields.push({ key: fName, label: fName, value: fValue, env: envVar })
194
+ }
195
+
196
+ const hasEnvRef = /env\./.test(block)
197
+ let category = 'other'
198
+ if (['algolia', 'meilisearch'].includes(svcName)) category = 'search'
199
+ else if (['aws', 'digitalOcean', 'hetzner'].includes(svcName)) category = 'cloud'
200
+ else if (['github', 'google', 'facebook', 'twitter'].includes(svcName)) category = 'auth'
201
+ else if (['mailgun', 'mailtrap', 'sendgrid', 'ses', 'smtp'].includes(svcName)) category = 'email'
202
+ else if (['slack', 'discord', 'teams'].includes(svcName)) category = 'messaging'
203
+ else if (['expo', 'fcm'].includes(svcName)) category = 'push'
204
+ else if (['openai', 'anthropic', 'ollama'].includes(svcName)) category = 'ai'
205
+ else if (['stripe'].includes(svcName)) category = 'payment'
206
+
207
+ apiServices.push({ name: svcName, category, configured: hasEnvRef, fields: svcFields })
208
+ }
209
+
210
+ const categoryLabels: Record<string, string> = {
211
+ auth: 'Authentication',
212
+ cloud: 'Cloud',
213
+ email: 'Email',
214
+ messaging: 'Messaging',
215
+ push: 'Push Notifications',
216
+ ai: 'AI',
217
+ payment: 'Payments',
218
+ search: 'Search',
219
+ other: 'Other',
220
+ }
221
+ const categoryOrder = ['auth', 'cloud', 'email', 'messaging', 'push', 'ai', 'payment', 'search', 'other']
222
+ const apiCategories: Record<string, Array<Record<string, unknown>>> = {}
223
+ for (const s of apiServices) {
224
+ const cat = s.category as string
225
+ if (!apiCategories[cat]) apiCategories[cat] = []
226
+ apiCategories[cat].push(s)
227
+ }
228
+ const orderedApiGroups = categoryOrder
229
+ .filter(cat => apiCategories[cat] && apiCategories[cat].length > 0)
230
+ .map(cat => ({ key: cat, label: categoryLabels[cat] || cat, items: apiCategories[cat] }))
231
+
232
+ const configuredApi = apiServices.filter(s => s.configured).length
233
+
234
+ const stats = [
235
+ { label: 'Infrastructure', value: String(infra.length) },
236
+ { label: 'API Services', value: String(apiServices.length) },
237
+ { label: 'System Deps', value: String(systemDeps.length) },
238
+ { label: 'Configured', value: `${configuredApi}/${apiServices.length}` },
239
+ ]
240
+
241
+ return { infra, systemDeps, orderedApiGroups, stats }
242
+ },
243
+ })
@@ -0,0 +1,20 @@
1
+ import { Action } from '@stacksjs/actions'
2
+
3
+ export default new Action({
4
+ name: 'MailSettingsGetAction',
5
+ description: 'Returns the current mail settings.',
6
+ method: 'GET',
7
+ async handle() {
8
+ return {
9
+ data: {
10
+ from: '',
11
+ to: '',
12
+ driver: 'SMTP',
13
+ host: '',
14
+ port: 587,
15
+ username: '',
16
+ password: '',
17
+ },
18
+ }
19
+ },
20
+ })
@@ -0,0 +1,10 @@
1
+ import { Action } from '@stacksjs/actions'
2
+
3
+ export default new Action({
4
+ name: 'MailSettingsUpdateAction',
5
+ description: 'Updates the mail settings.',
6
+ method: 'PUT',
7
+ async handle() {
8
+ return { success: true, message: 'Mail settings updated' }
9
+ },
10
+ })
@@ -0,0 +1,40 @@
1
+ import { Action } from '@stacksjs/actions'
2
+
3
+ export default new Action({
4
+ name: 'SettingsIndexAction',
5
+ description: 'Returns application settings for the dashboard settings page.',
6
+ method: 'GET',
7
+ async handle() {
8
+ const generalSettings = [
9
+ { key: 'Site Name', value: 'Stacks', type: 'text' },
10
+ { key: 'Site URL', value: 'https://stacks.dev', type: 'text' },
11
+ { key: 'Admin Email', value: 'admin@stacks.dev', type: 'email' },
12
+ { key: 'Timezone', value: 'America/New_York', type: 'select' },
13
+ { key: 'Language', value: 'English', type: 'select' },
14
+ ]
15
+
16
+ const securitySettings = [
17
+ { key: 'Two-Factor Authentication', value: true, type: 'toggle' },
18
+ { key: 'Session Timeout', value: '30 minutes', type: 'select' },
19
+ { key: 'Password Requirements', value: 'Strong', type: 'select' },
20
+ { key: 'IP Whitelist', value: 'Disabled', type: 'toggle' },
21
+ ]
22
+
23
+ const notificationSettings = [
24
+ { key: 'Email Notifications', value: true, type: 'toggle' },
25
+ { key: 'Push Notifications', value: true, type: 'toggle' },
26
+ { key: 'Weekly Digest', value: false, type: 'toggle' },
27
+ { key: 'Error Alerts', value: true, type: 'toggle' },
28
+ ]
29
+
30
+ const integrations = [
31
+ { name: 'Stripe', status: 'connected', icon: 'creditcard' },
32
+ { name: 'SendGrid', status: 'connected', icon: 'envelope' },
33
+ { name: 'Cloudflare', status: 'connected', icon: 'cloud' },
34
+ { name: 'GitHub', status: 'connected', icon: 'chevron.left.forwardslash.chevron.right' },
35
+ { name: 'Slack', status: 'not_connected', icon: 'bubble.left.and.bubble.right' },
36
+ ]
37
+
38
+ return { generalSettings, securitySettings, notificationSettings, integrations }
39
+ },
40
+ })
@@ -0,0 +1,27 @@
1
+ import { Action } from '@stacksjs/actions'
2
+ import { schema } from '@stacksjs/validation'
3
+
4
+ export default new Action({
5
+ name: 'UpdateAiConfig',
6
+ description: 'Updates the AI config.',
7
+ path: '/dashboard/settings/ai',
8
+ method: 'POST',
9
+
10
+ validations: {
11
+ default: {
12
+ rule: schema.enum(['meta.llama2-70b-chat-v1', 'meta.llama2-70b-chat-v2']),
13
+ message:
14
+ '`default` must refer to a valid AI model. Choose from `meta.llama2-70b-chat-v1` or `meta.llama2-70b-chat-v2`.',
15
+ },
16
+
17
+ models: {
18
+ rule: schema.enum(['meta.llama2-70b-chat-v1', 'meta.llama2-70b-chat-v2']),
19
+ message:
20
+ '`models` must refer to a valid AI model. Choose from `meta.llama2-70b-chat-v1` or `meta.llama2-70b-chat-v2`.',
21
+ },
22
+ },
23
+
24
+ async handle() {
25
+ // generate the file update here/write to disk
26
+ },
27
+ })
@@ -0,0 +1,38 @@
1
+ import { readFileSync, writeFileSync } from 'node:fs'
2
+ import { Action } from '@stacksjs/actions'
3
+ import { projectPath } from '@stacksjs/path'
4
+
5
+ export default new Action({
6
+ name: 'UpdateAnalyticsConfig',
7
+ description: 'Updates the analytics configuration.',
8
+ method: 'POST',
9
+ apiResponse: true,
10
+
11
+ async handle(request) {
12
+ try {
13
+ const updates = request.all()
14
+ const filePath = projectPath('config/analytics.ts')
15
+ let content = readFileSync(filePath, 'utf-8')
16
+
17
+ for (const [key, value] of Object.entries(updates)) {
18
+ const escapedKey = key.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
19
+ const pattern = new RegExp(
20
+ `(${escapedKey}\\s*:\\s*)(?:'[^']*'|"[^"]*"|\\d+(?:\\.\\d+)?|true|false)`,
21
+ )
22
+
23
+ if (pattern.test(content)) {
24
+ const isNum = /^\d+(?:\.\d+)?$/.test(String(value))
25
+ const isBool = value === true || value === false || value === 'true' || value === 'false'
26
+ const replacement = isNum || isBool ? String(value) : `'${String(value).replace(/'/g, "\\'")}'`
27
+ content = content.replace(pattern, `$1${replacement}`)
28
+ }
29
+ }
30
+
31
+ writeFileSync(filePath, content, 'utf-8')
32
+ return { success: true, message: 'Analytics configuration updated.' }
33
+ }
34
+ catch (e: any) {
35
+ return { success: false, error: e.message }
36
+ }
37
+ },
38
+ })
@@ -0,0 +1,38 @@
1
+ import { readFileSync, writeFileSync } from 'node:fs'
2
+ import { Action } from '@stacksjs/actions'
3
+ import { projectPath } from '@stacksjs/path'
4
+
5
+ export default new Action({
6
+ name: 'UpdateAppConfig',
7
+ description: 'Updates the app configuration.',
8
+ method: 'POST',
9
+ apiResponse: true,
10
+
11
+ async handle(request) {
12
+ try {
13
+ const updates = request.all()
14
+ const filePath = projectPath('config/app.ts')
15
+ let content = readFileSync(filePath, 'utf-8')
16
+
17
+ for (const [key, value] of Object.entries(updates)) {
18
+ const escapedKey = key.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
19
+ const pattern = new RegExp(
20
+ `(${escapedKey}\\s*:\\s*)(?:'[^']*'|"[^"]*"|\\d+(?:\\.\\d+)?|true|false)`,
21
+ )
22
+
23
+ if (pattern.test(content)) {
24
+ const isNum = /^\d+(?:\.\d+)?$/.test(String(value))
25
+ const isBool = value === true || value === false || value === 'true' || value === 'false'
26
+ const replacement = isNum || isBool ? String(value) : `'${String(value).replace(/'/g, "\\'")}'`
27
+ content = content.replace(pattern, `$1${replacement}`)
28
+ }
29
+ }
30
+
31
+ writeFileSync(filePath, content, 'utf-8')
32
+ return { success: true, message: 'App configuration updated.' }
33
+ }
34
+ catch (e: any) {
35
+ return { success: false, error: e.message }
36
+ }
37
+ },
38
+ })
@@ -0,0 +1,11 @@
1
+ import { Action } from '@stacksjs/actions'
2
+
3
+ export default new Action({
4
+ name: 'UpdateCacheConfig',
5
+ description: 'Updates the cache config.',
6
+ apiResponse: true,
7
+
8
+ async handle() {
9
+ //
10
+ },
11
+ })
@@ -0,0 +1,11 @@
1
+ import { Action } from '@stacksjs/actions'
2
+
3
+ export default new Action({
4
+ name: 'UpdateCliConfig',
5
+ description: 'Updates the CLI config.',
6
+ apiResponse: true,
7
+
8
+ async handle() {
9
+ //
10
+ },
11
+ })
@@ -0,0 +1,38 @@
1
+ import { readFileSync, writeFileSync } from 'node:fs'
2
+ import { Action } from '@stacksjs/actions'
3
+ import { projectPath } from '@stacksjs/path'
4
+
5
+ export default new Action({
6
+ name: 'UpdateCloudConfig',
7
+ description: 'Updates the cloud configuration.',
8
+ method: 'POST',
9
+ apiResponse: true,
10
+
11
+ async handle(request) {
12
+ try {
13
+ const updates = request.all()
14
+ const filePath = projectPath('config/cloud.ts')
15
+ let content = readFileSync(filePath, 'utf-8')
16
+
17
+ for (const [key, value] of Object.entries(updates)) {
18
+ const escapedKey = key.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
19
+ const pattern = new RegExp(
20
+ `(${escapedKey}\\s*:\\s*)(?:'[^']*'|"[^"]*"|\\d+(?:\\.\\d+)?|true|false)`,
21
+ )
22
+
23
+ if (pattern.test(content)) {
24
+ const isNum = /^\d+(?:\.\d+)?$/.test(String(value))
25
+ const isBool = value === true || value === false || value === 'true' || value === 'false'
26
+ const replacement = isNum || isBool ? String(value) : `'${String(value).replace(/'/g, "\\'")}'`
27
+ content = content.replace(pattern, `$1${replacement}`)
28
+ }
29
+ }
30
+
31
+ writeFileSync(filePath, content, 'utf-8')
32
+ return { success: true, message: 'Cloud configuration updated.' }
33
+ }
34
+ catch (e: any) {
35
+ return { success: false, error: e.message }
36
+ }
37
+ },
38
+ })
@@ -0,0 +1,38 @@
1
+ import { readFileSync, writeFileSync } from 'node:fs'
2
+ import { Action } from '@stacksjs/actions'
3
+ import { projectPath } from '@stacksjs/path'
4
+
5
+ export default new Action({
6
+ name: 'UpdateDatabaseConfig',
7
+ description: 'Updates the database configuration.',
8
+ method: 'POST',
9
+ apiResponse: true,
10
+
11
+ async handle(request) {
12
+ try {
13
+ const updates = request.all()
14
+ const filePath = projectPath('config/database.ts')
15
+ let content = readFileSync(filePath, 'utf-8')
16
+
17
+ for (const [key, value] of Object.entries(updates)) {
18
+ const escapedKey = key.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
19
+ const pattern = new RegExp(
20
+ `(${escapedKey}\\s*:\\s*)(?:'[^']*'|"[^"]*"|\\d+(?:\\.\\d+)?|true|false)`,
21
+ )
22
+
23
+ if (pattern.test(content)) {
24
+ const isNum = /^\d+(?:\.\d+)?$/.test(String(value))
25
+ const isBool = value === true || value === false || value === 'true' || value === 'false'
26
+ const replacement = isNum || isBool ? String(value) : `'${String(value).replace(/'/g, "\\'")}'`
27
+ content = content.replace(pattern, `$1${replacement}`)
28
+ }
29
+ }
30
+
31
+ writeFileSync(filePath, content, 'utf-8')
32
+ return { success: true, message: 'Database configuration updated.' }
33
+ }
34
+ catch (e: any) {
35
+ return { success: false, error: e.message }
36
+ }
37
+ },
38
+ })
@@ -0,0 +1,38 @@
1
+ import { readFileSync, writeFileSync } from 'node:fs'
2
+ import { Action } from '@stacksjs/actions'
3
+ import { projectPath } from '@stacksjs/path'
4
+
5
+ export default new Action({
6
+ name: 'UpdateDnsConfig',
7
+ description: 'Updates the DNS configuration.',
8
+ method: 'POST',
9
+ apiResponse: true,
10
+
11
+ async handle(request) {
12
+ try {
13
+ const updates = request.all()
14
+ const filePath = projectPath('config/dns.ts')
15
+ let content = readFileSync(filePath, 'utf-8')
16
+
17
+ for (const [key, value] of Object.entries(updates)) {
18
+ const escapedKey = key.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
19
+ const pattern = new RegExp(
20
+ `(${escapedKey}\\s*:\\s*)(?:'[^']*'|"[^"]*"|\\d+(?:\\.\\d+)?|true|false)`,
21
+ )
22
+
23
+ if (pattern.test(content)) {
24
+ const isNum = /^\d+(?:\.\d+)?$/.test(String(value))
25
+ const isBool = value === true || value === false || value === 'true' || value === 'false'
26
+ const replacement = isNum || isBool ? String(value) : `'${String(value).replace(/'/g, "\\'")}'`
27
+ content = content.replace(pattern, `$1${replacement}`)
28
+ }
29
+ }
30
+
31
+ writeFileSync(filePath, content, 'utf-8')
32
+ return { success: true, message: 'DNS configuration updated.' }
33
+ }
34
+ catch (e: any) {
35
+ return { success: false, error: e.message }
36
+ }
37
+ },
38
+ })
@@ -0,0 +1,11 @@
1
+ import { Action } from '@stacksjs/actions'
2
+
3
+ export default new Action({
4
+ name: 'UpdateDocsConfig',
5
+ description: 'Updates the docs config.',
6
+ apiResponse: true,
7
+
8
+ async handle() {
9
+ //
10
+ },
11
+ })
@@ -0,0 +1,38 @@
1
+ import { readFileSync, writeFileSync } from 'node:fs'
2
+ import { Action } from '@stacksjs/actions'
3
+ import { projectPath } from '@stacksjs/path'
4
+
5
+ export default new Action({
6
+ name: 'UpdateEmailConfig',
7
+ description: 'Updates the email configuration.',
8
+ method: 'POST',
9
+ apiResponse: true,
10
+
11
+ async handle(request) {
12
+ try {
13
+ const updates = request.all()
14
+ const filePath = projectPath('config/email.ts')
15
+ let content = readFileSync(filePath, 'utf-8')
16
+
17
+ for (const [key, value] of Object.entries(updates)) {
18
+ const escapedKey = key.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
19
+ const pattern = new RegExp(
20
+ `(${escapedKey}\\s*:\\s*)(?:'[^']*'|"[^"]*"|\\d+(?:\\.\\d+)?|true|false)`,
21
+ )
22
+
23
+ if (pattern.test(content)) {
24
+ const isNum = /^\d+(?:\.\d+)?$/.test(String(value))
25
+ const isBool = value === true || value === false || value === 'true' || value === 'false'
26
+ const replacement = isNum || isBool ? String(value) : `'${String(value).replace(/'/g, "\\'")}'`
27
+ content = content.replace(pattern, `$1${replacement}`)
28
+ }
29
+ }
30
+
31
+ writeFileSync(filePath, content, 'utf-8')
32
+ return { success: true, message: 'Email configuration updated.' }
33
+ }
34
+ catch (e: any) {
35
+ return { success: false, error: e.message }
36
+ }
37
+ },
38
+ })
@@ -0,0 +1,11 @@
1
+ import { Action } from '@stacksjs/actions'
2
+
3
+ export default new Action({
4
+ name: 'UpdateEnvConfig',
5
+ description: 'Updates the env config.',
6
+ apiResponse: true,
7
+
8
+ async handle() {
9
+ //
10
+ },
11
+ })
@@ -0,0 +1,11 @@
1
+ import { Action } from '@stacksjs/actions'
2
+
3
+ export default new Action({
4
+ name: 'UpdateErrorsConfig',
5
+ description: 'Updates the errors config.',
6
+ apiResponse: true,
7
+
8
+ async handle() {
9
+ //
10
+ },
11
+ })
@@ -0,0 +1,11 @@
1
+ import { Action } from '@stacksjs/actions'
2
+
3
+ export default new Action({
4
+ name: 'UpdateFileSystemsConfig',
5
+ description: 'Updates the file systems config.',
6
+ apiResponse: true,
7
+
8
+ async handle() {
9
+ //
10
+ },
11
+ })
@@ -0,0 +1,11 @@
1
+ import { Action } from '@stacksjs/actions'
2
+
3
+ export default new Action({
4
+ name: 'UpdateGitConfig',
5
+ description: 'Updates the git config.',
6
+ apiResponse: true,
7
+
8
+ async handle() {
9
+ //
10
+ },
11
+ })