alepha 0.20.3 → 0.20.5

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 (218) hide show
  1. package/dist/api/audits/index.d.ts.map +1 -1
  2. package/dist/api/files/index.d.ts.map +1 -1
  3. package/dist/api/jobs/index.d.ts +14 -14
  4. package/dist/api/jobs/index.d.ts.map +1 -1
  5. package/dist/api/organizations/index.d.ts.map +1 -1
  6. package/dist/api/parameters/index.d.ts +6 -1
  7. package/dist/api/parameters/index.d.ts.map +1 -1
  8. package/dist/api/parameters/index.js +20 -4
  9. package/dist/api/parameters/index.js.map +1 -1
  10. package/dist/api/payments/index.d.ts.map +1 -1
  11. package/dist/api/users/index.browser.js +6 -0
  12. package/dist/api/users/index.browser.js.map +1 -1
  13. package/dist/api/users/index.d.ts +5032 -134
  14. package/dist/api/users/index.d.ts.map +1 -1
  15. package/dist/api/users/index.js +58 -10
  16. package/dist/api/users/index.js.map +1 -1
  17. package/dist/bin/index.js +0 -0
  18. package/dist/bucket/index.d.ts +77 -107
  19. package/dist/bucket/index.d.ts.map +1 -1
  20. package/dist/bucket/index.js +148 -4
  21. package/dist/bucket/index.js.map +1 -1
  22. package/dist/bucket/index.workerd.js +7 -1
  23. package/dist/bucket/index.workerd.js.map +1 -1
  24. package/dist/cache/core/index.d.ts +26 -0
  25. package/dist/cache/core/index.d.ts.map +1 -1
  26. package/dist/cache/core/index.js +11 -1
  27. package/dist/cache/core/index.js.map +1 -1
  28. package/dist/cache/core/index.workerd.js +11 -1
  29. package/dist/cache/core/index.workerd.js.map +1 -1
  30. package/dist/cli/config/index.d.ts +7 -5
  31. package/dist/cli/config/index.d.ts.map +1 -1
  32. package/dist/cli/config/index.js +2 -3
  33. package/dist/cli/config/index.js.map +1 -1
  34. package/dist/cli/core/index.d.ts +419 -12
  35. package/dist/cli/core/index.d.ts.map +1 -1
  36. package/dist/cli/core/index.js +22 -511
  37. package/dist/cli/core/index.js.map +1 -1
  38. package/dist/cli/devtools/index.d.ts +4 -8
  39. package/dist/cli/devtools/index.d.ts.map +1 -1
  40. package/dist/cli/devtools/index.js +13 -15
  41. package/dist/cli/devtools/index.js.map +1 -1
  42. package/dist/cli/platform/index.d.ts +10 -13
  43. package/dist/cli/platform/index.d.ts.map +1 -1
  44. package/dist/cli/platform/index.js +18 -15
  45. package/dist/cli/platform/index.js.map +1 -1
  46. package/dist/cli/vendor/index.d.ts +10 -13
  47. package/dist/cli/vendor/index.d.ts.map +1 -1
  48. package/dist/cli/vendor/index.js +16 -13
  49. package/dist/cli/vendor/index.js.map +1 -1
  50. package/dist/command/index.d.ts +1 -1
  51. package/dist/core/index.browser.js +27 -3
  52. package/dist/core/index.browser.js.map +1 -1
  53. package/dist/core/index.d.ts +6 -3
  54. package/dist/core/index.d.ts.map +1 -1
  55. package/dist/core/index.js +27 -3
  56. package/dist/core/index.js.map +1 -1
  57. package/dist/core/index.native.js +27 -3
  58. package/dist/core/index.native.js.map +1 -1
  59. package/dist/core/index.workerd.js +27 -3
  60. package/dist/core/index.workerd.js.map +1 -1
  61. package/dist/datetime/index.d.ts +69 -10
  62. package/dist/datetime/index.d.ts.map +1 -1
  63. package/dist/datetime/index.js +135 -13
  64. package/dist/datetime/index.js.map +1 -1
  65. package/dist/email/smtp/index.js +10636 -2
  66. package/dist/email/smtp/index.js.map +1 -1
  67. package/dist/fake/index.d.ts +8085 -4
  68. package/dist/fake/index.d.ts.map +1 -1
  69. package/dist/fake/index.js +33554 -3
  70. package/dist/fake/index.js.map +1 -1
  71. package/dist/lock/core/index.d.ts +30 -2
  72. package/dist/lock/core/index.d.ts.map +1 -1
  73. package/dist/lock/core/index.js +35 -12
  74. package/dist/lock/core/index.js.map +1 -1
  75. package/dist/mcp/index.d.ts +238 -31
  76. package/dist/mcp/index.d.ts.map +1 -1
  77. package/dist/mcp/index.js +198 -71
  78. package/dist/mcp/index.js.map +1 -1
  79. package/dist/orm/core/index.browser.js +1 -1
  80. package/dist/orm/core/index.browser.js.map +1 -1
  81. package/dist/orm/core/index.bun.js +4 -3
  82. package/dist/orm/core/index.bun.js.map +1 -1
  83. package/dist/orm/core/index.d.ts +4877 -9
  84. package/dist/orm/core/index.d.ts.map +1 -1
  85. package/dist/orm/core/index.js +4 -3
  86. package/dist/orm/core/index.js.map +1 -1
  87. package/dist/orm/postgres/index.d.ts +608 -1
  88. package/dist/orm/postgres/index.d.ts.map +1 -1
  89. package/dist/react/core/index.d.ts +102 -1
  90. package/dist/react/core/index.d.ts.map +1 -1
  91. package/dist/react/core/index.js +65 -1
  92. package/dist/react/core/index.js.map +1 -1
  93. package/dist/react/form/index.d.ts +6 -0
  94. package/dist/react/form/index.d.ts.map +1 -1
  95. package/dist/react/form/index.js +7 -7
  96. package/dist/react/form/index.js.map +1 -1
  97. package/dist/react/i18n/index.d.ts +7 -1
  98. package/dist/react/i18n/index.d.ts.map +1 -1
  99. package/dist/react/i18n/index.js +6 -0
  100. package/dist/react/i18n/index.js.map +1 -1
  101. package/dist/react/router/index.browser.js +20 -2
  102. package/dist/react/router/index.browser.js.map +1 -1
  103. package/dist/react/router/index.d.ts +36 -4
  104. package/dist/react/router/index.d.ts.map +1 -1
  105. package/dist/react/router/index.js +20 -2
  106. package/dist/react/router/index.js.map +1 -1
  107. package/dist/react/testing/chunk-6Ep1yQYe.js +16 -0
  108. package/dist/react/testing/index.d.ts +411 -1
  109. package/dist/react/testing/index.d.ts.map +1 -1
  110. package/dist/react/testing/index.js +12293 -13
  111. package/dist/react/testing/index.js.map +1 -1
  112. package/dist/react/ui/index.d.ts +195 -1
  113. package/dist/react/ui/index.d.ts.map +1 -1
  114. package/dist/react/ui/index.js +61 -1
  115. package/dist/react/ui/index.js.map +1 -1
  116. package/dist/scheduler/index.d.ts +84 -3
  117. package/dist/scheduler/index.d.ts.map +1 -1
  118. package/dist/scheduler/index.js +390 -1
  119. package/dist/scheduler/index.js.map +1 -1
  120. package/dist/scheduler/index.workerd.js +390 -1
  121. package/dist/scheduler/index.workerd.js.map +1 -1
  122. package/dist/security/index.d.ts +325 -2
  123. package/dist/security/index.d.ts.map +1 -1
  124. package/dist/security/index.js +1361 -2
  125. package/dist/security/index.js.map +1 -1
  126. package/dist/server/auth/index.d.ts +1054 -1
  127. package/dist/server/auth/index.d.ts.map +1 -1
  128. package/dist/server/auth/index.js +1223 -1
  129. package/dist/server/auth/index.js.map +1 -1
  130. package/dist/server/core/index.browser.js +10 -3
  131. package/dist/server/core/index.browser.js.map +1 -1
  132. package/dist/server/core/index.d.ts.map +1 -1
  133. package/dist/server/core/index.js +28 -5
  134. package/dist/server/core/index.js.map +1 -1
  135. package/dist/server/metrics/index.d.ts +514 -1
  136. package/dist/server/metrics/index.d.ts.map +1 -1
  137. package/dist/server/metrics/index.js +4374 -4
  138. package/dist/server/metrics/index.js.map +1 -1
  139. package/dist/server/swagger/index.d.ts.map +1 -1
  140. package/dist/server/swagger/index.js +3 -4
  141. package/dist/server/swagger/index.js.map +1 -1
  142. package/dist/websocket/index.browser.js +11 -5
  143. package/dist/websocket/index.browser.js.map +1 -1
  144. package/dist/websocket/index.d.ts +3 -1
  145. package/dist/websocket/index.d.ts.map +1 -1
  146. package/dist/websocket/index.js +21 -6
  147. package/dist/websocket/index.js.map +1 -1
  148. package/package.json +416 -8
  149. package/src/api/parameters/services/ParameterProvider.ts +21 -4
  150. package/src/api/users/__tests__/SessionService.spec.ts +99 -0
  151. package/src/api/users/__tests__/UserJobs.spec.ts +67 -0
  152. package/src/api/users/atoms/realmAuthSettingsAtom.ts +15 -0
  153. package/src/api/users/entities/sessions.ts +6 -0
  154. package/src/api/users/jobs/UserJobs.ts +44 -17
  155. package/src/api/users/providers/RealmProvider.ts +4 -0
  156. package/src/api/users/services/SessionService.ts +27 -0
  157. package/src/bucket/__tests__/NodeS3BucketProvider.spec.ts +74 -0
  158. package/src/bucket/index.ts +19 -2
  159. package/src/bucket/primitives/$bucket.ts +9 -1
  160. package/src/bucket/providers/CloudflareR2Provider.ts +2 -137
  161. package/src/bucket/providers/NodeS3BucketProvider.ts +218 -0
  162. package/src/cache/core/index.ts +29 -0
  163. package/src/cache/core/primitives/$cache.ts +14 -1
  164. package/src/cli/config/defineConfig.ts +13 -15
  165. package/src/cli/core/__tests__/init.spec.ts +6 -7
  166. package/src/cli/core/services/ProjectScaffolder.ts +18 -14
  167. package/src/cli/core/tasks/BuildCloudflareTask.ts +5 -0
  168. package/src/cli/core/templates/agentMd.ts +2 -10
  169. package/src/cli/core/templates/saasAdminLayoutTsx.ts +3 -3
  170. package/src/cli/devtools/index.ts +12 -26
  171. package/src/cli/platform/index.ts +15 -24
  172. package/src/cli/vendor/atoms/vendorOptions.ts +1 -1
  173. package/src/cli/vendor/index.ts +14 -23
  174. package/src/core/Alepha.ts +11 -1
  175. package/src/core/helpers/ref.ts +18 -0
  176. package/src/core/index.shared.ts +1 -0
  177. package/src/core/providers/SchemaValidator.ts +9 -1
  178. package/src/core/providers/TypeProvider.ts +1 -2
  179. package/src/datetime/REFACTORING.md +118 -0
  180. package/src/datetime/providers/DateTimeProvider.ts +203 -24
  181. package/src/lock/core/index.ts +31 -0
  182. package/src/lock/core/primitives/$lock.ts +14 -1
  183. package/src/mcp/__tests__/jsonrpc.spec.ts +1 -1
  184. package/src/mcp/helpers/jsonrpc.ts +26 -1
  185. package/src/mcp/index.ts +10 -5
  186. package/src/mcp/interfaces/McpTypes.ts +83 -6
  187. package/src/mcp/primitives/$prompt.ts +18 -1
  188. package/src/mcp/primitives/$resource.ts +18 -1
  189. package/src/mcp/primitives/$tool.ts +83 -7
  190. package/src/mcp/providers/McpServerProvider.ts +74 -16
  191. package/src/mcp/transports/StreamableHttpMcpTransport.ts +226 -0
  192. package/src/orm/REFACTORING.md +330 -0
  193. package/src/orm/core/primitives/$transactional.ts +11 -0
  194. package/src/orm/core/schemas/updateSchema.ts +1 -1
  195. package/src/orm/core/services/PgRelationManager.ts +4 -2
  196. package/src/react/core/__tests__/useQuery.browser.spec.tsx +86 -0
  197. package/src/react/core/hooks/useQuery.ts +153 -0
  198. package/src/react/core/index.ts +1 -0
  199. package/src/react/form/services/FormModel.ts +15 -6
  200. package/src/react/form/services/parseField.ts +8 -0
  201. package/src/react/i18n/providers/I18nProvider.ts +8 -2
  202. package/src/react/router/__tests__/$page.spec.tsx +0 -16
  203. package/src/react/router/__tests__/ssr.spec.tsx +339 -0
  204. package/src/react/router/primitives/$page.ts +28 -4
  205. package/src/react/router/providers/ReactPageProvider.ts +27 -9
  206. package/src/react/ui/atoms/uiThemeListAtom.ts +36 -0
  207. package/src/react/ui/index.ts +6 -0
  208. package/src/react/ui/services/SchemaControl.ts +209 -0
  209. package/src/security/primitives/$issuer.ts +6 -3
  210. package/src/server/core/__tests__/ServerRouterProvider-serializationError.spec.ts +75 -0
  211. package/src/server/core/__tests__/ServerRouterProvider-validationError.spec.ts +306 -0
  212. package/src/server/core/errors/ValidationError.ts +13 -1
  213. package/src/server/core/primitives/$action.ts +16 -5
  214. package/src/server/core/providers/ServerRouterProvider.ts +26 -4
  215. package/src/server/swagger/providers/ServerSwaggerProvider.ts +5 -7
  216. package/src/websocket/providers/NodeWebSocketServerProvider.ts +10 -4
  217. package/src/websocket/services/WebSocketClient.ts +11 -5
  218. package/src/mcp/transports/SseMcpTransport.ts +0 -182
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "alepha",
3
3
  "description": "Easy-to-use modern TypeScript framework for building many kind of applications.",
4
4
  "author": "Feunard",
5
- "version": "0.20.3",
5
+ "version": "0.20.5",
6
6
  "type": "module",
7
7
  "engines": {
8
8
  "node": ">=22.0.0"
@@ -25,14 +25,16 @@
25
25
  "dayjs": "^1.11.20",
26
26
  "drizzle-orm": "^0.45.2",
27
27
  "postgres": "^3.4.9",
28
+ "s3mini": "^0.9.4",
28
29
  "tsx": "^4.21.0",
29
- "typebox": "^1.1.34",
30
+ "typebox": "^1.1.37",
30
31
  "typescript": "^6.0.3",
31
32
  "vite-bundle-analyzer": "^1.3.8",
32
33
  "ws": "^8.20.0"
33
34
  },
34
35
  "devDependencies": {
35
- "@biomejs/biome": "^2.4.13",
36
+ "@biomejs/biome": "^2.4.14",
37
+ "@cloudflare/workers-types": "^4.20260503.1",
36
38
  "@electric-sql/pglite": "^0.4.5",
37
39
  "@faker-js/faker": "^10.4.0",
38
40
  "@tailwindcss/vite": "^4.2.4",
@@ -47,7 +49,7 @@
47
49
  "cron-schedule": "^6.0.0",
48
50
  "drizzle-kit": "^0.31.10",
49
51
  "jose": "^6.2.3",
50
- "jsdom": "^29.1.0",
52
+ "jsdom": "^29.1.1",
51
53
  "nodemailer": "^8.0.7",
52
54
  "openid-client": "^6.8.4",
53
55
  "prom-client": "^15.1.3",
@@ -290,13 +292,13 @@
290
292
  "types": "./dist/orm/core/index.d.ts",
291
293
  "react-native": "./dist/orm/core/index.browser.js",
292
294
  "browser": "./dist/orm/core/index.browser.js",
293
- "bun": "./src/orm/core/index.bun.ts",
295
+ "bun": "./dist/orm/core/index.bun.js",
294
296
  "import": "./dist/orm/core/index.js",
295
297
  "default": "./dist/orm/core/index.js"
296
298
  },
297
299
  "./orm/postgres": {
298
300
  "types": "./dist/orm/postgres/index.d.ts",
299
- "bun": "./src/orm/postgres/index.bun.ts",
301
+ "bun": "./dist/orm/postgres/index.bun.js",
300
302
  "import": "./dist/orm/postgres/index.js",
301
303
  "default": "./dist/orm/postgres/index.js"
302
304
  },
@@ -369,7 +371,7 @@
369
371
  },
370
372
  "./redis": {
371
373
  "types": "./dist/redis/index.d.ts",
372
- "bun": "./src/redis/index.bun.ts",
374
+ "bun": "./dist/redis/index.bun.js",
373
375
  "import": "./dist/redis/index.js",
374
376
  "default": "./dist/redis/index.js"
375
377
  },
@@ -496,5 +498,411 @@
496
498
  },
497
499
  "./tsconfig.base": "./tsconfig.base.json",
498
500
  "./package.json": "./package.json"
501
+ },
502
+ "publishConfig": {
503
+ "main": "./dist/core/index.js",
504
+ "types": "./dist/core/index.d.ts",
505
+ "bin": "./dist/bin/index.js",
506
+ "exports": {
507
+ "./api/audits": {
508
+ "types": "./dist/api/audits/index.d.ts",
509
+ "react-native": "./dist/api/audits/index.browser.js",
510
+ "browser": "./dist/api/audits/index.browser.js",
511
+ "import": "./dist/api/audits/index.js",
512
+ "default": "./dist/api/audits/index.js"
513
+ },
514
+ "./api/files": {
515
+ "types": "./dist/api/files/index.d.ts",
516
+ "react-native": "./dist/api/files/index.browser.js",
517
+ "browser": "./dist/api/files/index.browser.js",
518
+ "import": "./dist/api/files/index.js",
519
+ "default": "./dist/api/files/index.js"
520
+ },
521
+ "./api/jobs": {
522
+ "types": "./dist/api/jobs/index.d.ts",
523
+ "react-native": "./dist/api/jobs/index.browser.js",
524
+ "browser": "./dist/api/jobs/index.browser.js",
525
+ "import": "./dist/api/jobs/index.js",
526
+ "default": "./dist/api/jobs/index.js"
527
+ },
528
+ "./api/keys": {
529
+ "types": "./dist/api/keys/index.d.ts",
530
+ "import": "./dist/api/keys/index.js",
531
+ "default": "./dist/api/keys/index.js"
532
+ },
533
+ "./api/notifications": {
534
+ "types": "./dist/api/notifications/index.d.ts",
535
+ "react-native": "./dist/api/notifications/index.browser.js",
536
+ "browser": "./dist/api/notifications/index.browser.js",
537
+ "import": "./dist/api/notifications/index.js",
538
+ "default": "./dist/api/notifications/index.js"
539
+ },
540
+ "./api/organizations": {
541
+ "types": "./dist/api/organizations/index.d.ts",
542
+ "react-native": "./dist/api/organizations/index.browser.js",
543
+ "browser": "./dist/api/organizations/index.browser.js",
544
+ "import": "./dist/api/organizations/index.js",
545
+ "default": "./dist/api/organizations/index.js"
546
+ },
547
+ "./api/parameters": {
548
+ "types": "./dist/api/parameters/index.d.ts",
549
+ "react-native": "./dist/api/parameters/index.browser.js",
550
+ "browser": "./dist/api/parameters/index.browser.js",
551
+ "import": "./dist/api/parameters/index.js",
552
+ "default": "./dist/api/parameters/index.js"
553
+ },
554
+ "./api/payments": {
555
+ "types": "./dist/api/payments/index.d.ts",
556
+ "import": "./dist/api/payments/index.js",
557
+ "default": "./dist/api/payments/index.js"
558
+ },
559
+ "./api/users": {
560
+ "types": "./dist/api/users/index.d.ts",
561
+ "react-native": "./dist/api/users/index.browser.js",
562
+ "browser": "./dist/api/users/index.browser.js",
563
+ "import": "./dist/api/users/index.js",
564
+ "default": "./dist/api/users/index.js"
565
+ },
566
+ "./api/verifications": {
567
+ "types": "./dist/api/verifications/index.d.ts",
568
+ "react-native": "./dist/api/verifications/index.browser.js",
569
+ "browser": "./dist/api/verifications/index.browser.js",
570
+ "import": "./dist/api/verifications/index.js",
571
+ "default": "./dist/api/verifications/index.js"
572
+ },
573
+ "./batch": {
574
+ "types": "./dist/batch/index.d.ts",
575
+ "import": "./dist/batch/index.js",
576
+ "default": "./dist/batch/index.js"
577
+ },
578
+ "./bin": {
579
+ "types": "./dist/bin/index.d.ts",
580
+ "import": "./dist/bin/index.js",
581
+ "default": "./dist/bin/index.js"
582
+ },
583
+ "./bucket": {
584
+ "types": "./dist/bucket/index.d.ts",
585
+ "workerd": "./dist/bucket/index.workerd.js",
586
+ "import": "./dist/bucket/index.js",
587
+ "default": "./dist/bucket/index.js"
588
+ },
589
+ "./cache": {
590
+ "types": "./dist/cache/core/index.d.ts",
591
+ "workerd": "./dist/cache/core/index.workerd.js",
592
+ "import": "./dist/cache/core/index.js",
593
+ "default": "./dist/cache/core/index.js"
594
+ },
595
+ "./cache/redis": {
596
+ "types": "./dist/cache/redis/index.d.ts",
597
+ "import": "./dist/cache/redis/index.js",
598
+ "default": "./dist/cache/redis/index.js"
599
+ },
600
+ "./captcha": {
601
+ "types": "./dist/captcha/index.d.ts",
602
+ "import": "./dist/captcha/index.js",
603
+ "default": "./dist/captcha/index.js"
604
+ },
605
+ "./cli/config": {
606
+ "types": "./dist/cli/config/index.d.ts",
607
+ "import": "./dist/cli/config/index.js",
608
+ "default": "./dist/cli/config/index.js"
609
+ },
610
+ "./cli": {
611
+ "types": "./dist/cli/core/index.d.ts",
612
+ "import": "./dist/cli/core/index.js",
613
+ "default": "./dist/cli/core/index.js"
614
+ },
615
+ "./cli/devtools": {
616
+ "types": "./dist/cli/devtools/index.d.ts",
617
+ "import": "./dist/cli/devtools/index.js",
618
+ "default": "./dist/cli/devtools/index.js"
619
+ },
620
+ "./cli/platform": {
621
+ "types": "./dist/cli/platform/index.d.ts",
622
+ "import": "./dist/cli/platform/index.js",
623
+ "default": "./dist/cli/platform/index.js"
624
+ },
625
+ "./cli/vendor": {
626
+ "types": "./dist/cli/vendor/index.d.ts",
627
+ "import": "./dist/cli/vendor/index.js",
628
+ "default": "./dist/cli/vendor/index.js"
629
+ },
630
+ "./command": {
631
+ "types": "./dist/command/index.d.ts",
632
+ "import": "./dist/command/index.js",
633
+ "default": "./dist/command/index.js"
634
+ },
635
+ ".": {
636
+ "types": "./dist/core/index.d.ts",
637
+ "react-native": "./dist/core/index.native.js",
638
+ "workerd": "./dist/core/index.workerd.js",
639
+ "browser": "./dist/core/index.browser.js",
640
+ "import": "./dist/core/index.js",
641
+ "default": "./dist/core/index.js"
642
+ },
643
+ "./crypto": {
644
+ "types": "./dist/crypto/index.d.ts",
645
+ "react-native": "./dist/crypto/index.browser.js",
646
+ "browser": "./dist/crypto/index.browser.js",
647
+ "import": "./dist/crypto/index.js",
648
+ "default": "./dist/crypto/index.js"
649
+ },
650
+ "./datetime": {
651
+ "types": "./dist/datetime/index.d.ts",
652
+ "import": "./dist/datetime/index.js",
653
+ "default": "./dist/datetime/index.js"
654
+ },
655
+ "./email/brevo": {
656
+ "types": "./dist/email/brevo/index.d.ts",
657
+ "import": "./dist/email/brevo/index.js",
658
+ "default": "./dist/email/brevo/index.js"
659
+ },
660
+ "./email": {
661
+ "types": "./dist/email/core/index.d.ts",
662
+ "workerd": "./dist/email/core/index.workerd.js",
663
+ "import": "./dist/email/core/index.js",
664
+ "default": "./dist/email/core/index.js"
665
+ },
666
+ "./email/smtp": {
667
+ "types": "./dist/email/smtp/index.d.ts",
668
+ "import": "./dist/email/smtp/index.js",
669
+ "default": "./dist/email/smtp/index.js"
670
+ },
671
+ "./fake": {
672
+ "types": "./dist/fake/index.d.ts",
673
+ "import": "./dist/fake/index.js",
674
+ "default": "./dist/fake/index.js"
675
+ },
676
+ "./lock": {
677
+ "types": "./dist/lock/core/index.d.ts",
678
+ "import": "./dist/lock/core/index.js",
679
+ "default": "./dist/lock/core/index.js"
680
+ },
681
+ "./lock/redis": {
682
+ "types": "./dist/lock/redis/index.d.ts",
683
+ "import": "./dist/lock/redis/index.js",
684
+ "default": "./dist/lock/redis/index.js"
685
+ },
686
+ "./logger": {
687
+ "types": "./dist/logger/index.d.ts",
688
+ "import": "./dist/logger/index.js",
689
+ "default": "./dist/logger/index.js"
690
+ },
691
+ "./mcp": {
692
+ "types": "./dist/mcp/index.d.ts",
693
+ "import": "./dist/mcp/index.js",
694
+ "default": "./dist/mcp/index.js"
695
+ },
696
+ "./orm": {
697
+ "types": "./dist/orm/core/index.d.ts",
698
+ "react-native": "./dist/orm/core/index.browser.js",
699
+ "browser": "./dist/orm/core/index.browser.js",
700
+ "bun": "./dist/orm/core/index.bun.js",
701
+ "import": "./dist/orm/core/index.js",
702
+ "default": "./dist/orm/core/index.js"
703
+ },
704
+ "./orm/postgres": {
705
+ "types": "./dist/orm/postgres/index.d.ts",
706
+ "bun": "./dist/orm/postgres/index.bun.js",
707
+ "import": "./dist/orm/postgres/index.js",
708
+ "default": "./dist/orm/postgres/index.js"
709
+ },
710
+ "./queue": {
711
+ "types": "./dist/queue/core/index.d.ts",
712
+ "workerd": "./dist/queue/core/index.workerd.js",
713
+ "import": "./dist/queue/core/index.js",
714
+ "default": "./dist/queue/core/index.js"
715
+ },
716
+ "./queue/redis": {
717
+ "types": "./dist/queue/redis/index.d.ts",
718
+ "import": "./dist/queue/redis/index.js",
719
+ "default": "./dist/queue/redis/index.js"
720
+ },
721
+ "./react/auth": {
722
+ "types": "./dist/react/auth/index.d.ts",
723
+ "react-native": "./dist/react/auth/index.browser.js",
724
+ "browser": "./dist/react/auth/index.browser.js",
725
+ "import": "./dist/react/auth/index.js",
726
+ "default": "./dist/react/auth/index.js"
727
+ },
728
+ "./react": {
729
+ "types": "./dist/react/core/index.d.ts",
730
+ "import": "./dist/react/core/index.js",
731
+ "default": "./dist/react/core/index.js"
732
+ },
733
+ "./react/form": {
734
+ "types": "./dist/react/form/index.d.ts",
735
+ "import": "./dist/react/form/index.js",
736
+ "default": "./dist/react/form/index.js"
737
+ },
738
+ "./react/head": {
739
+ "types": "./dist/react/head/index.d.ts",
740
+ "react-native": "./dist/react/head/index.browser.js",
741
+ "browser": "./dist/react/head/index.browser.js",
742
+ "import": "./dist/react/head/index.js",
743
+ "default": "./dist/react/head/index.js"
744
+ },
745
+ "./react/i18n": {
746
+ "types": "./dist/react/i18n/index.d.ts",
747
+ "import": "./dist/react/i18n/index.js",
748
+ "default": "./dist/react/i18n/index.js"
749
+ },
750
+ "./react/intro": {
751
+ "types": "./dist/react/intro/index.d.ts",
752
+ "import": "./dist/react/intro/index.js",
753
+ "default": "./dist/react/intro/index.js"
754
+ },
755
+ "./react/router": {
756
+ "types": "./dist/react/router/index.d.ts",
757
+ "react-native": "./dist/react/router/index.browser.js",
758
+ "browser": "./dist/react/router/index.browser.js",
759
+ "import": "./dist/react/router/index.js",
760
+ "default": "./dist/react/router/index.js"
761
+ },
762
+ "./react/testing": {
763
+ "types": "./dist/react/testing/index.d.ts",
764
+ "import": "./dist/react/testing/index.js",
765
+ "default": "./dist/react/testing/index.js"
766
+ },
767
+ "./react/ui": {
768
+ "types": "./dist/react/ui/index.d.ts",
769
+ "import": "./dist/react/ui/index.js",
770
+ "default": "./dist/react/ui/index.js"
771
+ },
772
+ "./react/websocket": {
773
+ "types": "./dist/react/websocket/index.d.ts",
774
+ "import": "./dist/react/websocket/index.js",
775
+ "default": "./dist/react/websocket/index.js"
776
+ },
777
+ "./redis": {
778
+ "types": "./dist/redis/index.d.ts",
779
+ "bun": "./dist/redis/index.bun.js",
780
+ "import": "./dist/redis/index.js",
781
+ "default": "./dist/redis/index.js"
782
+ },
783
+ "./retry": {
784
+ "types": "./dist/retry/index.d.ts",
785
+ "import": "./dist/retry/index.js",
786
+ "default": "./dist/retry/index.js"
787
+ },
788
+ "./router": {
789
+ "types": "./dist/router/index.d.ts",
790
+ "import": "./dist/router/index.js",
791
+ "default": "./dist/router/index.js"
792
+ },
793
+ "./scheduler": {
794
+ "types": "./dist/scheduler/index.d.ts",
795
+ "workerd": "./dist/scheduler/index.workerd.js",
796
+ "import": "./dist/scheduler/index.js",
797
+ "default": "./dist/scheduler/index.js"
798
+ },
799
+ "./security": {
800
+ "types": "./dist/security/index.d.ts",
801
+ "react-native": "./dist/security/index.browser.js",
802
+ "browser": "./dist/security/index.browser.js",
803
+ "import": "./dist/security/index.js",
804
+ "default": "./dist/security/index.js"
805
+ },
806
+ "./server/auth": {
807
+ "types": "./dist/server/auth/index.d.ts",
808
+ "react-native": "./dist/server/auth/index.browser.js",
809
+ "browser": "./dist/server/auth/index.browser.js",
810
+ "import": "./dist/server/auth/index.js",
811
+ "default": "./dist/server/auth/index.js"
812
+ },
813
+ "./server/cookies": {
814
+ "types": "./dist/server/cookies/index.d.ts",
815
+ "react-native": "./dist/server/cookies/index.browser.js",
816
+ "browser": "./dist/server/cookies/index.browser.js",
817
+ "import": "./dist/server/cookies/index.js",
818
+ "default": "./dist/server/cookies/index.js"
819
+ },
820
+ "./server": {
821
+ "types": "./dist/server/core/index.d.ts",
822
+ "react-native": "./dist/server/core/index.browser.js",
823
+ "browser": "./dist/server/core/index.browser.js",
824
+ "import": "./dist/server/core/index.js",
825
+ "default": "./dist/server/core/index.js"
826
+ },
827
+ "./server/cors": {
828
+ "types": "./dist/server/cors/index.d.ts",
829
+ "import": "./dist/server/cors/index.js",
830
+ "default": "./dist/server/cors/index.js"
831
+ },
832
+ "./server/etag": {
833
+ "types": "./dist/server/etag/index.d.ts",
834
+ "import": "./dist/server/etag/index.js",
835
+ "default": "./dist/server/etag/index.js"
836
+ },
837
+ "./server/health": {
838
+ "types": "./dist/server/health/index.d.ts",
839
+ "import": "./dist/server/health/index.js",
840
+ "default": "./dist/server/health/index.js"
841
+ },
842
+ "./server/links": {
843
+ "types": "./dist/server/links/index.d.ts",
844
+ "react-native": "./dist/server/links/index.browser.js",
845
+ "browser": "./dist/server/links/index.browser.js",
846
+ "import": "./dist/server/links/index.js",
847
+ "default": "./dist/server/links/index.js"
848
+ },
849
+ "./server/metrics": {
850
+ "types": "./dist/server/metrics/index.d.ts",
851
+ "import": "./dist/server/metrics/index.js",
852
+ "default": "./dist/server/metrics/index.js"
853
+ },
854
+ "./server/proxy": {
855
+ "types": "./dist/server/proxy/index.d.ts",
856
+ "import": "./dist/server/proxy/index.js",
857
+ "default": "./dist/server/proxy/index.js"
858
+ },
859
+ "./server/rate-limit": {
860
+ "types": "./dist/server/rate-limit/index.d.ts",
861
+ "import": "./dist/server/rate-limit/index.js",
862
+ "default": "./dist/server/rate-limit/index.js"
863
+ },
864
+ "./server/static": {
865
+ "types": "./dist/server/static/index.d.ts",
866
+ "import": "./dist/server/static/index.js",
867
+ "default": "./dist/server/static/index.js"
868
+ },
869
+ "./server/swagger": {
870
+ "types": "./dist/server/swagger/index.d.ts",
871
+ "import": "./dist/server/swagger/index.js",
872
+ "default": "./dist/server/swagger/index.js"
873
+ },
874
+ "./sms": {
875
+ "types": "./dist/sms/index.d.ts",
876
+ "import": "./dist/sms/index.js",
877
+ "default": "./dist/sms/index.js"
878
+ },
879
+ "./system": {
880
+ "types": "./dist/system/index.d.ts",
881
+ "react-native": "./dist/system/index.browser.js",
882
+ "workerd": "./dist/system/index.workerd.js",
883
+ "browser": "./dist/system/index.browser.js",
884
+ "import": "./dist/system/index.js",
885
+ "default": "./dist/system/index.js"
886
+ },
887
+ "./topic": {
888
+ "types": "./dist/topic/core/index.d.ts",
889
+ "import": "./dist/topic/core/index.js",
890
+ "default": "./dist/topic/core/index.js"
891
+ },
892
+ "./topic/redis": {
893
+ "types": "./dist/topic/redis/index.d.ts",
894
+ "import": "./dist/topic/redis/index.js",
895
+ "default": "./dist/topic/redis/index.js"
896
+ },
897
+ "./websocket": {
898
+ "types": "./dist/websocket/index.d.ts",
899
+ "react-native": "./dist/websocket/index.browser.js",
900
+ "browser": "./dist/websocket/index.browser.js",
901
+ "import": "./dist/websocket/index.js",
902
+ "default": "./dist/websocket/index.js"
903
+ },
904
+ "./tsconfig.base": "./tsconfig.base.json",
905
+ "./package.json": "./package.json"
906
+ }
499
907
  }
500
- }
908
+ }
@@ -3,10 +3,10 @@ import {
3
3
  $inject,
4
4
  Alepha,
5
5
  AlephaError,
6
+ SchemaValidator,
6
7
  type Static,
7
8
  type TObject,
8
9
  t,
9
- Value,
10
10
  } from "alepha";
11
11
  import { CryptoProvider } from "alepha/crypto";
12
12
  import { DateTimeProvider } from "alepha/datetime";
@@ -49,6 +49,7 @@ export class ParameterProvider {
49
49
  protected readonly dateTimeProvider = $inject(DateTimeProvider);
50
50
  protected readonly crypto = $inject(CryptoProvider);
51
51
  protected readonly lockProvider = $inject(LockProvider);
52
+ protected readonly schemaValidator = $inject(SchemaValidator);
52
53
  protected readonly repo = $repository(parameters);
53
54
 
54
55
  /**
@@ -757,7 +758,7 @@ export class ParameterProvider {
757
758
  if (param.options.migrate) {
758
759
  try {
759
760
  const migrated = param.options.migrate(dbValue);
760
- if (Value.Check(schema, migrated)) {
761
+ if (this.isValid(schema, migrated)) {
761
762
  if (JSON.stringify(migrated) === JSON.stringify(dbValue)) {
762
763
  return null;
763
764
  }
@@ -785,7 +786,7 @@ export class ParameterProvider {
785
786
  schemaKeys,
786
787
  );
787
788
 
788
- if (Value.Check(schema, stripped)) {
789
+ if (this.isValid(schema, stripped)) {
789
790
  if (JSON.stringify(stripped) === JSON.stringify(dbValue)) {
790
791
  return null;
791
792
  }
@@ -805,7 +806,7 @@ export class ParameterProvider {
805
806
  schemaKeys,
806
807
  );
807
808
 
808
- if (Value.Check(schema, merged)) {
809
+ if (this.isValid(schema, merged)) {
809
810
  return {
810
811
  value: merged,
811
812
  description: "Auto-migrated: merged with defaults",
@@ -857,6 +858,22 @@ export class ParameterProvider {
857
858
  }
858
859
  }
859
860
 
861
+ /**
862
+ * Probe whether a value matches the schema, without throwing or mutating.
863
+ */
864
+ protected isValid(schema: TObject, value: unknown): boolean {
865
+ try {
866
+ this.schemaValidator.validate(schema, value, {
867
+ trim: false,
868
+ nullToUndefined: false,
869
+ deleteUndefined: false,
870
+ });
871
+ return true;
872
+ } catch {
873
+ return false;
874
+ }
875
+ }
876
+
860
877
  /**
861
878
  * Return a new object containing only keys present in the schema.
862
879
  */
@@ -916,4 +916,103 @@ describe("alepha/api/users - SessionService.refreshSession", () => {
916
916
  sessionService.refreshSession(refreshToken),
917
917
  ).rejects.toThrowError();
918
918
  });
919
+
920
+ describe("refresh-token idle timeout", () => {
921
+ it("should refresh successfully when used within the idle window", async ({
922
+ expect,
923
+ }) => {
924
+ const { sessionService, userService, alepha, dateTimeProvider } =
925
+ await setup();
926
+
927
+ const realmProvider = alepha.inject(RealmProvider);
928
+ realmProvider.register("idle-ok", {
929
+ settings: {
930
+ refreshToken: { expirationIdle: 60 * 60 * 1000 }, // 1 hour
931
+ } as never,
932
+ });
933
+
934
+ const user = await userService.users("idle-ok").create({
935
+ realm: "idle-ok",
936
+ email: "idle-ok@example.com",
937
+ roles: ["user"],
938
+ });
939
+
940
+ const { refreshToken } = await sessionService.createSession(
941
+ user,
942
+ 24 * 3600,
943
+ "idle-ok",
944
+ );
945
+
946
+ // Half the idle window — still well inside.
947
+ await dateTimeProvider.travel(30, "minutes");
948
+
949
+ const result = await sessionService.refreshSession(
950
+ refreshToken,
951
+ "idle-ok",
952
+ );
953
+ expect(result.user.id).toBe(user.id);
954
+ });
955
+
956
+ it("should reject refresh and delete session when idle window is exceeded", async ({
957
+ expect,
958
+ }) => {
959
+ const { sessionService, userService, alepha, dateTimeProvider } =
960
+ await setup();
961
+
962
+ const realmProvider = alepha.inject(RealmProvider);
963
+ realmProvider.register("idle-strict", {
964
+ settings: {
965
+ refreshToken: { expirationIdle: 5 * 60 * 1000 }, // 5 minutes
966
+ } as never,
967
+ });
968
+
969
+ const user = await userService.users("idle-strict").create({
970
+ realm: "idle-strict",
971
+ email: "idle-strict@example.com",
972
+ roles: ["user"],
973
+ });
974
+
975
+ const { refreshToken } = await sessionService.createSession(
976
+ user,
977
+ 7 * 24 * 3600, // 7 day absolute expiry — well beyond idle threshold
978
+ "idle-strict",
979
+ );
980
+
981
+ // Idle past the threshold (but absolute expiry is still days away).
982
+ await dateTimeProvider.travel(10, "minutes");
983
+
984
+ await expect(
985
+ sessionService.refreshSession(refreshToken, "idle-strict"),
986
+ ).rejects.toThrowError(UnauthorizedError);
987
+
988
+ // Session deleted — second refresh fails too (row gone).
989
+ await expect(
990
+ sessionService.refreshSession(refreshToken, "idle-strict"),
991
+ ).rejects.toThrowError();
992
+ });
993
+
994
+ it("should not enforce idle when expirationIdle is undefined (default)", async ({
995
+ expect,
996
+ }) => {
997
+ const { sessionService, userService, dateTimeProvider } = await setup();
998
+
999
+ const user = await userService.users().create({
1000
+ username: "idle-defaultuser",
1001
+ email: "idle-default@example.com",
1002
+ roles: ["user"],
1003
+ });
1004
+
1005
+ const { refreshToken } = await sessionService.createSession(
1006
+ user,
1007
+ 7 * 24 * 3600,
1008
+ );
1009
+
1010
+ // Travel days into the future. With no idleTtl configured, refresh
1011
+ // should still succeed (only absolute expiresAt matters).
1012
+ await dateTimeProvider.travel(3, "days");
1013
+
1014
+ const result = await sessionService.refreshSession(refreshToken);
1015
+ expect(result.user.id).toBe(user.id);
1016
+ });
1017
+ });
919
1018
  });