alepha 0.15.1 → 0.15.2

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 (507) hide show
  1. package/dist/api/audits/index.d.ts +342 -365
  2. package/dist/api/audits/index.d.ts.map +1 -1
  3. package/dist/api/audits/index.js +10 -33
  4. package/dist/api/audits/index.js.map +1 -1
  5. package/dist/api/files/index.d.ts +180 -173
  6. package/dist/api/files/index.d.ts.map +1 -1
  7. package/dist/api/files/index.js +10 -3
  8. package/dist/api/files/index.js.map +1 -1
  9. package/dist/api/jobs/index.d.ts +162 -155
  10. package/dist/api/jobs/index.d.ts.map +1 -1
  11. package/dist/api/jobs/index.js +10 -3
  12. package/dist/api/jobs/index.js.map +1 -1
  13. package/dist/api/keys/index.d.ts +413 -0
  14. package/dist/api/keys/index.d.ts.map +1 -0
  15. package/dist/api/keys/index.js +476 -0
  16. package/dist/api/keys/index.js.map +1 -0
  17. package/dist/api/notifications/index.d.ts +10 -4
  18. package/dist/api/notifications/index.d.ts.map +1 -1
  19. package/dist/api/notifications/index.js +10 -4
  20. package/dist/api/notifications/index.js.map +1 -1
  21. package/dist/api/parameters/index.d.ts +294 -301
  22. package/dist/api/parameters/index.d.ts.map +1 -1
  23. package/dist/api/parameters/index.js +30 -37
  24. package/dist/api/parameters/index.js.map +1 -1
  25. package/dist/api/users/index.d.ts +1079 -769
  26. package/dist/api/users/index.d.ts.map +1 -1
  27. package/dist/api/users/index.js +2534 -218
  28. package/dist/api/users/index.js.map +1 -1
  29. package/dist/api/verifications/index.d.ts +10 -4
  30. package/dist/api/verifications/index.d.ts.map +1 -1
  31. package/dist/api/verifications/index.js +12 -4
  32. package/dist/api/verifications/index.js.map +1 -1
  33. package/dist/batch/index.d.ts +20 -40
  34. package/dist/batch/index.d.ts.map +1 -1
  35. package/dist/batch/index.js +31 -44
  36. package/dist/batch/index.js.map +1 -1
  37. package/dist/bucket/index.d.ts +432 -8
  38. package/dist/bucket/index.d.ts.map +1 -1
  39. package/dist/bucket/index.js +1856 -12
  40. package/dist/bucket/index.js.map +1 -1
  41. package/dist/cache/core/index.d.ts +179 -7
  42. package/dist/cache/core/index.d.ts.map +1 -1
  43. package/dist/cache/core/index.js +213 -7
  44. package/dist/cache/core/index.js.map +1 -1
  45. package/dist/cache/redis/index.d.ts +1 -0
  46. package/dist/cache/redis/index.d.ts.map +1 -1
  47. package/dist/cache/redis/index.js +4 -0
  48. package/dist/cache/redis/index.js.map +1 -1
  49. package/dist/cli/index.d.ts +488 -5612
  50. package/dist/cli/index.d.ts.map +1 -1
  51. package/dist/cli/index.js +2326 -311
  52. package/dist/cli/index.js.map +1 -1
  53. package/dist/command/index.d.ts +194 -46
  54. package/dist/command/index.d.ts.map +1 -1
  55. package/dist/command/index.js +1995 -60
  56. package/dist/command/index.js.map +1 -1
  57. package/dist/core/index.browser.js +42 -19
  58. package/dist/core/index.browser.js.map +1 -1
  59. package/dist/core/index.d.ts +34 -13
  60. package/dist/core/index.d.ts.map +1 -1
  61. package/dist/core/index.js +62 -19
  62. package/dist/core/index.js.map +1 -1
  63. package/dist/core/index.native.js +42 -19
  64. package/dist/core/index.native.js.map +1 -1
  65. package/dist/datetime/index.d.ts +15 -0
  66. package/dist/datetime/index.d.ts.map +1 -1
  67. package/dist/datetime/index.js +15 -0
  68. package/dist/datetime/index.js.map +1 -1
  69. package/dist/email/index.d.ts +315 -20
  70. package/dist/email/index.d.ts.map +1 -1
  71. package/dist/email/index.js +1852 -7
  72. package/dist/email/index.js.map +1 -1
  73. package/dist/fake/index.d.ts +90 -8
  74. package/dist/fake/index.d.ts.map +1 -1
  75. package/dist/fake/index.js +91 -20
  76. package/dist/fake/index.js.map +1 -1
  77. package/dist/lock/core/index.d.ts +11 -4
  78. package/dist/lock/core/index.d.ts.map +1 -1
  79. package/dist/lock/core/index.js +11 -4
  80. package/dist/lock/core/index.js.map +1 -1
  81. package/dist/logger/index.d.ts +17 -66
  82. package/dist/logger/index.d.ts.map +1 -1
  83. package/dist/logger/index.js +14 -63
  84. package/dist/logger/index.js.map +1 -1
  85. package/dist/mcp/index.d.ts +15 -35
  86. package/dist/mcp/index.d.ts.map +1 -1
  87. package/dist/mcp/index.js +12 -35
  88. package/dist/mcp/index.js.map +1 -1
  89. package/dist/orm/index.browser.js +3 -3
  90. package/dist/orm/index.browser.js.map +1 -1
  91. package/dist/orm/index.bun.js +7 -4
  92. package/dist/orm/index.bun.js.map +1 -1
  93. package/dist/orm/index.d.ts +514 -540
  94. package/dist/orm/index.d.ts.map +1 -1
  95. package/dist/orm/index.js +24 -49
  96. package/dist/orm/index.js.map +1 -1
  97. package/dist/queue/core/index.d.ts +18 -10
  98. package/dist/queue/core/index.d.ts.map +1 -1
  99. package/dist/queue/core/index.js +14 -6
  100. package/dist/queue/core/index.js.map +1 -1
  101. package/dist/react/auth/index.browser.js +108 -0
  102. package/dist/react/auth/index.browser.js.map +1 -0
  103. package/dist/react/auth/index.d.ts +100 -0
  104. package/dist/react/auth/index.d.ts.map +1 -0
  105. package/dist/react/auth/index.js +145 -0
  106. package/dist/react/auth/index.js.map +1 -0
  107. package/dist/react/core/index.d.ts +469 -0
  108. package/dist/react/core/index.d.ts.map +1 -0
  109. package/dist/react/core/index.js +464 -0
  110. package/dist/react/core/index.js.map +1 -0
  111. package/dist/react/form/index.d.ts +232 -0
  112. package/dist/react/form/index.d.ts.map +1 -0
  113. package/dist/react/form/index.js +432 -0
  114. package/dist/react/form/index.js.map +1 -0
  115. package/dist/react/head/index.browser.js +423 -0
  116. package/dist/react/head/index.browser.js.map +1 -0
  117. package/dist/react/head/index.d.ts +288 -0
  118. package/dist/react/head/index.d.ts.map +1 -0
  119. package/dist/react/head/index.js +465 -0
  120. package/dist/react/head/index.js.map +1 -0
  121. package/dist/react/i18n/index.d.ts +175 -0
  122. package/dist/react/i18n/index.d.ts.map +1 -0
  123. package/dist/react/i18n/index.js +224 -0
  124. package/dist/react/i18n/index.js.map +1 -0
  125. package/dist/react/router/index.browser.js +1980 -0
  126. package/dist/react/router/index.browser.js.map +1 -0
  127. package/dist/react/router/index.d.ts +2068 -0
  128. package/dist/react/router/index.d.ts.map +1 -0
  129. package/dist/react/router/index.js +4932 -0
  130. package/dist/react/router/index.js.map +1 -0
  131. package/dist/react/websocket/index.d.ts +117 -0
  132. package/dist/react/websocket/index.d.ts.map +1 -0
  133. package/dist/react/websocket/index.js +107 -0
  134. package/dist/react/websocket/index.js.map +1 -0
  135. package/dist/redis/index.bun.js +4 -0
  136. package/dist/redis/index.bun.js.map +1 -1
  137. package/dist/redis/index.d.ts +22 -25
  138. package/dist/redis/index.d.ts.map +1 -1
  139. package/dist/redis/index.js +16 -25
  140. package/dist/redis/index.js.map +1 -1
  141. package/dist/retry/index.d.ts +11 -2
  142. package/dist/retry/index.d.ts.map +1 -1
  143. package/dist/retry/index.js +11 -2
  144. package/dist/retry/index.js.map +1 -1
  145. package/dist/scheduler/index.d.ts +11 -2
  146. package/dist/scheduler/index.d.ts.map +1 -1
  147. package/dist/scheduler/index.js +11 -2
  148. package/dist/scheduler/index.js.map +1 -1
  149. package/dist/security/index.d.ts +110 -19
  150. package/dist/security/index.d.ts.map +1 -1
  151. package/dist/security/index.js +157 -26
  152. package/dist/security/index.js.map +1 -1
  153. package/dist/server/auth/index.d.ts +179 -174
  154. package/dist/server/auth/index.d.ts.map +1 -1
  155. package/dist/server/auth/index.js +12 -7
  156. package/dist/server/auth/index.js.map +1 -1
  157. package/dist/server/cache/index.d.ts +7 -22
  158. package/dist/server/cache/index.d.ts.map +1 -1
  159. package/dist/server/cache/index.js +7 -22
  160. package/dist/server/cache/index.js.map +1 -1
  161. package/dist/server/compress/index.d.ts +10 -2
  162. package/dist/server/compress/index.d.ts.map +1 -1
  163. package/dist/server/compress/index.js +10 -2
  164. package/dist/server/compress/index.js.map +1 -1
  165. package/dist/server/cookies/index.d.ts +40 -16
  166. package/dist/server/cookies/index.d.ts.map +1 -1
  167. package/dist/server/cookies/index.js +7 -5
  168. package/dist/server/cookies/index.js.map +1 -1
  169. package/dist/server/core/index.d.ts +115 -14
  170. package/dist/server/core/index.d.ts.map +1 -1
  171. package/dist/server/core/index.js +231 -14
  172. package/dist/server/core/index.js.map +1 -1
  173. package/dist/server/cors/index.d.ts +13 -23
  174. package/dist/server/cors/index.d.ts.map +1 -1
  175. package/dist/server/cors/index.js +7 -21
  176. package/dist/server/cors/index.js.map +1 -1
  177. package/dist/server/health/index.d.ts +25 -19
  178. package/dist/server/health/index.d.ts.map +1 -1
  179. package/dist/server/health/index.js +8 -2
  180. package/dist/server/health/index.js.map +1 -1
  181. package/dist/server/helmet/index.d.ts +11 -3
  182. package/dist/server/helmet/index.d.ts.map +1 -1
  183. package/dist/server/helmet/index.js +11 -3
  184. package/dist/server/helmet/index.js.map +1 -1
  185. package/dist/server/links/index.d.ts +50 -45
  186. package/dist/server/links/index.d.ts.map +1 -1
  187. package/dist/server/links/index.js +11 -6
  188. package/dist/server/links/index.js.map +1 -1
  189. package/dist/server/metrics/index.d.ts +10 -3
  190. package/dist/server/metrics/index.d.ts.map +1 -1
  191. package/dist/server/metrics/index.js +10 -3
  192. package/dist/server/metrics/index.js.map +1 -1
  193. package/dist/server/multipart/index.d.ts +9 -3
  194. package/dist/server/multipart/index.d.ts.map +1 -1
  195. package/dist/server/multipart/index.js +9 -3
  196. package/dist/server/multipart/index.js.map +1 -1
  197. package/dist/server/proxy/index.d.ts +8 -2
  198. package/dist/server/proxy/index.d.ts.map +1 -1
  199. package/dist/server/proxy/index.js +8 -2
  200. package/dist/server/proxy/index.js.map +1 -1
  201. package/dist/server/rate-limit/index.d.ts +30 -35
  202. package/dist/server/rate-limit/index.d.ts.map +1 -1
  203. package/dist/server/rate-limit/index.js +18 -55
  204. package/dist/server/rate-limit/index.js.map +1 -1
  205. package/dist/server/static/index.d.ts +137 -4
  206. package/dist/server/static/index.d.ts.map +1 -1
  207. package/dist/server/static/index.js +1848 -5
  208. package/dist/server/static/index.js.map +1 -1
  209. package/dist/server/swagger/index.d.ts +301 -6
  210. package/dist/server/swagger/index.d.ts.map +1 -1
  211. package/dist/server/swagger/index.js +1849 -6
  212. package/dist/server/swagger/index.js.map +1 -1
  213. package/dist/sms/index.d.ts +301 -7
  214. package/dist/sms/index.d.ts.map +1 -1
  215. package/dist/sms/index.js +1851 -7
  216. package/dist/sms/index.js.map +1 -1
  217. package/dist/system/index.browser.js +496 -0
  218. package/dist/system/index.browser.js.map +1 -0
  219. package/dist/{file → system}/index.d.ts +335 -16
  220. package/dist/system/index.d.ts.map +1 -0
  221. package/dist/{file → system}/index.js +412 -20
  222. package/dist/system/index.js.map +1 -0
  223. package/dist/thread/index.d.ts +11 -2
  224. package/dist/thread/index.d.ts.map +1 -1
  225. package/dist/thread/index.js +11 -2
  226. package/dist/thread/index.js.map +1 -1
  227. package/dist/topic/core/index.d.ts +12 -5
  228. package/dist/topic/core/index.d.ts.map +1 -1
  229. package/dist/topic/core/index.js +12 -5
  230. package/dist/topic/core/index.js.map +1 -1
  231. package/dist/vite/index.d.ts +4 -6271
  232. package/dist/vite/index.d.ts.map +1 -1
  233. package/dist/vite/index.js +8 -3
  234. package/dist/vite/index.js.map +1 -1
  235. package/dist/websocket/index.d.ts +12 -8
  236. package/dist/websocket/index.d.ts.map +1 -1
  237. package/dist/websocket/index.js +12 -8
  238. package/dist/websocket/index.js.map +1 -1
  239. package/package.json +80 -11
  240. package/src/api/audits/index.ts +10 -33
  241. package/src/api/files/__tests__/$bucket.spec.ts +1 -1
  242. package/src/api/files/controllers/AdminFileStatsController.spec.ts +1 -1
  243. package/src/api/files/controllers/FileController.spec.ts +1 -1
  244. package/src/api/files/index.ts +10 -3
  245. package/src/api/files/jobs/FileJobs.spec.ts +1 -1
  246. package/src/api/files/services/FileService.spec.ts +1 -1
  247. package/src/api/jobs/index.ts +10 -3
  248. package/src/api/keys/controllers/AdminApiKeyController.ts +75 -0
  249. package/src/api/keys/controllers/ApiKeyController.ts +103 -0
  250. package/src/api/keys/entities/apiKeyEntity.ts +41 -0
  251. package/src/api/keys/index.ts +49 -0
  252. package/src/api/keys/schemas/adminApiKeyQuerySchema.ts +7 -0
  253. package/src/api/keys/schemas/adminApiKeyResourceSchema.ts +17 -0
  254. package/src/api/keys/schemas/createApiKeyBodySchema.ts +7 -0
  255. package/src/api/keys/schemas/createApiKeyResponseSchema.ts +11 -0
  256. package/src/api/keys/schemas/listApiKeyResponseSchema.ts +15 -0
  257. package/src/api/keys/schemas/revokeApiKeyParamsSchema.ts +5 -0
  258. package/src/api/keys/schemas/revokeApiKeyResponseSchema.ts +5 -0
  259. package/src/api/keys/services/ApiKeyService.spec.ts +553 -0
  260. package/src/api/keys/services/ApiKeyService.ts +306 -0
  261. package/src/api/logs/TODO.md +52 -0
  262. package/src/api/notifications/index.ts +10 -4
  263. package/src/api/parameters/index.ts +9 -30
  264. package/src/api/parameters/primitives/$config.ts +12 -4
  265. package/src/api/parameters/services/ConfigStore.ts +9 -3
  266. package/src/api/users/__tests__/ApiKeys-integration.spec.ts +1035 -0
  267. package/src/api/users/__tests__/ApiKeys.spec.ts +401 -0
  268. package/src/api/users/index.ts +14 -3
  269. package/src/api/users/primitives/$realm.ts +33 -5
  270. package/src/api/users/providers/RealmProvider.ts +1 -12
  271. package/src/api/users/services/SessionService.ts +1 -1
  272. package/src/api/verifications/controllers/VerificationController.ts +2 -0
  273. package/src/api/verifications/index.ts +10 -4
  274. package/src/batch/index.ts +9 -36
  275. package/src/batch/primitives/$batch.ts +0 -8
  276. package/src/batch/providers/BatchProvider.ts +29 -2
  277. package/src/bucket/__tests__/shared.ts +1 -1
  278. package/src/bucket/index.ts +13 -6
  279. package/src/bucket/primitives/$bucket.ts +1 -1
  280. package/src/bucket/providers/LocalFileStorageProvider.ts +1 -1
  281. package/src/bucket/providers/MemoryFileStorageProvider.ts +1 -1
  282. package/src/cache/core/__tests__/shared.ts +30 -0
  283. package/src/cache/core/index.ts +11 -6
  284. package/src/cache/core/primitives/$cache.spec.ts +5 -0
  285. package/src/cache/core/providers/CacheProvider.ts +17 -0
  286. package/src/cache/core/providers/MemoryCacheProvider.ts +300 -1
  287. package/src/cache/redis/__tests__/cache-redis.spec.ts +5 -0
  288. package/src/cache/redis/providers/RedisCacheProvider.ts +9 -0
  289. package/src/cli/apps/AlephaCli.ts +1 -14
  290. package/src/cli/apps/AlephaPackageBuilderCli.ts +1 -1
  291. package/src/cli/commands/build.ts +1 -5
  292. package/src/cli/commands/db.ts +17 -11
  293. package/src/cli/commands/deploy.ts +1 -1
  294. package/src/cli/commands/dev.ts +1 -20
  295. package/src/cli/commands/gen/env.ts +5 -2
  296. package/src/cli/commands/gen/openapi.ts +5 -2
  297. package/src/cli/commands/init.spec.ts +544 -0
  298. package/src/cli/commands/init.ts +89 -55
  299. package/src/cli/commands/lint.ts +7 -1
  300. package/src/cli/commands/typecheck.ts +11 -0
  301. package/src/cli/providers/AppEntryProvider.ts +1 -1
  302. package/src/cli/providers/ViteBuildProvider.ts +8 -50
  303. package/src/cli/providers/ViteDevServerProvider.ts +36 -8
  304. package/src/cli/services/AlephaCliUtils.ts +37 -122
  305. package/src/cli/services/PackageManagerUtils.ts +127 -11
  306. package/src/cli/services/ProjectScaffolder.ts +122 -77
  307. package/src/cli/services/ViteUtils.ts +82 -0
  308. package/src/cli/{assets/claudeMd.ts → templates/agentMd.ts} +32 -24
  309. package/src/cli/templates/gitignore.ts +39 -0
  310. package/src/cli/{assets → templates}/mainCss.ts +11 -2
  311. package/src/cli/templates/mainServerTs.ts +33 -0
  312. package/src/cli/templates/webAppRouterTs.ts +50 -0
  313. package/src/cli/{assets → templates}/webHelloComponentTsx.ts +2 -2
  314. package/src/command/helpers/Runner.spec.ts +4 -0
  315. package/src/command/helpers/Runner.ts +3 -21
  316. package/src/command/index.ts +12 -4
  317. package/src/command/providers/CliProvider.spec.ts +1067 -0
  318. package/src/command/providers/CliProvider.ts +203 -40
  319. package/src/core/Alepha.ts +2 -2
  320. package/src/core/__tests__/Alepha-start.spec.ts +4 -4
  321. package/src/core/helpers/jsonSchemaToTypeBox.spec.ts +771 -0
  322. package/src/core/helpers/jsonSchemaToTypeBox.ts +62 -10
  323. package/src/core/index.shared.ts +1 -0
  324. package/src/core/index.ts +20 -0
  325. package/src/core/providers/EventManager.spec.ts +0 -71
  326. package/src/core/providers/EventManager.ts +3 -15
  327. package/src/core/providers/Json.ts +2 -14
  328. package/src/datetime/index.ts +15 -0
  329. package/src/email/index.ts +10 -5
  330. package/src/email/providers/LocalEmailProvider.spec.ts +1 -1
  331. package/src/email/providers/LocalEmailProvider.ts +1 -1
  332. package/src/fake/__tests__/keyName.example.ts +1 -1
  333. package/src/fake/__tests__/keyName.spec.ts +5 -5
  334. package/src/fake/index.ts +9 -6
  335. package/src/fake/providers/FakeProvider.spec.ts +258 -40
  336. package/src/fake/providers/FakeProvider.ts +133 -19
  337. package/src/lock/core/index.ts +11 -4
  338. package/src/logger/index.ts +17 -66
  339. package/src/mcp/index.ts +10 -27
  340. package/src/mcp/transports/SseMcpTransport.ts +0 -11
  341. package/src/orm/__tests__/PostgresProvider.spec.ts +2 -2
  342. package/src/orm/index.browser.ts +2 -2
  343. package/src/orm/index.bun.ts +4 -2
  344. package/src/orm/index.ts +21 -47
  345. package/src/orm/providers/drivers/BunSqliteProvider.ts +1 -0
  346. package/src/orm/services/Repository.ts +7 -3
  347. package/src/queue/core/index.ts +14 -6
  348. package/src/react/auth/__tests__/$auth.spec.ts +202 -0
  349. package/src/react/auth/hooks/useAuth.ts +32 -0
  350. package/src/react/auth/index.browser.ts +13 -0
  351. package/src/react/auth/index.shared.ts +2 -0
  352. package/src/react/auth/index.ts +48 -0
  353. package/src/react/auth/providers/ReactAuthProvider.ts +16 -0
  354. package/src/react/auth/services/ReactAuth.ts +135 -0
  355. package/src/react/core/__tests__/Router.spec.tsx +169 -0
  356. package/src/react/core/components/ClientOnly.tsx +49 -0
  357. package/src/react/core/components/ErrorBoundary.tsx +73 -0
  358. package/src/react/core/contexts/AlephaContext.ts +7 -0
  359. package/src/react/core/contexts/AlephaProvider.tsx +42 -0
  360. package/src/react/core/hooks/useAction.browser.spec.tsx +569 -0
  361. package/src/react/core/hooks/useAction.ts +480 -0
  362. package/src/react/core/hooks/useAlepha.ts +26 -0
  363. package/src/react/core/hooks/useClient.ts +17 -0
  364. package/src/react/core/hooks/useEvents.ts +51 -0
  365. package/src/react/core/hooks/useInject.ts +12 -0
  366. package/src/react/core/hooks/useStore.ts +52 -0
  367. package/src/react/core/index.ts +90 -0
  368. package/src/react/form/components/FormState.tsx +17 -0
  369. package/src/react/form/errors/FormValidationError.ts +18 -0
  370. package/src/react/form/hooks/useForm.browser.spec.tsx +366 -0
  371. package/src/react/form/hooks/useForm.ts +47 -0
  372. package/src/react/form/hooks/useFormState.ts +130 -0
  373. package/src/react/form/index.ts +44 -0
  374. package/src/react/form/services/FormModel.ts +614 -0
  375. package/src/react/head/helpers/SeoExpander.spec.ts +203 -0
  376. package/src/react/head/helpers/SeoExpander.ts +142 -0
  377. package/src/react/head/hooks/useHead.spec.tsx +288 -0
  378. package/src/react/head/hooks/useHead.ts +62 -0
  379. package/src/react/head/index.browser.ts +26 -0
  380. package/src/react/head/index.ts +44 -0
  381. package/src/react/head/interfaces/Head.ts +105 -0
  382. package/src/react/head/primitives/$head.ts +25 -0
  383. package/src/react/head/providers/BrowserHeadProvider.browser.spec.ts +196 -0
  384. package/src/react/head/providers/BrowserHeadProvider.ts +212 -0
  385. package/src/react/head/providers/HeadProvider.ts +168 -0
  386. package/src/react/head/providers/ServerHeadProvider.ts +31 -0
  387. package/src/react/i18n/__tests__/integration.spec.tsx +239 -0
  388. package/src/react/i18n/components/Localize.spec.tsx +357 -0
  389. package/src/react/i18n/components/Localize.tsx +35 -0
  390. package/src/react/i18n/hooks/useI18n.browser.spec.tsx +438 -0
  391. package/src/react/i18n/hooks/useI18n.ts +18 -0
  392. package/src/react/i18n/index.ts +41 -0
  393. package/src/react/i18n/primitives/$dictionary.ts +69 -0
  394. package/src/react/i18n/providers/I18nProvider.spec.ts +389 -0
  395. package/src/react/i18n/providers/I18nProvider.ts +278 -0
  396. package/src/react/router/__tests__/page-head-browser.browser.spec.ts +95 -0
  397. package/src/react/router/__tests__/page-head.spec.ts +48 -0
  398. package/src/react/router/__tests__/seo-head.spec.ts +125 -0
  399. package/src/react/router/atoms/ssrManifestAtom.ts +58 -0
  400. package/src/react/router/components/ErrorViewer.tsx +872 -0
  401. package/src/react/router/components/Link.tsx +23 -0
  402. package/src/react/router/components/NestedView.tsx +223 -0
  403. package/src/react/router/components/NotFound.tsx +30 -0
  404. package/src/react/router/constants/PAGE_PRELOAD_KEY.ts +6 -0
  405. package/src/react/router/contexts/RouterLayerContext.ts +12 -0
  406. package/src/react/router/errors/Redirection.ts +28 -0
  407. package/src/react/router/hooks/useActive.ts +52 -0
  408. package/src/react/router/hooks/useQueryParams.ts +63 -0
  409. package/src/react/router/hooks/useRouter.ts +20 -0
  410. package/src/react/router/hooks/useRouterState.ts +11 -0
  411. package/src/react/router/index.browser.ts +45 -0
  412. package/src/react/router/index.shared.ts +19 -0
  413. package/src/react/router/index.ts +142 -0
  414. package/src/react/router/primitives/$page.browser.spec.tsx +851 -0
  415. package/src/react/router/primitives/$page.spec.tsx +708 -0
  416. package/src/react/router/primitives/$page.ts +497 -0
  417. package/src/react/router/providers/ReactBrowserProvider.ts +309 -0
  418. package/src/react/router/providers/ReactBrowserRendererProvider.ts +25 -0
  419. package/src/react/router/providers/ReactBrowserRouterProvider.ts +168 -0
  420. package/src/react/router/providers/ReactPageProvider.ts +726 -0
  421. package/src/react/router/providers/ReactServerProvider.spec.tsx +316 -0
  422. package/src/react/router/providers/ReactServerProvider.ts +558 -0
  423. package/src/react/router/providers/ReactServerTemplateProvider.ts +979 -0
  424. package/src/react/router/providers/SSRManifestProvider.ts +334 -0
  425. package/src/react/router/services/ReactPageServerService.ts +48 -0
  426. package/src/react/router/services/ReactPageService.ts +27 -0
  427. package/src/react/router/services/ReactRouter.ts +262 -0
  428. package/src/react/websocket/hooks/useRoom.tsx +242 -0
  429. package/src/react/websocket/index.ts +7 -0
  430. package/src/redis/__tests__/redis.spec.ts +13 -0
  431. package/src/redis/index.ts +9 -25
  432. package/src/redis/providers/BunRedisProvider.ts +9 -0
  433. package/src/redis/providers/NodeRedisProvider.ts +8 -0
  434. package/src/redis/providers/RedisProvider.ts +16 -0
  435. package/src/retry/index.ts +11 -2
  436. package/src/router/index.ts +15 -0
  437. package/src/scheduler/index.ts +11 -2
  438. package/src/security/__tests__/BasicAuth.spec.ts +2 -0
  439. package/src/security/__tests__/ServerSecurityProvider.spec.ts +13 -5
  440. package/src/security/index.ts +15 -10
  441. package/src/security/interfaces/IssuerResolver.ts +27 -0
  442. package/src/security/primitives/$issuer.ts +55 -0
  443. package/src/security/providers/SecurityProvider.ts +179 -0
  444. package/src/security/providers/ServerBasicAuthProvider.ts +6 -2
  445. package/src/security/providers/ServerSecurityProvider.ts +36 -22
  446. package/src/server/auth/index.ts +12 -7
  447. package/src/server/cache/index.ts +7 -22
  448. package/src/server/compress/index.ts +10 -2
  449. package/src/server/cookies/index.ts +7 -5
  450. package/src/server/cookies/primitives/$cookie.ts +33 -11
  451. package/src/server/core/index.ts +16 -6
  452. package/src/server/core/interfaces/ServerRequest.ts +83 -1
  453. package/src/server/core/primitives/$action.spec.ts +1 -1
  454. package/src/server/core/primitives/$action.ts +8 -3
  455. package/src/server/core/providers/NodeHttpServerProvider.ts +9 -3
  456. package/src/server/core/services/ServerRequestParser.spec.ts +520 -0
  457. package/src/server/core/services/ServerRequestParser.ts +306 -13
  458. package/src/server/cors/index.ts +7 -21
  459. package/src/server/cors/primitives/$cors.ts +6 -2
  460. package/src/server/health/index.ts +8 -2
  461. package/src/server/helmet/index.ts +11 -3
  462. package/src/server/links/index.ts +11 -6
  463. package/src/server/metrics/index.ts +10 -3
  464. package/src/server/multipart/index.ts +9 -3
  465. package/src/server/proxy/index.ts +8 -2
  466. package/src/server/rate-limit/index.ts +21 -25
  467. package/src/server/rate-limit/primitives/$rateLimit.ts +6 -2
  468. package/src/server/rate-limit/providers/ServerRateLimitProvider.spec.ts +38 -14
  469. package/src/server/rate-limit/providers/ServerRateLimitProvider.ts +22 -56
  470. package/src/server/static/index.ts +8 -2
  471. package/src/server/static/providers/ServerStaticProvider.ts +1 -1
  472. package/src/server/swagger/index.ts +9 -4
  473. package/src/server/swagger/providers/ServerSwaggerProvider.ts +1 -1
  474. package/src/sms/index.ts +9 -5
  475. package/src/sms/providers/LocalSmsProvider.spec.ts +1 -1
  476. package/src/sms/providers/LocalSmsProvider.ts +1 -1
  477. package/src/system/index.browser.ts +11 -0
  478. package/src/system/index.ts +62 -0
  479. package/src/{file → system}/providers/FileSystemProvider.ts +16 -0
  480. package/src/{file → system}/providers/MemoryFileSystemProvider.ts +116 -3
  481. package/src/system/providers/MemoryShellProvider.ts +164 -0
  482. package/src/{file → system}/providers/NodeFileSystemProvider.spec.ts +2 -2
  483. package/src/{file → system}/providers/NodeFileSystemProvider.ts +36 -0
  484. package/src/system/providers/NodeShellProvider.ts +184 -0
  485. package/src/system/providers/ShellProvider.ts +74 -0
  486. package/src/{file → system}/services/FileDetector.spec.ts +2 -2
  487. package/src/thread/index.ts +11 -2
  488. package/src/topic/core/index.ts +12 -5
  489. package/src/vite/tasks/buildClient.ts +2 -7
  490. package/src/vite/tasks/buildServer.ts +17 -1
  491. package/src/websocket/index.ts +12 -8
  492. package/dist/file/index.d.ts.map +0 -1
  493. package/dist/file/index.js.map +0 -1
  494. package/src/cli/assets/mainServerTs.ts +0 -24
  495. package/src/cli/assets/webAppRouterTs.ts +0 -16
  496. package/src/cli/providers/ViteTemplateProvider.ts +0 -27
  497. package/src/file/index.ts +0 -43
  498. /package/src/cli/{assets → templates}/apiHelloControllerTs.ts +0 -0
  499. /package/src/cli/{assets → templates}/apiIndexTs.ts +0 -0
  500. /package/src/cli/{assets → templates}/biomeJson.ts +0 -0
  501. /package/src/cli/{assets → templates}/dummySpecTs.ts +0 -0
  502. /package/src/cli/{assets → templates}/editorconfig.ts +0 -0
  503. /package/src/cli/{assets → templates}/mainBrowserTs.ts +0 -0
  504. /package/src/cli/{assets → templates}/tsconfigJson.ts +0 -0
  505. /package/src/cli/{assets → templates}/webIndexTs.ts +0 -0
  506. /package/src/{file → system}/errors/FileError.ts +0 -0
  507. /package/src/{file → system}/services/FileDetector.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../node_modules/cron-schedule/dist/utils.js","../../../../node_modules/cron-schedule/dist/cron.js","../../../../node_modules/cron-schedule/dist/cron-parser.js","../../src/scheduler/providers/CronProvider.ts","../../src/scheduler/primitives/$scheduler.ts","../../src/scheduler/constants/CRON.ts","../../src/scheduler/index.ts"],"sourcesContent":["export const TIMEOUT_MAX = 2147483647; // 2^31-1\n/**\n * Creates a new timeout, which can exceed the max timeout limit of 2^31-1.\n * Since multiple timeouts are used internally, the timeoutId used to clear the timeout\n * is returned as a handle (object) and changes whenever the max timeout limit is exceeded.\n * The handle parameter can be ignored, it is used internally for updating the timeoutId\n * in the handle after creating the next timeout.\n */\nexport function longTimeout(fn, timeout, previousHandle) {\n let nextTimeout = timeout;\n let remainingTimeout = 0;\n if (nextTimeout > TIMEOUT_MAX) {\n remainingTimeout = nextTimeout - TIMEOUT_MAX;\n nextTimeout = TIMEOUT_MAX;\n }\n const handle = previousHandle !== null && previousHandle !== void 0 ? previousHandle : {\n timeoutId: undefined,\n };\n handle.timeoutId = setTimeout(() => {\n if (remainingTimeout > 0) {\n longTimeout(fn, remainingTimeout, previousHandle);\n }\n else {\n fn();\n }\n }, nextTimeout);\n return handle;\n}\n/* Extracts second, minute, hour, date, month and the weekday from a date. */\nexport function extractDateElements(date) {\n return {\n second: date.getSeconds(),\n minute: date.getMinutes(),\n hour: date.getHours(),\n day: date.getDate(),\n month: date.getMonth(),\n weekday: date.getDay(),\n year: date.getFullYear(),\n };\n}\n/* Gets the amount of days in the given month (indexed by 0) of the given year. */\nexport function getDaysInMonth(year, month) {\n return new Date(year, month + 1, 0).getDate();\n}\n/* Gets the amount of days from weekday1 to weekday2. */\nexport function getDaysBetweenWeekdays(weekday1, weekday2) {\n if (weekday1 <= weekday2) {\n return weekday2 - weekday1;\n }\n return 6 - weekday1 + weekday2 + 1;\n}\nexport function wrapFunction(fn, errorHandler) {\n return () => {\n try {\n const res = fn();\n if (res instanceof Promise) {\n res.catch((err) => {\n if (errorHandler) {\n errorHandler(err);\n }\n });\n }\n }\n catch (err) {\n if (errorHandler) {\n errorHandler(err);\n }\n }\n };\n}\n//# sourceMappingURL=utils.js.map","import { extractDateElements, getDaysBetweenWeekdays, getDaysInMonth, } from './utils.js';\nexport class Cron {\n constructor({ seconds, minutes, hours, days, months, weekdays, }) {\n // Validate that there are values provided.\n if (!seconds || seconds.size === 0)\n throw new Error('There must be at least one allowed second.');\n if (!minutes || minutes.size === 0)\n throw new Error('There must be at least one allowed minute.');\n if (!hours || hours.size === 0)\n throw new Error('There must be at least one allowed hour.');\n if (!months || months.size === 0)\n throw new Error('There must be at least one allowed month.');\n if ((!weekdays || weekdays.size === 0) && (!days || days.size === 0))\n throw new Error('There must be at least one allowed day or weekday.');\n // Convert set to array and sort in ascending order.\n this.seconds = Array.from(seconds).sort((a, b) => a - b);\n this.minutes = Array.from(minutes).sort((a, b) => a - b);\n this.hours = Array.from(hours).sort((a, b) => a - b);\n this.days = Array.from(days).sort((a, b) => a - b);\n this.months = Array.from(months).sort((a, b) => a - b);\n this.weekdays = Array.from(weekdays).sort((a, b) => a - b);\n // Validate that all values are integers within the constraint.\n const validateData = (name, data, constraint) => {\n if (data.some((x) => typeof x !== 'number' ||\n x % 1 !== 0 ||\n x < constraint.min ||\n x > constraint.max)) {\n throw new Error(`${name} must only consist of integers which are within the range of ${constraint.min} and ${constraint.max}`);\n }\n };\n validateData('seconds', this.seconds, { min: 0, max: 59 });\n validateData('minutes', this.minutes, { min: 0, max: 59 });\n validateData('hours', this.hours, { min: 0, max: 23 });\n validateData('days', this.days, { min: 1, max: 31 });\n validateData('months', this.months, { min: 0, max: 11 });\n validateData('weekdays', this.weekdays, { min: 0, max: 6 });\n // For each element, store a reversed copy in the reversed attribute for finding prev dates.\n this.reversed = {\n seconds: this.seconds.map((x) => x).reverse(),\n minutes: this.minutes.map((x) => x).reverse(),\n hours: this.hours.map((x) => x).reverse(),\n days: this.days.map((x) => x).reverse(),\n months: this.months.map((x) => x).reverse(),\n weekdays: this.weekdays.map((x) => x).reverse(),\n };\n }\n /**\n * Find the next or previous hour, starting from the given start hour that matches the hour constraint.\n * startHour itself might also be allowed.\n */\n findAllowedHour(dir, startHour) {\n return dir === 'next'\n ? this.hours.find((x) => x >= startHour)\n : this.reversed.hours.find((x) => x <= startHour);\n }\n /**\n * Find the next or previous minute, starting from the given start minute that matches the minute constraint.\n * startMinute itself might also be allowed.\n */\n findAllowedMinute(dir, startMinute) {\n return dir === 'next'\n ? this.minutes.find((x) => x >= startMinute)\n : this.reversed.minutes.find((x) => x <= startMinute);\n }\n /**\n * Find the next or previous second, starting from the given start second that matches the second constraint.\n * startSecond itself IS NOT allowed.\n */\n findAllowedSecond(dir, startSecond) {\n return dir === 'next'\n ? this.seconds.find((x) => x > startSecond)\n : this.reversed.seconds.find((x) => x < startSecond);\n }\n /**\n * Find the next or previous time, starting from the given start time that matches the hour, minute\n * and second constraints. startTime itself might also be allowed.\n */\n findAllowedTime(dir, startTime) {\n // Try to find an allowed hour.\n let hour = this.findAllowedHour(dir, startTime.hour);\n if (hour !== undefined) {\n if (hour === startTime.hour) {\n // We found an hour that is the start hour. Try to find an allowed minute.\n let minute = this.findAllowedMinute(dir, startTime.minute);\n if (minute !== undefined) {\n if (minute === startTime.minute) {\n // We found a minute that is the start minute. Try to find an allowed second.\n const second = this.findAllowedSecond(dir, startTime.second);\n if (second !== undefined) {\n // We found a second within the start hour and minute.\n return { hour, minute, second };\n }\n // We did not find a valid second within the start minute. Try to find another minute.\n minute = this.findAllowedMinute(dir, dir === 'next' ? startTime.minute + 1 : startTime.minute - 1);\n if (minute !== undefined) {\n // We found a minute which is not the start minute. Return that minute together with the hour and the first / last allowed second.\n return {\n hour,\n minute,\n second: dir === 'next' ? this.seconds[0] : this.reversed.seconds[0],\n };\n }\n }\n else {\n // We found a minute which is not the start minute. Return that minute together with the hour and the first / last allowed second.\n return {\n hour,\n minute,\n second: dir === 'next' ? this.seconds[0] : this.reversed.seconds[0],\n };\n }\n }\n // We did not find an allowed minute / second combination inside the start hour. Try to find the next / previous allowed hour.\n hour = this.findAllowedHour(dir, dir === 'next' ? startTime.hour + 1 : startTime.hour - 1);\n if (hour !== undefined) {\n // We found an allowed hour which is not the start hour. Return that hour together with the first / last allowed minutes / seconds.\n return {\n hour,\n minute: dir === 'next' ? this.minutes[0] : this.reversed.minutes[0],\n second: dir === 'next' ? this.seconds[0] : this.reversed.seconds[0],\n };\n }\n }\n else {\n // We found an allowed hour which is not the start hour. Return that hour together with the first / last allowed minutes / seconds.\n return {\n hour,\n minute: dir === 'next' ? this.minutes[0] : this.reversed.minutes[0],\n second: dir === 'next' ? this.seconds[0] : this.reversed.seconds[0],\n };\n }\n }\n // No allowed time found.\n return undefined;\n }\n /**\n * Find the next or previous day in the given month, starting from the given startDay\n * that matches either the day or the weekday constraint. startDay itself might also be allowed.\n */\n findAllowedDayInMonth(dir, year, month, startDay) {\n var _a, _b;\n if (startDay < 1)\n throw new Error('startDay must not be smaller than 1.');\n // If only days are restricted: allow day based on day constraint only.\n // If only weekdays are restricted: allow day based on weekday constraint only.\n // If both are restricted: allow day based on both day and weekday constraint. pick day that is closer to startDay.\n // If none are restricted: return the day closest to startDay (respecting dir) that is allowed (or startDay itself).\n const daysInMonth = getDaysInMonth(year, month);\n const daysRestricted = this.days.length !== 31;\n const weekdaysRestricted = this.weekdays.length !== 7;\n if (!daysRestricted && !weekdaysRestricted) {\n if (startDay > daysInMonth) {\n return dir === 'next' ? undefined : daysInMonth;\n }\n return startDay;\n }\n // Try to find a day based on the days constraint.\n let allowedDayByDays;\n if (daysRestricted) {\n allowedDayByDays =\n dir === 'next'\n ? this.days.find((x) => x >= startDay)\n : this.reversed.days.find((x) => x <= startDay);\n // Make sure the day does not exceed the amount of days in month.\n if (allowedDayByDays !== undefined && allowedDayByDays > daysInMonth) {\n allowedDayByDays = undefined;\n }\n }\n // Try to find a day based on the weekday constraint.\n let allowedDayByWeekdays;\n if (weekdaysRestricted) {\n const startWeekday = new Date(year, month, startDay).getDay();\n const nearestAllowedWeekday = dir === 'next'\n ? ((_a = this.weekdays.find((x) => x >= startWeekday)) !== null && _a !== void 0 ? _a : this.weekdays[0])\n : ((_b = this.reversed.weekdays.find((x) => x <= startWeekday)) !== null && _b !== void 0 ? _b : this.reversed.weekdays[0]);\n if (nearestAllowedWeekday !== undefined) {\n const daysBetweenWeekdays = dir === 'next'\n ? getDaysBetweenWeekdays(startWeekday, nearestAllowedWeekday)\n : getDaysBetweenWeekdays(nearestAllowedWeekday, startWeekday);\n allowedDayByWeekdays =\n dir === 'next'\n ? startDay + daysBetweenWeekdays\n : startDay - daysBetweenWeekdays;\n // Make sure the day does not exceed the month boundaries.\n if (allowedDayByWeekdays > daysInMonth || allowedDayByWeekdays < 1) {\n allowedDayByWeekdays = undefined;\n }\n }\n }\n if (allowedDayByDays !== undefined && allowedDayByWeekdays !== undefined) {\n // If a day is found both via the days and the weekdays constraint, pick the day\n // that is closer to start date.\n return dir === 'next'\n ? Math.min(allowedDayByDays, allowedDayByWeekdays)\n : Math.max(allowedDayByDays, allowedDayByWeekdays);\n }\n if (allowedDayByDays !== undefined) {\n return allowedDayByDays;\n }\n if (allowedDayByWeekdays !== undefined) {\n return allowedDayByWeekdays;\n }\n return undefined;\n }\n /** Gets the next date starting from the given start date or now. */\n getNextDate(startDate = new Date()) {\n const startDateElements = extractDateElements(startDate);\n let minYear = startDateElements.year;\n let startIndexMonth = this.months.findIndex((x) => x >= startDateElements.month);\n if (startIndexMonth === -1) {\n startIndexMonth = 0;\n minYear++;\n }\n // We try every month within the next 5 years to make sure that we tried to\n // find a matching date insidde a whole leap year.\n const maxIterations = this.months.length * 5;\n for (let i = 0; i < maxIterations; i++) {\n // Get the next year and month.\n const year = minYear + Math.floor((startIndexMonth + i) / this.months.length);\n const month = this.months[(startIndexMonth + i) % this.months.length];\n const isStartMonth = year === startDateElements.year && month === startDateElements.month;\n // Find the next day.\n let day = this.findAllowedDayInMonth('next', year, month, isStartMonth ? startDateElements.day : 1);\n let isStartDay = isStartMonth && day === startDateElements.day;\n // If we found a day and it is the start day, try to find a valid time beginning from the start date time.\n if (day !== undefined && isStartDay) {\n const nextTime = this.findAllowedTime('next', startDateElements);\n if (nextTime !== undefined) {\n return new Date(year, month, day, nextTime.hour, nextTime.minute, nextTime.second);\n }\n // If no valid time has been found for the start date, try the next day.\n day = this.findAllowedDayInMonth('next', year, month, day + 1);\n isStartDay = false;\n }\n // If we found a next day and it is not the start day, just use the next day with the first allowed values\n // for hours, minutes and seconds.\n if (day !== undefined && !isStartDay) {\n return new Date(year, month, day, this.hours[0], this.minutes[0], this.seconds[0]);\n }\n // No allowed day has been found for this month. Continue to search in next month.\n }\n throw new Error('No valid next date was found.');\n }\n /** Gets the specified amount of future dates starting from the given start date or now. */\n getNextDates(amount, startDate) {\n const dates = [];\n let nextDate;\n for (let i = 0; i < amount; i++) {\n nextDate = this.getNextDate(nextDate !== null && nextDate !== void 0 ? nextDate : startDate);\n dates.push(nextDate);\n }\n return dates;\n }\n /**\n * Get an ES6 compatible iterator which iterates over the next dates starting from startDate or now.\n * The iterator runs until the optional endDate is reached or forever.\n */\n *getNextDatesIterator(startDate, endDate) {\n let nextDate;\n while (true) {\n nextDate = this.getNextDate(nextDate !== null && nextDate !== void 0 ? nextDate : startDate);\n if (endDate && endDate.getTime() < nextDate.getTime()) {\n return;\n }\n yield nextDate;\n }\n }\n /** Gets the previous date starting from the given start date or now. */\n getPrevDate(startDate = new Date()) {\n const startDateElements = extractDateElements(startDate);\n let maxYear = startDateElements.year;\n let startIndexMonth = this.reversed.months.findIndex((x) => x <= startDateElements.month);\n if (startIndexMonth === -1) {\n startIndexMonth = 0;\n maxYear--;\n }\n // We try every month within the past 5 years to make sure that we tried to\n // find a matching date inside a whole leap year.\n const maxIterations = this.reversed.months.length * 5;\n for (let i = 0; i < maxIterations; i++) {\n // Get the next year and month.\n const year = maxYear -\n Math.floor((startIndexMonth + i) / this.reversed.months.length);\n const month = this.reversed.months[(startIndexMonth + i) % this.reversed.months.length];\n const isStartMonth = year === startDateElements.year && month === startDateElements.month;\n // Find the previous day.\n let day = this.findAllowedDayInMonth('prev', year, month, isStartMonth\n ? startDateElements.day\n : // Start searching from the last day of the month.\n getDaysInMonth(year, month));\n let isStartDay = isStartMonth && day === startDateElements.day;\n // If we found a day and it is the start day, try to find a valid time beginning from the start date time.\n if (day !== undefined && isStartDay) {\n const prevTime = this.findAllowedTime('prev', startDateElements);\n if (prevTime !== undefined) {\n return new Date(year, month, day, prevTime.hour, prevTime.minute, prevTime.second);\n }\n // If no valid time has been found for the start date, try the previous day.\n if (day > 1) {\n day = this.findAllowedDayInMonth('prev', year, month, day - 1);\n isStartDay = false;\n }\n }\n // If we found a previous day and it is not the start day, just use the previous day with the first allowed values\n // for hours, minutes and seconds (which will be the latest time due to using the reversed array).\n if (day !== undefined && !isStartDay) {\n return new Date(year, month, day, this.reversed.hours[0], this.reversed.minutes[0], this.reversed.seconds[0]);\n }\n // No allowed day has been found for this month. Continue to search in previous month.\n }\n throw new Error('No valid previous date was found.');\n }\n /** Gets the specified amount of previous dates starting from the given start date or now. */\n getPrevDates(amount, startDate) {\n const dates = [];\n let prevDate;\n for (let i = 0; i < amount; i++) {\n prevDate = this.getPrevDate(prevDate !== null && prevDate !== void 0 ? prevDate : startDate);\n dates.push(prevDate);\n }\n return dates;\n }\n /**\n * Get an ES6 compatible iterator which iterates over the previous dates starting from startDate or now.\n * The iterator runs until the optional endDate is reached or forever.\n */\n *getPrevDatesIterator(startDate, endDate) {\n let prevDate;\n while (true) {\n prevDate = this.getPrevDate(prevDate !== null && prevDate !== void 0 ? prevDate : startDate);\n if (endDate && endDate.getTime() > prevDate.getTime()) {\n return;\n }\n yield prevDate;\n }\n }\n /** Returns true when there is a cron date at the given date. */\n matchDate(date) {\n const { second, minute, hour, day, month, weekday } = extractDateElements(date);\n if (this.seconds.indexOf(second) === -1 ||\n this.minutes.indexOf(minute) === -1 ||\n this.hours.indexOf(hour) === -1 ||\n this.months.indexOf(month) === -1) {\n return false;\n }\n if (this.days.length !== 31 && this.weekdays.length !== 7) {\n return (this.days.indexOf(day) !== -1 || this.weekdays.indexOf(weekday) !== -1);\n }\n return (this.days.indexOf(day) !== -1 && this.weekdays.indexOf(weekday) !== -1);\n }\n}\n//# sourceMappingURL=cron.js.map","import { Cron } from './cron.js';\nconst secondConstraint = {\n min: 0,\n max: 59,\n};\nconst minuteConstraint = {\n min: 0,\n max: 59,\n};\nconst hourConstraint = {\n min: 0,\n max: 23,\n};\nconst dayConstraint = {\n min: 1,\n max: 31,\n};\nconst monthConstraint = {\n min: 1,\n max: 12,\n aliases: {\n jan: '1',\n feb: '2',\n mar: '3',\n apr: '4',\n may: '5',\n jun: '6',\n jul: '7',\n aug: '8',\n sep: '9',\n oct: '10',\n nov: '11',\n dec: '12',\n },\n};\nconst weekdayConstraint = {\n min: 0,\n max: 7,\n aliases: {\n mon: '1',\n tue: '2',\n wed: '3',\n thu: '4',\n fri: '5',\n sat: '6',\n sun: '7',\n },\n};\nconst timeNicknames = {\n '@yearly': '0 0 1 1 *',\n '@annually': '0 0 1 1 *',\n '@monthly': '0 0 1 * *',\n '@weekly': '0 0 * * 0',\n '@daily': '0 0 * * *',\n '@hourly': '0 * * * *',\n '@minutely': '* * * * *',\n};\nfunction parseElement(element, constraint) {\n const result = new Set();\n // If returned set of numbers is empty, the scheduler class interpretes the emtpy set of numbers as all valid values of the constraint\n if (element === '*') {\n for (let i = constraint.min; i <= constraint.max; i = i + 1) {\n result.add(i);\n }\n return result;\n }\n // If the element is a list, parse each element in the list.\n const listElements = element.split(',');\n if (listElements.length > 1) {\n for (const listElement of listElements) {\n const parsedListElement = parseElement(listElement, constraint);\n for (const x of parsedListElement) {\n result.add(x);\n }\n }\n return result;\n }\n // Helper function to parse a single element, which includes checking for alias, valid number and constraint min and max.\n const parseSingleElement = (singleElement) => {\n var _a, _b;\n singleElement =\n (_b = (_a = constraint.aliases) === null || _a === void 0 ? void 0 : _a[singleElement.toLowerCase()]) !== null && _b !== void 0 ? _b : singleElement;\n const parsedElement = Number.parseInt(singleElement, 10);\n if (Number.isNaN(parsedElement)) {\n throw new Error(`Failed to parse ${element}: ${singleElement} is NaN.`);\n }\n if (parsedElement < constraint.min || parsedElement > constraint.max) {\n throw new Error(`Failed to parse ${element}: ${singleElement} is outside of constraint range of ${constraint.min} - ${constraint.max}.`);\n }\n return parsedElement;\n };\n // Detect if the element is a range.\n // Possible range formats: 'start-end', 'start-end/step', '*', '*/step'.\n // Where start and end can be numbers or aliases.\n // Capture groups: 1: start-end, 2: start, 3: end, 4: /step, 5: step.\n const rangeSegments = /^(([0-9a-zA-Z]+)-([0-9a-zA-Z]+)|\\*)(\\/([0-9]+))?$/.exec(element);\n // If not, it must be a single element.\n if (rangeSegments === null) {\n result.add(parseSingleElement(element));\n return result;\n }\n // If it is a range, get start and end of the range.\n let parsedStart = rangeSegments[1] === '*'\n ? constraint.min\n : parseSingleElement(rangeSegments[2]);\n const parsedEnd = rangeSegments[1] === '*'\n ? constraint.max\n : parseSingleElement(rangeSegments[3]);\n // need to catch Sunday, which gets parsed here as 7, but is also legitimate at the start of a range as 0, to avoid the out of order error\n if (constraint === weekdayConstraint &&\n parsedStart === 7 &&\n // this check ensures that sun-sun is not incorrectly parsed as [0,1,2,3,4,5,6]\n parsedEnd !== 7) {\n parsedStart = 0;\n }\n if (parsedStart > parsedEnd) {\n throw new Error(`Failed to parse ${element}: Invalid range (start: ${parsedStart}, end: ${parsedEnd}).`);\n }\n // Check whether there is a custom step defined for the range, defaulting to 1.\n const step = rangeSegments[5];\n let parsedStep = 1;\n if (step !== undefined) {\n parsedStep = Number.parseInt(step, 10);\n if (Number.isNaN(parsedStep)) {\n throw new Error(`Failed to parse step: ${step} is NaN.`);\n }\n if (parsedStep < 1) {\n throw new Error(`Failed to parse step: Expected ${step} to be greater than 0.`);\n }\n }\n // Go from start to end of the range by the given steps.\n for (let i = parsedStart; i <= parsedEnd; i = i + parsedStep) {\n result.add(i);\n }\n return result;\n}\n/** Parses a cron expression into a Cron instance. */\nexport function parseCronExpression(cronExpression) {\n var _a;\n if (typeof cronExpression !== 'string') {\n throw new TypeError('Invalid cron expression: must be of type string.');\n }\n // Convert time nicknames.\n cronExpression = (_a = timeNicknames[cronExpression.toLowerCase()]) !== null && _a !== void 0 ? _a : cronExpression;\n // Split the cron expression into its elements, removing empty elements (extra whitespaces).\n const elements = cronExpression.split(' ').filter((elem) => elem.length > 0);\n if (elements.length < 5 || elements.length > 6) {\n throw new Error('Invalid cron expression: expected 5 or 6 elements.');\n }\n const rawSeconds = elements.length === 6 ? elements[0] : '0';\n const rawMinutes = elements.length === 6 ? elements[1] : elements[0];\n const rawHours = elements.length === 6 ? elements[2] : elements[1];\n const rawDays = elements.length === 6 ? elements[3] : elements[2];\n const rawMonths = elements.length === 6 ? elements[4] : elements[3];\n const rawWeekdays = elements.length === 6 ? elements[5] : elements[4];\n return new Cron({\n seconds: parseElement(rawSeconds, secondConstraint),\n minutes: parseElement(rawMinutes, minuteConstraint),\n hours: parseElement(rawHours, hourConstraint),\n days: parseElement(rawDays, dayConstraint),\n // months in cron are indexed by 1, but Cron expects indexes by 0, so we need to reduce all set values by one.\n months: new Set(Array.from(parseElement(rawMonths, monthConstraint)).map((x) => x - 1)),\n weekdays: new Set(Array.from(parseElement(rawWeekdays, weekdayConstraint)).map((x) => x % 7)),\n });\n}\n//# sourceMappingURL=cron-parser.js.map","import { $hook, $inject, Alepha } from \"alepha\";\nimport { type DateTime, DateTimeProvider } from \"alepha/datetime\";\nimport { $logger } from \"alepha/logger\";\nimport { type Cron, parseCronExpression } from \"cron-schedule\";\n\nexport class CronProvider {\n protected readonly dt = $inject(DateTimeProvider);\n protected readonly alepha = $inject(Alepha);\n protected readonly log = $logger();\n protected readonly cronJobs: Array<CronJob> = [];\n\n public getCronJobs(): Array<CronJob> {\n return this.cronJobs;\n }\n\n protected readonly start = $hook({\n on: \"start\",\n handler: () => {\n for (const cron of this.cronJobs) {\n if (!cron.running) {\n cron.running = true;\n this.log.debug(\n `Starting cron task '${cron.name}' with '${cron.expression}'`,\n );\n this.run(cron);\n }\n }\n },\n });\n\n protected readonly stop = $hook({\n on: \"stop\",\n handler: () => {\n for (const cron of this.cronJobs) {\n this.abort(cron);\n }\n },\n });\n\n protected boot(name: string | CronJob) {\n const cron =\n typeof name === \"string\"\n ? this.cronJobs.find((c) => c.name === name)\n : name;\n\n if (!cron) {\n return;\n }\n\n cron.running = true;\n\n this.log.debug(\n `Starting cron task '${cron.name}' with '${cron.expression}'`,\n );\n\n this.run(cron);\n }\n\n public abort(name: string | CronJob): void {\n const cron =\n typeof name === \"string\"\n ? this.cronJobs.find((c) => c.name === name)\n : name;\n\n if (!cron) {\n return;\n }\n\n cron.running = false;\n cron.abort.abort();\n this.log.debug(`Cron task '${cron.name}' stopped`);\n }\n\n /**\n * Registers a cron job.\n *\n * It's automatically done when using the `$scheduler` primitive but can also be used manually.\n */\n public createCronJob(\n name: string,\n expression: string,\n handler: (context: { now: DateTime }) => Promise<void>,\n start?: boolean,\n ): void {\n const cron: CronJob = {\n name,\n cron: parseCronExpression(expression),\n expression,\n handler,\n loop: true,\n abort: new AbortController(),\n };\n\n this.cronJobs.push(cron);\n\n if (start && this.alepha.isStarted()) {\n this.boot(cron);\n }\n }\n\n protected run(task: CronJob, now = this.dt.now()): void {\n if (!task.running) {\n return;\n }\n\n const [next] = task.cron.getNextDates(1, now.toDate());\n if (!next) {\n return;\n }\n\n const duration = next.getTime() - now.toDate().getTime();\n\n task.abort = new AbortController();\n\n this.dt\n .wait(duration, {\n now: now.valueOf(),\n signal: task.abort.signal,\n })\n .then(() => {\n if (!task.running) {\n this.log.trace(\"Cron task stopped before execution\");\n return;\n }\n\n this.log.trace(\"Running cron task\");\n\n task.handler({ now: this.dt.of(next) }).catch((err) => {\n if (task.onError) {\n task.onError(err);\n } else {\n this.log.error(\"Error in cron task:\", err);\n }\n });\n\n if (task.loop) {\n this.run(task, this.dt.of(next));\n }\n })\n .catch((err) => {\n this.log.warn(\"Issue during cron waiting timer\", err as Error);\n });\n }\n}\n\nexport interface CronJob {\n name: string;\n expression: string;\n handler: (context: { now: DateTime }) => Promise<void>;\n cron: Cron;\n loop: boolean;\n running?: boolean;\n onError?: (error: Error) => void;\n abort: AbortController;\n}\n","import {\n $env,\n $inject,\n Alepha,\n type Async,\n createPrimitive,\n KIND,\n Primitive,\n type Static,\n t,\n} from \"alepha\";\nimport {\n type DateTime,\n DateTimeProvider,\n type DurationLike,\n} from \"alepha/datetime\";\nimport { $lock } from \"alepha/lock\";\nimport { $logger } from \"alepha/logger\";\nimport { CronProvider } from \"../providers/CronProvider.ts\";\n\n/**\n * Scheduler primitive.\n */\nexport const $scheduler = (\n options: SchedulerPrimitiveOptions,\n): SchedulerPrimitive => {\n return createPrimitive(SchedulerPrimitive, options);\n};\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport type SchedulerPrimitiveOptions = {\n /**\n * Function to run on schedule.\n */\n handler: (args: SchedulerHandlerArguments) => Async<void>;\n\n /**\n * Name of the scheduler. Defaults to the function name.\n */\n name?: string;\n\n /**\n * Optional description of the scheduler.\n */\n description?: string;\n\n /**\n * Cron expression or interval to run the scheduler.\n */\n cron?: string;\n\n /**\n * Cron expression or interval to run the scheduler.\n */\n interval?: DurationLike;\n\n /**\n * If true, the scheduler will be locked and only one instance will run at a time.\n * You probably need to import {@link AlephaLockRedis} for distributed locking.\n *\n * @default true\n */\n lock?: boolean;\n};\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nconst envSchema = t.object({\n SCHEDULER_PREFIX: t.optional(\n t.text({\n description: \"Prefix store key\",\n }),\n ),\n});\n\ndeclare module \"alepha\" {\n interface Env extends Partial<Static<typeof envSchema>> {}\n}\n\nexport class SchedulerPrimitive extends Primitive<SchedulerPrimitiveOptions> {\n protected readonly log = $logger();\n protected readonly env = $env(envSchema);\n protected readonly alepha = $inject(Alepha);\n protected readonly dateTimeProvider = $inject(DateTimeProvider);\n protected readonly cronProvider = $inject(CronProvider);\n\n public get name(): string {\n return (\n this.options.name ??\n `${this.config.service.name}.${this.config.propertyKey}`\n );\n }\n\n protected onInit() {\n if (this.options.interval) {\n this.dateTimeProvider.createInterval(\n () => this.trigger(),\n this.options.interval,\n );\n }\n if (this.options.cron) {\n this.cronProvider.createCronJob(this.name, this.options.cron, () =>\n this.trigger(),\n );\n }\n }\n\n public async trigger(): Promise<void> {\n if (!this.alepha.isStarted()) {\n return;\n }\n\n const context = this.alepha.context.createContextId();\n\n await this.alepha.context.run(\n async () => {\n try {\n const now = this.dateTimeProvider.now();\n\n await this.alepha.events.emit(\"scheduler:begin\", {\n name: this.name,\n now,\n context,\n });\n\n if (this.options.lock !== false) {\n await this.schedulerLock.run({ now });\n } else {\n await this.options.handler({ now });\n }\n\n await this.alepha.events.emit(\n \"scheduler:success\",\n {\n name: this.name,\n context,\n },\n {\n catch: true,\n },\n );\n } catch (error) {\n await this.alepha.events.emit(\n \"scheduler:error\",\n {\n name: this.name,\n error: error as Error,\n context,\n },\n {\n catch: true,\n },\n );\n\n this.log.error(\"Error running scheduler:\", error);\n }\n\n await this.alepha.events.emit(\n \"scheduler:end\",\n {\n name: this.name,\n context,\n },\n {\n catch: true,\n },\n );\n },\n {\n context,\n },\n );\n }\n\n protected schedulerLock = $lock({\n name: () => {\n const prefix = this.env.SCHEDULER_PREFIX\n ? `${this.env.SCHEDULER_PREFIX}:`\n : \"\";\n return `${prefix}scheduler:${this.name}`;\n },\n handler: async (args: SchedulerHandlerArguments) => {\n await this.options.handler(args);\n },\n });\n}\n\n$scheduler[KIND] = SchedulerPrimitive;\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport interface SchedulerHandlerArguments {\n now: DateTime;\n}\n","export const CRON = {\n EVERY_MINUTE: \"* * * * *\",\n EVERY_5_MINUTES: \"*/5 * * * *\",\n EVERY_15_MINUTES: \"*/15 * * * *\",\n EVERY_30_MINUTES: \"*/30 * * * *\",\n EVERY_HOUR: \"0 * * * *\",\n EVERY_DAY_AT_MIDNIGHT: \"0 0 * * *\",\n};\n","import { $module } from \"alepha\";\nimport type { DateTime } from \"alepha/datetime\";\nimport { AlephaLock } from \"alepha/lock\";\nimport { $scheduler } from \"./primitives/$scheduler.ts\";\nimport { CronProvider } from \"./providers/CronProvider.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport * from \"./constants/CRON.ts\";\nexport * from \"./primitives/$scheduler.ts\";\nexport * from \"./providers/CronProvider.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\ndeclare module \"alepha\" {\n interface Hooks {\n \"scheduler:begin\": {\n name: string;\n now: DateTime;\n context: string;\n };\n\n \"scheduler:success\": { name: string; context: string };\n\n \"scheduler:error\": {\n name: string;\n error: Error;\n context: string;\n };\n\n \"scheduler:end\": { name: string; context: string };\n }\n}\n\n// ---------------------------------------------------------------------------------------------------------------------\n\n/**\n * Generic interface for scheduling tasks.\n *\n * @see {@link $scheduler}\n * @module alepha.scheduler\n */\nexport const AlephaScheduler = $module({\n name: \"alepha.scheduler\",\n primitives: [$scheduler],\n services: [AlephaLock, CronProvider],\n});\n"],"x_google_ignoreList":[0,1,2],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../node_modules/cron-schedule/dist/utils.js","../../../../node_modules/cron-schedule/dist/cron.js","../../../../node_modules/cron-schedule/dist/cron-parser.js","../../src/scheduler/providers/CronProvider.ts","../../src/scheduler/primitives/$scheduler.ts","../../src/scheduler/constants/CRON.ts","../../src/scheduler/index.ts"],"sourcesContent":["export const TIMEOUT_MAX = 2147483647; // 2^31-1\n/**\n * Creates a new timeout, which can exceed the max timeout limit of 2^31-1.\n * Since multiple timeouts are used internally, the timeoutId used to clear the timeout\n * is returned as a handle (object) and changes whenever the max timeout limit is exceeded.\n * The handle parameter can be ignored, it is used internally for updating the timeoutId\n * in the handle after creating the next timeout.\n */\nexport function longTimeout(fn, timeout, previousHandle) {\n let nextTimeout = timeout;\n let remainingTimeout = 0;\n if (nextTimeout > TIMEOUT_MAX) {\n remainingTimeout = nextTimeout - TIMEOUT_MAX;\n nextTimeout = TIMEOUT_MAX;\n }\n const handle = previousHandle !== null && previousHandle !== void 0 ? previousHandle : {\n timeoutId: undefined,\n };\n handle.timeoutId = setTimeout(() => {\n if (remainingTimeout > 0) {\n longTimeout(fn, remainingTimeout, previousHandle);\n }\n else {\n fn();\n }\n }, nextTimeout);\n return handle;\n}\n/* Extracts second, minute, hour, date, month and the weekday from a date. */\nexport function extractDateElements(date) {\n return {\n second: date.getSeconds(),\n minute: date.getMinutes(),\n hour: date.getHours(),\n day: date.getDate(),\n month: date.getMonth(),\n weekday: date.getDay(),\n year: date.getFullYear(),\n };\n}\n/* Gets the amount of days in the given month (indexed by 0) of the given year. */\nexport function getDaysInMonth(year, month) {\n return new Date(year, month + 1, 0).getDate();\n}\n/* Gets the amount of days from weekday1 to weekday2. */\nexport function getDaysBetweenWeekdays(weekday1, weekday2) {\n if (weekday1 <= weekday2) {\n return weekday2 - weekday1;\n }\n return 6 - weekday1 + weekday2 + 1;\n}\nexport function wrapFunction(fn, errorHandler) {\n return () => {\n try {\n const res = fn();\n if (res instanceof Promise) {\n res.catch((err) => {\n if (errorHandler) {\n errorHandler(err);\n }\n });\n }\n }\n catch (err) {\n if (errorHandler) {\n errorHandler(err);\n }\n }\n };\n}\n//# sourceMappingURL=utils.js.map","import { extractDateElements, getDaysBetweenWeekdays, getDaysInMonth, } from './utils.js';\nexport class Cron {\n constructor({ seconds, minutes, hours, days, months, weekdays, }) {\n // Validate that there are values provided.\n if (!seconds || seconds.size === 0)\n throw new Error('There must be at least one allowed second.');\n if (!minutes || minutes.size === 0)\n throw new Error('There must be at least one allowed minute.');\n if (!hours || hours.size === 0)\n throw new Error('There must be at least one allowed hour.');\n if (!months || months.size === 0)\n throw new Error('There must be at least one allowed month.');\n if ((!weekdays || weekdays.size === 0) && (!days || days.size === 0))\n throw new Error('There must be at least one allowed day or weekday.');\n // Convert set to array and sort in ascending order.\n this.seconds = Array.from(seconds).sort((a, b) => a - b);\n this.minutes = Array.from(minutes).sort((a, b) => a - b);\n this.hours = Array.from(hours).sort((a, b) => a - b);\n this.days = Array.from(days).sort((a, b) => a - b);\n this.months = Array.from(months).sort((a, b) => a - b);\n this.weekdays = Array.from(weekdays).sort((a, b) => a - b);\n // Validate that all values are integers within the constraint.\n const validateData = (name, data, constraint) => {\n if (data.some((x) => typeof x !== 'number' ||\n x % 1 !== 0 ||\n x < constraint.min ||\n x > constraint.max)) {\n throw new Error(`${name} must only consist of integers which are within the range of ${constraint.min} and ${constraint.max}`);\n }\n };\n validateData('seconds', this.seconds, { min: 0, max: 59 });\n validateData('minutes', this.minutes, { min: 0, max: 59 });\n validateData('hours', this.hours, { min: 0, max: 23 });\n validateData('days', this.days, { min: 1, max: 31 });\n validateData('months', this.months, { min: 0, max: 11 });\n validateData('weekdays', this.weekdays, { min: 0, max: 6 });\n // For each element, store a reversed copy in the reversed attribute for finding prev dates.\n this.reversed = {\n seconds: this.seconds.map((x) => x).reverse(),\n minutes: this.minutes.map((x) => x).reverse(),\n hours: this.hours.map((x) => x).reverse(),\n days: this.days.map((x) => x).reverse(),\n months: this.months.map((x) => x).reverse(),\n weekdays: this.weekdays.map((x) => x).reverse(),\n };\n }\n /**\n * Find the next or previous hour, starting from the given start hour that matches the hour constraint.\n * startHour itself might also be allowed.\n */\n findAllowedHour(dir, startHour) {\n return dir === 'next'\n ? this.hours.find((x) => x >= startHour)\n : this.reversed.hours.find((x) => x <= startHour);\n }\n /**\n * Find the next or previous minute, starting from the given start minute that matches the minute constraint.\n * startMinute itself might also be allowed.\n */\n findAllowedMinute(dir, startMinute) {\n return dir === 'next'\n ? this.minutes.find((x) => x >= startMinute)\n : this.reversed.minutes.find((x) => x <= startMinute);\n }\n /**\n * Find the next or previous second, starting from the given start second that matches the second constraint.\n * startSecond itself IS NOT allowed.\n */\n findAllowedSecond(dir, startSecond) {\n return dir === 'next'\n ? this.seconds.find((x) => x > startSecond)\n : this.reversed.seconds.find((x) => x < startSecond);\n }\n /**\n * Find the next or previous time, starting from the given start time that matches the hour, minute\n * and second constraints. startTime itself might also be allowed.\n */\n findAllowedTime(dir, startTime) {\n // Try to find an allowed hour.\n let hour = this.findAllowedHour(dir, startTime.hour);\n if (hour !== undefined) {\n if (hour === startTime.hour) {\n // We found an hour that is the start hour. Try to find an allowed minute.\n let minute = this.findAllowedMinute(dir, startTime.minute);\n if (minute !== undefined) {\n if (minute === startTime.minute) {\n // We found a minute that is the start minute. Try to find an allowed second.\n const second = this.findAllowedSecond(dir, startTime.second);\n if (second !== undefined) {\n // We found a second within the start hour and minute.\n return { hour, minute, second };\n }\n // We did not find a valid second within the start minute. Try to find another minute.\n minute = this.findAllowedMinute(dir, dir === 'next' ? startTime.minute + 1 : startTime.minute - 1);\n if (minute !== undefined) {\n // We found a minute which is not the start minute. Return that minute together with the hour and the first / last allowed second.\n return {\n hour,\n minute,\n second: dir === 'next' ? this.seconds[0] : this.reversed.seconds[0],\n };\n }\n }\n else {\n // We found a minute which is not the start minute. Return that minute together with the hour and the first / last allowed second.\n return {\n hour,\n minute,\n second: dir === 'next' ? this.seconds[0] : this.reversed.seconds[0],\n };\n }\n }\n // We did not find an allowed minute / second combination inside the start hour. Try to find the next / previous allowed hour.\n hour = this.findAllowedHour(dir, dir === 'next' ? startTime.hour + 1 : startTime.hour - 1);\n if (hour !== undefined) {\n // We found an allowed hour which is not the start hour. Return that hour together with the first / last allowed minutes / seconds.\n return {\n hour,\n minute: dir === 'next' ? this.minutes[0] : this.reversed.minutes[0],\n second: dir === 'next' ? this.seconds[0] : this.reversed.seconds[0],\n };\n }\n }\n else {\n // We found an allowed hour which is not the start hour. Return that hour together with the first / last allowed minutes / seconds.\n return {\n hour,\n minute: dir === 'next' ? this.minutes[0] : this.reversed.minutes[0],\n second: dir === 'next' ? this.seconds[0] : this.reversed.seconds[0],\n };\n }\n }\n // No allowed time found.\n return undefined;\n }\n /**\n * Find the next or previous day in the given month, starting from the given startDay\n * that matches either the day or the weekday constraint. startDay itself might also be allowed.\n */\n findAllowedDayInMonth(dir, year, month, startDay) {\n var _a, _b;\n if (startDay < 1)\n throw new Error('startDay must not be smaller than 1.');\n // If only days are restricted: allow day based on day constraint only.\n // If only weekdays are restricted: allow day based on weekday constraint only.\n // If both are restricted: allow day based on both day and weekday constraint. pick day that is closer to startDay.\n // If none are restricted: return the day closest to startDay (respecting dir) that is allowed (or startDay itself).\n const daysInMonth = getDaysInMonth(year, month);\n const daysRestricted = this.days.length !== 31;\n const weekdaysRestricted = this.weekdays.length !== 7;\n if (!daysRestricted && !weekdaysRestricted) {\n if (startDay > daysInMonth) {\n return dir === 'next' ? undefined : daysInMonth;\n }\n return startDay;\n }\n // Try to find a day based on the days constraint.\n let allowedDayByDays;\n if (daysRestricted) {\n allowedDayByDays =\n dir === 'next'\n ? this.days.find((x) => x >= startDay)\n : this.reversed.days.find((x) => x <= startDay);\n // Make sure the day does not exceed the amount of days in month.\n if (allowedDayByDays !== undefined && allowedDayByDays > daysInMonth) {\n allowedDayByDays = undefined;\n }\n }\n // Try to find a day based on the weekday constraint.\n let allowedDayByWeekdays;\n if (weekdaysRestricted) {\n const startWeekday = new Date(year, month, startDay).getDay();\n const nearestAllowedWeekday = dir === 'next'\n ? ((_a = this.weekdays.find((x) => x >= startWeekday)) !== null && _a !== void 0 ? _a : this.weekdays[0])\n : ((_b = this.reversed.weekdays.find((x) => x <= startWeekday)) !== null && _b !== void 0 ? _b : this.reversed.weekdays[0]);\n if (nearestAllowedWeekday !== undefined) {\n const daysBetweenWeekdays = dir === 'next'\n ? getDaysBetweenWeekdays(startWeekday, nearestAllowedWeekday)\n : getDaysBetweenWeekdays(nearestAllowedWeekday, startWeekday);\n allowedDayByWeekdays =\n dir === 'next'\n ? startDay + daysBetweenWeekdays\n : startDay - daysBetweenWeekdays;\n // Make sure the day does not exceed the month boundaries.\n if (allowedDayByWeekdays > daysInMonth || allowedDayByWeekdays < 1) {\n allowedDayByWeekdays = undefined;\n }\n }\n }\n if (allowedDayByDays !== undefined && allowedDayByWeekdays !== undefined) {\n // If a day is found both via the days and the weekdays constraint, pick the day\n // that is closer to start date.\n return dir === 'next'\n ? Math.min(allowedDayByDays, allowedDayByWeekdays)\n : Math.max(allowedDayByDays, allowedDayByWeekdays);\n }\n if (allowedDayByDays !== undefined) {\n return allowedDayByDays;\n }\n if (allowedDayByWeekdays !== undefined) {\n return allowedDayByWeekdays;\n }\n return undefined;\n }\n /** Gets the next date starting from the given start date or now. */\n getNextDate(startDate = new Date()) {\n const startDateElements = extractDateElements(startDate);\n let minYear = startDateElements.year;\n let startIndexMonth = this.months.findIndex((x) => x >= startDateElements.month);\n if (startIndexMonth === -1) {\n startIndexMonth = 0;\n minYear++;\n }\n // We try every month within the next 5 years to make sure that we tried to\n // find a matching date insidde a whole leap year.\n const maxIterations = this.months.length * 5;\n for (let i = 0; i < maxIterations; i++) {\n // Get the next year and month.\n const year = minYear + Math.floor((startIndexMonth + i) / this.months.length);\n const month = this.months[(startIndexMonth + i) % this.months.length];\n const isStartMonth = year === startDateElements.year && month === startDateElements.month;\n // Find the next day.\n let day = this.findAllowedDayInMonth('next', year, month, isStartMonth ? startDateElements.day : 1);\n let isStartDay = isStartMonth && day === startDateElements.day;\n // If we found a day and it is the start day, try to find a valid time beginning from the start date time.\n if (day !== undefined && isStartDay) {\n const nextTime = this.findAllowedTime('next', startDateElements);\n if (nextTime !== undefined) {\n return new Date(year, month, day, nextTime.hour, nextTime.minute, nextTime.second);\n }\n // If no valid time has been found for the start date, try the next day.\n day = this.findAllowedDayInMonth('next', year, month, day + 1);\n isStartDay = false;\n }\n // If we found a next day and it is not the start day, just use the next day with the first allowed values\n // for hours, minutes and seconds.\n if (day !== undefined && !isStartDay) {\n return new Date(year, month, day, this.hours[0], this.minutes[0], this.seconds[0]);\n }\n // No allowed day has been found for this month. Continue to search in next month.\n }\n throw new Error('No valid next date was found.');\n }\n /** Gets the specified amount of future dates starting from the given start date or now. */\n getNextDates(amount, startDate) {\n const dates = [];\n let nextDate;\n for (let i = 0; i < amount; i++) {\n nextDate = this.getNextDate(nextDate !== null && nextDate !== void 0 ? nextDate : startDate);\n dates.push(nextDate);\n }\n return dates;\n }\n /**\n * Get an ES6 compatible iterator which iterates over the next dates starting from startDate or now.\n * The iterator runs until the optional endDate is reached or forever.\n */\n *getNextDatesIterator(startDate, endDate) {\n let nextDate;\n while (true) {\n nextDate = this.getNextDate(nextDate !== null && nextDate !== void 0 ? nextDate : startDate);\n if (endDate && endDate.getTime() < nextDate.getTime()) {\n return;\n }\n yield nextDate;\n }\n }\n /** Gets the previous date starting from the given start date or now. */\n getPrevDate(startDate = new Date()) {\n const startDateElements = extractDateElements(startDate);\n let maxYear = startDateElements.year;\n let startIndexMonth = this.reversed.months.findIndex((x) => x <= startDateElements.month);\n if (startIndexMonth === -1) {\n startIndexMonth = 0;\n maxYear--;\n }\n // We try every month within the past 5 years to make sure that we tried to\n // find a matching date inside a whole leap year.\n const maxIterations = this.reversed.months.length * 5;\n for (let i = 0; i < maxIterations; i++) {\n // Get the next year and month.\n const year = maxYear -\n Math.floor((startIndexMonth + i) / this.reversed.months.length);\n const month = this.reversed.months[(startIndexMonth + i) % this.reversed.months.length];\n const isStartMonth = year === startDateElements.year && month === startDateElements.month;\n // Find the previous day.\n let day = this.findAllowedDayInMonth('prev', year, month, isStartMonth\n ? startDateElements.day\n : // Start searching from the last day of the month.\n getDaysInMonth(year, month));\n let isStartDay = isStartMonth && day === startDateElements.day;\n // If we found a day and it is the start day, try to find a valid time beginning from the start date time.\n if (day !== undefined && isStartDay) {\n const prevTime = this.findAllowedTime('prev', startDateElements);\n if (prevTime !== undefined) {\n return new Date(year, month, day, prevTime.hour, prevTime.minute, prevTime.second);\n }\n // If no valid time has been found for the start date, try the previous day.\n if (day > 1) {\n day = this.findAllowedDayInMonth('prev', year, month, day - 1);\n isStartDay = false;\n }\n }\n // If we found a previous day and it is not the start day, just use the previous day with the first allowed values\n // for hours, minutes and seconds (which will be the latest time due to using the reversed array).\n if (day !== undefined && !isStartDay) {\n return new Date(year, month, day, this.reversed.hours[0], this.reversed.minutes[0], this.reversed.seconds[0]);\n }\n // No allowed day has been found for this month. Continue to search in previous month.\n }\n throw new Error('No valid previous date was found.');\n }\n /** Gets the specified amount of previous dates starting from the given start date or now. */\n getPrevDates(amount, startDate) {\n const dates = [];\n let prevDate;\n for (let i = 0; i < amount; i++) {\n prevDate = this.getPrevDate(prevDate !== null && prevDate !== void 0 ? prevDate : startDate);\n dates.push(prevDate);\n }\n return dates;\n }\n /**\n * Get an ES6 compatible iterator which iterates over the previous dates starting from startDate or now.\n * The iterator runs until the optional endDate is reached or forever.\n */\n *getPrevDatesIterator(startDate, endDate) {\n let prevDate;\n while (true) {\n prevDate = this.getPrevDate(prevDate !== null && prevDate !== void 0 ? prevDate : startDate);\n if (endDate && endDate.getTime() > prevDate.getTime()) {\n return;\n }\n yield prevDate;\n }\n }\n /** Returns true when there is a cron date at the given date. */\n matchDate(date) {\n const { second, minute, hour, day, month, weekday } = extractDateElements(date);\n if (this.seconds.indexOf(second) === -1 ||\n this.minutes.indexOf(minute) === -1 ||\n this.hours.indexOf(hour) === -1 ||\n this.months.indexOf(month) === -1) {\n return false;\n }\n if (this.days.length !== 31 && this.weekdays.length !== 7) {\n return (this.days.indexOf(day) !== -1 || this.weekdays.indexOf(weekday) !== -1);\n }\n return (this.days.indexOf(day) !== -1 && this.weekdays.indexOf(weekday) !== -1);\n }\n}\n//# sourceMappingURL=cron.js.map","import { Cron } from './cron.js';\nconst secondConstraint = {\n min: 0,\n max: 59,\n};\nconst minuteConstraint = {\n min: 0,\n max: 59,\n};\nconst hourConstraint = {\n min: 0,\n max: 23,\n};\nconst dayConstraint = {\n min: 1,\n max: 31,\n};\nconst monthConstraint = {\n min: 1,\n max: 12,\n aliases: {\n jan: '1',\n feb: '2',\n mar: '3',\n apr: '4',\n may: '5',\n jun: '6',\n jul: '7',\n aug: '8',\n sep: '9',\n oct: '10',\n nov: '11',\n dec: '12',\n },\n};\nconst weekdayConstraint = {\n min: 0,\n max: 7,\n aliases: {\n mon: '1',\n tue: '2',\n wed: '3',\n thu: '4',\n fri: '5',\n sat: '6',\n sun: '7',\n },\n};\nconst timeNicknames = {\n '@yearly': '0 0 1 1 *',\n '@annually': '0 0 1 1 *',\n '@monthly': '0 0 1 * *',\n '@weekly': '0 0 * * 0',\n '@daily': '0 0 * * *',\n '@hourly': '0 * * * *',\n '@minutely': '* * * * *',\n};\nfunction parseElement(element, constraint) {\n const result = new Set();\n // If returned set of numbers is empty, the scheduler class interpretes the emtpy set of numbers as all valid values of the constraint\n if (element === '*') {\n for (let i = constraint.min; i <= constraint.max; i = i + 1) {\n result.add(i);\n }\n return result;\n }\n // If the element is a list, parse each element in the list.\n const listElements = element.split(',');\n if (listElements.length > 1) {\n for (const listElement of listElements) {\n const parsedListElement = parseElement(listElement, constraint);\n for (const x of parsedListElement) {\n result.add(x);\n }\n }\n return result;\n }\n // Helper function to parse a single element, which includes checking for alias, valid number and constraint min and max.\n const parseSingleElement = (singleElement) => {\n var _a, _b;\n singleElement =\n (_b = (_a = constraint.aliases) === null || _a === void 0 ? void 0 : _a[singleElement.toLowerCase()]) !== null && _b !== void 0 ? _b : singleElement;\n const parsedElement = Number.parseInt(singleElement, 10);\n if (Number.isNaN(parsedElement)) {\n throw new Error(`Failed to parse ${element}: ${singleElement} is NaN.`);\n }\n if (parsedElement < constraint.min || parsedElement > constraint.max) {\n throw new Error(`Failed to parse ${element}: ${singleElement} is outside of constraint range of ${constraint.min} - ${constraint.max}.`);\n }\n return parsedElement;\n };\n // Detect if the element is a range.\n // Possible range formats: 'start-end', 'start-end/step', '*', '*/step'.\n // Where start and end can be numbers or aliases.\n // Capture groups: 1: start-end, 2: start, 3: end, 4: /step, 5: step.\n const rangeSegments = /^(([0-9a-zA-Z]+)-([0-9a-zA-Z]+)|\\*)(\\/([0-9]+))?$/.exec(element);\n // If not, it must be a single element.\n if (rangeSegments === null) {\n result.add(parseSingleElement(element));\n return result;\n }\n // If it is a range, get start and end of the range.\n let parsedStart = rangeSegments[1] === '*'\n ? constraint.min\n : parseSingleElement(rangeSegments[2]);\n const parsedEnd = rangeSegments[1] === '*'\n ? constraint.max\n : parseSingleElement(rangeSegments[3]);\n // need to catch Sunday, which gets parsed here as 7, but is also legitimate at the start of a range as 0, to avoid the out of order error\n if (constraint === weekdayConstraint &&\n parsedStart === 7 &&\n // this check ensures that sun-sun is not incorrectly parsed as [0,1,2,3,4,5,6]\n parsedEnd !== 7) {\n parsedStart = 0;\n }\n if (parsedStart > parsedEnd) {\n throw new Error(`Failed to parse ${element}: Invalid range (start: ${parsedStart}, end: ${parsedEnd}).`);\n }\n // Check whether there is a custom step defined for the range, defaulting to 1.\n const step = rangeSegments[5];\n let parsedStep = 1;\n if (step !== undefined) {\n parsedStep = Number.parseInt(step, 10);\n if (Number.isNaN(parsedStep)) {\n throw new Error(`Failed to parse step: ${step} is NaN.`);\n }\n if (parsedStep < 1) {\n throw new Error(`Failed to parse step: Expected ${step} to be greater than 0.`);\n }\n }\n // Go from start to end of the range by the given steps.\n for (let i = parsedStart; i <= parsedEnd; i = i + parsedStep) {\n result.add(i);\n }\n return result;\n}\n/** Parses a cron expression into a Cron instance. */\nexport function parseCronExpression(cronExpression) {\n var _a;\n if (typeof cronExpression !== 'string') {\n throw new TypeError('Invalid cron expression: must be of type string.');\n }\n // Convert time nicknames.\n cronExpression = (_a = timeNicknames[cronExpression.toLowerCase()]) !== null && _a !== void 0 ? _a : cronExpression;\n // Split the cron expression into its elements, removing empty elements (extra whitespaces).\n const elements = cronExpression.split(' ').filter((elem) => elem.length > 0);\n if (elements.length < 5 || elements.length > 6) {\n throw new Error('Invalid cron expression: expected 5 or 6 elements.');\n }\n const rawSeconds = elements.length === 6 ? elements[0] : '0';\n const rawMinutes = elements.length === 6 ? elements[1] : elements[0];\n const rawHours = elements.length === 6 ? elements[2] : elements[1];\n const rawDays = elements.length === 6 ? elements[3] : elements[2];\n const rawMonths = elements.length === 6 ? elements[4] : elements[3];\n const rawWeekdays = elements.length === 6 ? elements[5] : elements[4];\n return new Cron({\n seconds: parseElement(rawSeconds, secondConstraint),\n minutes: parseElement(rawMinutes, minuteConstraint),\n hours: parseElement(rawHours, hourConstraint),\n days: parseElement(rawDays, dayConstraint),\n // months in cron are indexed by 1, but Cron expects indexes by 0, so we need to reduce all set values by one.\n months: new Set(Array.from(parseElement(rawMonths, monthConstraint)).map((x) => x - 1)),\n weekdays: new Set(Array.from(parseElement(rawWeekdays, weekdayConstraint)).map((x) => x % 7)),\n });\n}\n//# sourceMappingURL=cron-parser.js.map","import { $hook, $inject, Alepha } from \"alepha\";\nimport { type DateTime, DateTimeProvider } from \"alepha/datetime\";\nimport { $logger } from \"alepha/logger\";\nimport { type Cron, parseCronExpression } from \"cron-schedule\";\n\nexport class CronProvider {\n protected readonly dt = $inject(DateTimeProvider);\n protected readonly alepha = $inject(Alepha);\n protected readonly log = $logger();\n protected readonly cronJobs: Array<CronJob> = [];\n\n public getCronJobs(): Array<CronJob> {\n return this.cronJobs;\n }\n\n protected readonly start = $hook({\n on: \"start\",\n handler: () => {\n for (const cron of this.cronJobs) {\n if (!cron.running) {\n cron.running = true;\n this.log.debug(\n `Starting cron task '${cron.name}' with '${cron.expression}'`,\n );\n this.run(cron);\n }\n }\n },\n });\n\n protected readonly stop = $hook({\n on: \"stop\",\n handler: () => {\n for (const cron of this.cronJobs) {\n this.abort(cron);\n }\n },\n });\n\n protected boot(name: string | CronJob) {\n const cron =\n typeof name === \"string\"\n ? this.cronJobs.find((c) => c.name === name)\n : name;\n\n if (!cron) {\n return;\n }\n\n cron.running = true;\n\n this.log.debug(\n `Starting cron task '${cron.name}' with '${cron.expression}'`,\n );\n\n this.run(cron);\n }\n\n public abort(name: string | CronJob): void {\n const cron =\n typeof name === \"string\"\n ? this.cronJobs.find((c) => c.name === name)\n : name;\n\n if (!cron) {\n return;\n }\n\n cron.running = false;\n cron.abort.abort();\n this.log.debug(`Cron task '${cron.name}' stopped`);\n }\n\n /**\n * Registers a cron job.\n *\n * It's automatically done when using the `$scheduler` primitive but can also be used manually.\n */\n public createCronJob(\n name: string,\n expression: string,\n handler: (context: { now: DateTime }) => Promise<void>,\n start?: boolean,\n ): void {\n const cron: CronJob = {\n name,\n cron: parseCronExpression(expression),\n expression,\n handler,\n loop: true,\n abort: new AbortController(),\n };\n\n this.cronJobs.push(cron);\n\n if (start && this.alepha.isStarted()) {\n this.boot(cron);\n }\n }\n\n protected run(task: CronJob, now = this.dt.now()): void {\n if (!task.running) {\n return;\n }\n\n const [next] = task.cron.getNextDates(1, now.toDate());\n if (!next) {\n return;\n }\n\n const duration = next.getTime() - now.toDate().getTime();\n\n task.abort = new AbortController();\n\n this.dt\n .wait(duration, {\n now: now.valueOf(),\n signal: task.abort.signal,\n })\n .then(() => {\n if (!task.running) {\n this.log.trace(\"Cron task stopped before execution\");\n return;\n }\n\n this.log.trace(\"Running cron task\");\n\n task.handler({ now: this.dt.of(next) }).catch((err) => {\n if (task.onError) {\n task.onError(err);\n } else {\n this.log.error(\"Error in cron task:\", err);\n }\n });\n\n if (task.loop) {\n this.run(task, this.dt.of(next));\n }\n })\n .catch((err) => {\n this.log.warn(\"Issue during cron waiting timer\", err as Error);\n });\n }\n}\n\nexport interface CronJob {\n name: string;\n expression: string;\n handler: (context: { now: DateTime }) => Promise<void>;\n cron: Cron;\n loop: boolean;\n running?: boolean;\n onError?: (error: Error) => void;\n abort: AbortController;\n}\n","import {\n $env,\n $inject,\n Alepha,\n type Async,\n createPrimitive,\n KIND,\n Primitive,\n type Static,\n t,\n} from \"alepha\";\nimport {\n type DateTime,\n DateTimeProvider,\n type DurationLike,\n} from \"alepha/datetime\";\nimport { $lock } from \"alepha/lock\";\nimport { $logger } from \"alepha/logger\";\nimport { CronProvider } from \"../providers/CronProvider.ts\";\n\n/**\n * Scheduler primitive.\n */\nexport const $scheduler = (\n options: SchedulerPrimitiveOptions,\n): SchedulerPrimitive => {\n return createPrimitive(SchedulerPrimitive, options);\n};\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport type SchedulerPrimitiveOptions = {\n /**\n * Function to run on schedule.\n */\n handler: (args: SchedulerHandlerArguments) => Async<void>;\n\n /**\n * Name of the scheduler. Defaults to the function name.\n */\n name?: string;\n\n /**\n * Optional description of the scheduler.\n */\n description?: string;\n\n /**\n * Cron expression or interval to run the scheduler.\n */\n cron?: string;\n\n /**\n * Cron expression or interval to run the scheduler.\n */\n interval?: DurationLike;\n\n /**\n * If true, the scheduler will be locked and only one instance will run at a time.\n * You probably need to import {@link AlephaLockRedis} for distributed locking.\n *\n * @default true\n */\n lock?: boolean;\n};\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nconst envSchema = t.object({\n SCHEDULER_PREFIX: t.optional(\n t.text({\n description: \"Prefix store key\",\n }),\n ),\n});\n\ndeclare module \"alepha\" {\n interface Env extends Partial<Static<typeof envSchema>> {}\n}\n\nexport class SchedulerPrimitive extends Primitive<SchedulerPrimitiveOptions> {\n protected readonly log = $logger();\n protected readonly env = $env(envSchema);\n protected readonly alepha = $inject(Alepha);\n protected readonly dateTimeProvider = $inject(DateTimeProvider);\n protected readonly cronProvider = $inject(CronProvider);\n\n public get name(): string {\n return (\n this.options.name ??\n `${this.config.service.name}.${this.config.propertyKey}`\n );\n }\n\n protected onInit() {\n if (this.options.interval) {\n this.dateTimeProvider.createInterval(\n () => this.trigger(),\n this.options.interval,\n );\n }\n if (this.options.cron) {\n this.cronProvider.createCronJob(this.name, this.options.cron, () =>\n this.trigger(),\n );\n }\n }\n\n public async trigger(): Promise<void> {\n if (!this.alepha.isStarted()) {\n return;\n }\n\n const context = this.alepha.context.createContextId();\n\n await this.alepha.context.run(\n async () => {\n try {\n const now = this.dateTimeProvider.now();\n\n await this.alepha.events.emit(\"scheduler:begin\", {\n name: this.name,\n now,\n context,\n });\n\n if (this.options.lock !== false) {\n await this.schedulerLock.run({ now });\n } else {\n await this.options.handler({ now });\n }\n\n await this.alepha.events.emit(\n \"scheduler:success\",\n {\n name: this.name,\n context,\n },\n {\n catch: true,\n },\n );\n } catch (error) {\n await this.alepha.events.emit(\n \"scheduler:error\",\n {\n name: this.name,\n error: error as Error,\n context,\n },\n {\n catch: true,\n },\n );\n\n this.log.error(\"Error running scheduler:\", error);\n }\n\n await this.alepha.events.emit(\n \"scheduler:end\",\n {\n name: this.name,\n context,\n },\n {\n catch: true,\n },\n );\n },\n {\n context,\n },\n );\n }\n\n protected schedulerLock = $lock({\n name: () => {\n const prefix = this.env.SCHEDULER_PREFIX\n ? `${this.env.SCHEDULER_PREFIX}:`\n : \"\";\n return `${prefix}scheduler:${this.name}`;\n },\n handler: async (args: SchedulerHandlerArguments) => {\n await this.options.handler(args);\n },\n });\n}\n\n$scheduler[KIND] = SchedulerPrimitive;\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport interface SchedulerHandlerArguments {\n now: DateTime;\n}\n","export const CRON = {\n EVERY_MINUTE: \"* * * * *\",\n EVERY_5_MINUTES: \"*/5 * * * *\",\n EVERY_15_MINUTES: \"*/15 * * * *\",\n EVERY_30_MINUTES: \"*/30 * * * *\",\n EVERY_HOUR: \"0 * * * *\",\n EVERY_DAY_AT_MIDNIGHT: \"0 0 * * *\",\n};\n","import { $module } from \"alepha\";\nimport type { DateTime } from \"alepha/datetime\";\nimport { AlephaLock } from \"alepha/lock\";\nimport { $scheduler } from \"./primitives/$scheduler.ts\";\nimport { CronProvider } from \"./providers/CronProvider.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport * from \"./constants/CRON.ts\";\nexport * from \"./primitives/$scheduler.ts\";\nexport * from \"./providers/CronProvider.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\ndeclare module \"alepha\" {\n interface Hooks {\n \"scheduler:begin\": {\n name: string;\n now: DateTime;\n context: string;\n };\n\n \"scheduler:success\": { name: string; context: string };\n\n \"scheduler:error\": {\n name: string;\n error: Error;\n context: string;\n };\n\n \"scheduler:end\": { name: string; context: string };\n }\n}\n\n// ---------------------------------------------------------------------------------------------------------------------\n\n/**\n * | type | quality | stability |\n * |------|---------|-----------|\n * | backend | rare | stable |\n *\n * Cron and interval-based task execution.\n *\n * **Features:**\n * - Scheduled tasks with cron expressions (e.g., `0 0 * * *`)\n * - Interval-based scheduling\n * - Distributed locking to prevent duplicate execution\n * - Lifecycle hooks: `begin`, `success`, `error`, `end`\n *\n * @module alepha.scheduler\n */\nexport const AlephaScheduler = $module({\n name: \"alepha.scheduler\",\n primitives: [$scheduler],\n services: [AlephaLock, CronProvider],\n});\n"],"x_google_ignoreList":[0,1,2],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import * as alepha3 from "alepha";
2
2
  import { Alepha, KIND, Primitive, Static } from "alepha";
3
3
  import { FetchOptions, ServerRequest, ServerRouterProvider, UnauthorizedError } from "alepha/server";
4
- import * as alepha_logger2 from "alepha/logger";
4
+ import * as alepha_logger0 from "alepha/logger";
5
5
  import { DateTimeProvider, Duration, DurationLike } from "alepha/datetime";
6
6
 
7
7
  //#region ../../src/security/schemas/userAccountInfoSchema.d.ts
@@ -61,20 +61,48 @@ declare class SecurityError extends Error {
61
61
  readonly status = 403;
62
62
  }
63
63
  //#endregion
64
+ //#region ../../src/security/interfaces/IssuerResolver.d.ts
65
+ /**
66
+ * User info that a resolver returns.
67
+ * This is the input to `SecurityProvider.createUser()`.
68
+ */
69
+ type UserInfo = Omit<UserAccount, "sessionId"> & {
70
+ sessionId?: string;
71
+ };
72
+ /**
73
+ * Resolver definition for authenticating users from requests.
74
+ */
75
+ interface IssuerResolver {
76
+ /**
77
+ * Priority (lower = first). Default: 100
78
+ */
79
+ priority?: number;
80
+ /**
81
+ * Resolve user from HTTP request.
82
+ * Return UserInfo if authenticated, null to try next resolver.
83
+ * Throw UnauthorizedError to stop chain.
84
+ */
85
+ onRequest: (req: ServerRequest) => Promise<UserInfo | null>;
86
+ }
87
+ //#endregion
64
88
  //#region ../../src/security/providers/ServerBasicAuthProvider.d.ts
65
89
  interface BasicAuthOptions {
66
90
  username: string;
67
91
  password: string;
68
92
  }
69
93
  interface BasicAuthPrimitiveConfig extends BasicAuthOptions {
70
- /** Name identifier for this basic auth (default: property key) */
94
+ /**
95
+ * Name identifier for this basic auth (default: property key).
96
+ */
71
97
  name?: string;
72
- /** Path patterns to match (supports wildcards like /devtools/*) */
98
+ /**
99
+ * Path patterns to match (supports wildcards like /devtools/*).
100
+ */
73
101
  paths?: string[];
74
102
  }
75
103
  declare class ServerBasicAuthProvider {
76
104
  protected readonly alepha: Alepha;
77
- protected readonly log: alepha_logger2.Logger;
105
+ protected readonly log: alepha_logger0.Logger;
78
106
  protected readonly routerProvider: ServerRouterProvider;
79
107
  protected readonly realm = "Secure Area";
80
108
  /**
@@ -471,7 +499,7 @@ interface JWTVerifyOptions extends VerifyOptions, JWTClaimVerificationOptions {}
471
499
  * Provides utilities for working with JSON Web Tokens (JWT).
472
500
  */
473
501
  declare class JwtProvider {
474
- protected readonly log: alepha_logger2.Logger;
502
+ protected readonly log: alepha_logger0.Logger;
475
503
  protected readonly keystore: KeyLoaderHolder[];
476
504
  protected readonly dateTimeProvider: DateTimeProvider;
477
505
  protected readonly encoder: TextEncoder;
@@ -567,7 +595,7 @@ declare class SecurityProvider {
567
595
  protected readonly UNKNOWN_USER_NAME = "Anonymous User";
568
596
  protected readonly PERMISSION_REGEXP: RegExp;
569
597
  protected readonly PERMISSION_REGEXP_WILDCARD: RegExp;
570
- protected readonly log: alepha_logger2.Logger;
598
+ protected readonly log: alepha_logger0.Logger;
571
599
  protected readonly jwt: JwtProvider;
572
600
  protected readonly env: {
573
601
  APP_SECRET: string;
@@ -583,6 +611,10 @@ declare class SecurityProvider {
583
611
  */
584
612
  protected readonly realms: Realm[];
585
613
  protected start: alepha3.HookPrimitive<"start">;
614
+ /**
615
+ * Creates a default JWT resolver for a realm.
616
+ */
617
+ protected createDefaultJwtResolver(realmName: string): IssuerResolver;
586
618
  /**
587
619
  * Adds a role to one or more realms.
588
620
  *
@@ -615,6 +647,42 @@ declare class SecurityProvider {
615
647
  * @returns The user info created from the payload.
616
648
  */
617
649
  createUserFromPayload(payload: JWTPayload, realmName?: string): UserAccount;
650
+ /**
651
+ * Generic user creation from any source (JWT, API key, etc.).
652
+ * Handles permission checking, ownership, default roles.
653
+ */
654
+ createUser(userInfo: UserInfo, options?: {
655
+ realm?: string;
656
+ permission?: Permission | string;
657
+ }): UserAccountToken;
658
+ /**
659
+ * Register a resolver to a realm.
660
+ * Resolvers are sorted by priority (lower = first).
661
+ */
662
+ registerResolver(resolver: IssuerResolver, realmName?: string): void;
663
+ /**
664
+ * Get a realm by name.
665
+ * Throws if realm not found.
666
+ */
667
+ getRealm(realmName?: string): Realm;
668
+ /**
669
+ * Resolve user from request using registered resolvers.
670
+ * Returns undefined if no resolver could authenticate (no auth provided).
671
+ * Throws UnauthorizedError if auth was provided but invalid.
672
+ *
673
+ * Note: This method tries resolvers from ALL realms to find a match,
674
+ * regardless of the `realm` option. The `realm` option is only used for
675
+ * permission checking after the user is resolved.
676
+ */
677
+ resolveUserFromServerRequest(req: {
678
+ url: URL | string;
679
+ headers: {
680
+ authorization?: string;
681
+ };
682
+ }, options?: {
683
+ realm?: string;
684
+ permission?: Permission | string;
685
+ }): Promise<UserAccountToken | undefined>;
618
686
  /**
619
687
  * Checks if the user has the specified permission.
620
688
  *
@@ -711,6 +779,10 @@ interface Realm {
711
779
  * By default, SecurityProvider has his own implementation, but this method allow to override it.
712
780
  */
713
781
  profile?: (raw: Record<string, any>) => UserAccount;
782
+ /**
783
+ * Custom resolvers for this realm (sorted by priority).
784
+ */
785
+ resolvers?: IssuerResolver[];
714
786
  }
715
787
  interface SecurityCheckResult {
716
788
  isAuthorized: boolean;
@@ -750,6 +822,10 @@ type IssuerPrimitiveOptions = {
750
822
  * Parse the JWT payload to create a user account info.
751
823
  */
752
824
  profile?: (jwtPayload: Record<string, any>) => UserAccount;
825
+ /**
826
+ * Custom resolvers (in addition to default JWT resolver).
827
+ */
828
+ resolvers?: IssuerResolver[];
753
829
  } & (IssuerInternal | IssuerExternal);
754
830
  interface IssuerSettings {
755
831
  accessToken?: {
@@ -795,11 +871,20 @@ declare class IssuerPrimitive extends Primitive<IssuerPrimitiveOptions> {
795
871
  protected readonly securityProvider: SecurityProvider;
796
872
  protected readonly dateTimeProvider: DateTimeProvider;
797
873
  protected readonly jwt: JwtProvider;
798
- protected readonly log: alepha_logger2.Logger;
874
+ protected readonly log: alepha_logger0.Logger;
799
875
  get name(): string;
800
876
  get accessTokenExpiration(): Duration;
801
877
  get refreshTokenExpiration(): Duration;
802
878
  protected onInit(): void;
879
+ /**
880
+ * Creates the default JWT resolver.
881
+ */
882
+ protected createJwtResolver(): IssuerResolver;
883
+ /**
884
+ * Register a resolver to this issuer.
885
+ * Resolvers are sorted by priority (lower = first).
886
+ */
887
+ registerResolver(resolver: IssuerResolver): void;
803
888
  /**
804
889
  * Get all roles in the issuer.
805
890
  */
@@ -979,10 +1064,11 @@ declare class CryptoProvider {
979
1064
  //#endregion
980
1065
  //#region ../../src/security/providers/ServerSecurityProvider.d.ts
981
1066
  declare class ServerSecurityProvider {
982
- protected readonly log: alepha_logger2.Logger;
1067
+ protected readonly log: alepha_logger0.Logger;
983
1068
  protected readonly securityProvider: SecurityProvider;
984
1069
  protected readonly jwtProvider: JwtProvider;
985
1070
  protected readonly alepha: Alepha;
1071
+ protected readonly resolvers: Array<ServerSecurityUserResolver>;
986
1072
  protected readonly onConfigure: alepha3.HookPrimitive<"configure">;
987
1073
  protected readonly onActionRequest: alepha3.HookPrimitive<"action:onRequest">;
988
1074
  protected readonly onRequest: alepha3.HookPrimitive<"server:onRequest">;
@@ -1008,6 +1094,7 @@ type ServerRouteSecure = {
1008
1094
  realm?: string;
1009
1095
  basic?: BasicAuthOptions;
1010
1096
  };
1097
+ type ServerSecurityUserResolver = (request: ServerRequest) => Promise<UserAccountToken | undefined>;
1011
1098
  //#endregion
1012
1099
  //#region ../../src/security/index.d.ts
1013
1100
  declare module "alepha" {
@@ -1059,19 +1146,23 @@ declare module "alepha/server" {
1059
1146
  }
1060
1147
  }
1061
1148
  /**
1062
- * Provides comprehensive authentication and authorization capabilities with JWT tokens, role-based access control, and user management.
1149
+ * | type | quality | stability |
1150
+ * |------|---------|-----------|
1151
+ * | backend | epic | stable |
1063
1152
  *
1064
- * The security module enables building secure applications using primitives like `$issuer`, `$role`, and `$permission`
1065
- * on class properties. It offers JWT-based authentication, fine-grained permissions, service accounts, and seamless
1066
- * integration with various authentication providers and user management systems.
1153
+ * Complete authentication and authorization system with JWT, RBAC, and multi-issuer support.
1067
1154
  *
1068
- * When used with `AlephaServer`, this module automatically registers `ServerSecurityProvider` and `ServerBasicAuthProvider`
1069
- * to protect HTTP routes and actions with JWT and Basic Auth.
1155
+ * **Features:**
1156
+ * - JWT token issuer with role definitions
1157
+ * - Role-based access control (RBAC)
1158
+ * - Fine-grained permissions
1159
+ * - HTTP Basic Authentication
1160
+ * - Service-to-service authentication
1161
+ * - Multi-issuer support for federated auth
1162
+ * - JWKS (JSON Web Key Set) for external issuers
1163
+ * - Token refresh logic
1164
+ * - User profile extraction from JWT
1070
1165
  *
1071
- * @see {@link $issuer}
1072
- * @see {@link $role}
1073
- * @see {@link $permission}
1074
- * @see {@link $basicAuth}
1075
1166
  * @module alepha.security
1076
1167
  */
1077
1168
  declare const AlephaSecurity: alepha3.Service<alepha3.Module>;
@@ -1080,5 +1171,5 @@ declare const AlephaSecurity: alepha3.Service<alepha3.Module>;
1080
1171
  */
1081
1172
  declare const AlephaServerSecurity: alepha3.Service<alepha3.Module>;
1082
1173
  //#endregion
1083
- export { $basicAuth, $issuer, $permission, $role, $serviceAccount, AbstractBasicAuthPrimitive, AccessTokenResponse, AlephaSecurity, AlephaServerSecurity, BasicAuthOptions, BasicAuthPrimitive, BasicAuthPrimitiveConfig, CreateTokenOptions, CryptoProvider, DEFAULT_APP_SECRET, ExtendedJWTPayload, InvalidCredentialsError, InvalidPermissionError, IssuerExternal, IssuerInternal, IssuerPrimitive, IssuerPrimitiveOptions, IssuerSettings, JwtParseResult, JwtProvider, JwtSignOptions, KeyLoader, KeyLoaderHolder, Oauth2ServiceAccountPrimitiveOptions, Permission, PermissionPrimitive, PermissionPrimitiveOptions, Realm, Role, RolePrimitive, RolePrimitiveOptions, SecurityCheckResult, SecurityError, SecurityProvider, ServerBasicAuthProvider, ServerRouteSecure, ServerSecurityProvider, ServiceAccountPrimitive, ServiceAccountPrimitiveOptions, ServiceAccountStore, UserAccount, UserAccountToken, isBasicAuth, permissionSchema, roleSchema, userAccountInfoSchema };
1174
+ export { $basicAuth, $issuer, $permission, $role, $serviceAccount, AbstractBasicAuthPrimitive, AccessTokenResponse, AlephaSecurity, AlephaServerSecurity, BasicAuthOptions, BasicAuthPrimitive, BasicAuthPrimitiveConfig, CreateTokenOptions, CryptoProvider, DEFAULT_APP_SECRET, ExtendedJWTPayload, InvalidCredentialsError, InvalidPermissionError, IssuerExternal, IssuerInternal, IssuerPrimitive, IssuerPrimitiveOptions, IssuerResolver, IssuerSettings, JwtParseResult, JwtProvider, JwtSignOptions, KeyLoader, KeyLoaderHolder, Oauth2ServiceAccountPrimitiveOptions, Permission, PermissionPrimitive, PermissionPrimitiveOptions, Realm, Role, RolePrimitive, RolePrimitiveOptions, SecurityCheckResult, SecurityError, SecurityProvider, ServerBasicAuthProvider, ServerRouteSecure, ServerSecurityProvider, ServerSecurityUserResolver, ServiceAccountPrimitive, ServiceAccountPrimitiveOptions, ServiceAccountStore, UserAccount, UserAccountToken, UserInfo, isBasicAuth, permissionSchema, roleSchema, userAccountInfoSchema };
1084
1175
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":["JWKParameters","kty","alg","key_ops","ext","use","x5c","x5t","x5u","kid","JWK_OKP_Public","crv","x","JWK_OKP_Private","d","JWK_AKP_Public","pub","JWK_AKP_Private","priv","JWK_EC_Public","y","JWK_EC_Private","JWK_RSA_Public","e","n","JWK_RSA_Private","dp","dq","p","q","qi","JWK_oct","k","JWK","GenericGetKeyFunction","IProtectedHeader","IToken","ReturnKeyTypes","Promise","protectedHeader","token","GetKeyFunction","CryptoKey","KeyObject","Uint8Array","FlattenedJWSInput","JWSHeaderParameters","header","payload","protected","signature","GeneralJWSInput","Omit","signatures","FlattenedJWS","Partial","GeneralJWS","JoseHeaderParameters","Pick","jku","jwk","typ","cty","b64","crit","propName","JWEKeyManagementHeaderParameters","apu","apv","p2c","p2s","iv","epk","FlattenedJWE","JWEHeaderParameters","aad","ciphertext","encrypted_key","tag","unprotected","GeneralJWE","recipients","enc","zip","CritOption","DecryptOptions","keyManagementAlgorithms","contentEncryptionAlgorithms","maxPBES2Count","EncryptOptions","JWTClaimVerificationOptions","Date","audience","clockTolerance","issuer","maxTokenAge","subject","currentDate","requiredClaims","VerifyOptions","algorithms","SignOptions","JWTPayload","iss","sub","aud","jti","nbf","exp","iat","FlattenedDecryptResult","additionalAuthenticatedData","plaintext","sharedUnprotectedHeader","unprotectedHeader","GeneralDecryptResult","CompactDecryptResult","CompactJWEHeaderParameters","FlattenedVerifyResult","GeneralVerifyResult","CompactVerifyResult","CompactJWSHeaderParameters","JWTVerifyResult","PayloadType","JWTHeaderParameters","JWTDecryptResult","ResolvedKey","key","JSONWebKeySet","keys","type","crypto","subtle","generateKey","ReturnType","Awaited","Extract","ProduceJWT","setIssuer","setSubject","setAudience","setJti","jwtId","setNotBefore","input","setExpirationTime","setIssuedAt","types","JWTVerifyOptions","VerifyOptions","JWTClaimVerificationOptions","JWTVerifyGetKey","JWTHeaderParameters","FlattenedJWSInput","CryptoKey","KeyObject","JWK","Uint8Array","GenericGetKeyFunction","jwtVerify","PayloadType","JWTPayload","JWTVerifyResult","Promise","jwt","key","options","ResolvedKey","getKey"],"sources":["../../src/security/schemas/userAccountInfoSchema.ts","../../src/security/interfaces/UserAccountToken.ts","../../src/security/errors/InvalidCredentialsError.ts","../../src/security/errors/InvalidPermissionError.ts","../../src/security/errors/SecurityError.ts","../../src/security/providers/ServerBasicAuthProvider.ts","../../src/security/primitives/$basicAuth.ts","../../../../node_modules/jose/dist/types/types.d.ts","../../../../node_modules/jose/dist/types/jwt/verify.d.ts","../../src/security/providers/JwtProvider.ts","../../src/security/schemas/permissionSchema.ts","../../src/security/schemas/roleSchema.ts","../../src/security/providers/SecurityProvider.ts","../../src/security/primitives/$issuer.ts","../../src/security/primitives/$permission.ts","../../src/security/primitives/$role.ts","../../src/security/primitives/$serviceAccount.ts","../../src/security/providers/CryptoProvider.ts","../../src/security/providers/ServerSecurityProvider.ts","../../src/security/index.ts"],"x_google_ignoreList":[7,8],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","names":["JWKParameters","kty","alg","key_ops","ext","use","x5c","x5t","x5u","kid","JWK_OKP_Public","crv","x","JWK_OKP_Private","d","JWK_AKP_Public","pub","JWK_AKP_Private","priv","JWK_EC_Public","y","JWK_EC_Private","JWK_RSA_Public","e","n","JWK_RSA_Private","dp","dq","p","q","qi","JWK_oct","k","JWK","GenericGetKeyFunction","IProtectedHeader","IToken","ReturnKeyTypes","Promise","protectedHeader","token","GetKeyFunction","CryptoKey","KeyObject","Uint8Array","FlattenedJWSInput","JWSHeaderParameters","header","payload","protected","signature","GeneralJWSInput","Omit","signatures","FlattenedJWS","Partial","GeneralJWS","JoseHeaderParameters","Pick","jku","jwk","typ","cty","b64","crit","propName","JWEKeyManagementHeaderParameters","apu","apv","p2c","p2s","iv","epk","FlattenedJWE","JWEHeaderParameters","aad","ciphertext","encrypted_key","tag","unprotected","GeneralJWE","recipients","enc","zip","CritOption","DecryptOptions","keyManagementAlgorithms","contentEncryptionAlgorithms","maxPBES2Count","EncryptOptions","JWTClaimVerificationOptions","Date","audience","clockTolerance","issuer","maxTokenAge","subject","currentDate","requiredClaims","VerifyOptions","algorithms","SignOptions","JWTPayload","iss","sub","aud","jti","nbf","exp","iat","FlattenedDecryptResult","additionalAuthenticatedData","plaintext","sharedUnprotectedHeader","unprotectedHeader","GeneralDecryptResult","CompactDecryptResult","CompactJWEHeaderParameters","FlattenedVerifyResult","GeneralVerifyResult","CompactVerifyResult","CompactJWSHeaderParameters","JWTVerifyResult","PayloadType","JWTHeaderParameters","JWTDecryptResult","ResolvedKey","key","JSONWebKeySet","keys","type","crypto","subtle","generateKey","ReturnType","Awaited","Extract","ProduceJWT","setIssuer","setSubject","setAudience","setJti","jwtId","setNotBefore","input","setExpirationTime","setIssuedAt","types","JWTVerifyOptions","VerifyOptions","JWTClaimVerificationOptions","JWTVerifyGetKey","JWTHeaderParameters","FlattenedJWSInput","CryptoKey","KeyObject","JWK","Uint8Array","GenericGetKeyFunction","jwtVerify","PayloadType","JWTPayload","JWTVerifyResult","Promise","jwt","key","options","ResolvedKey","getKey"],"sources":["../../src/security/schemas/userAccountInfoSchema.ts","../../src/security/interfaces/UserAccountToken.ts","../../src/security/errors/InvalidCredentialsError.ts","../../src/security/errors/InvalidPermissionError.ts","../../src/security/errors/SecurityError.ts","../../src/security/interfaces/IssuerResolver.ts","../../src/security/providers/ServerBasicAuthProvider.ts","../../src/security/primitives/$basicAuth.ts","../../../../node_modules/jose/dist/types/types.d.ts","../../../../node_modules/jose/dist/types/jwt/verify.d.ts","../../src/security/providers/JwtProvider.ts","../../src/security/schemas/permissionSchema.ts","../../src/security/schemas/roleSchema.ts","../../src/security/providers/SecurityProvider.ts","../../src/security/primitives/$issuer.ts","../../src/security/primitives/$permission.ts","../../src/security/primitives/$role.ts","../../src/security/primitives/$serviceAccount.ts","../../src/security/providers/CryptoProvider.ts","../../src/security/providers/ServerSecurityProvider.ts","../../src/security/index.ts"],"x_google_ignoreList":[8,9],"mappings":"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"}