@stacksjs/defaults 0.70.207 → 0.70.208

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 (408) hide show
  1. package/TODO.md +21 -0
  2. package/ai/AGENTS.md +79 -0
  3. package/ai/README.md +45 -0
  4. package/ai/claude/launch.json +12 -0
  5. package/ai/skills/stacks-actions/SKILL.md +128 -0
  6. package/ai/skills/stacks-ai/SKILL.md +276 -0
  7. package/ai/skills/stacks-alias/SKILL.md +94 -0
  8. package/ai/skills/stacks-analytics/SKILL.md +91 -0
  9. package/ai/skills/stacks-api/SKILL.md +738 -0
  10. package/ai/skills/stacks-arrays/SKILL.md +277 -0
  11. package/ai/skills/stacks-auth/SKILL.md +422 -0
  12. package/ai/skills/stacks-auto-imports/SKILL.md +138 -0
  13. package/ai/skills/stacks-brandkit/SKILL.md +811 -0
  14. package/ai/skills/stacks-browse/SKILL.md +127 -0
  15. package/ai/skills/stacks-browse/scripts/browse.ts +492 -0
  16. package/ai/skills/stacks-browser/SKILL.md +145 -0
  17. package/ai/skills/stacks-buddy/SKILL.md +676 -0
  18. package/ai/skills/stacks-build/SKILL.md +163 -0
  19. package/ai/skills/stacks-cache/SKILL.md +125 -0
  20. package/ai/skills/stacks-calendar/SKILL.md +113 -0
  21. package/ai/skills/stacks-chat/SKILL.md +371 -0
  22. package/ai/skills/stacks-cli/SKILL.md +112 -0
  23. package/ai/skills/stacks-cloud/SKILL.md +192 -0
  24. package/ai/skills/stacks-cms/SKILL.md +217 -0
  25. package/ai/skills/stacks-collections/SKILL.md +82 -0
  26. package/ai/skills/stacks-commerce/SKILL.md +114 -0
  27. package/ai/skills/stacks-composables/SKILL.md +161 -0
  28. package/ai/skills/stacks-config/SKILL.md +144 -0
  29. package/ai/skills/stacks-configuration/SKILL.md +154 -0
  30. package/ai/skills/stacks-cron/SKILL.md +123 -0
  31. package/ai/skills/stacks-crosswind/SKILL.md +190 -0
  32. package/ai/skills/stacks-dashboard/SKILL.md +173 -0
  33. package/ai/skills/stacks-database/SKILL.md +286 -0
  34. package/ai/skills/stacks-datetime/SKILL.md +269 -0
  35. package/ai/skills/stacks-dependencies/SKILL.md +111 -0
  36. package/ai/skills/stacks-deploy/SKILL.md +102 -0
  37. package/ai/skills/stacks-design-brutalist/SKILL.md +110 -0
  38. package/ai/skills/stacks-design-minimalist/SKILL.md +115 -0
  39. package/ai/skills/stacks-design-output/SKILL.md +55 -0
  40. package/ai/skills/stacks-design-soft/SKILL.md +156 -0
  41. package/ai/skills/stacks-design-taste/SKILL.md +1012 -0
  42. package/ai/skills/stacks-design-taste-codex/SKILL.md +294 -0
  43. package/ai/skills/stacks-desktop/SKILL.md +78 -0
  44. package/ai/skills/stacks-development/SKILL.md +298 -0
  45. package/ai/skills/stacks-dns/SKILL.md +149 -0
  46. package/ai/skills/stacks-docs/SKILL.md +109 -0
  47. package/ai/skills/stacks-email/SKILL.md +236 -0
  48. package/ai/skills/stacks-enums/SKILL.md +100 -0
  49. package/ai/skills/stacks-env/SKILL.md +181 -0
  50. package/ai/skills/stacks-error-handling/SKILL.md +137 -0
  51. package/ai/skills/stacks-events/SKILL.md +228 -0
  52. package/ai/skills/stacks-faker/SKILL.md +158 -0
  53. package/ai/skills/stacks-git/SKILL.md +158 -0
  54. package/ai/skills/stacks-guard/SKILL.md +98 -0
  55. package/ai/skills/stacks-health/SKILL.md +75 -0
  56. package/ai/skills/stacks-http/SKILL.md +316 -0
  57. package/ai/skills/stacks-i18n/SKILL.md +198 -0
  58. package/ai/skills/stacks-image-to-code/SKILL.md +629 -0
  59. package/ai/skills/stacks-imagegen-mobile/SKILL.md +1474 -0
  60. package/ai/skills/stacks-imagegen-web/SKILL.md +998 -0
  61. package/ai/skills/stacks-investigate/SKILL.md +119 -0
  62. package/ai/skills/stacks-jobs/SKILL.md +136 -0
  63. package/ai/skills/stacks-lint/SKILL.md +184 -0
  64. package/ai/skills/stacks-listeners/SKILL.md +99 -0
  65. package/ai/skills/stacks-logging/SKILL.md +78 -0
  66. package/ai/skills/stacks-mail/SKILL.md +120 -0
  67. package/ai/skills/stacks-middleware/SKILL.md +249 -0
  68. package/ai/skills/stacks-migrations/SKILL.md +105 -0
  69. package/ai/skills/stacks-models/SKILL.md +267 -0
  70. package/ai/skills/stacks-new-feature/SKILL.md +206 -0
  71. package/ai/skills/stacks-notifications/SKILL.md +210 -0
  72. package/ai/skills/stacks-objects/SKILL.md +205 -0
  73. package/ai/skills/stacks-office-hours/SKILL.md +134 -0
  74. package/ai/skills/stacks-orm/SKILL.md +342 -0
  75. package/ai/skills/stacks-path/SKILL.md +118 -0
  76. package/ai/skills/stacks-payments/SKILL.md +373 -0
  77. package/ai/skills/stacks-plan-review/SKILL.md +152 -0
  78. package/ai/skills/stacks-plugins/SKILL.md +149 -0
  79. package/ai/skills/stacks-push/SKILL.md +376 -0
  80. package/ai/skills/stacks-query-builder/SKILL.md +128 -0
  81. package/ai/skills/stacks-queue/SKILL.md +559 -0
  82. package/ai/skills/stacks-realtime/SKILL.md +442 -0
  83. package/ai/skills/stacks-redesign/SKILL.md +182 -0
  84. package/ai/skills/stacks-registry/SKILL.md +58 -0
  85. package/ai/skills/stacks-repl/SKILL.md +80 -0
  86. package/ai/skills/stacks-retro/SKILL.md +122 -0
  87. package/ai/skills/stacks-review/SKILL.md +135 -0
  88. package/ai/skills/stacks-router/SKILL.md +231 -0
  89. package/ai/skills/stacks-routes/SKILL.md +105 -0
  90. package/ai/skills/stacks-scaffolding/SKILL.md +162 -0
  91. package/ai/skills/stacks-scheduler/SKILL.md +363 -0
  92. package/ai/skills/stacks-search-engine/SKILL.md +112 -0
  93. package/ai/skills/stacks-security/SKILL.md +129 -0
  94. package/ai/skills/stacks-security-audit/SKILL.md +128 -0
  95. package/ai/skills/stacks-server/SKILL.md +458 -0
  96. package/ai/skills/stacks-shell/SKILL.md +62 -0
  97. package/ai/skills/stacks-slug/SKILL.md +87 -0
  98. package/ai/skills/stacks-sms/SKILL.md +385 -0
  99. package/ai/skills/stacks-socials/SKILL.md +303 -0
  100. package/ai/skills/stacks-storage/SKILL.md +576 -0
  101. package/ai/skills/stacks-strings/SKILL.md +416 -0
  102. package/ai/skills/stacks-stx/SKILL.md +176 -0
  103. package/ai/skills/stacks-technical-diagrams/LICENSE +22 -0
  104. package/ai/skills/stacks-technical-diagrams/SKILL.md +290 -0
  105. package/ai/skills/stacks-technical-diagrams/agents/openai.yaml +4 -0
  106. package/ai/skills/stacks-technical-diagrams/assets/template.html +1252 -0
  107. package/ai/skills/stacks-technical-diagrams/bin/technical-diagrams.mjs +289 -0
  108. package/ai/skills/stacks-technical-diagrams/bunfig.toml +1 -0
  109. package/ai/skills/stacks-technical-diagrams/examples/agent-run.lifecycle.json +64 -0
  110. package/ai/skills/stacks-technical-diagrams/examples/agent-tool-call.workflow.json +88 -0
  111. package/ai/skills/stacks-technical-diagrams/examples/cache-miss-request.sequence.json +75 -0
  112. package/ai/skills/stacks-technical-diagrams/examples/product-analytics.dataflow.json +70 -0
  113. package/ai/skills/stacks-technical-diagrams/examples/web-app.architecture.json +41 -0
  114. package/ai/skills/stacks-technical-diagrams/renderers/architecture/grid.mjs +62 -0
  115. package/ai/skills/stacks-technical-diagrams/renderers/architecture/render-architecture.mjs +371 -0
  116. package/ai/skills/stacks-technical-diagrams/renderers/dataflow/README.md +82 -0
  117. package/ai/skills/stacks-technical-diagrams/renderers/dataflow/render-dataflow.mjs +295 -0
  118. package/ai/skills/stacks-technical-diagrams/renderers/lifecycle/README.md +91 -0
  119. package/ai/skills/stacks-technical-diagrams/renderers/lifecycle/render-lifecycle.mjs +384 -0
  120. package/ai/skills/stacks-technical-diagrams/renderers/sequence/README.md +84 -0
  121. package/ai/skills/stacks-technical-diagrams/renderers/sequence/render-sequence.mjs +257 -0
  122. package/ai/skills/stacks-technical-diagrams/renderers/shared/cli.mjs +42 -0
  123. package/ai/skills/stacks-technical-diagrams/renderers/shared/generated-validators.mjs +13 -0
  124. package/ai/skills/stacks-technical-diagrams/renderers/shared/geometry.mjs +230 -0
  125. package/ai/skills/stacks-technical-diagrams/renderers/shared/layout-report.mjs +40 -0
  126. package/ai/skills/stacks-technical-diagrams/renderers/shared/utils.mjs +88 -0
  127. package/ai/skills/stacks-technical-diagrams/renderers/shared/validator.mjs +40 -0
  128. package/ai/skills/stacks-technical-diagrams/renderers/workflow/README.md +103 -0
  129. package/ai/skills/stacks-technical-diagrams/renderers/workflow/render-workflow.mjs +481 -0
  130. package/ai/skills/stacks-technical-diagrams/schemas/README.md +68 -0
  131. package/ai/skills/stacks-technical-diagrams/schemas/architecture.schema.json +121 -0
  132. package/ai/skills/stacks-technical-diagrams/schemas/common.schema.json +43 -0
  133. package/ai/skills/stacks-technical-diagrams/schemas/dataflow.schema.json +221 -0
  134. package/ai/skills/stacks-technical-diagrams/schemas/lifecycle.schema.json +241 -0
  135. package/ai/skills/stacks-technical-diagrams/schemas/sequence.schema.json +186 -0
  136. package/ai/skills/stacks-technical-diagrams/schemas/workflow.schema.json +332 -0
  137. package/ai/skills/stacks-technical-diagrams/scripts/check-render-output.mjs +297 -0
  138. package/ai/skills/stacks-technical-diagrams/scripts/render-examples.mjs +28 -0
  139. package/ai/skills/stacks-testing/SKILL.md +129 -0
  140. package/ai/skills/stacks-tunnel/SKILL.md +125 -0
  141. package/ai/skills/stacks-types/SKILL.md +178 -0
  142. package/ai/skills/stacks-ui/SKILL.md +246 -0
  143. package/ai/skills/stacks-utils/SKILL.md +444 -0
  144. package/ai/skills/stacks-validation/SKILL.md +371 -0
  145. package/ai/skills/stacks-whois/SKILL.md +315 -0
  146. package/assets/world-map-data.ts +121 -0
  147. package/bootstrap.ts +114 -0
  148. package/docs/api-examples.md +46 -0
  149. package/docs/index.md +24 -0
  150. package/docs/markdown-examples.md +87 -0
  151. package/functions/analytics.ts +97 -0
  152. package/functions/api.ts +143 -0
  153. package/functions/auth.ts +208 -0
  154. package/functions/billing/payments.ts +149 -0
  155. package/functions/blog.ts +120 -0
  156. package/functions/cms/categorizables.ts +107 -0
  157. package/functions/cms/pages.ts +108 -0
  158. package/functions/cms/posts.ts +100 -0
  159. package/functions/cms/taggables.ts +102 -0
  160. package/functions/commerce/coupons.ts +128 -0
  161. package/functions/commerce/customers.ts +128 -0
  162. package/functions/commerce/gift-cards.ts +119 -0
  163. package/functions/commerce/orders.ts +112 -0
  164. package/functions/commerce/payments.ts +119 -0
  165. package/functions/commerce/products/categories.ts +123 -0
  166. package/functions/commerce/products/manufacturers.ts +123 -0
  167. package/functions/commerce/products/products.ts +123 -0
  168. package/functions/commerce/products/reviews.ts +123 -0
  169. package/functions/commerce/products/units.ts +123 -0
  170. package/functions/commerce/products/variants.ts +123 -0
  171. package/functions/commerce/shippings/delivery-routes.ts +123 -0
  172. package/functions/commerce/shippings/digital-deliveries.ts +119 -0
  173. package/functions/commerce/shippings/drivers.ts +123 -0
  174. package/functions/commerce/shippings/license-keys.ts +123 -0
  175. package/functions/commerce/shippings/shipping-methods.ts +123 -0
  176. package/functions/commerce/shippings/shipping-rates.ts +119 -0
  177. package/functions/commerce/shippings/shipping-zones.ts +119 -0
  178. package/functions/commerce/taxes.ts +119 -0
  179. package/functions/commerce/waitlist/products.ts +123 -0
  180. package/functions/commerce/waitlist/restaurants.ts +123 -0
  181. package/functions/craft.ts +107 -0
  182. package/functions/dashboard.ts +153 -0
  183. package/functions/inbox.ts +95 -0
  184. package/functions/jobs.ts +86 -0
  185. package/functions/monitoring/errors.ts +295 -0
  186. package/functions/queue.ts +111 -0
  187. package/functions/realtime/websockets.ts +96 -0
  188. package/functions/realtime.ts +52 -0
  189. package/functions/releases.ts +49 -0
  190. package/functions/search.ts +126 -0
  191. package/functions/toasts.ts +95 -0
  192. package/functions/uploads.ts +216 -0
  193. package/ide/.gitignore +4 -0
  194. package/ide/cursor/rules/auto-imports.mdc +574 -0
  195. package/ide/cursor/rules/code-style.mdc +12 -0
  196. package/ide/cursor/rules/documentation.mdc +9 -0
  197. package/ide/cursor/rules/error-handling-validation.mdc +11 -0
  198. package/ide/cursor/rules/key-conventions.mdc +11 -0
  199. package/ide/cursor/rules/project-structure.mdc +169 -0
  200. package/ide/cursor/rules/readme.mdc +318 -0
  201. package/ide/cursor/rules/syntax-formatting.mdc +9 -0
  202. package/ide/cursor/rules/testing.mdc +10 -0
  203. package/ide/cursor/rules/typescript.mdc +9 -0
  204. package/ide/cursor/rules/ui-styling.mdc +0 -0
  205. package/ide/dictionary.txt +397 -0
  206. package/ide/jetbrains/.fleet/settings.json +4 -0
  207. package/ide/jetbrains/.idea/.gitignore +5 -0
  208. package/ide/jetbrains/.idea/.name +1 -0
  209. package/ide/jetbrains/.idea/inspectionProfiles/Project_Default.xml +6 -0
  210. package/ide/jetbrains/.idea/jsLinters/eslint.xml +7 -0
  211. package/ide/jetbrains/.idea/modules.xml +8 -0
  212. package/ide/jetbrains/.idea/stacks.iml +22 -0
  213. package/ide/jetbrains/.idea/vcs.xml +6 -0
  214. package/ide/jetbrains/.idea/webResources.xml +14 -0
  215. package/ide/jetbrains/IntelliJ IDEA Global Settings +0 -0
  216. package/ide/jetbrains/installed.txt +4 -0
  217. package/ide/jetbrains/options/github-copilot.xml +5 -0
  218. package/ide/jetbrains/options/nodejs.xml +7 -0
  219. package/ide/jetbrains/options/templates.xml +124 -0
  220. package/ide/jetbrains/templates/JavaScript.xml +6 -0
  221. package/ide/jetbrains/templates/Stacks.xml +8 -0
  222. package/ide/vscode/.vscode/README.md +23 -0
  223. package/ide/vscode/.vscode/extensions.json +5 -0
  224. package/ide/vscode/.vscode/settings.json +176 -0
  225. package/ide/vscode/.vscode/stacks.code-snippets +181 -0
  226. package/ide/vscode/LICENSE.md +21 -0
  227. package/ide/vscode/README.md +36 -0
  228. package/ide/vscode/logo.png +0 -0
  229. package/ide/vscode/package.json +79 -0
  230. package/ide/zed/.zed/settings.json +139 -0
  231. package/lang/README.md +28 -0
  232. package/lang/de.yml +14 -0
  233. package/lang/en.yml +15 -0
  234. package/package.json +19 -3
  235. package/project/bootstrap +161 -0
  236. package/project/buddy +175 -0
  237. package/project/storage/framework/tsconfig.app.json +50 -0
  238. package/project/storage/framework/tsconfig.base.json +58 -0
  239. package/routes/core.ts +78 -0
  240. package/routes/dashboard-api.ts +233 -0
  241. package/routes/dashboard.ts +739 -0
  242. package/routes/email.ts +129 -0
  243. package/stores/[name].stx +16 -0
  244. package/stores/git.ts +71 -0
  245. package/stores/payment.ts +474 -0
  246. package/stores/queue.ts +43 -0
  247. package/stores/user.ts +29 -0
  248. package/stx-components-plugin.ts +25 -0
  249. package/styles/design-tokens.css +597 -0
  250. package/types/dashboard.ts +70 -0
  251. package/types/defaults.ts +438 -0
  252. package/vcs/github/CODE_OF_CONDUCT.md +83 -0
  253. package/vcs/github/CONTRIBUTING.md +187 -0
  254. package/vcs/github/EXPLANATIONS.md +41 -0
  255. package/vcs/github/FUNDING.yml +1 -0
  256. package/vcs/github/ISSUE_TEMPLATE/bug_report.yml +49 -0
  257. package/vcs/github/ISSUE_TEMPLATE/config.yml +10 -0
  258. package/vcs/github/ISSUE_TEMPLATE/feature_request.yml +44 -0
  259. package/vcs/github/SECURITY.md +70 -0
  260. package/vcs/github/renovate.json +5 -0
  261. package/vcs/github/stale.yml +14 -0
  262. package/vcs/github/workflows/README.md +16 -0
  263. package/vcs/github/workflows/ci.yml +114 -0
  264. package/vcs/github/workflows/export-size.yml +25 -0
  265. package/vcs/github/workflows/labeler.yml +13 -0
  266. package/vcs/github/workflows/release.yml +219 -0
  267. package/views/[...all].stx +8 -0
  268. package/views/about.md +3 -0
  269. package/views/auth/login.stx +1 -0
  270. package/views/auth/signup.stx +85 -0
  271. package/views/dashboard/.discovered-models.json +542 -0
  272. package/views/dashboard/AUDIT.md +904 -0
  273. package/views/dashboard/[...all].stx +89 -0
  274. package/views/dashboard/access-tokens/index.stx +177 -0
  275. package/views/dashboard/actions/index.stx +129 -0
  276. package/views/dashboard/analytics/blog/index.stx +356 -0
  277. package/views/dashboard/analytics/browsers/index.stx +263 -0
  278. package/views/dashboard/analytics/commerce/sales/index.stx +329 -0
  279. package/views/dashboard/analytics/commerce/web/index.stx +379 -0
  280. package/views/dashboard/analytics/countries/index.stx +289 -0
  281. package/views/dashboard/analytics/devices/index.stx +305 -0
  282. package/views/dashboard/analytics/events/index.stx +536 -0
  283. package/views/dashboard/analytics/index.stx +88 -0
  284. package/views/dashboard/analytics/marketing/index.stx +315 -0
  285. package/views/dashboard/analytics/pages/index.stx +271 -0
  286. package/views/dashboard/analytics/referrers/index.stx +319 -0
  287. package/views/dashboard/analytics/web/index.stx +356 -0
  288. package/views/dashboard/buddy/index.stx +198 -0
  289. package/views/dashboard/ci/index.stx +462 -0
  290. package/views/dashboard/cloud/index.stx +452 -0
  291. package/views/dashboard/commands/index.stx +295 -0
  292. package/views/dashboard/commerce/categories/index.stx +406 -0
  293. package/views/dashboard/commerce/coupons/index.stx +485 -0
  294. package/views/dashboard/commerce/customers/index.stx +410 -0
  295. package/views/dashboard/commerce/dashboard/index.stx +287 -0
  296. package/views/dashboard/commerce/delivery/delivery-routes.stx +305 -0
  297. package/views/dashboard/commerce/delivery/digital-delivery.stx +332 -0
  298. package/views/dashboard/commerce/delivery/drivers.stx +397 -0
  299. package/views/dashboard/commerce/delivery/index.stx +18 -0
  300. package/views/dashboard/commerce/delivery/license-keys.stx +380 -0
  301. package/views/dashboard/commerce/delivery/shipping-methods.stx +346 -0
  302. package/views/dashboard/commerce/delivery/shipping-rates.stx +338 -0
  303. package/views/dashboard/commerce/delivery/shipping-zones.stx +302 -0
  304. package/views/dashboard/commerce/delivery/tabs.ts +25 -0
  305. package/views/dashboard/commerce/gift-cards/index.stx +561 -0
  306. package/views/dashboard/commerce/manufacturers/index.stx +308 -0
  307. package/views/dashboard/commerce/orders/index.stx +247 -0
  308. package/views/dashboard/commerce/payments/index.stx +535 -0
  309. package/views/dashboard/commerce/pos/index.stx +653 -0
  310. package/views/dashboard/commerce/printers/devices/index.stx +273 -0
  311. package/views/dashboard/commerce/printers/receipts/index.stx +308 -0
  312. package/views/dashboard/commerce/products/detail.stx +563 -0
  313. package/views/dashboard/commerce/products/index.stx +370 -0
  314. package/views/dashboard/commerce/reviews/index.stx +656 -0
  315. package/views/dashboard/commerce/reviews/index.ts +0 -0
  316. package/views/dashboard/commerce/taxes/index.stx +377 -0
  317. package/views/dashboard/commerce/units/index.stx +317 -0
  318. package/views/dashboard/commerce/variants/index.stx +319 -0
  319. package/views/dashboard/commerce/waitlist/products.stx +942 -0
  320. package/views/dashboard/commerce/waitlist/restaurant.stx +1024 -0
  321. package/views/dashboard/components/index.stx +330 -0
  322. package/views/dashboard/composables/index.ts +19 -0
  323. package/views/dashboard/composables/useChart.ts +77 -0
  324. package/views/dashboard/composables/useNavigation.ts +99 -0
  325. package/views/dashboard/composables/useRole.ts +58 -0
  326. package/views/dashboard/composables/useTheme.ts +74 -0
  327. package/views/dashboard/content/authors/index.stx +171 -0
  328. package/views/dashboard/content/blog/index.stx +493 -0
  329. package/views/dashboard/content/categories/index.stx +169 -0
  330. package/views/dashboard/content/comments/index.stx +189 -0
  331. package/views/dashboard/content/dashboard.stx +383 -0
  332. package/views/dashboard/content/files/index.stx +706 -0
  333. package/views/dashboard/content/pages/index.stx +174 -0
  334. package/views/dashboard/content/posts/index.stx +269 -0
  335. package/views/dashboard/content/seo/index.stx +240 -0
  336. package/views/dashboard/content/tags/index.stx +167 -0
  337. package/views/dashboard/data/activity/index.stx +261 -0
  338. package/views/dashboard/data/dashboard/index.stx +116 -0
  339. package/views/dashboard/data/subscribers.stx +270 -0
  340. package/views/dashboard/data/teams.stx +275 -0
  341. package/views/dashboard/data/users.stx +279 -0
  342. package/views/dashboard/dependencies/index.stx +178 -0
  343. package/views/dashboard/deployments/[id].stx +234 -0
  344. package/views/dashboard/deployments/index.stx +9 -0
  345. package/views/dashboard/dns/index.stx +163 -0
  346. package/views/dashboard/environment/index.stx +283 -0
  347. package/views/dashboard/errors/index.stx +274 -0
  348. package/views/dashboard/forgot-password.stx +57 -0
  349. package/views/dashboard/functions/index.stx +159 -0
  350. package/views/dashboard/health/index.stx +248 -0
  351. package/views/dashboard/inbox/activity.stx +350 -0
  352. package/views/dashboard/inbox/index.stx +452 -0
  353. package/views/dashboard/inbox/settings.stx +290 -0
  354. package/views/dashboard/index.stx +252 -0
  355. package/views/dashboard/insights/index.stx +529 -0
  356. package/views/dashboard/jobs/[id].stx +430 -0
  357. package/views/dashboard/jobs/history.stx +222 -0
  358. package/views/dashboard/jobs/index.stx +214 -0
  359. package/views/dashboard/kanban/[id].stx +899 -0
  360. package/views/dashboard/kanban/index.stx +260 -0
  361. package/views/dashboard/layouts/default.stx +565 -0
  362. package/views/dashboard/layouts/guest.stx +10 -0
  363. package/views/dashboard/login.stx +48 -0
  364. package/views/dashboard/logs/index.stx +540 -0
  365. package/views/dashboard/mailboxes/index.stx +149 -0
  366. package/views/dashboard/management/permissions/index.stx +490 -0
  367. package/views/dashboard/marketing/campaigns/index.stx +604 -0
  368. package/views/dashboard/marketing/lists/index.stx +514 -0
  369. package/views/dashboard/marketing/reviews/index.stx +475 -0
  370. package/views/dashboard/marketing/social-posts/index.stx +560 -0
  371. package/views/dashboard/models/[model].stx +195 -0
  372. package/views/dashboard/models/index.stx +159 -0
  373. package/views/dashboard/monitoring/errors/index.stx +415 -0
  374. package/views/dashboard/notifications/dashboard.stx +383 -0
  375. package/views/dashboard/notifications/email.stx +336 -0
  376. package/views/dashboard/notifications/history.stx +373 -0
  377. package/views/dashboard/notifications/sms.stx +332 -0
  378. package/views/dashboard/packages/index.stx +195 -0
  379. package/views/dashboard/queries/[id].stx +381 -0
  380. package/views/dashboard/queries/history.stx +227 -0
  381. package/views/dashboard/queries/index.stx +335 -0
  382. package/views/dashboard/queries/slow.stx +318 -0
  383. package/views/dashboard/queue/index.stx +427 -0
  384. package/views/dashboard/realtime/index.stx +429 -0
  385. package/views/dashboard/register.stx +46 -0
  386. package/views/dashboard/releases/index.stx +389 -0
  387. package/views/dashboard/requests/index.stx +462 -0
  388. package/views/dashboard/serverless/index.stx +475 -0
  389. package/views/dashboard/servers/[id].stx +299 -0
  390. package/views/dashboard/servers/index.stx +483 -0
  391. package/views/dashboard/settings/billing.stx +50 -0
  392. package/views/dashboard/settings/index.stx +256 -0
  393. package/views/dashboard/settings/mail.stx +252 -0
  394. package/views/dashboard/stores/auth.ts +123 -0
  395. package/views/dashboard/stores/ci.ts +342 -0
  396. package/views/dashboard/stores/index.ts +129 -0
  397. package/views/dashboard/stores/kanban.ts +723 -0
  398. package/views/dashboard/stores/rbac.ts +350 -0
  399. package/views/dashboard/stx.config.ts +34 -0
  400. package/views/dashboard/teams/[id].stx +170 -0
  401. package/views/forum/category.stx +92 -0
  402. package/views/forum/index.stx +209 -0
  403. package/views/forum/new-topic.stx +113 -0
  404. package/views/forum/profile.stx +1 -0
  405. package/views/forum/topic.stx +143 -0
  406. package/views/hello-world/[name].stx +47 -0
  407. package/views/index.stx +21 -0
  408. package/views/system-tray/index.stx +147 -0
@@ -0,0 +1,233 @@
1
+ /**
2
+ * Dashboard API Routes
3
+ *
4
+ * JSON endpoints under `/api/dashboard/*` that the dev dashboard UI fetches
5
+ * from. Kept separate from `defaults/routes/dashboard.ts` (which mounts the
6
+ * STX views, auth flows, email subscribe, etc.) so the data layer for the
7
+ * dashboard has one obvious file to grep.
8
+ *
9
+ * Registered in `defaults/bootstrap.ts`. The dev dashboard server delegates
10
+ * `/api/dashboard/*` requests to the Stacks router; user-defined routes in
11
+ * `routes/api.ts` still take priority because they load first.
12
+ *
13
+ * Routes that mutate data or expose unpublished content are wrapped in
14
+ * `guard()` (see below): a no-op locally so the dev dashboard works without a
15
+ * token, `auth` + `role:admin` everywhere else. The remaining reads are
16
+ * unauthenticated by design.
17
+ */
18
+
19
+ import { route } from '@stacksjs/router'
20
+
21
+ // The `/api/dashboard/*` surface is unauthenticated by design for the local
22
+ // dev dashboard (which gates content client-side via `useRole()`). Client-side
23
+ // gating is no protection for a JSON API, so once the dashboard is reachable
24
+ // off localhost the privilege-bearing endpoints — RBAC role/permission writes
25
+ // (assign-any-role-to-any-user = privilege escalation) and the model-row dump
26
+ // (arbitrary DB read) — must be gated server-side. In a local/dev/test env the
27
+ // guard is a no-op so the dev dashboard keeps working without a token.
28
+ const APP_ENV = (process.env.APP_ENV ?? process.env.NODE_ENV ?? '').toLowerCase()
29
+ const IS_LOCAL_ENV = APP_ENV === '' || APP_ENV === 'local' || APP_ENV === 'development' || APP_ENV === 'dev' || APP_ENV === 'test' || APP_ENV === 'testing'
30
+
31
+ // Apply auth + admin-role middleware to a sensitive route outside local envs.
32
+ // Returns the route builder so calls read as `guard(route.post(...))`.
33
+ function guard(r: any): any {
34
+ if (!IS_LOCAL_ENV)
35
+ r.middleware('auth').middleware('role:admin')
36
+ return r
37
+ }
38
+
39
+ route.group({ prefix: '/api/dashboard', apiResponse: true }, () => {
40
+ guard(route.get('/home', 'Actions/Dashboard/DashboardHomeAction'))
41
+
42
+ // CMS admin — backs the pages under `views/dashboard/content/`.
43
+ //
44
+ // This is the dashboard-reachable surface for CMS CRUD. The `/cms/*` group in
45
+ // `defaults/routes/dashboard.ts` is the public authoring API and is NOT usable
46
+ // from here: the dev dashboard server only delegates `/api/*` to the Stacks
47
+ // router on GET (a GET `/cms/posts` renders the STX 404 page instead), and
48
+ // that group is `middleware: 'auth'` while the dashboard server runs with
49
+ // `auth: false` and sends no credentials.
50
+ //
51
+ // Guarded for the same reason as the blog routes below: the writes mutate the
52
+ // database and the reads expose unpublished drafts and unmoderated comments.
53
+ guard(route.get('/posts', 'Actions/Dashboard/Content/PostIndexAction'))
54
+ guard(route.post('/posts', 'Actions/Dashboard/Content/PostStoreAction'))
55
+ guard(route.patch('/posts/{id}', 'Actions/Dashboard/Content/PostUpdateAction'))
56
+ guard(route.delete('/posts/{id}', 'Actions/Dashboard/Content/PostDestroyAction'))
57
+
58
+ guard(route.get('/authors', 'Actions/Dashboard/Content/AuthorIndexAction'))
59
+ guard(route.post('/authors', 'Actions/Dashboard/Content/AuthorStoreAction'))
60
+ guard(route.delete('/authors/{id}', 'Actions/Dashboard/Content/AuthorDestroyAction'))
61
+
62
+ guard(route.get('/categories', 'Actions/Dashboard/Content/CategoryIndexAction'))
63
+ guard(route.post('/categories', 'Actions/Dashboard/Content/CategoryStoreAction'))
64
+ guard(route.delete('/categories/{id}', 'Actions/Dashboard/Content/CategoryDestroyAction'))
65
+
66
+ guard(route.get('/tags', 'Actions/Dashboard/Content/TagIndexAction'))
67
+ guard(route.post('/tags', 'Actions/Dashboard/Content/TagStoreAction'))
68
+ guard(route.delete('/tags/{id}', 'Actions/Dashboard/Content/TagDestroyAction'))
69
+
70
+ guard(route.get('/pages', 'Actions/Dashboard/Content/PageIndexAction'))
71
+ guard(route.post('/pages', 'Actions/Dashboard/Content/PageStoreAction'))
72
+ guard(route.delete('/pages/{id}', 'Actions/Dashboard/Content/PageDestroyAction'))
73
+
74
+ // No store route: comments arrive from readers, the dashboard only moderates.
75
+ guard(route.get('/comments', 'Actions/Dashboard/Content/CommentIndexAction'))
76
+ guard(route.patch('/comments/{id}', 'Actions/Dashboard/Content/CommentUpdateAction'))
77
+ guard(route.delete('/comments/{id}', 'Actions/Dashboard/Content/CommentDestroyAction'))
78
+
79
+ route.get('/ci/status', 'Actions/Dashboard/Ci/StatusAction')
80
+ // CI drilldown (stacksjs/stacks#1848): per-repo run history + per-run
81
+ // job detail. On-demand reads so the polled snapshot stays cheap.
82
+ // `name` is the URL-meaningful identifier here; bun-router segments
83
+ // route on per-param basis so the `runs/{runId}/jobs` form doesn't
84
+ // conflict with the `runs?limit=N` collection form.
85
+ route.get('/ci/repos/{owner}/{name}/runs', 'Actions/Dashboard/Ci/RepoRunsAction')
86
+ route.get('/ci/repos/{owner}/{name}/runs/{runId}/jobs', 'Actions/Dashboard/Ci/RepoRunJobsAction')
87
+ // Runner-pressure history for the sparkline (stacksjs/stacks#1850).
88
+ // Only useful when `ci.alerts.enabled` is on — otherwise no samples
89
+ // have been recorded.
90
+ route.get('/ci/runner-history', 'Actions/Dashboard/Ci/RunnerHistoryAction')
91
+
92
+ // RBAC management surface (stacksjs/stacks#1845).
93
+ //
94
+ // These endpoints can assign any role to any user (privilege
95
+ // escalation) and enumerate users, so they are wrapped in `guard()`:
96
+ // unauthenticated in local/dev (the dashboard gates client-side via
97
+ // `useRole().isAdmin()`), but `auth` + `role:admin` enforced server-side
98
+ // in every non-local env (see the guard definition at the top of file).
99
+ guard(route.get('/rbac/roles', 'Actions/Dashboard/Rbac/RolesIndexAction'))
100
+ guard(route.post('/rbac/roles', 'Actions/Dashboard/Rbac/RoleStoreAction'))
101
+ guard(route.delete('/rbac/roles/{name}', 'Actions/Dashboard/Rbac/RoleDestroyAction'))
102
+
103
+ guard(route.get('/rbac/permissions', 'Actions/Dashboard/Rbac/PermissionsIndexAction'))
104
+ guard(route.post('/rbac/permissions', 'Actions/Dashboard/Rbac/PermissionStoreAction'))
105
+ guard(route.delete('/rbac/permissions/{name}', 'Actions/Dashboard/Rbac/PermissionDestroyAction'))
106
+
107
+ guard(route.get('/rbac/users', 'Actions/Dashboard/Rbac/UsersListAction'))
108
+ guard(route.get('/rbac/users/{id}/roles', 'Actions/Dashboard/Rbac/UserRolesShowAction'))
109
+ guard(route.post('/rbac/users/{id}/roles', 'Actions/Dashboard/Rbac/UserRolesSyncAction'))
110
+
111
+ guard(route.get('/rbac/roles/{name}/permissions', 'Actions/Dashboard/Rbac/RolePermissionsShowAction'))
112
+ guard(route.post('/rbac/roles/{name}/permissions', 'Actions/Dashboard/Rbac/RolePermissionsSyncAction'))
113
+ // RBAC identity endpoint (stacksjs/stacks#1843). Returns the
114
+ // authenticated user + their role names so the dashboard's `useRole()`
115
+ // composable can gate dev-mode surfaces. Tolerates unauthenticated
116
+ // requests — see the action for the soft-fallback shape.
117
+ route.get('/auth/me', 'Actions/Dashboard/Auth/MeAction')
118
+
119
+ // Kanban surface (stacksjs/stacks#1846). Phase 1: read-only.
120
+ //
121
+ // Phase 2 lands write endpoints under the same prefix:
122
+ // POST /kanban/boards — store
123
+ // PATCH /kanban/boards/{id} — update
124
+ // DELETE /kanban/boards/{id} — destroy
125
+ // POST /kanban/boards/reorder — bulk position update
126
+ // POST /kanban/columns — store
127
+ // PATCH /kanban/columns/{id} — update
128
+ // POST /kanban/columns/reorder — bulk position update
129
+ // POST /kanban/cards — store
130
+ // PATCH /kanban/cards/{id} — update (incl. column move)
131
+ // POST /kanban/cards/reorder — bulk position update
132
+ //
133
+ // No role middleware applied yet — the route group at the file level
134
+ // doesn't enforce auth (matches the rest of /api/dashboard/*). The
135
+ // page itself wraps content in `useRole().isDev()` so non-dev users
136
+ // see an empty surface when the dashboard ever gets exposed beyond
137
+ // localhost. Tighten with `.middleware('auth').middleware('role:admin,dev')`
138
+ // when the dashboard is deployed multi-tenant.
139
+ // Reads (Phase 1)
140
+ route.get('/kanban/boards', 'Actions/Dashboard/Kanban/BoardsIndexAction')
141
+ route.get('/kanban/boards/{id}', 'Actions/Dashboard/Kanban/BoardShowAction')
142
+
143
+ // Writes (Phase 2). The reorder endpoints are POST not PATCH because
144
+ // their semantics — "here's the full new state of this slice of the
145
+ // board" — match the resource-replacement intent better than PATCH's
146
+ // "apply this delta" verb. They also accept a body shape that PATCH
147
+ // verbs don't conventionally carry.
148
+ route.post('/kanban/boards', 'Actions/Dashboard/Kanban/BoardStoreAction')
149
+ route.patch('/kanban/boards/{id}', 'Actions/Dashboard/Kanban/BoardUpdateAction')
150
+ route.delete('/kanban/boards/{id}', 'Actions/Dashboard/Kanban/BoardDestroyAction')
151
+ route.post('/kanban/boards/reorder', 'Actions/Dashboard/Kanban/BoardsReorderAction')
152
+
153
+ route.post('/kanban/columns', 'Actions/Dashboard/Kanban/ColumnStoreAction')
154
+ route.patch('/kanban/columns/{id}', 'Actions/Dashboard/Kanban/ColumnUpdateAction')
155
+ route.delete('/kanban/columns/{id}', 'Actions/Dashboard/Kanban/ColumnDestroyAction')
156
+ route.post('/kanban/columns/reorder', 'Actions/Dashboard/Kanban/ColumnsReorderAction')
157
+
158
+ route.post('/kanban/cards', 'Actions/Dashboard/Kanban/CardStoreAction')
159
+ route.patch('/kanban/cards/{id}', 'Actions/Dashboard/Kanban/CardUpdateAction')
160
+ route.delete('/kanban/cards/{id}', 'Actions/Dashboard/Kanban/CardDestroyAction')
161
+ route.post('/kanban/cards/reorder', 'Actions/Dashboard/Kanban/CardsReorderAction')
162
+
163
+ // Phase 3 — card detail + labels + assignees + comments.
164
+ //
165
+ // The card-show endpoint is the only "single card with everything"
166
+ // read; the boards/{id} response already embeds labels + assignees
167
+ // per card for the kanban view, so the modal only fetches when
168
+ // opening (or for direct URL access).
169
+ route.get('/kanban/cards/{id}', 'Actions/Dashboard/Kanban/CardShowAction')
170
+
171
+ // Label CRUD. No reorder endpoint — labels are board-scoped tag
172
+ // palettes, no inherent order beyond alphabetical.
173
+ route.post('/kanban/labels', 'Actions/Dashboard/Kanban/LabelStoreAction')
174
+ route.patch('/kanban/labels/{id}', 'Actions/Dashboard/Kanban/LabelUpdateAction')
175
+ route.delete('/kanban/labels/{id}', 'Actions/Dashboard/Kanban/LabelDestroyAction')
176
+
177
+ // Card-pivot sync endpoints. Sync semantics: pass the full new
178
+ // list, the action diffs against current state. Single-shot calls
179
+ // from the modal's label/assignee pickers.
180
+ route.post('/kanban/cards/{id}/labels', 'Actions/Dashboard/Kanban/CardLabelsSyncAction')
181
+ route.post('/kanban/cards/{id}/assignees', 'Actions/Dashboard/Kanban/CardAssigneesSyncAction')
182
+
183
+ // Comments. Append-only thread: store + destroy, no edit yet — the
184
+ // history-preservation argument outweighs the "fix a typo" argument
185
+ // until someone explicitly asks for editing.
186
+ route.post('/kanban/cards/{id}/comments', 'Actions/Dashboard/Kanban/CardCommentStoreAction')
187
+ route.delete('/kanban/comments/{id}', 'Actions/Dashboard/Kanban/CardCommentDestroyAction')
188
+
189
+ // Lightweight user list for the assignee picker. Distinct from the
190
+ // wider `/api/dashboard/users` (Data section consumer) — the
191
+ // picker only needs id/name/email.
192
+ route.get('/kanban/users', 'Actions/Dashboard/Kanban/UsersListAction')
193
+
194
+ // Commerce dashboard stats. Same Action that backs the auth'd
195
+ // `/api/commerce/dashboard` — exposed here without the auth gate so
196
+ // the dev-mode dashboard surface in `views/dashboard/commerce/dashboard/`
197
+ // can load it directly. The page itself stays admin-gated via
198
+ // `useRole().isAdmin()` (stacksjs/stacks#1838).
199
+ route.get('/commerce/stats', 'Actions/Dashboard/Commerce/CommerceDashboardAction')
200
+
201
+ // Models overview. Walks `app/Models/` + framework default models,
202
+ // counts rows for each, returns grouped JSON for the
203
+ // `views/dashboard/models/index.stx` page (stacksjs/stacks#1838).
204
+ guard(route.get('/models', 'Actions/Dashboard/Models/ModelsIndexAction'))
205
+
206
+ // Per-model row view — first 50 rows + column list, for the
207
+ // dynamic `views/dashboard/models/[model].stx` page. ORM path
208
+ // first, raw SQLite fallback if no model file matches the slug.
209
+ guard(route.get('/models/{slug}', 'Actions/Dashboard/Models/ModelShowAction'))
210
+
211
+ // Markdown blog admin — the write side of the BunPress blog that /blog
212
+ // renders from `content/blog/*.md` (storage/framework/core/actions/src/blog.ts).
213
+ // Backs `views/dashboard/content/blog/index.stx`.
214
+ //
215
+ // Every route is guarded: the writes put files on disk, and the reads expose
216
+ // unpublished drafts. Neither belongs on an unauthenticated endpoint once the
217
+ // dashboard is reachable off localhost.
218
+ guard(route.get('/blog', 'Actions/Blog/BlogIndexAction'))
219
+ guard(route.get('/blog/{slug}', 'Actions/Blog/BlogShowAction'))
220
+ guard(route.post('/blog', 'Actions/Blog/BlogStoreAction'))
221
+ guard(route.patch('/blog/{slug}', 'Actions/Blog/BlogUpdateAction'))
222
+ guard(route.delete('/blog/{slug}', 'Actions/Blog/BlogDestroyAction'))
223
+
224
+ // Email inbox — real inbound mailbox data from S3.
225
+ //
226
+ // Reads expose recipient/subject metadata; the mark-read endpoint mutates
227
+ // the per-mailbox inbox.json index. Both are guarded outside local/dev
228
+ // because they touch real mailbox state and PII.
229
+ guard(route.get('/email/inbox', 'Actions/Dashboard/Email/InboxIndexAction'))
230
+ guard(route.get('/email/inbox/{id}', 'Actions/Dashboard/Email/InboxShowAction'))
231
+ guard(route.get('/email/stats', 'Actions/Dashboard/Email/InboxStatsAction'))
232
+ guard(route.post('/email/read', 'Actions/Dashboard/Email/InboxMarkReadAction'))
233
+ })