alepha 0.13.1 → 0.13.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/api-files/index.browser.js +80 -0
- package/dist/api-files/index.browser.js.map +1 -0
- package/dist/api-files/index.d.ts +28 -91
- package/dist/api-files/index.js +10 -755
- package/dist/api-files/index.js.map +1 -1
- package/dist/api-jobs/index.browser.js +56 -0
- package/dist/api-jobs/index.browser.js.map +1 -0
- package/dist/api-jobs/index.d.ts +46 -46
- package/dist/api-jobs/index.js +13 -13
- package/dist/api-jobs/index.js.map +1 -1
- package/dist/api-notifications/index.browser.js +382 -0
- package/dist/api-notifications/index.browser.js.map +1 -0
- package/dist/api-notifications/index.d.ts +231 -193
- package/dist/api-notifications/index.js +108 -78
- package/dist/api-notifications/index.js.map +1 -1
- package/dist/api-parameters/index.browser.js +29 -0
- package/dist/api-parameters/index.browser.js.map +1 -0
- package/dist/api-parameters/index.d.ts +21 -22
- package/dist/api-parameters/index.js +22 -22
- package/dist/api-parameters/index.js.map +1 -1
- package/dist/api-users/index.d.ts +237 -2001
- package/dist/api-users/index.js +969 -4795
- package/dist/api-users/index.js.map +1 -1
- package/dist/api-verifications/index.browser.js +52 -0
- package/dist/api-verifications/index.browser.js.map +1 -0
- package/dist/api-verifications/index.d.ts +119 -97
- package/dist/api-verifications/index.js +1 -1
- package/dist/api-verifications/index.js.map +1 -1
- package/dist/batch/index.d.ts +13 -13
- package/dist/batch/index.js +8 -13
- package/dist/batch/index.js.map +1 -1
- package/dist/bucket/index.d.ts +14 -14
- package/dist/bucket/index.js +19 -17
- package/dist/bucket/index.js.map +1 -1
- package/dist/cache/index.d.ts +11 -11
- package/dist/cache/index.js +9 -9
- package/dist/cache/index.js.map +1 -1
- package/dist/cli/{dist-Dl9Vl7Ur.js → dist-lGnqsKpu.js} +11 -15
- package/dist/cli/dist-lGnqsKpu.js.map +1 -0
- package/dist/cli/index.d.ts +32 -49
- package/dist/cli/index.js +90 -71
- package/dist/cli/index.js.map +1 -1
- package/dist/command/index.d.ts +20 -19
- package/dist/command/index.js +34 -25
- package/dist/command/index.js.map +1 -1
- package/dist/core/index.browser.js +218 -218
- package/dist/core/index.browser.js.map +1 -1
- package/dist/core/index.d.ts +232 -232
- package/dist/core/index.js +218 -218
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.native.js +2113 -0
- package/dist/core/index.native.js.map +1 -0
- package/dist/datetime/index.d.ts +9 -9
- package/dist/datetime/index.js +7 -7
- package/dist/datetime/index.js.map +1 -1
- package/dist/email/index.d.ts +16 -16
- package/dist/email/index.js +14 -9
- package/dist/email/index.js.map +1 -1
- package/dist/file/index.js +1 -1
- package/dist/file/index.js.map +1 -1
- package/dist/lock/index.d.ts +9 -9
- package/dist/lock/index.js +8 -8
- package/dist/lock/index.js.map +1 -1
- package/dist/lock-redis/index.js +3 -66
- package/dist/lock-redis/index.js.map +1 -1
- package/dist/logger/index.d.ts +5 -5
- package/dist/logger/index.js +8 -8
- package/dist/logger/index.js.map +1 -1
- package/dist/orm/index.browser.js +114 -114
- package/dist/orm/index.browser.js.map +1 -1
- package/dist/orm/index.d.ts +218 -218
- package/dist/orm/index.js +49 -49
- package/dist/orm/index.js.map +1 -1
- package/dist/queue/index.d.ts +29 -29
- package/dist/queue/index.js +20 -20
- package/dist/queue/index.js.map +1 -1
- package/dist/queue-redis/index.d.ts +2 -2
- package/dist/redis/index.d.ts +4 -4
- package/dist/retry/index.d.ts +19 -19
- package/dist/retry/index.js +7 -7
- package/dist/retry/index.js.map +1 -1
- package/dist/scheduler/index.d.ts +16 -16
- package/dist/scheduler/index.js +9 -9
- package/dist/scheduler/index.js.map +1 -1
- package/dist/security/index.d.ts +53 -53
- package/dist/security/index.js +35 -35
- package/dist/security/index.js.map +1 -1
- package/dist/server/index.browser.js +1 -1
- package/dist/server/index.browser.js.map +1 -1
- package/dist/server/index.d.ts +92 -92
- package/dist/server/index.js +16 -16
- package/dist/server/index.js.map +1 -1
- package/dist/server-auth/index.browser.js +4 -982
- package/dist/server-auth/index.browser.js.map +1 -1
- package/dist/server-auth/index.d.ts +204 -785
- package/dist/server-auth/index.js +47 -1239
- package/dist/server-auth/index.js.map +1 -1
- package/dist/server-cache/index.d.ts +10 -10
- package/dist/server-cache/index.js +2 -2
- package/dist/server-cache/index.js.map +1 -1
- package/dist/server-compress/index.d.ts +4 -4
- package/dist/server-compress/index.js +1 -1
- package/dist/server-compress/index.js.map +1 -1
- package/dist/server-cookies/index.browser.js +8 -8
- package/dist/server-cookies/index.browser.js.map +1 -1
- package/dist/server-cookies/index.d.ts +17 -17
- package/dist/server-cookies/index.js +11 -11
- package/dist/server-cookies/index.js.map +1 -1
- package/dist/server-cors/index.d.ts +17 -17
- package/dist/server-cors/index.js +9 -9
- package/dist/server-cors/index.js.map +1 -1
- package/dist/server-health/index.d.ts +19 -19
- package/dist/server-helmet/index.d.ts +1 -1
- package/dist/server-links/index.browser.js +12 -12
- package/dist/server-links/index.browser.js.map +1 -1
- package/dist/server-links/index.d.ts +59 -251
- package/dist/server-links/index.js +23 -502
- package/dist/server-links/index.js.map +1 -1
- package/dist/server-metrics/index.d.ts +4 -4
- package/dist/server-multipart/index.d.ts +2 -2
- package/dist/server-proxy/index.d.ts +12 -12
- package/dist/server-proxy/index.js +10 -10
- package/dist/server-proxy/index.js.map +1 -1
- package/dist/server-rate-limit/index.d.ts +22 -22
- package/dist/server-rate-limit/index.js +12 -12
- package/dist/server-rate-limit/index.js.map +1 -1
- package/dist/server-security/index.d.ts +22 -22
- package/dist/server-security/index.js +15 -15
- package/dist/server-security/index.js.map +1 -1
- package/dist/server-static/index.d.ts +14 -14
- package/dist/server-static/index.js +26 -10
- package/dist/server-static/index.js.map +1 -1
- package/dist/server-swagger/index.d.ts +25 -184
- package/dist/server-swagger/index.js +21 -724
- package/dist/server-swagger/index.js.map +1 -1
- package/dist/sms/index.d.ts +14 -14
- package/dist/sms/index.js +9 -9
- package/dist/sms/index.js.map +1 -1
- package/dist/thread/index.d.ts +11 -11
- package/dist/thread/index.js +17 -17
- package/dist/thread/index.js.map +1 -1
- package/dist/topic/index.d.ts +26 -26
- package/dist/topic/index.js +16 -16
- package/dist/topic/index.js.map +1 -1
- package/dist/topic-redis/index.d.ts +1 -1
- package/dist/vite/index.d.ts +3 -3
- package/dist/vite/index.js +8 -8
- package/dist/vite/index.js.map +1 -1
- package/dist/websocket/index.browser.js +11 -11
- package/dist/websocket/index.browser.js.map +1 -1
- package/dist/websocket/index.d.ts +58 -58
- package/dist/websocket/index.js +13 -13
- package/dist/websocket/index.js.map +1 -1
- package/package.json +128 -57
- package/src/api-files/index.browser.ts +17 -0
- package/src/api-files/services/FileService.ts +5 -7
- package/src/api-jobs/index.browser.ts +15 -0
- package/src/api-jobs/index.ts +1 -1
- package/src/api-jobs/{descriptors → primitives}/$job.ts +8 -8
- package/src/api-jobs/providers/JobProvider.ts +9 -9
- package/src/api-jobs/services/JobService.ts +5 -5
- package/src/api-notifications/controllers/NotificationController.ts +26 -1
- package/src/api-notifications/index.browser.ts +17 -0
- package/src/api-notifications/index.ts +6 -15
- package/src/api-notifications/{descriptors → primitives}/$notification.ts +10 -10
- package/src/api-notifications/schemas/notificationQuerySchema.ts +13 -0
- package/src/api-notifications/services/NotificationSenderService.ts +3 -3
- package/src/api-notifications/services/NotificationService.ts +45 -2
- package/src/api-parameters/index.browser.ts +12 -0
- package/src/api-parameters/index.ts +1 -1
- package/src/api-parameters/{descriptors → primitives}/$config.ts +7 -12
- package/src/api-users/atoms/realmAuthSettingsAtom.ts +3 -1
- package/src/api-users/controllers/UserController.ts +21 -1
- package/src/api-users/index.ts +1 -1
- package/src/api-users/{descriptors → primitives}/$userRealm.ts +40 -17
- package/src/api-users/providers/UserRealmProvider.ts +2 -1
- package/src/api-users/services/SessionService.ts +2 -0
- package/src/api-users/services/UserService.ts +56 -16
- package/src/api-verifications/index.browser.ts +15 -0
- package/src/api-verifications/index.ts +1 -0
- package/src/batch/index.ts +3 -3
- package/src/batch/{descriptors → primitives}/$batch.ts +13 -16
- package/src/batch/providers/BatchProvider.ts +0 -7
- package/src/bucket/index.ts +15 -13
- package/src/bucket/{descriptors → primitives}/$bucket.ts +8 -8
- package/src/bucket/providers/LocalFileStorageProvider.ts +3 -3
- package/src/cache/index.ts +4 -4
- package/src/cache/{descriptors → primitives}/$cache.ts +15 -15
- package/src/cli/apps/AlephaCli.ts +27 -1
- package/src/cli/apps/AlephaPackageBuilderCli.ts +27 -2
- package/src/cli/commands/CoreCommands.ts +6 -2
- package/src/cli/commands/DrizzleCommands.ts +6 -6
- package/src/cli/commands/VerifyCommands.ts +1 -1
- package/src/cli/commands/ViteCommands.ts +8 -2
- package/src/cli/services/ProjectUtils.ts +74 -78
- package/src/command/helpers/Asker.ts +10 -0
- package/src/command/index.ts +5 -5
- package/src/command/{descriptors → primitives}/$command.ts +9 -12
- package/src/command/providers/CliProvider.ts +10 -10
- package/src/core/Alepha.ts +30 -33
- package/src/core/constants/KIND.ts +1 -1
- package/src/core/constants/OPTIONS.ts +1 -1
- package/src/core/helpers/{descriptor.ts → primitive.ts} +18 -18
- package/src/core/helpers/ref.ts +1 -1
- package/src/core/index.shared.ts +8 -8
- package/src/core/{descriptors → primitives}/$context.ts +5 -5
- package/src/core/{descriptors → primitives}/$hook.ts +4 -4
- package/src/core/{descriptors → primitives}/$inject.ts +2 -2
- package/src/core/{descriptors → primitives}/$module.ts +9 -9
- package/src/core/{descriptors → primitives}/$use.ts +2 -2
- package/src/core/providers/CodecManager.ts +1 -1
- package/src/core/providers/JsonSchemaCodec.ts +1 -1
- package/src/core/providers/StateManager.ts +2 -2
- package/src/datetime/index.ts +3 -3
- package/src/datetime/{descriptors → primitives}/$interval.ts +6 -6
- package/src/email/index.ts +17 -9
- package/src/email/{descriptors → primitives}/$email.ts +8 -8
- package/src/file/index.ts +1 -1
- package/src/lock/index.ts +3 -3
- package/src/lock/{descriptors → primitives}/$lock.ts +10 -10
- package/src/logger/index.ts +8 -8
- package/src/logger/{descriptors → primitives}/$logger.ts +2 -2
- package/src/logger/services/Logger.ts +1 -1
- package/src/orm/constants/PG_SYMBOLS.ts +2 -2
- package/src/orm/index.browser.ts +2 -2
- package/src/orm/index.ts +8 -8
- package/src/orm/{descriptors → primitives}/$entity.ts +11 -11
- package/src/orm/{descriptors → primitives}/$repository.ts +2 -2
- package/src/orm/{descriptors → primitives}/$sequence.ts +8 -8
- package/src/orm/{descriptors → primitives}/$transaction.ts +4 -4
- package/src/orm/providers/PostgresTypeProvider.ts +3 -3
- package/src/orm/providers/RepositoryProvider.ts +4 -4
- package/src/orm/providers/drivers/DatabaseProvider.ts +7 -7
- package/src/orm/providers/drivers/NodeSqliteProvider.ts +3 -3
- package/src/orm/services/ModelBuilder.ts +9 -9
- package/src/orm/services/PgRelationManager.ts +2 -2
- package/src/orm/services/PostgresModelBuilder.ts +5 -5
- package/src/orm/services/Repository.ts +7 -7
- package/src/orm/services/SqliteModelBuilder.ts +5 -5
- package/src/queue/index.ts +7 -7
- package/src/queue/{descriptors → primitives}/$consumer.ts +15 -15
- package/src/queue/{descriptors → primitives}/$queue.ts +12 -12
- package/src/queue/providers/WorkerProvider.ts +7 -7
- package/src/retry/index.ts +3 -3
- package/src/retry/{descriptors → primitives}/$retry.ts +14 -14
- package/src/scheduler/index.ts +3 -3
- package/src/scheduler/{descriptors → primitives}/$scheduler.ts +9 -9
- package/src/scheduler/providers/CronProvider.ts +1 -1
- package/src/security/index.ts +9 -9
- package/src/security/{descriptors → primitives}/$permission.ts +7 -7
- package/src/security/{descriptors → primitives}/$realm.ts +6 -12
- package/src/security/{descriptors → primitives}/$role.ts +12 -12
- package/src/security/{descriptors → primitives}/$serviceAccount.ts +8 -8
- package/src/server/index.browser.ts +1 -1
- package/src/server/index.ts +14 -14
- package/src/server/{descriptors → primitives}/$action.ts +13 -13
- package/src/server/{descriptors → primitives}/$route.ts +9 -9
- package/src/server/providers/NodeHttpServerProvider.ts +1 -1
- package/src/server/services/HttpClient.ts +1 -1
- package/src/server-auth/index.browser.ts +1 -1
- package/src/server-auth/index.ts +6 -6
- package/src/server-auth/{descriptors → primitives}/$auth.ts +10 -10
- package/src/server-auth/{descriptors → primitives}/$authCredentials.ts +4 -4
- package/src/server-auth/{descriptors → primitives}/$authGithub.ts +4 -4
- package/src/server-auth/{descriptors → primitives}/$authGoogle.ts +4 -4
- package/src/server-auth/providers/ServerAuthProvider.ts +4 -4
- package/src/server-cache/providers/ServerCacheProvider.ts +7 -7
- package/src/server-compress/providers/ServerCompressProvider.ts +3 -3
- package/src/server-cookies/index.browser.ts +2 -2
- package/src/server-cookies/index.ts +5 -5
- package/src/server-cookies/{descriptors → primitives}/$cookie.browser.ts +12 -12
- package/src/server-cookies/{descriptors → primitives}/$cookie.ts +13 -13
- package/src/server-cookies/providers/ServerCookiesProvider.ts +6 -5
- package/src/server-cookies/services/CookieParser.ts +1 -1
- package/src/server-cors/index.ts +3 -3
- package/src/server-cors/{descriptors → primitives}/$cors.ts +11 -13
- package/src/server-cors/providers/ServerCorsProvider.ts +5 -5
- package/src/server-links/index.browser.ts +5 -5
- package/src/server-links/index.ts +9 -9
- package/src/server-links/{descriptors → primitives}/$remote.ts +11 -11
- package/src/server-links/providers/LinkProvider.ts +7 -7
- package/src/server-links/providers/{RemoteDescriptorProvider.ts → RemotePrimitiveProvider.ts} +6 -6
- package/src/server-links/providers/ServerLinksProvider.ts +3 -3
- package/src/server-proxy/index.ts +3 -3
- package/src/server-proxy/{descriptors → primitives}/$proxy.ts +8 -8
- package/src/server-proxy/providers/ServerProxyProvider.ts +4 -4
- package/src/server-rate-limit/index.ts +6 -6
- package/src/server-rate-limit/{descriptors → primitives}/$rateLimit.ts +13 -13
- package/src/server-rate-limit/providers/ServerRateLimitProvider.ts +5 -5
- package/src/server-security/index.ts +3 -3
- package/src/server-security/{descriptors → primitives}/$basicAuth.ts +13 -13
- package/src/server-security/providers/ServerBasicAuthProvider.ts +5 -5
- package/src/server-security/providers/ServerSecurityProvider.ts +4 -4
- package/src/server-static/index.ts +3 -3
- package/src/server-static/{descriptors → primitives}/$serve.ts +8 -10
- package/src/server-static/providers/ServerStaticProvider.ts +24 -9
- package/src/server-swagger/index.ts +5 -5
- package/src/server-swagger/{descriptors → primitives}/$swagger.ts +9 -9
- package/src/server-swagger/providers/ServerSwaggerProvider.ts +11 -10
- package/src/sms/index.ts +4 -4
- package/src/sms/{descriptors → primitives}/$sms.ts +8 -8
- package/src/thread/index.ts +3 -3
- package/src/thread/{descriptors → primitives}/$thread.ts +13 -13
- package/src/thread/providers/ThreadProvider.ts +7 -9
- package/src/topic/index.ts +5 -5
- package/src/topic/{descriptors → primitives}/$subscriber.ts +14 -14
- package/src/topic/{descriptors → primitives}/$topic.ts +10 -10
- package/src/topic/providers/TopicProvider.ts +4 -4
- package/src/vite/tasks/copyAssets.ts +1 -1
- package/src/vite/tasks/generateSitemap.ts +3 -3
- package/src/vite/tasks/prerenderPages.ts +2 -2
- package/src/vite/tasks/runAlepha.ts +2 -2
- package/src/websocket/index.browser.ts +3 -3
- package/src/websocket/index.shared.ts +2 -2
- package/src/websocket/index.ts +4 -4
- package/src/websocket/interfaces/WebSocketInterfaces.ts +3 -3
- package/src/websocket/{descriptors → primitives}/$channel.ts +10 -10
- package/src/websocket/{descriptors → primitives}/$websocket.ts +8 -8
- package/src/websocket/providers/NodeWebSocketServerProvider.ts +7 -7
- package/src/websocket/providers/WebSocketServerProvider.ts +3 -3
- package/src/websocket/services/WebSocketClient.ts +5 -5
- package/dist/cli/dist-Dl9Vl7Ur.js.map +0 -1
- package/src/api-notifications/providers/MemorySmsProvider.ts +0 -20
- package/src/api-notifications/providers/SmsProvider.ts +0 -8
- /package/src/core/{descriptors → primitives}/$atom.ts +0 -0
- /package/src/core/{descriptors → primitives}/$env.ts +0 -0
- /package/src/server-auth/{descriptors → primitives}/$authApple.ts +0 -0
- /package/src/server-links/{descriptors → primitives}/$client.ts +0 -0
package/src/server/index.ts
CHANGED
|
@@ -1,11 +1,5 @@
|
|
|
1
1
|
import type { Server } from "node:http";
|
|
2
|
-
import { $module, type Alepha, type
|
|
3
|
-
import {
|
|
4
|
-
$action,
|
|
5
|
-
type ActionDescriptor,
|
|
6
|
-
type ClientRequestOptions,
|
|
7
|
-
} from "./descriptors/$action.ts";
|
|
8
|
-
import { $route } from "./descriptors/$route.ts";
|
|
2
|
+
import { $module, type Alepha, type PrimitiveFactoryLike } from "alepha";
|
|
9
3
|
import type { HttpError } from "./errors/HttpError.ts";
|
|
10
4
|
import type {
|
|
11
5
|
NodeRequestEvent,
|
|
@@ -16,6 +10,12 @@ import type {
|
|
|
16
10
|
ServerRoute,
|
|
17
11
|
WebRequestEvent,
|
|
18
12
|
} from "./interfaces/ServerRequest.ts";
|
|
13
|
+
import {
|
|
14
|
+
$action,
|
|
15
|
+
type ActionPrimitive,
|
|
16
|
+
type ClientRequestOptions,
|
|
17
|
+
} from "./primitives/$action.ts";
|
|
18
|
+
import { $route } from "./primitives/$route.ts";
|
|
19
19
|
import { BunHttpServerProvider } from "./providers/BunHttpServerProvider.ts";
|
|
20
20
|
import { NodeHttpServerProvider } from "./providers/NodeHttpServerProvider.ts";
|
|
21
21
|
import { ServerBodyParserProvider } from "./providers/ServerBodyParserProvider.ts";
|
|
@@ -36,12 +36,12 @@ declare module "alepha" {
|
|
|
36
36
|
// -----------------------------------------------------------------------------------------------------------------
|
|
37
37
|
// Local Actions hooks
|
|
38
38
|
"action:onRequest": {
|
|
39
|
-
action:
|
|
39
|
+
action: ActionPrimitive<RequestConfigSchema>;
|
|
40
40
|
request: ServerRequest;
|
|
41
41
|
options: ClientRequestOptions;
|
|
42
42
|
};
|
|
43
43
|
"action:onResponse": {
|
|
44
|
-
action:
|
|
44
|
+
action: ActionPrimitive<RequestConfigSchema>;
|
|
45
45
|
request: ServerRequest;
|
|
46
46
|
options: ClientRequestOptions;
|
|
47
47
|
response: any;
|
|
@@ -96,9 +96,9 @@ declare module "alepha" {
|
|
|
96
96
|
|
|
97
97
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
98
98
|
|
|
99
|
-
export * from "./descriptors/$action.ts";
|
|
100
|
-
export * from "./descriptors/$route.ts";
|
|
101
99
|
export * from "./index.shared.ts";
|
|
100
|
+
export * from "./primitives/$action.ts";
|
|
101
|
+
export * from "./primitives/$route.ts";
|
|
102
102
|
export * from "./providers/BunHttpServerProvider.ts";
|
|
103
103
|
export * from "./providers/NodeHttpServerProvider.ts";
|
|
104
104
|
export * from "./providers/ServerLoggerProvider.ts";
|
|
@@ -110,9 +110,9 @@ export * from "./providers/ServerTimingProvider.ts";
|
|
|
110
110
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
111
111
|
|
|
112
112
|
/**
|
|
113
|
-
* Provides high-performance HTTP server capabilities with declarative routing and action
|
|
113
|
+
* Provides high-performance HTTP server capabilities with declarative routing and action primitives.
|
|
114
114
|
*
|
|
115
|
-
* The server module enables building REST APIs and web applications using `$route` and `$action`
|
|
115
|
+
* The server module enables building REST APIs and web applications using `$route` and `$action` primitives
|
|
116
116
|
* on class properties. It provides automatic request/response handling, schema validation, middleware support,
|
|
117
117
|
* and seamless integration with other Alepha modules for a complete backend solution.
|
|
118
118
|
*
|
|
@@ -122,7 +122,7 @@ export * from "./providers/ServerTimingProvider.ts";
|
|
|
122
122
|
*/
|
|
123
123
|
export const AlephaServer = $module({
|
|
124
124
|
name: "alepha.server",
|
|
125
|
-
|
|
125
|
+
primitives: [$route, $action as PrimitiveFactoryLike],
|
|
126
126
|
services: [
|
|
127
127
|
ServerProvider,
|
|
128
128
|
BunHttpServerProvider,
|
|
@@ -2,10 +2,10 @@ import {
|
|
|
2
2
|
$env,
|
|
3
3
|
$inject,
|
|
4
4
|
type Async,
|
|
5
|
-
|
|
6
|
-
Descriptor,
|
|
5
|
+
createPrimitive,
|
|
7
6
|
isTypeFile,
|
|
8
7
|
KIND,
|
|
8
|
+
Primitive,
|
|
9
9
|
type Static,
|
|
10
10
|
type TObject,
|
|
11
11
|
type TSchema,
|
|
@@ -30,7 +30,7 @@ import {
|
|
|
30
30
|
} from "../services/HttpClient.ts";
|
|
31
31
|
|
|
32
32
|
/**
|
|
33
|
-
* Creates a server action
|
|
33
|
+
* Creates a server action primitive for defining type-safe HTTP endpoints.
|
|
34
34
|
*
|
|
35
35
|
* Server actions are the core building blocks for REST APIs in Alepha, providing declarative
|
|
36
36
|
* HTTP endpoints with full type safety, automatic validation, and OpenAPI documentation.
|
|
@@ -95,9 +95,9 @@ import {
|
|
|
95
95
|
* ```
|
|
96
96
|
*/
|
|
97
97
|
export const $action = <TConfig extends RequestConfigSchema>(
|
|
98
|
-
options:
|
|
99
|
-
):
|
|
100
|
-
const instance =
|
|
98
|
+
options: ActionPrimitiveOptions<TConfig>,
|
|
99
|
+
): ActionPrimitiveFn<TConfig> => {
|
|
100
|
+
const instance = createPrimitive(ActionPrimitive<TConfig>, options);
|
|
101
101
|
const fn = (
|
|
102
102
|
config?: ClientRequestEntry<TConfig>,
|
|
103
103
|
options?: ClientRequestOptions,
|
|
@@ -109,12 +109,12 @@ export const $action = <TConfig extends RequestConfigSchema>(
|
|
|
109
109
|
return instance.options.name || instance.config.propertyKey;
|
|
110
110
|
},
|
|
111
111
|
});
|
|
112
|
-
return Object.setPrototypeOf(fn, instance) as
|
|
112
|
+
return Object.setPrototypeOf(fn, instance) as ActionPrimitiveFn<TConfig>;
|
|
113
113
|
};
|
|
114
114
|
|
|
115
115
|
// ----------------------------------------------------------------------------------------------------------
|
|
116
116
|
|
|
117
|
-
export interface
|
|
117
|
+
export interface ActionPrimitiveOptions<TConfig extends RequestConfigSchema>
|
|
118
118
|
extends Omit<ServerRoute, "handler" | "path" | "schema" | "mapParams"> {
|
|
119
119
|
/**
|
|
120
120
|
* Name of the action.
|
|
@@ -198,9 +198,9 @@ const envSchema = t.object({
|
|
|
198
198
|
}),
|
|
199
199
|
});
|
|
200
200
|
|
|
201
|
-
export class
|
|
201
|
+
export class ActionPrimitive<
|
|
202
202
|
TConfig extends RequestConfigSchema,
|
|
203
|
-
> extends
|
|
203
|
+
> extends Primitive<ActionPrimitiveOptions<TConfig>> {
|
|
204
204
|
protected readonly log = $logger();
|
|
205
205
|
protected readonly env = $env(envSchema);
|
|
206
206
|
protected readonly httpClient = $inject(HttpClient);
|
|
@@ -416,15 +416,15 @@ export class ActionDescriptor<
|
|
|
416
416
|
}
|
|
417
417
|
}
|
|
418
418
|
|
|
419
|
-
export interface
|
|
420
|
-
extends
|
|
419
|
+
export interface ActionPrimitiveFn<TConfig extends RequestConfigSchema>
|
|
420
|
+
extends ActionPrimitive<TConfig> {
|
|
421
421
|
(
|
|
422
422
|
config?: ClientRequestEntry<TConfig>,
|
|
423
423
|
options?: ClientRequestOptions,
|
|
424
424
|
): Promise<ClientRequestResponse<TConfig>>;
|
|
425
425
|
}
|
|
426
426
|
|
|
427
|
-
$action[KIND] =
|
|
427
|
+
$action[KIND] = ActionPrimitive;
|
|
428
428
|
|
|
429
429
|
// ----------------------------------------------------------------------------------------------------------
|
|
430
430
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { $inject,
|
|
1
|
+
import { $inject, createPrimitive, KIND, Primitive } from "alepha";
|
|
2
2
|
import type {
|
|
3
3
|
RequestConfigSchema,
|
|
4
4
|
ServerRoute,
|
|
@@ -8,28 +8,28 @@ import { ServerRouterProvider } from "../providers/ServerRouterProvider.ts";
|
|
|
8
8
|
/**
|
|
9
9
|
* Create a basic endpoint.
|
|
10
10
|
*
|
|
11
|
-
* It's a low level
|
|
11
|
+
* It's a low level primitive. You probably want to use `$action` instead.
|
|
12
12
|
*
|
|
13
13
|
* @see {@link $action}
|
|
14
14
|
* @see {@link $page}
|
|
15
15
|
*/
|
|
16
16
|
export const $route = <TConfig extends RequestConfigSchema>(
|
|
17
|
-
options:
|
|
18
|
-
):
|
|
19
|
-
return
|
|
17
|
+
options: RoutePrimitiveOptions<TConfig>,
|
|
18
|
+
): RoutePrimitive<TConfig> => {
|
|
19
|
+
return createPrimitive(RoutePrimitive<TConfig>, options);
|
|
20
20
|
};
|
|
21
21
|
|
|
22
22
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
23
23
|
|
|
24
|
-
export interface
|
|
24
|
+
export interface RoutePrimitiveOptions<
|
|
25
25
|
TConfig extends RequestConfigSchema = RequestConfigSchema,
|
|
26
26
|
> extends ServerRoute<TConfig> {}
|
|
27
27
|
|
|
28
28
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
29
29
|
|
|
30
|
-
export class
|
|
30
|
+
export class RoutePrimitive<
|
|
31
31
|
TConfig extends RequestConfigSchema,
|
|
32
|
-
> extends
|
|
32
|
+
> extends Primitive<RoutePrimitiveOptions<TConfig>> {
|
|
33
33
|
protected readonly serverRouterProvider = $inject(ServerRouterProvider);
|
|
34
34
|
|
|
35
35
|
protected onInit() {
|
|
@@ -37,4 +37,4 @@ export class RouteDescriptor<
|
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
$route[KIND] =
|
|
40
|
+
$route[KIND] = RoutePrimitive;
|
|
@@ -57,7 +57,7 @@ export class NodeHttpServerProvider extends ServerProvider {
|
|
|
57
57
|
on: "start",
|
|
58
58
|
handler: async () => {
|
|
59
59
|
await this.listen();
|
|
60
|
-
this.alepha.
|
|
60
|
+
this.alepha.store.set("alepha.node.server", this.server);
|
|
61
61
|
},
|
|
62
62
|
});
|
|
63
63
|
|
|
@@ -10,7 +10,6 @@ import {
|
|
|
10
10
|
import { $cache } from "alepha/cache";
|
|
11
11
|
import type { DurationLike } from "alepha/datetime";
|
|
12
12
|
import { $logger } from "alepha/logger";
|
|
13
|
-
import type { ClientRequestOptions } from "../descriptors/$action.ts";
|
|
14
13
|
import { HttpError } from "../errors/HttpError.ts";
|
|
15
14
|
import { isMultipart } from "../helpers/isMultipart.ts";
|
|
16
15
|
import type {
|
|
@@ -18,6 +17,7 @@ import type {
|
|
|
18
17
|
TRequestBody,
|
|
19
18
|
TResponseBody,
|
|
20
19
|
} from "../interfaces/ServerRequest.ts";
|
|
20
|
+
import type { ClientRequestOptions } from "../primitives/$action.ts";
|
|
21
21
|
import { errorSchema } from "../schemas/errorSchema.ts";
|
|
22
22
|
|
|
23
23
|
export class HttpClient {
|
package/src/server-auth/index.ts
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { $module } from "alepha";
|
|
2
2
|
import type { UserAccount } from "alepha/security";
|
|
3
3
|
import { AlephaServerCookies } from "alepha/server/cookies";
|
|
4
|
-
import { $auth } from "./
|
|
4
|
+
import { $auth } from "./primitives/$auth.ts";
|
|
5
5
|
import { ServerAuthProvider } from "./providers/ServerAuthProvider.ts";
|
|
6
6
|
|
|
7
7
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
8
8
|
|
|
9
|
-
export * from "./descriptors/$auth.ts";
|
|
10
|
-
export * from "./descriptors/$authCredentials.ts";
|
|
11
|
-
export * from "./descriptors/$authGithub.ts";
|
|
12
|
-
export * from "./descriptors/$authGoogle.ts";
|
|
13
9
|
export * from "./index.shared.ts";
|
|
10
|
+
export * from "./primitives/$auth.ts";
|
|
11
|
+
export * from "./primitives/$authCredentials.ts";
|
|
12
|
+
export * from "./primitives/$authGithub.ts";
|
|
13
|
+
export * from "./primitives/$authGoogle.ts";
|
|
14
14
|
export * from "./providers/ServerAuthProvider.ts";
|
|
15
15
|
|
|
16
16
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
@@ -43,6 +43,6 @@ declare module "alepha" {
|
|
|
43
43
|
*/
|
|
44
44
|
export const AlephaServerAuth = $module({
|
|
45
45
|
name: "alepha.server.auth",
|
|
46
|
-
|
|
46
|
+
primitives: [$auth],
|
|
47
47
|
services: [AlephaServerCookies, ServerAuthProvider],
|
|
48
48
|
});
|
|
@@ -2,14 +2,14 @@ import {
|
|
|
2
2
|
$inject,
|
|
3
3
|
AlephaError,
|
|
4
4
|
type Async,
|
|
5
|
-
|
|
6
|
-
Descriptor,
|
|
5
|
+
createPrimitive,
|
|
7
6
|
KIND,
|
|
7
|
+
Primitive,
|
|
8
8
|
} from "alepha";
|
|
9
9
|
import { DateTimeProvider } from "alepha/datetime";
|
|
10
10
|
import {
|
|
11
11
|
type AccessTokenResponse,
|
|
12
|
-
type
|
|
12
|
+
type RealmPrimitive,
|
|
13
13
|
SecurityError,
|
|
14
14
|
SecurityProvider,
|
|
15
15
|
type UserAccount,
|
|
@@ -24,7 +24,7 @@ import type { OAuth2Profile } from "../providers/ServerAuthProvider.ts";
|
|
|
24
24
|
import type { Tokens } from "../schemas/tokensSchema.ts";
|
|
25
25
|
|
|
26
26
|
/**
|
|
27
|
-
* Creates an authentication provider
|
|
27
|
+
* Creates an authentication provider primitive for handling user login flows.
|
|
28
28
|
*
|
|
29
29
|
* Supports multiple authentication strategies: credentials (username/password), OAuth2,
|
|
30
30
|
* and OIDC (OpenID Connect). Handles token management, user profile retrieval, and
|
|
@@ -57,13 +57,13 @@ import type { Tokens } from "../schemas/tokensSchema.ts";
|
|
|
57
57
|
* }
|
|
58
58
|
* ```
|
|
59
59
|
*/
|
|
60
|
-
export const $auth = (options:
|
|
61
|
-
return
|
|
60
|
+
export const $auth = (options: AuthPrimitiveOptions): AuthPrimitive => {
|
|
61
|
+
return createPrimitive(AuthPrimitive, options);
|
|
62
62
|
};
|
|
63
63
|
|
|
64
64
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
65
65
|
|
|
66
|
-
export type
|
|
66
|
+
export type AuthPrimitiveOptions = {
|
|
67
67
|
/**
|
|
68
68
|
* Name of the identity provider.
|
|
69
69
|
* If not provided, it will be derived from the property key.
|
|
@@ -108,7 +108,7 @@ export type AuthExternal = {
|
|
|
108
108
|
* This relies on the `realm`, which is used to create/verify the access token.
|
|
109
109
|
*/
|
|
110
110
|
export type AuthInternal = {
|
|
111
|
-
realm:
|
|
111
|
+
realm: RealmPrimitive;
|
|
112
112
|
} & (
|
|
113
113
|
| {
|
|
114
114
|
/**
|
|
@@ -251,7 +251,7 @@ export interface OAuth2Options {
|
|
|
251
251
|
|
|
252
252
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
253
253
|
|
|
254
|
-
export class
|
|
254
|
+
export class AuthPrimitive extends Primitive<AuthPrimitiveOptions> {
|
|
255
255
|
protected readonly securityProvider = $inject(SecurityProvider);
|
|
256
256
|
protected readonly dateTimeProvider = $inject(DateTimeProvider);
|
|
257
257
|
|
|
@@ -433,7 +433,7 @@ export class AuthDescriptor extends Descriptor<AuthDescriptorOptions> {
|
|
|
433
433
|
}
|
|
434
434
|
}
|
|
435
435
|
|
|
436
|
-
$auth[KIND] =
|
|
436
|
+
$auth[KIND] = AuthPrimitive;
|
|
437
437
|
|
|
438
438
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
439
439
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AlephaError } from "alepha";
|
|
2
|
-
import type {
|
|
2
|
+
import type { RealmPrimitive } from "alepha/security";
|
|
3
3
|
import {
|
|
4
4
|
$auth,
|
|
5
5
|
type CredentialsFn,
|
|
@@ -8,12 +8,12 @@ import {
|
|
|
8
8
|
} from "./$auth.ts";
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
|
-
* Already configured Credentials authentication
|
|
11
|
+
* Already configured Credentials authentication primitive.
|
|
12
12
|
*
|
|
13
13
|
* Uses username and password to authenticate users.
|
|
14
14
|
*/
|
|
15
15
|
export const $authCredentials = (
|
|
16
|
-
realm:
|
|
16
|
+
realm: RealmPrimitive & WithLoginFn,
|
|
17
17
|
options: Partial<CredentialsOptions> = {},
|
|
18
18
|
) => {
|
|
19
19
|
const name = "credentials";
|
|
@@ -24,7 +24,7 @@ export const $authCredentials = (
|
|
|
24
24
|
|
|
25
25
|
if (!account) {
|
|
26
26
|
throw new AlephaError(
|
|
27
|
-
"Credentials authentication requires a login function in the realm
|
|
27
|
+
"Credentials authentication requires a login function in the realm primitive.",
|
|
28
28
|
);
|
|
29
29
|
}
|
|
30
30
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { $context, AlephaError, t } from "alepha";
|
|
2
|
-
import type {
|
|
2
|
+
import type { RealmPrimitive } from "alepha/security";
|
|
3
3
|
import type { OAuth2Profile } from "../providers/ServerAuthProvider.ts";
|
|
4
4
|
import {
|
|
5
5
|
$auth,
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
} from "./$auth.ts";
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
|
-
* Already configured GitHub authentication
|
|
12
|
+
* Already configured GitHub authentication primitive.
|
|
13
13
|
*
|
|
14
14
|
* Uses OAuth2 to authenticate users via their GitHub accounts.
|
|
15
15
|
* Upon successful authentication, it links the GitHub account to a user session.
|
|
@@ -19,7 +19,7 @@ import {
|
|
|
19
19
|
* - `GITHUB_CLIENT_SECRET`: The client secret obtained from the GitHub Developer Settings.
|
|
20
20
|
*/
|
|
21
21
|
export const $authGithub = (
|
|
22
|
-
realm:
|
|
22
|
+
realm: RealmPrimitive & WithLinkFn,
|
|
23
23
|
options: Partial<OidcOptions> = {},
|
|
24
24
|
) => {
|
|
25
25
|
const { alepha } = $context();
|
|
@@ -40,7 +40,7 @@ export const $authGithub = (
|
|
|
40
40
|
|
|
41
41
|
if (!account) {
|
|
42
42
|
throw new AlephaError(
|
|
43
|
-
"Authentication requires a link function in the realm
|
|
43
|
+
"Authentication requires a link function in the realm primitive.",
|
|
44
44
|
);
|
|
45
45
|
}
|
|
46
46
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { $context, AlephaError, t } from "alepha";
|
|
2
|
-
import type {
|
|
2
|
+
import type { RealmPrimitive } from "alepha/security";
|
|
3
3
|
import {
|
|
4
4
|
$auth,
|
|
5
5
|
type LinkAccountFn,
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
} from "./$auth.ts";
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
|
-
* Already configured Google authentication
|
|
11
|
+
* Already configured Google authentication primitive.
|
|
12
12
|
*
|
|
13
13
|
* Uses OpenID Connect (OIDC) to authenticate users via their Google accounts.
|
|
14
14
|
* Upon successful authentication, it links the Google account to a user session.
|
|
@@ -18,7 +18,7 @@ import {
|
|
|
18
18
|
* - `GOOGLE_CLIENT_SECRET`: The client secret obtained from the Google Developer Console.
|
|
19
19
|
*/
|
|
20
20
|
export const $authGoogle = (
|
|
21
|
-
realm:
|
|
21
|
+
realm: RealmPrimitive & WithLinkFn,
|
|
22
22
|
options: Partial<OidcOptions> = {},
|
|
23
23
|
) => {
|
|
24
24
|
const { alepha } = $context();
|
|
@@ -39,7 +39,7 @@ export const $authGoogle = (
|
|
|
39
39
|
|
|
40
40
|
if (!account) {
|
|
41
41
|
throw new AlephaError(
|
|
42
|
-
"Authentication requires a link function in the realm
|
|
42
|
+
"Authentication requires a link function in the realm primitive.",
|
|
43
43
|
);
|
|
44
44
|
}
|
|
45
45
|
|
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
randomState,
|
|
23
23
|
} from "openid-client";
|
|
24
24
|
import { alephaServerAuthRoutes } from "../constants/routes.ts";
|
|
25
|
-
import { $auth, type
|
|
25
|
+
import { $auth, type AuthPrimitive } from "../primitives/$auth.ts";
|
|
26
26
|
import type { AuthenticationProvider } from "../schemas/authenticationProviderSchema.ts";
|
|
27
27
|
import { tokenResponseSchema } from "../schemas/tokenResponseSchema.ts";
|
|
28
28
|
import { type Tokens, tokensSchema } from "../schemas/tokensSchema.ts";
|
|
@@ -57,9 +57,9 @@ export class ServerAuthProvider {
|
|
|
57
57
|
schema: tokensSchema,
|
|
58
58
|
});
|
|
59
59
|
|
|
60
|
-
public get identities(): Array<
|
|
60
|
+
public get identities(): Array<AuthPrimitive> {
|
|
61
61
|
return this.alepha
|
|
62
|
-
.
|
|
62
|
+
.primitives($auth)
|
|
63
63
|
.filter((auth) => !auth.options.disabled);
|
|
64
64
|
}
|
|
65
65
|
|
|
@@ -603,7 +603,7 @@ export class ServerAuthProvider {
|
|
|
603
603
|
},
|
|
604
604
|
});
|
|
605
605
|
|
|
606
|
-
protected provider(opts: string | { provider: string }):
|
|
606
|
+
protected provider(opts: string | { provider: string }): AuthPrimitive {
|
|
607
607
|
const name = typeof opts === "string" ? opts : opts.provider;
|
|
608
608
|
const identity = this.identities.find((identity) => identity.name === name);
|
|
609
609
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import type { BinaryLike } from "node:crypto";
|
|
2
2
|
import { createHash } from "node:crypto";
|
|
3
3
|
import { $hook, $inject, Alepha } from "alepha";
|
|
4
|
-
import { $cache, type
|
|
4
|
+
import { $cache, type CachePrimitiveOptions } from "alepha/cache";
|
|
5
5
|
import { DateTimeProvider, type DurationLike } from "alepha/datetime";
|
|
6
6
|
import { $logger } from "alepha/logger";
|
|
7
7
|
import {
|
|
8
|
-
|
|
8
|
+
ActionPrimitive,
|
|
9
9
|
type RequestConfigSchema,
|
|
10
10
|
type ServerRequest,
|
|
11
11
|
type ServerRoute,
|
|
@@ -25,13 +25,13 @@ declare module "alepha/server" {
|
|
|
25
25
|
cache?: ServerRouteCache;
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
interface
|
|
28
|
+
interface ActionPrimitive<TConfig extends RequestConfigSchema> {
|
|
29
29
|
invalidate: () => Promise<void>;
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
|
|
34
|
-
this:
|
|
33
|
+
ActionPrimitive.prototype.invalidate = async function (
|
|
34
|
+
this: ActionPrimitive<RequestConfigSchema>,
|
|
35
35
|
) {
|
|
36
36
|
await this.alepha.inject(ServerCacheProvider).invalidate(this.route);
|
|
37
37
|
};
|
|
@@ -422,11 +422,11 @@ export type ServerRouteCache =
|
|
|
422
422
|
/**
|
|
423
423
|
* If true, enables storing cached responses. (in-memory, Redis, @see alepha/cache for other providers)
|
|
424
424
|
* If a DurationLike is provided, it will be used as the TTL for the cache.
|
|
425
|
-
* If
|
|
425
|
+
* If CachePrimitiveOptions is provided, it will be used to configure the cache storage.
|
|
426
426
|
*
|
|
427
427
|
* @default false
|
|
428
428
|
*/
|
|
429
|
-
store?: true | DurationLike |
|
|
429
|
+
store?: true | DurationLike | CachePrimitiveOptions;
|
|
430
430
|
/**
|
|
431
431
|
* If true, enables ETag support for the cached responses.
|
|
432
432
|
*/
|
|
@@ -2,7 +2,7 @@ import { Readable, type Transform } from "node:stream";
|
|
|
2
2
|
import { ReadableStream } from "node:stream/web";
|
|
3
3
|
import { promisify } from "node:util";
|
|
4
4
|
import * as zlib from "node:zlib";
|
|
5
|
-
import { $hook, $inject, Alepha
|
|
5
|
+
import { $hook, $inject, Alepha } from "alepha";
|
|
6
6
|
import type { ServerResponse } from "alepha/server";
|
|
7
7
|
|
|
8
8
|
const gzip = promisify(zlib.gzip);
|
|
@@ -55,11 +55,11 @@ export class ServerCompressProvider {
|
|
|
55
55
|
"text/plain",
|
|
56
56
|
"text/css",
|
|
57
57
|
],
|
|
58
|
-
...this.alepha.
|
|
58
|
+
...this.alepha.store.get("alepha.server.compress.options"),
|
|
59
59
|
};
|
|
60
60
|
}
|
|
61
61
|
|
|
62
|
-
public readonly onResponse
|
|
62
|
+
public readonly onResponse = $hook({
|
|
63
63
|
on: "server:onResponse",
|
|
64
64
|
handler: async ({ request, response }) => {
|
|
65
65
|
// skip if already compressed
|
|
@@ -3,12 +3,12 @@ import { AlephaServer } from "alepha/server";
|
|
|
3
3
|
|
|
4
4
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
5
5
|
|
|
6
|
-
export * from "./
|
|
6
|
+
export * from "./primitives/$cookie.browser.ts";
|
|
7
7
|
|
|
8
8
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
9
9
|
|
|
10
10
|
export const AlephaServerCookies = $module({
|
|
11
11
|
name: "alepha.server.cookies",
|
|
12
|
-
|
|
12
|
+
primitives: [],
|
|
13
13
|
services: [AlephaServer],
|
|
14
14
|
});
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { $module } from "alepha";
|
|
2
2
|
import { AlephaServer } from "alepha/server";
|
|
3
|
-
import { $cookie, type Cookies } from "./
|
|
3
|
+
import { $cookie, type Cookies } from "./primitives/$cookie.ts";
|
|
4
4
|
import { ServerCookiesProvider } from "./providers/ServerCookiesProvider.ts";
|
|
5
5
|
|
|
6
6
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
7
7
|
|
|
8
|
-
export * from "./
|
|
8
|
+
export * from "./primitives/$cookie.ts";
|
|
9
9
|
export * from "./providers/ServerCookiesProvider.ts";
|
|
10
10
|
|
|
11
11
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
@@ -17,9 +17,9 @@ declare module "alepha/server" {
|
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
/**
|
|
20
|
-
* Provides HTTP cookie management capabilities for server requests and responses with type-safe cookie
|
|
20
|
+
* Provides HTTP cookie management capabilities for server requests and responses with type-safe cookie primitives.
|
|
21
21
|
*
|
|
22
|
-
* The server-cookies module enables declarative cookie handling using the `$cookie`
|
|
22
|
+
* The server-cookies module enables declarative cookie handling using the `$cookie` primitive on class properties.
|
|
23
23
|
* It offers automatic cookie parsing, secure cookie configuration, and seamless integration with server routes
|
|
24
24
|
* for managing user sessions, preferences, and authentication tokens.
|
|
25
25
|
*
|
|
@@ -28,6 +28,6 @@ declare module "alepha/server" {
|
|
|
28
28
|
*/
|
|
29
29
|
export const AlephaServerCookies = $module({
|
|
30
30
|
name: "alepha.server.cookies",
|
|
31
|
-
|
|
31
|
+
primitives: [$cookie],
|
|
32
32
|
services: [AlephaServer, ServerCookiesProvider],
|
|
33
33
|
});
|
|
@@ -2,23 +2,23 @@ import {
|
|
|
2
2
|
$inject,
|
|
3
3
|
Alepha,
|
|
4
4
|
AlephaError,
|
|
5
|
-
|
|
6
|
-
Descriptor,
|
|
5
|
+
createPrimitive,
|
|
7
6
|
KIND,
|
|
7
|
+
Primitive,
|
|
8
8
|
type Static,
|
|
9
9
|
type TSchema,
|
|
10
10
|
} from "alepha";
|
|
11
11
|
import { DateTimeProvider } from "alepha/datetime";
|
|
12
12
|
import { CookieParser } from "../services/CookieParser.ts";
|
|
13
13
|
import type {
|
|
14
|
-
|
|
14
|
+
AbstractCookiePrimitive,
|
|
15
15
|
Cookie,
|
|
16
|
-
|
|
16
|
+
CookiePrimitiveOptions,
|
|
17
17
|
Cookies,
|
|
18
18
|
} from "./$cookie.ts";
|
|
19
19
|
|
|
20
20
|
/**
|
|
21
|
-
* Creates a browser-side cookie
|
|
21
|
+
* Creates a browser-side cookie primitive for client-side cookie management.
|
|
22
22
|
*
|
|
23
23
|
* Browser-specific version of $cookie that uses document.cookie API. Supports type-safe
|
|
24
24
|
* cookie operations with schema validation but excludes encryption/signing (use server-side
|
|
@@ -46,16 +46,16 @@ import type {
|
|
|
46
46
|
* ```
|
|
47
47
|
*/
|
|
48
48
|
export const $cookie = <T extends TSchema>(
|
|
49
|
-
options:
|
|
50
|
-
):
|
|
51
|
-
return
|
|
49
|
+
options: CookiePrimitiveOptions<T>,
|
|
50
|
+
): AbstractCookiePrimitive<T> => {
|
|
51
|
+
return createPrimitive(BrowserCookiePrimitive<T>, options);
|
|
52
52
|
};
|
|
53
53
|
|
|
54
54
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
55
55
|
|
|
56
|
-
export class
|
|
57
|
-
extends
|
|
58
|
-
implements
|
|
56
|
+
export class BrowserCookiePrimitive<T extends TSchema>
|
|
57
|
+
extends Primitive<CookiePrimitiveOptions<T>>
|
|
58
|
+
implements AbstractCookiePrimitive<T>
|
|
59
59
|
{
|
|
60
60
|
protected cookieParser = $inject(CookieParser);
|
|
61
61
|
protected alepha = $inject(Alepha);
|
|
@@ -143,4 +143,4 @@ export class BrowserCookieDescriptor<T extends TSchema>
|
|
|
143
143
|
}
|
|
144
144
|
}
|
|
145
145
|
|
|
146
|
-
$cookie[KIND] =
|
|
146
|
+
$cookie[KIND] = BrowserCookiePrimitive;
|