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.
- package/dist/api/audits/index.d.ts.map +1 -1
- package/dist/api/files/index.d.ts.map +1 -1
- package/dist/api/jobs/index.d.ts +14 -14
- package/dist/api/jobs/index.d.ts.map +1 -1
- package/dist/api/organizations/index.d.ts.map +1 -1
- package/dist/api/parameters/index.d.ts +6 -1
- package/dist/api/parameters/index.d.ts.map +1 -1
- package/dist/api/parameters/index.js +20 -4
- package/dist/api/parameters/index.js.map +1 -1
- package/dist/api/payments/index.d.ts.map +1 -1
- package/dist/api/users/index.browser.js +6 -0
- package/dist/api/users/index.browser.js.map +1 -1
- package/dist/api/users/index.d.ts +5032 -134
- package/dist/api/users/index.d.ts.map +1 -1
- package/dist/api/users/index.js +58 -10
- package/dist/api/users/index.js.map +1 -1
- package/dist/bin/index.js +0 -0
- package/dist/bucket/index.d.ts +77 -107
- package/dist/bucket/index.d.ts.map +1 -1
- package/dist/bucket/index.js +148 -4
- package/dist/bucket/index.js.map +1 -1
- package/dist/bucket/index.workerd.js +7 -1
- package/dist/bucket/index.workerd.js.map +1 -1
- package/dist/cache/core/index.d.ts +26 -0
- package/dist/cache/core/index.d.ts.map +1 -1
- package/dist/cache/core/index.js +11 -1
- package/dist/cache/core/index.js.map +1 -1
- package/dist/cache/core/index.workerd.js +11 -1
- package/dist/cache/core/index.workerd.js.map +1 -1
- package/dist/cli/config/index.d.ts +7 -5
- package/dist/cli/config/index.d.ts.map +1 -1
- package/dist/cli/config/index.js +2 -3
- package/dist/cli/config/index.js.map +1 -1
- package/dist/cli/core/index.d.ts +419 -12
- package/dist/cli/core/index.d.ts.map +1 -1
- package/dist/cli/core/index.js +22 -511
- package/dist/cli/core/index.js.map +1 -1
- package/dist/cli/devtools/index.d.ts +4 -8
- package/dist/cli/devtools/index.d.ts.map +1 -1
- package/dist/cli/devtools/index.js +13 -15
- package/dist/cli/devtools/index.js.map +1 -1
- package/dist/cli/platform/index.d.ts +10 -13
- package/dist/cli/platform/index.d.ts.map +1 -1
- package/dist/cli/platform/index.js +18 -15
- package/dist/cli/platform/index.js.map +1 -1
- package/dist/cli/vendor/index.d.ts +10 -13
- package/dist/cli/vendor/index.d.ts.map +1 -1
- package/dist/cli/vendor/index.js +16 -13
- package/dist/cli/vendor/index.js.map +1 -1
- package/dist/command/index.d.ts +1 -1
- package/dist/core/index.browser.js +27 -3
- package/dist/core/index.browser.js.map +1 -1
- package/dist/core/index.d.ts +6 -3
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +27 -3
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.native.js +27 -3
- package/dist/core/index.native.js.map +1 -1
- package/dist/core/index.workerd.js +27 -3
- package/dist/core/index.workerd.js.map +1 -1
- package/dist/datetime/index.d.ts +69 -10
- package/dist/datetime/index.d.ts.map +1 -1
- package/dist/datetime/index.js +135 -13
- package/dist/datetime/index.js.map +1 -1
- package/dist/email/smtp/index.js +10636 -2
- package/dist/email/smtp/index.js.map +1 -1
- package/dist/fake/index.d.ts +8085 -4
- package/dist/fake/index.d.ts.map +1 -1
- package/dist/fake/index.js +33554 -3
- package/dist/fake/index.js.map +1 -1
- package/dist/lock/core/index.d.ts +30 -2
- package/dist/lock/core/index.d.ts.map +1 -1
- package/dist/lock/core/index.js +35 -12
- package/dist/lock/core/index.js.map +1 -1
- package/dist/mcp/index.d.ts +238 -31
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +198 -71
- package/dist/mcp/index.js.map +1 -1
- package/dist/orm/core/index.browser.js +1 -1
- package/dist/orm/core/index.browser.js.map +1 -1
- package/dist/orm/core/index.bun.js +4 -3
- package/dist/orm/core/index.bun.js.map +1 -1
- package/dist/orm/core/index.d.ts +4877 -9
- package/dist/orm/core/index.d.ts.map +1 -1
- package/dist/orm/core/index.js +4 -3
- package/dist/orm/core/index.js.map +1 -1
- package/dist/orm/postgres/index.d.ts +608 -1
- package/dist/orm/postgres/index.d.ts.map +1 -1
- package/dist/react/core/index.d.ts +102 -1
- package/dist/react/core/index.d.ts.map +1 -1
- package/dist/react/core/index.js +65 -1
- package/dist/react/core/index.js.map +1 -1
- package/dist/react/form/index.d.ts +6 -0
- package/dist/react/form/index.d.ts.map +1 -1
- package/dist/react/form/index.js +7 -7
- package/dist/react/form/index.js.map +1 -1
- package/dist/react/i18n/index.d.ts +7 -1
- package/dist/react/i18n/index.d.ts.map +1 -1
- package/dist/react/i18n/index.js +6 -0
- package/dist/react/i18n/index.js.map +1 -1
- package/dist/react/router/index.browser.js +20 -2
- package/dist/react/router/index.browser.js.map +1 -1
- package/dist/react/router/index.d.ts +36 -4
- package/dist/react/router/index.d.ts.map +1 -1
- package/dist/react/router/index.js +20 -2
- package/dist/react/router/index.js.map +1 -1
- package/dist/react/testing/chunk-6Ep1yQYe.js +16 -0
- package/dist/react/testing/index.d.ts +411 -1
- package/dist/react/testing/index.d.ts.map +1 -1
- package/dist/react/testing/index.js +12293 -13
- package/dist/react/testing/index.js.map +1 -1
- package/dist/react/ui/index.d.ts +195 -1
- package/dist/react/ui/index.d.ts.map +1 -1
- package/dist/react/ui/index.js +61 -1
- package/dist/react/ui/index.js.map +1 -1
- package/dist/scheduler/index.d.ts +84 -3
- package/dist/scheduler/index.d.ts.map +1 -1
- package/dist/scheduler/index.js +390 -1
- package/dist/scheduler/index.js.map +1 -1
- package/dist/scheduler/index.workerd.js +390 -1
- package/dist/scheduler/index.workerd.js.map +1 -1
- package/dist/security/index.d.ts +325 -2
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/index.js +1361 -2
- package/dist/security/index.js.map +1 -1
- package/dist/server/auth/index.d.ts +1054 -1
- package/dist/server/auth/index.d.ts.map +1 -1
- package/dist/server/auth/index.js +1223 -1
- package/dist/server/auth/index.js.map +1 -1
- package/dist/server/core/index.browser.js +10 -3
- package/dist/server/core/index.browser.js.map +1 -1
- package/dist/server/core/index.d.ts.map +1 -1
- package/dist/server/core/index.js +28 -5
- package/dist/server/core/index.js.map +1 -1
- package/dist/server/metrics/index.d.ts +514 -1
- package/dist/server/metrics/index.d.ts.map +1 -1
- package/dist/server/metrics/index.js +4374 -4
- package/dist/server/metrics/index.js.map +1 -1
- package/dist/server/swagger/index.d.ts.map +1 -1
- package/dist/server/swagger/index.js +3 -4
- package/dist/server/swagger/index.js.map +1 -1
- package/dist/websocket/index.browser.js +11 -5
- package/dist/websocket/index.browser.js.map +1 -1
- package/dist/websocket/index.d.ts +3 -1
- package/dist/websocket/index.d.ts.map +1 -1
- package/dist/websocket/index.js +21 -6
- package/dist/websocket/index.js.map +1 -1
- package/package.json +416 -8
- package/src/api/parameters/services/ParameterProvider.ts +21 -4
- package/src/api/users/__tests__/SessionService.spec.ts +99 -0
- package/src/api/users/__tests__/UserJobs.spec.ts +67 -0
- package/src/api/users/atoms/realmAuthSettingsAtom.ts +15 -0
- package/src/api/users/entities/sessions.ts +6 -0
- package/src/api/users/jobs/UserJobs.ts +44 -17
- package/src/api/users/providers/RealmProvider.ts +4 -0
- package/src/api/users/services/SessionService.ts +27 -0
- package/src/bucket/__tests__/NodeS3BucketProvider.spec.ts +74 -0
- package/src/bucket/index.ts +19 -2
- package/src/bucket/primitives/$bucket.ts +9 -1
- package/src/bucket/providers/CloudflareR2Provider.ts +2 -137
- package/src/bucket/providers/NodeS3BucketProvider.ts +218 -0
- package/src/cache/core/index.ts +29 -0
- package/src/cache/core/primitives/$cache.ts +14 -1
- package/src/cli/config/defineConfig.ts +13 -15
- package/src/cli/core/__tests__/init.spec.ts +6 -7
- package/src/cli/core/services/ProjectScaffolder.ts +18 -14
- package/src/cli/core/tasks/BuildCloudflareTask.ts +5 -0
- package/src/cli/core/templates/agentMd.ts +2 -10
- package/src/cli/core/templates/saasAdminLayoutTsx.ts +3 -3
- package/src/cli/devtools/index.ts +12 -26
- package/src/cli/platform/index.ts +15 -24
- package/src/cli/vendor/atoms/vendorOptions.ts +1 -1
- package/src/cli/vendor/index.ts +14 -23
- package/src/core/Alepha.ts +11 -1
- package/src/core/helpers/ref.ts +18 -0
- package/src/core/index.shared.ts +1 -0
- package/src/core/providers/SchemaValidator.ts +9 -1
- package/src/core/providers/TypeProvider.ts +1 -2
- package/src/datetime/REFACTORING.md +118 -0
- package/src/datetime/providers/DateTimeProvider.ts +203 -24
- package/src/lock/core/index.ts +31 -0
- package/src/lock/core/primitives/$lock.ts +14 -1
- package/src/mcp/__tests__/jsonrpc.spec.ts +1 -1
- package/src/mcp/helpers/jsonrpc.ts +26 -1
- package/src/mcp/index.ts +10 -5
- package/src/mcp/interfaces/McpTypes.ts +83 -6
- package/src/mcp/primitives/$prompt.ts +18 -1
- package/src/mcp/primitives/$resource.ts +18 -1
- package/src/mcp/primitives/$tool.ts +83 -7
- package/src/mcp/providers/McpServerProvider.ts +74 -16
- package/src/mcp/transports/StreamableHttpMcpTransport.ts +226 -0
- package/src/orm/REFACTORING.md +330 -0
- package/src/orm/core/primitives/$transactional.ts +11 -0
- package/src/orm/core/schemas/updateSchema.ts +1 -1
- package/src/orm/core/services/PgRelationManager.ts +4 -2
- package/src/react/core/__tests__/useQuery.browser.spec.tsx +86 -0
- package/src/react/core/hooks/useQuery.ts +153 -0
- package/src/react/core/index.ts +1 -0
- package/src/react/form/services/FormModel.ts +15 -6
- package/src/react/form/services/parseField.ts +8 -0
- package/src/react/i18n/providers/I18nProvider.ts +8 -2
- package/src/react/router/__tests__/$page.spec.tsx +0 -16
- package/src/react/router/__tests__/ssr.spec.tsx +339 -0
- package/src/react/router/primitives/$page.ts +28 -4
- package/src/react/router/providers/ReactPageProvider.ts +27 -9
- package/src/react/ui/atoms/uiThemeListAtom.ts +36 -0
- package/src/react/ui/index.ts +6 -0
- package/src/react/ui/services/SchemaControl.ts +209 -0
- package/src/security/primitives/$issuer.ts +6 -3
- package/src/server/core/__tests__/ServerRouterProvider-serializationError.spec.ts +75 -0
- package/src/server/core/__tests__/ServerRouterProvider-validationError.spec.ts +306 -0
- package/src/server/core/errors/ValidationError.ts +13 -1
- package/src/server/core/primitives/$action.ts +16 -5
- package/src/server/core/providers/ServerRouterProvider.ts +26 -4
- package/src/server/swagger/providers/ServerSwaggerProvider.ts +5 -7
- package/src/websocket/providers/NodeWebSocketServerProvider.ts +10 -4
- package/src/websocket/services/WebSocketClient.ts +11 -5
- 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.
|
|
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.
|
|
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.
|
|
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.
|
|
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": "./
|
|
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": "./
|
|
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": "./
|
|
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 (
|
|
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 (
|
|
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 (
|
|
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
|
});
|