alepha 0.20.1 → 0.20.3

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 (393) hide show
  1. package/README.md +0 -1
  2. package/assets/swagger-ui/swagger-ui-bundle.js +1 -1
  3. package/assets/swagger-ui/swagger-ui.css +1 -1
  4. package/dist/api/audits/index.browser.js +49 -0
  5. package/dist/api/audits/index.browser.js.map +1 -1
  6. package/dist/api/audits/index.d.ts.map +1 -1
  7. package/dist/api/audits/index.js +49 -0
  8. package/dist/api/audits/index.js.map +1 -1
  9. package/dist/api/files/index.d.ts.map +1 -1
  10. package/dist/api/files/index.js +2 -1
  11. package/dist/api/files/index.js.map +1 -1
  12. package/dist/api/jobs/index.browser.js +64 -148
  13. package/dist/api/jobs/index.browser.js.map +1 -1
  14. package/dist/api/jobs/index.d.ts +339 -600
  15. package/dist/api/jobs/index.d.ts.map +1 -1
  16. package/dist/api/jobs/index.js +605 -1012
  17. package/dist/api/jobs/index.js.map +1 -1
  18. package/dist/api/keys/index.js.map +1 -1
  19. package/dist/api/notifications/index.d.ts +79 -27
  20. package/dist/api/notifications/index.d.ts.map +1 -1
  21. package/dist/api/notifications/index.js +90 -23
  22. package/dist/api/notifications/index.js.map +1 -1
  23. package/dist/api/organizations/index.d.ts.map +1 -1
  24. package/dist/api/parameters/index.browser.js +37 -0
  25. package/dist/api/parameters/index.browser.js.map +1 -1
  26. package/dist/api/parameters/index.d.ts +4 -65
  27. package/dist/api/parameters/index.d.ts.map +1 -1
  28. package/dist/api/parameters/index.js +37 -0
  29. package/dist/api/parameters/index.js.map +1 -1
  30. package/dist/api/payments/index.d.ts +2 -1
  31. package/dist/api/payments/index.d.ts.map +1 -1
  32. package/dist/api/payments/index.js +4 -2
  33. package/dist/api/payments/index.js.map +1 -1
  34. package/dist/api/users/index.d.ts +225 -5199
  35. package/dist/api/users/index.d.ts.map +1 -1
  36. package/dist/api/users/index.js +15 -11
  37. package/dist/api/users/index.js.map +1 -1
  38. package/dist/api/verifications/index.d.ts.map +1 -1
  39. package/dist/api/verifications/index.js +4 -2
  40. package/dist/api/verifications/index.js.map +1 -1
  41. package/dist/bucket/index.js +5 -1
  42. package/dist/bucket/index.js.map +1 -1
  43. package/dist/bucket/index.workerd.js +5 -1
  44. package/dist/bucket/index.workerd.js.map +1 -1
  45. package/dist/cache/core/index.js.map +1 -1
  46. package/dist/cache/core/index.workerd.js.map +1 -1
  47. package/dist/captcha/index.js.map +1 -1
  48. package/dist/cli/core/index.d.ts +225 -11681
  49. package/dist/cli/core/index.d.ts.map +1 -1
  50. package/dist/cli/core/index.js +732 -257
  51. package/dist/cli/core/index.js.map +1 -1
  52. package/dist/cli/devtools/index.js +7 -1
  53. package/dist/cli/devtools/index.js.map +1 -1
  54. package/dist/cli/platform/index.d.ts +65 -63
  55. package/dist/cli/platform/index.d.ts.map +1 -1
  56. package/dist/cli/platform/index.js +140 -27
  57. package/dist/cli/platform/index.js.map +1 -1
  58. package/dist/cli/vendor/index.js +15 -0
  59. package/dist/cli/vendor/index.js.map +1 -1
  60. package/dist/command/index.d.ts +1 -1
  61. package/dist/command/index.js +1 -1
  62. package/dist/command/index.js.map +1 -1
  63. package/dist/core/index.browser.js +6 -0
  64. package/dist/core/index.browser.js.map +1 -1
  65. package/dist/core/index.d.ts +8 -8
  66. package/dist/core/index.d.ts.map +1 -1
  67. package/dist/core/index.js +6 -0
  68. package/dist/core/index.js.map +1 -1
  69. package/dist/core/index.native.js +6 -0
  70. package/dist/core/index.native.js.map +1 -1
  71. package/dist/core/index.workerd.js +6 -0
  72. package/dist/core/index.workerd.js.map +1 -1
  73. package/dist/crypto/index.js.map +1 -1
  74. package/dist/datetime/index.js.map +1 -1
  75. package/dist/email/core/index.js.map +1 -1
  76. package/dist/email/smtp/index.js +2 -10522
  77. package/dist/email/smtp/index.js.map +1 -1
  78. package/dist/fake/index.d.ts +4 -8085
  79. package/dist/fake/index.d.ts.map +1 -1
  80. package/dist/fake/index.js +3 -33554
  81. package/dist/fake/index.js.map +1 -1
  82. package/dist/lock/core/index.js.map +1 -1
  83. package/dist/lock/redis/index.js.map +1 -1
  84. package/dist/logger/index.js +32 -1
  85. package/dist/logger/index.js.map +1 -1
  86. package/dist/mcp/index.js +5 -1
  87. package/dist/mcp/index.js.map +1 -1
  88. package/dist/orm/core/index.browser.js +1 -361
  89. package/dist/orm/core/index.browser.js.map +1 -1
  90. package/dist/orm/core/index.bun.js +14 -406
  91. package/dist/orm/core/index.bun.js.map +1 -1
  92. package/dist/orm/core/index.d.ts +96 -5117
  93. package/dist/orm/core/index.d.ts.map +1 -1
  94. package/dist/orm/core/index.js +23 -419
  95. package/dist/orm/core/index.js.map +1 -1
  96. package/dist/orm/postgres/index.bun.js +17 -20
  97. package/dist/orm/postgres/index.bun.js.map +1 -1
  98. package/dist/orm/postgres/index.d.ts +2 -613
  99. package/dist/orm/postgres/index.d.ts.map +1 -1
  100. package/dist/orm/postgres/index.js +17 -20
  101. package/dist/orm/postgres/index.js.map +1 -1
  102. package/dist/react/core/index.js.map +1 -1
  103. package/dist/react/form/index.d.ts +60 -1
  104. package/dist/react/form/index.d.ts.map +1 -1
  105. package/dist/react/form/index.js +86 -1
  106. package/dist/react/form/index.js.map +1 -1
  107. package/dist/react/head/index.browser.js +16 -1
  108. package/dist/react/head/index.browser.js.map +1 -1
  109. package/dist/react/head/index.d.ts +6 -0
  110. package/dist/react/head/index.d.ts.map +1 -1
  111. package/dist/react/head/index.js +16 -1
  112. package/dist/react/head/index.js.map +1 -1
  113. package/dist/react/i18n/index.js.map +1 -1
  114. package/dist/react/intro/index.js +22 -17
  115. package/dist/react/intro/index.js.map +1 -1
  116. package/dist/react/router/index.browser.js +78 -12
  117. package/dist/react/router/index.browser.js.map +1 -1
  118. package/dist/react/router/index.d.ts +57 -13
  119. package/dist/react/router/index.d.ts.map +1 -1
  120. package/dist/react/router/index.js +102 -14
  121. package/dist/react/router/index.js.map +1 -1
  122. package/dist/react/testing/index.d.ts +1 -411
  123. package/dist/react/testing/index.d.ts.map +1 -1
  124. package/dist/react/testing/index.js +13 -12293
  125. package/dist/react/testing/index.js.map +1 -1
  126. package/dist/react/ui/index.d.ts +124 -0
  127. package/dist/react/ui/index.d.ts.map +1 -0
  128. package/dist/react/ui/index.js +209 -0
  129. package/dist/react/ui/index.js.map +1 -0
  130. package/dist/react/websocket/index.js.map +1 -1
  131. package/dist/redis/index.js.map +1 -1
  132. package/dist/router/index.d.ts +13 -13
  133. package/dist/router/index.d.ts.map +1 -1
  134. package/dist/router/index.js +45 -32
  135. package/dist/router/index.js.map +1 -1
  136. package/dist/scheduler/index.d.ts +1 -83
  137. package/dist/scheduler/index.d.ts.map +1 -1
  138. package/dist/scheduler/index.js +2 -391
  139. package/dist/scheduler/index.js.map +1 -1
  140. package/dist/scheduler/index.workerd.js +2 -391
  141. package/dist/scheduler/index.workerd.js.map +1 -1
  142. package/dist/security/index.browser.js.map +1 -1
  143. package/dist/security/index.d.ts +2 -325
  144. package/dist/security/index.d.ts.map +1 -1
  145. package/dist/security/index.js +3 -1362
  146. package/dist/security/index.js.map +1 -1
  147. package/dist/server/auth/index.d.ts +1 -1054
  148. package/dist/server/auth/index.d.ts.map +1 -1
  149. package/dist/server/auth/index.js +16 -1224
  150. package/dist/server/auth/index.js.map +1 -1
  151. package/dist/server/cookies/index.js.map +1 -1
  152. package/dist/server/core/index.browser.js.map +1 -1
  153. package/dist/server/core/index.d.ts +1 -4
  154. package/dist/server/core/index.d.ts.map +1 -1
  155. package/dist/server/core/index.js +19 -4
  156. package/dist/server/core/index.js.map +1 -1
  157. package/dist/server/links/index.browser.js.map +1 -1
  158. package/dist/server/links/index.js.map +1 -1
  159. package/dist/server/metrics/index.d.ts +1 -514
  160. package/dist/server/metrics/index.d.ts.map +1 -1
  161. package/dist/server/metrics/index.js +4 -4356
  162. package/dist/server/metrics/index.js.map +1 -1
  163. package/dist/server/rate-limit/index.js.map +1 -1
  164. package/dist/server/static/index.js.map +1 -1
  165. package/dist/server/swagger/index.js +1 -1
  166. package/dist/server/swagger/index.js.map +1 -1
  167. package/dist/sms/index.js.map +1 -1
  168. package/dist/system/index.browser.js.map +1 -1
  169. package/dist/system/index.d.ts.map +1 -1
  170. package/dist/system/index.js +1 -0
  171. package/dist/system/index.js.map +1 -1
  172. package/dist/system/index.workerd.js.map +1 -1
  173. package/dist/topic/core/index.js +1 -1
  174. package/dist/topic/core/index.js.map +1 -1
  175. package/dist/websocket/index.browser.js +21 -0
  176. package/dist/websocket/index.browser.js.map +1 -1
  177. package/dist/websocket/index.js +21 -0
  178. package/dist/websocket/index.js.map +1 -1
  179. package/package.json +23 -37
  180. package/src/api/files/__tests__/FileController.spec.ts +1 -1
  181. package/src/api/files/jobs/FileJobs.ts +2 -1
  182. package/src/api/jobs/__tests__/$job.spec.ts +320 -2867
  183. package/src/api/jobs/controllers/AdminJobController.ts +29 -138
  184. package/src/api/jobs/entities/jobExecutionEntity.ts +27 -19
  185. package/src/api/jobs/index.browser.ts +5 -7
  186. package/src/api/jobs/index.ts +23 -51
  187. package/src/api/jobs/primitives/$job.ts +66 -58
  188. package/src/api/jobs/providers/JobProvider.ts +561 -566
  189. package/src/api/jobs/providers/JobQueueProvider.ts +18 -19
  190. package/src/api/jobs/schemas/jobConfigAtom.ts +20 -23
  191. package/src/api/jobs/schemas/jobExecutionQuerySchema.ts +3 -27
  192. package/src/api/jobs/schemas/jobExecutionResourceSchema.ts +5 -7
  193. package/src/api/jobs/schemas/jobRegistrationSchema.ts +7 -4
  194. package/src/api/jobs/schemas/triggerJobSchema.ts +0 -1
  195. package/src/api/jobs/services/JobService.ts +90 -483
  196. package/src/api/notifications/controllers/AdminNotificationController.ts +19 -12
  197. package/src/api/notifications/index.ts +7 -4
  198. package/src/api/notifications/jobs/NotificationJobs.ts +83 -12
  199. package/src/api/payments/services/PaymentService.ts +4 -2
  200. package/src/api/users/__tests__/UserJobs.spec.ts +10 -49
  201. package/src/api/users/audits/UserAudits.ts +3 -1
  202. package/src/api/users/buckets/UserBuckets.ts +2 -1
  203. package/src/api/users/index.ts +1 -4
  204. package/src/api/users/jobs/UserJobs.ts +5 -4
  205. package/src/api/users/schemas/userQuerySchema.ts +0 -1
  206. package/src/api/users/services/UserService.ts +1 -5
  207. package/src/api/verifications/__tests__/CodeVerification.spec.ts +14 -0
  208. package/src/api/verifications/__tests__/LinkVerification.spec.ts +14 -0
  209. package/src/api/verifications/jobs/VerificationJobs.ts +2 -1
  210. package/src/api/verifications/services/VerificationService.ts +1 -0
  211. package/src/cli/core/__tests__/init.spec.ts +209 -1
  212. package/src/cli/core/commands/init.ts +9 -9
  213. package/src/cli/core/services/PackageManagerUtils.ts +22 -12
  214. package/src/cli/core/services/ProjectScaffolder.ts +300 -70
  215. package/src/cli/core/tasks/BuildDockerTask.ts +9 -10
  216. package/src/cli/core/tasks/BuildServerTask.ts +8 -0
  217. package/src/cli/core/templates/agentMd.ts +2 -8
  218. package/src/cli/core/templates/apiIndexTs.ts +22 -14
  219. package/src/cli/core/templates/componentsJsonTs.ts +39 -0
  220. package/src/cli/core/templates/mainCss.ts +2 -36
  221. package/src/cli/core/templates/saasAdminLayoutTsx.ts +77 -0
  222. package/src/cli/core/templates/saasAdminPagesTsx.ts +26 -0
  223. package/src/cli/core/templates/saasAuthLayoutTsx.ts +20 -0
  224. package/src/cli/core/templates/saasAuthPagesTsx.ts +62 -0
  225. package/src/cli/core/templates/saasRealmProviderTs.ts +46 -0
  226. package/src/cli/core/templates/vitestConfigTs.ts +17 -0
  227. package/src/cli/core/templates/webAppRouterTs.ts +102 -82
  228. package/src/cli/core/templates/webIndexTs.ts +23 -1
  229. package/src/cli/platform/__tests__/CloudflareAdapter.spec.ts +22 -71
  230. package/src/cli/platform/__tests__/SecretsCommand.spec.ts +2 -0
  231. package/src/cli/platform/adapters/CloudflareAdapter.ts +12 -11
  232. package/src/cli/platform/atoms/platformOptions.ts +9 -0
  233. package/src/cli/platform/schemas/cloudflare.ts +3 -2
  234. package/src/cli/platform/services/CloudflareApi.ts +164 -25
  235. package/src/cli/platform/services/WranglerApi.ts +0 -17
  236. package/src/command/providers/CliProvider.ts +1 -1
  237. package/src/core/Alepha.ts +9 -0
  238. package/src/core/interfaces/Service.ts +3 -1
  239. package/src/core/providers/TypeProvider.ts +1 -1
  240. package/src/logger/services/Logger.ts +1 -1
  241. package/src/mcp/__tests__/$resource.spec.ts +1 -1
  242. package/src/mcp/__tests__/$tool.spec.ts +1 -1
  243. package/src/mcp/__tests__/McpServerProvider.spec.ts +1 -1
  244. package/src/orm/__tests__/$repository-tests.ts +1 -0
  245. package/src/orm/__tests__/orm-next-tests.ts +2 -67
  246. package/src/orm/__tests__/orm-next.spec.ts +0 -21
  247. package/src/orm/core/index.shared.ts +0 -2
  248. package/src/orm/core/index.ts +1 -2
  249. package/src/orm/core/primitives/$repository.ts +3 -6
  250. package/src/orm/core/providers/drivers/DatabaseProvider.ts +0 -5
  251. package/src/orm/core/providers/drivers/NodeSqliteProvider.ts +11 -13
  252. package/src/orm/core/services/ModelBuilder.ts +1 -13
  253. package/src/orm/core/services/Repository.ts +1 -42
  254. package/src/orm/core/services/SqliteModelBuilder.ts +2 -33
  255. package/src/orm/postgres/services/PostgresModelBuilder.ts +10 -45
  256. package/src/react/form/index.ts +2 -0
  257. package/src/react/form/services/parseField.ts +163 -0
  258. package/src/react/form/services/prettyName.ts +19 -0
  259. package/src/react/head/providers/BrowserHeadProvider.ts +31 -10
  260. package/src/react/intro/components/GettingStartedAuthSlide.tsx +11 -4
  261. package/src/react/router/__tests__/ReactBrowserProvider.browser.spec.ts +213 -2
  262. package/src/react/router/primitives/$page.ts +35 -12
  263. package/src/react/router/providers/ReactBrowserProvider.ts +73 -0
  264. package/src/react/router/providers/ReactBrowserRouterProvider.ts +1 -1
  265. package/src/react/router/providers/ReactPreloadProvider.ts +1 -1
  266. package/src/react/router/providers/ReactServerProvider.ts +1 -0
  267. package/src/react/ui/atoms/uiAtom.ts +28 -0
  268. package/src/react/ui/components/ColorScheme.tsx +36 -0
  269. package/src/react/ui/hooks/useColorMode.ts +49 -0
  270. package/src/react/ui/hooks/useSidebarState.ts +26 -0
  271. package/src/react/ui/hooks/useTheme.ts +22 -0
  272. package/src/react/ui/index.ts +35 -0
  273. package/src/react/ui/services/UiPersistence.ts +41 -0
  274. package/src/router/TemplatedPathParser.ts +50 -51
  275. package/src/router/__tests__/RouterProvider.spec.ts +62 -0
  276. package/src/router/__tests__/TemplatedPathParser.spec.ts +18 -0
  277. package/src/router/providers/RouterProvider.ts +10 -5
  278. package/src/scheduler/providers/CronProvider.ts +1 -1
  279. package/src/security/primitives/$basicAuth.ts +1 -1
  280. package/src/server/auth/providers/ServerAuthProvider.ts +5 -1
  281. package/src/server/core/interfaces/ServerRequest.ts +1 -0
  282. package/src/server/core/providers/ServerProvider.ts +1 -1
  283. package/src/server/core/providers/ServerRouterProvider.ts +2 -2
  284. package/src/server/core/services/HttpClient.ts +1 -1
  285. package/src/server/swagger/providers/ServerSwaggerProvider.ts +1 -1
  286. package/src/system/providers/NodeShellProvider.ts +1 -0
  287. package/src/topic/core/providers/TopicProvider.ts +1 -1
  288. package/dist/api/invitations/index.d.ts +0 -790
  289. package/dist/api/invitations/index.d.ts.map +0 -1
  290. package/dist/api/invitations/index.js +0 -662
  291. package/dist/api/invitations/index.js.map +0 -1
  292. package/dist/api/issues/index.d.ts +0 -810
  293. package/dist/api/issues/index.d.ts.map +0 -1
  294. package/dist/api/issues/index.js +0 -444
  295. package/dist/api/issues/index.js.map +0 -1
  296. package/dist/api/subscriptions/index.d.ts +0 -1692
  297. package/dist/api/subscriptions/index.d.ts.map +0 -1
  298. package/dist/api/subscriptions/index.js +0 -1867
  299. package/dist/api/subscriptions/index.js.map +0 -1
  300. package/dist/api/workflows/index.browser.js +0 -246
  301. package/dist/api/workflows/index.browser.js.map +0 -1
  302. package/dist/api/workflows/index.d.ts +0 -1618
  303. package/dist/api/workflows/index.d.ts.map +0 -1
  304. package/dist/api/workflows/index.js +0 -1495
  305. package/dist/api/workflows/index.js.map +0 -1
  306. package/dist/react/testing/chunk-DBEY4PJZ.js +0 -16
  307. package/src/api/invitations/__tests__/InvitationService.spec.ts +0 -439
  308. package/src/api/invitations/controllers/AdminInvitationController.ts +0 -86
  309. package/src/api/invitations/controllers/InvitationController.ts +0 -84
  310. package/src/api/invitations/entities/invitations.ts +0 -33
  311. package/src/api/invitations/index.ts +0 -58
  312. package/src/api/invitations/jobs/InvitationJobs.ts +0 -37
  313. package/src/api/invitations/providers/InvitationProvider.ts +0 -45
  314. package/src/api/invitations/schemas/createInvitationSchema.ts +0 -12
  315. package/src/api/invitations/schemas/invitationConfigAtom.ts +0 -20
  316. package/src/api/invitations/schemas/invitationQuerySchema.ts +0 -15
  317. package/src/api/invitations/schemas/invitationResourceSchema.ts +0 -6
  318. package/src/api/invitations/schemas/invitationWithResourceInfoSchema.ts +0 -22
  319. package/src/api/invitations/schemas/myInvitationsQuerySchema.ts +0 -10
  320. package/src/api/invitations/services/InvitationService.ts +0 -556
  321. package/src/api/issues/__tests__/IssueService.spec.ts +0 -263
  322. package/src/api/issues/controllers/AdminIssueController.ts +0 -149
  323. package/src/api/issues/controllers/IssueController.ts +0 -44
  324. package/src/api/issues/entities/issues.ts +0 -49
  325. package/src/api/issues/index.ts +0 -50
  326. package/src/api/issues/schemas/createIssueSchema.ts +0 -13
  327. package/src/api/issues/schemas/issueConfigAtom.ts +0 -13
  328. package/src/api/issues/schemas/issueQuerySchema.ts +0 -18
  329. package/src/api/issues/schemas/issueResourceSchema.ts +0 -6
  330. package/src/api/issues/schemas/myIssueQuerySchema.ts +0 -10
  331. package/src/api/issues/schemas/updateIssueSchema.ts +0 -13
  332. package/src/api/issues/services/IssueService.ts +0 -264
  333. package/src/api/jobs/__tests__/$job-middleware.spec.ts +0 -126
  334. package/src/api/jobs/__tests__/JobService.spec.ts +0 -31
  335. package/src/api/jobs/entities/jobExecutionLogEntity.ts +0 -13
  336. package/src/api/jobs/schemas/jobActivitySchema.ts +0 -15
  337. package/src/api/jobs/schemas/jobCronInfoSchema.ts +0 -22
  338. package/src/api/jobs/schemas/jobExecutionDetailResourceSchema.ts +0 -20
  339. package/src/api/jobs/schemas/jobFailureSchema.ts +0 -9
  340. package/src/api/jobs/schemas/jobQueueDepthSchema.ts +0 -14
  341. package/src/api/jobs/schemas/jobStatsSchema.ts +0 -14
  342. package/src/api/jobs/services/JobService-tests.ts +0 -157
  343. package/src/api/subscriptions/__tests__/BillingService.spec.ts +0 -218
  344. package/src/api/subscriptions/__tests__/SubscriptionService.spec.ts +0 -278
  345. package/src/api/subscriptions/controllers/AdminSubscriptionController.ts +0 -212
  346. package/src/api/subscriptions/controllers/SubscriptionController.ts +0 -189
  347. package/src/api/subscriptions/entities/subscriptionEvents.ts +0 -54
  348. package/src/api/subscriptions/entities/subscriptions.ts +0 -68
  349. package/src/api/subscriptions/index.ts +0 -133
  350. package/src/api/subscriptions/jobs/SubscriptionJobs.ts +0 -382
  351. package/src/api/subscriptions/middleware/$requireLimit.ts +0 -50
  352. package/src/api/subscriptions/middleware/$requirePlan.ts +0 -49
  353. package/src/api/subscriptions/notifications/SubscriptionNotifications.ts +0 -110
  354. package/src/api/subscriptions/schemas/cancelSubscriptionSchema.ts +0 -8
  355. package/src/api/subscriptions/schemas/changePlanSchema.ts +0 -9
  356. package/src/api/subscriptions/schemas/createSubscriptionSchema.ts +0 -11
  357. package/src/api/subscriptions/schemas/entitlementsSchema.ts +0 -21
  358. package/src/api/subscriptions/schemas/mrrSchema.ts +0 -13
  359. package/src/api/subscriptions/schemas/planDefinitionSchema.ts +0 -71
  360. package/src/api/subscriptions/schemas/planResourceSchema.ts +0 -25
  361. package/src/api/subscriptions/schemas/subscriptionEventResourceSchema.ts +0 -8
  362. package/src/api/subscriptions/schemas/subscriptionQuerySchema.ts +0 -19
  363. package/src/api/subscriptions/schemas/subscriptionResourceSchema.ts +0 -6
  364. package/src/api/subscriptions/schemas/subscriptionSettingsSchema.ts +0 -32
  365. package/src/api/subscriptions/schemas/subscriptionStatsSchema.ts +0 -23
  366. package/src/api/subscriptions/services/BillingService.ts +0 -437
  367. package/src/api/subscriptions/services/SubscriptionConfig.ts +0 -56
  368. package/src/api/subscriptions/services/SubscriptionService.ts +0 -867
  369. package/src/api/subscriptions/services/UsageService.ts +0 -118
  370. package/src/api/workflows/__tests__/$workflow.spec.ts +0 -616
  371. package/src/api/workflows/controllers/AdminWorkflowController.ts +0 -191
  372. package/src/api/workflows/entities/workflowExecutions.ts +0 -74
  373. package/src/api/workflows/entities/workflowStepExecutions.ts +0 -74
  374. package/src/api/workflows/entities/workflowStepLogs.ts +0 -13
  375. package/src/api/workflows/index.browser.ts +0 -22
  376. package/src/api/workflows/index.ts +0 -115
  377. package/src/api/workflows/jobs/WorkflowJobs.ts +0 -77
  378. package/src/api/workflows/primitives/$workflow.ts +0 -202
  379. package/src/api/workflows/providers/WorkflowProvider.ts +0 -1284
  380. package/src/api/workflows/schemas/workflowActivitySchema.ts +0 -15
  381. package/src/api/workflows/schemas/workflowConfigAtom.ts +0 -51
  382. package/src/api/workflows/schemas/workflowExecutionDetailSchema.ts +0 -18
  383. package/src/api/workflows/schemas/workflowExecutionQuerySchema.ts +0 -26
  384. package/src/api/workflows/schemas/workflowExecutionResourceSchema.ts +0 -30
  385. package/src/api/workflows/schemas/workflowRegistrationSchema.ts +0 -26
  386. package/src/api/workflows/schemas/workflowStatsSchema.ts +0 -16
  387. package/src/api/workflows/schemas/workflowStepExecutionResourceSchema.ts +0 -15
  388. package/src/api/workflows/services/WorkflowService.ts +0 -382
  389. package/src/cli/core/templates/apiAppSecurityTs.ts +0 -43
  390. package/src/cli/core/templates/webAdminDashboardTsx.ts +0 -17
  391. package/src/orm/core/__tests__/parseQueryString.spec.ts +0 -196
  392. package/src/orm/core/helpers/parseQueryString.ts +0 -502
  393. package/src/orm/core/primitives/$view.ts +0 -88
@@ -1,616 +0,0 @@
1
- import { Alepha, t } from "alepha";
2
- import { $repository } from "alepha/orm";
3
- import { AlephaOrmPostgres } from "alepha/orm/postgres";
4
- import { describe, expect, it, vi } from "vitest";
5
- import {
6
- $workflow,
7
- AlephaApiWorkflows,
8
- workflowExecutions,
9
- workflowStepExecutions,
10
- } from "../index.ts";
11
-
12
- // -----------------------------------------------------------------------------------------------------------------
13
-
14
- describe("$workflow", () => {
15
- // ----- Basic functionality -----
16
-
17
- describe("basic functionality", () => {
18
- it("should start and complete a single-step workflow", async () => {
19
- const handler = vi.fn();
20
-
21
- class App {
22
- repo = $repository(workflowExecutions);
23
- stepRepo = $repository(workflowStepExecutions);
24
- myWorkflow = $workflow({
25
- schema: t.object({ orderId: t.uuid() }),
26
- steps: [
27
- {
28
- name: "processOrder",
29
- handler: async ({ payload }) => {
30
- handler(payload);
31
- return { processed: true };
32
- },
33
- },
34
- ],
35
- });
36
- }
37
-
38
- const alepha = Alepha.create().with(AlephaOrmPostgres);
39
- alepha.with(AlephaApiWorkflows);
40
- alepha.with(App);
41
- await alepha.start();
42
-
43
- const app = alepha.inject(App);
44
- const orderId = crypto.randomUUID();
45
- const executionId = await app.myWorkflow.start({ orderId });
46
-
47
- await vi.waitFor(async () => {
48
- const exec = await app.repo.findById(executionId);
49
- expect(exec?.status).toBe("completed");
50
- });
51
-
52
- expect(handler).toHaveBeenCalledTimes(1);
53
- expect(handler).toHaveBeenCalledWith(
54
- expect.objectContaining({ orderId }),
55
- );
56
-
57
- // Verify step is completed with result
58
- const steps = await app.stepRepo.findMany({
59
- where: { workflowExecutionId: { eq: executionId } },
60
- });
61
- expect(steps).toHaveLength(1);
62
- expect(steps[0].status).toBe("completed");
63
- expect(steps[0].result).toEqual({ processed: true });
64
- });
65
-
66
- it("should execute multi-step workflow in order", async () => {
67
- const order: string[] = [];
68
-
69
- class App {
70
- repo = $repository(workflowExecutions);
71
- myWorkflow = $workflow({
72
- schema: t.object({ id: t.text() }),
73
- steps: [
74
- {
75
- name: "step1",
76
- handler: async () => {
77
- order.push("step1");
78
- return { a: 1 };
79
- },
80
- },
81
- {
82
- name: "step2",
83
- handler: async ({ results }) => {
84
- order.push("step2");
85
- return { b: 2, fromStep1: results.step1 };
86
- },
87
- },
88
- {
89
- name: "step3",
90
- handler: async ({ results }) => {
91
- order.push("step3");
92
- return { c: 3, fromStep2: results.step2 };
93
- },
94
- },
95
- ],
96
- });
97
- }
98
-
99
- const alepha = Alepha.create().with(AlephaOrmPostgres);
100
- alepha.with(AlephaApiWorkflows);
101
- alepha.with(App);
102
- await alepha.start();
103
-
104
- const app = alepha.inject(App);
105
- const executionId = await app.myWorkflow.start({ id: "test" });
106
-
107
- await vi.waitFor(async () => {
108
- const exec = await app.repo.findById(executionId);
109
- expect(exec?.status).toBe("completed");
110
- });
111
-
112
- expect(order).toEqual(["step1", "step2", "step3"]);
113
- });
114
-
115
- it("should pass accumulated results between steps", async () => {
116
- let step2Results: Record<string, unknown> = {};
117
-
118
- class App {
119
- repo = $repository(workflowExecutions);
120
- myWorkflow = $workflow({
121
- schema: t.object({ value: t.text() }),
122
- steps: [
123
- {
124
- name: "first",
125
- handler: async () => ({ key: "from-first" }),
126
- },
127
- {
128
- name: "second",
129
- handler: async ({ results }) => {
130
- step2Results = results;
131
- },
132
- },
133
- ],
134
- });
135
- }
136
-
137
- const alepha = Alepha.create().with(AlephaOrmPostgres);
138
- alepha.with(AlephaApiWorkflows);
139
- alepha.with(App);
140
- await alepha.start();
141
-
142
- const app = alepha.inject(App);
143
- const executionId = await app.myWorkflow.start({ value: "test" });
144
-
145
- await vi.waitFor(async () => {
146
- const exec = await app.repo.findById(executionId);
147
- expect(exec?.status).toBe("completed");
148
- });
149
-
150
- expect(step2Results.first).toEqual({ key: "from-first" });
151
- });
152
-
153
- it("should use ClassName.propertyKey as workflow name", async () => {
154
- class OrderService {
155
- processOrder = $workflow({
156
- schema: t.object({ id: t.text() }),
157
- steps: [{ name: "step1", handler: async () => {} }],
158
- });
159
- }
160
-
161
- const alepha = Alepha.create().with(AlephaOrmPostgres);
162
- alepha.with(AlephaApiWorkflows);
163
- alepha.with(OrderService);
164
- await alepha.start();
165
-
166
- const app = alepha.inject(OrderService);
167
- expect(app.processOrder.name).toBe("OrderService.processOrder");
168
- });
169
- });
170
-
171
- // ----- Compensation (saga pattern) -----
172
-
173
- describe("compensation", () => {
174
- it("should compensate completed steps in reverse order on failure", async () => {
175
- const compensations: string[] = [];
176
-
177
- class App {
178
- repo = $repository(workflowExecutions);
179
- myWorkflow = $workflow({
180
- schema: t.object({ id: t.text() }),
181
- onError: "compensate",
182
- steps: [
183
- {
184
- name: "step1",
185
- handler: async () => ({ id: "r1" }),
186
- compensate: async () => {
187
- compensations.push("step1");
188
- },
189
- },
190
- {
191
- name: "step2",
192
- handler: async () => ({ id: "r2" }),
193
- compensate: async () => {
194
- compensations.push("step2");
195
- },
196
- },
197
- {
198
- name: "step3",
199
- handler: async () => {
200
- throw new Error("step3 failed");
201
- },
202
- compensate: async () => {
203
- compensations.push("step3");
204
- },
205
- },
206
- ],
207
- });
208
- }
209
-
210
- const alepha = Alepha.create().with(AlephaOrmPostgres);
211
- alepha.with(AlephaApiWorkflows);
212
- alepha.with(App);
213
- await alepha.start();
214
-
215
- const app = alepha.inject(App);
216
- const executionId = await app.myWorkflow.start({ id: "test" });
217
-
218
- await vi.waitFor(async () => {
219
- const exec = await app.repo.findById(executionId);
220
- expect(exec?.status).toBe("compensated");
221
- });
222
-
223
- // step3 never completed so no compensation for it
224
- // step2 and step1 compensated in reverse order
225
- expect(compensations).toEqual(["step2", "step1"]);
226
- });
227
-
228
- it("should mark as failed when onError is fail", async () => {
229
- class App {
230
- repo = $repository(workflowExecutions);
231
- myWorkflow = $workflow({
232
- schema: t.object({ id: t.text() }),
233
- onError: "fail",
234
- steps: [
235
- {
236
- name: "step1",
237
- handler: async () => ({ ok: true }),
238
- },
239
- {
240
- name: "step2",
241
- handler: async () => {
242
- throw new Error("boom");
243
- },
244
- },
245
- ],
246
- });
247
- }
248
-
249
- const alepha = Alepha.create().with(AlephaOrmPostgres);
250
- alepha.with(AlephaApiWorkflows);
251
- alepha.with(App);
252
- await alepha.start();
253
-
254
- const app = alepha.inject(App);
255
- const executionId = await app.myWorkflow.start({ id: "test" });
256
-
257
- await vi.waitFor(async () => {
258
- const exec = await app.repo.findById(executionId);
259
- expect(exec?.status).toBe("failed");
260
- });
261
-
262
- const exec = await app.repo.findById(executionId);
263
- expect(exec?.error).toBe("boom");
264
- expect(exec?.errorStep).toBe("step2");
265
- });
266
- });
267
-
268
- // ----- Retry -----
269
-
270
- describe("retry", () => {
271
- it("should retry a step on failure with retries configured", async () => {
272
- let callCount = 0;
273
-
274
- class App {
275
- repo = $repository(workflowExecutions);
276
- stepRepo = $repository(workflowStepExecutions);
277
- myWorkflow = $workflow({
278
- schema: t.object({ id: t.text() }),
279
- steps: [
280
- {
281
- name: "flaky",
282
- retry: { retries: 2, backoff: [10, "millisecond"] },
283
- handler: async () => {
284
- callCount++;
285
- if (callCount < 3) throw new Error(`fail #${callCount}`);
286
- return { ok: true };
287
- },
288
- },
289
- ],
290
- });
291
- }
292
-
293
- const alepha = Alepha.create().with(AlephaOrmPostgres);
294
- alepha.with(AlephaApiWorkflows);
295
- alepha.with(App);
296
- await alepha.start();
297
-
298
- const app = alepha.inject(App);
299
- const executionId = await app.myWorkflow.start({ id: "test" });
300
-
301
- await vi.waitFor(
302
- async () => {
303
- const exec = await app.repo.findById(executionId);
304
- expect(exec?.status).toBe("completed");
305
- },
306
- { timeout: 10_000 },
307
- );
308
-
309
- expect(callCount).toBe(3);
310
- });
311
- });
312
-
313
- // ----- Conditional steps -----
314
-
315
- describe("conditional steps", () => {
316
- it("should skip steps when condition returns false", async () => {
317
- const executed: string[] = [];
318
-
319
- class App {
320
- repo = $repository(workflowExecutions);
321
- stepRepo = $repository(workflowStepExecutions);
322
- myWorkflow = $workflow({
323
- schema: t.object({ skipMiddle: t.boolean() }),
324
- steps: [
325
- {
326
- name: "step1",
327
- handler: async () => {
328
- executed.push("step1");
329
- return { value: 1 };
330
- },
331
- },
332
- {
333
- name: "step2",
334
- when: ({ payload }) => !payload.skipMiddle,
335
- handler: async () => {
336
- executed.push("step2");
337
- return { value: 2 };
338
- },
339
- },
340
- {
341
- name: "step3",
342
- handler: async () => {
343
- executed.push("step3");
344
- return { value: 3 };
345
- },
346
- },
347
- ],
348
- });
349
- }
350
-
351
- const alepha = Alepha.create().with(AlephaOrmPostgres);
352
- alepha.with(AlephaApiWorkflows);
353
- alepha.with(App);
354
- await alepha.start();
355
-
356
- const app = alepha.inject(App);
357
- const executionId = await app.myWorkflow.start({ skipMiddle: true });
358
-
359
- await vi.waitFor(async () => {
360
- const exec = await app.repo.findById(executionId);
361
- expect(exec?.status).toBe("completed");
362
- });
363
-
364
- expect(executed).toEqual(["step1", "step3"]);
365
-
366
- // Verify step2 was skipped
367
- const steps = await app.stepRepo.findMany({
368
- where: { workflowExecutionId: { eq: executionId } },
369
- orderBy: { column: "stepIndex", direction: "asc" },
370
- });
371
- expect(steps[1].status).toBe("skipped");
372
- });
373
- });
374
-
375
- // ----- Cancel -----
376
-
377
- describe("cancel", () => {
378
- it("should cancel a pending workflow", async () => {
379
- class App {
380
- repo = $repository(workflowExecutions);
381
- stepRepo = $repository(workflowStepExecutions);
382
- myWorkflow = $workflow({
383
- schema: t.object({ id: t.text() }),
384
- steps: [
385
- {
386
- name: "long",
387
- handler: async ({ signal }) => {
388
- await new Promise<void>((resolve) => {
389
- const check = () => {
390
- if (signal.aborted) resolve();
391
- else setTimeout(check, 10);
392
- };
393
- check();
394
- });
395
- },
396
- },
397
- ],
398
- });
399
- }
400
-
401
- const alepha = Alepha.create().with(AlephaOrmPostgres);
402
- alepha.with(AlephaApiWorkflows);
403
- alepha.with(App);
404
- await alepha.start();
405
-
406
- const app = alepha.inject(App);
407
- const executionId = await app.myWorkflow.start({ id: "test" });
408
-
409
- // Wait for it to be running
410
- await vi.waitFor(async () => {
411
- const steps = await app.stepRepo.findMany({
412
- where: {
413
- workflowExecutionId: { eq: executionId },
414
- status: { eq: "running" },
415
- },
416
- });
417
- expect(steps).toHaveLength(1);
418
- });
419
-
420
- await app.myWorkflow.cancel(executionId);
421
-
422
- await vi.waitFor(async () => {
423
- const exec = await app.repo.findById(executionId);
424
- expect(exec?.status).toBe("cancelled");
425
- });
426
- });
427
- });
428
-
429
- // ----- Retry (admin action) -----
430
-
431
- describe("admin retry", () => {
432
- it("should retry a failed workflow from the failed step", async () => {
433
- let callCount = 0;
434
-
435
- class App {
436
- repo = $repository(workflowExecutions);
437
- myWorkflow = $workflow({
438
- schema: t.object({ id: t.text() }),
439
- onError: "fail",
440
- steps: [
441
- {
442
- name: "step1",
443
- handler: async () => ({ ok: true }),
444
- },
445
- {
446
- name: "step2",
447
- handler: async () => {
448
- callCount++;
449
- if (callCount === 1) throw new Error("transient");
450
- return { ok: true };
451
- },
452
- },
453
- ],
454
- });
455
- }
456
-
457
- const alepha = Alepha.create().with(AlephaOrmPostgres);
458
- alepha.with(AlephaApiWorkflows);
459
- alepha.with(App);
460
- await alepha.start();
461
-
462
- const app = alepha.inject(App);
463
- const executionId = await app.myWorkflow.start({ id: "test" });
464
-
465
- await vi.waitFor(async () => {
466
- const exec = await app.repo.findById(executionId);
467
- expect(exec?.status).toBe("failed");
468
- });
469
-
470
- // Retry from the failed step
471
- await app.myWorkflow.retry(executionId);
472
-
473
- await vi.waitFor(async () => {
474
- const exec = await app.repo.findById(executionId);
475
- expect(exec?.status).toBe("completed");
476
- });
477
-
478
- expect(callCount).toBe(2);
479
- });
480
- });
481
-
482
- // ----- Restart -----
483
-
484
- describe("restart", () => {
485
- it("should create a new execution from the same payload", async () => {
486
- let callCount = 0;
487
-
488
- class App {
489
- repo = $repository(workflowExecutions);
490
- myWorkflow = $workflow({
491
- schema: t.object({ id: t.text() }),
492
- onError: "fail",
493
- steps: [
494
- {
495
- name: "step1",
496
- handler: async () => {
497
- callCount++;
498
- if (callCount === 1) throw new Error("fail first time");
499
- return { ok: true };
500
- },
501
- },
502
- ],
503
- });
504
- }
505
-
506
- const alepha = Alepha.create().with(AlephaOrmPostgres);
507
- alepha.with(AlephaApiWorkflows);
508
- alepha.with(App);
509
- await alepha.start();
510
-
511
- const app = alepha.inject(App);
512
- const executionId = await app.myWorkflow.start({ id: "test" });
513
-
514
- await vi.waitFor(async () => {
515
- const exec = await app.repo.findById(executionId);
516
- expect(exec?.status).toBe("failed");
517
- });
518
-
519
- const newId = await app.myWorkflow.restart(executionId);
520
- expect(newId).not.toBe(executionId);
521
-
522
- await vi.waitFor(async () => {
523
- const exec = await app.repo.findById(newId);
524
- expect(exec?.status).toBe("completed");
525
- });
526
-
527
- expect(callCount).toBe(2);
528
- });
529
- });
530
-
531
- // ----- Events -----
532
-
533
- describe("events", () => {
534
- it("should emit workflow lifecycle events", async () => {
535
- const events: string[] = [];
536
-
537
- class App {
538
- repo = $repository(workflowExecutions);
539
- myWorkflow = $workflow({
540
- schema: t.object({ id: t.text() }),
541
- steps: [{ name: "step1", handler: async () => ({ ok: true }) }],
542
- });
543
- }
544
-
545
- const alepha = Alepha.create().with(AlephaOrmPostgres);
546
- alepha.with(AlephaApiWorkflows);
547
- alepha.with(App);
548
- alepha.events.on("workflow:started", () => {
549
- events.push("started");
550
- });
551
- alepha.events.on("workflow:step:begin", () => {
552
- events.push("step:begin");
553
- });
554
- alepha.events.on("workflow:step:completed", () => {
555
- events.push("step:completed");
556
- });
557
- alepha.events.on("workflow:completed", () => {
558
- events.push("completed");
559
- });
560
- await alepha.start();
561
-
562
- const app = alepha.inject(App);
563
- const executionId = await app.myWorkflow.start({ id: "test" });
564
-
565
- await vi.waitFor(async () => {
566
- const exec = await app.repo.findById(executionId);
567
- expect(exec?.status).toBe("completed");
568
- });
569
-
570
- expect(events).toContain("started");
571
- expect(events).toContain("step:begin");
572
- expect(events).toContain("step:completed");
573
- expect(events).toContain("completed");
574
- });
575
- });
576
-
577
- // ----- Deduplication -----
578
-
579
- describe("deduplication", () => {
580
- it("should return existing execution for same key", async () => {
581
- class App {
582
- repo = $repository(workflowExecutions);
583
- myWorkflow = $workflow({
584
- schema: t.object({ id: t.text() }),
585
- steps: [{ name: "step1", handler: async () => ({ ok: true }) }],
586
- });
587
- }
588
-
589
- const alepha = Alepha.create().with(AlephaOrmPostgres);
590
- alepha.with(AlephaApiWorkflows);
591
- alepha.with(App);
592
- await alepha.start();
593
-
594
- const app = alepha.inject(App);
595
-
596
- // First start with key — creates a new execution
597
- const id1 = await app.myWorkflow.start(
598
- { id: "test" },
599
- { key: "dedup-key" },
600
- );
601
-
602
- // Wait for completion (key is cleared on completion)
603
- await vi.waitFor(async () => {
604
- const exec = await app.repo.findById(id1);
605
- expect(exec?.status).toBe("completed");
606
- });
607
-
608
- // Second start with same key after completion — creates NEW execution
609
- const id2 = await app.myWorkflow.start(
610
- { id: "test" },
611
- { key: "dedup-key" },
612
- );
613
- expect(id2).not.toBe(id1);
614
- });
615
- });
616
- });