alepha 0.13.1 → 0.13.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- 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.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.d.ts +129 -146
- package/dist/api-notifications/index.js +17 -39
- package/dist/api-notifications/index.js.map +1 -1
- 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 +223 -2000
- package/dist/api-users/index.js +914 -4787
- package/dist/api-users/index.js.map +1 -1
- package/dist/api-verifications/index.d.ts +96 -96
- package/dist/batch/index.d.ts +13 -13
- package/dist/batch/index.js +8 -8
- package/dist/batch/index.js.map +1 -1
- package/dist/bucket/index.d.ts +14 -14
- package/dist/bucket/index.js +12 -12
- 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/index.d.ts +28 -26
- package/dist/cli/index.js +50 -13
- package/dist/cli/index.js.map +1 -1
- package/dist/command/index.d.ts +19 -19
- package/dist/command/index.js +25 -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 +9 -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 +46 -46
- 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 +10 -10
- 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 +80 -80
- package/dist/security/index.js +32 -32
- 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 +101 -101
- 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 +10 -10
- 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 +8 -8
- 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 +113 -52
- package/src/api-files/services/FileService.ts +5 -7
- 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/index.ts +5 -15
- package/src/api-notifications/{descriptors → primitives}/$notification.ts +10 -10
- package/src/api-notifications/services/NotificationSenderService.ts +3 -3
- package/src/api-parameters/index.ts +1 -1
- package/src/api-parameters/{descriptors → primitives}/$config.ts +7 -12
- package/src/api-users/index.ts +1 -1
- package/src/api-users/{descriptors → primitives}/$userRealm.ts +8 -8
- package/src/api-users/providers/UserRealmProvider.ts +1 -1
- package/src/batch/index.ts +3 -3
- package/src/batch/{descriptors → primitives}/$batch.ts +13 -16
- package/src/bucket/index.ts +8 -8
- 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/AlephaPackageBuilderCli.ts +24 -2
- package/src/cli/commands/DrizzleCommands.ts +6 -6
- package/src/cli/commands/VerifyCommands.ts +1 -1
- package/src/cli/commands/ViteCommands.ts +6 -1
- package/src/cli/services/ProjectUtils.ts +34 -3
- 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 +4 -4
- 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/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 +4 -4
- 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 +6 -6
- 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/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
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { $module, type Alepha } from "alepha";
|
|
2
2
|
import { AlephaTopic } from "alepha/topic";
|
|
3
|
-
import { $channel } from "./
|
|
4
|
-
import { $websocket } from "./
|
|
3
|
+
import { $channel } from "./primitives/$channel.ts";
|
|
4
|
+
import { $websocket } from "./primitives/$websocket.ts";
|
|
5
5
|
import { WebSocketClient } from "./services/WebSocketClient.ts";
|
|
6
6
|
|
|
7
7
|
/**
|
|
@@ -16,7 +16,7 @@ export * from "./index.shared.ts";
|
|
|
16
16
|
|
|
17
17
|
export const AlephaWebSocket = $module({
|
|
18
18
|
name: "alepha.websocket",
|
|
19
|
-
|
|
19
|
+
primitives: [$channel, $websocket],
|
|
20
20
|
services: [WebSocketClient],
|
|
21
21
|
register: (alepha: Alepha) => {
|
|
22
22
|
alepha.with(AlephaTopic);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export * from "./descriptors/$channel.ts";
|
|
2
|
-
export * from "./descriptors/$websocket.ts";
|
|
3
1
|
export * from "./errors/WebSocketError.ts";
|
|
4
2
|
export * from "./interfaces/WebSocketInterfaces.ts";
|
|
3
|
+
export * from "./primitives/$channel.ts";
|
|
4
|
+
export * from "./primitives/$websocket.ts";
|
|
5
5
|
export * from "./providers/WebSocketServerProvider.ts";
|
|
6
6
|
export * from "./services/RoomManager.ts";
|
|
7
7
|
export * from "./services/WebSocketClient.ts";
|
package/src/websocket/index.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { $module, type Alepha } from "alepha";
|
|
2
2
|
import { AlephaServer } from "alepha/server";
|
|
3
3
|
import { AlephaTopic } from "alepha/topic";
|
|
4
|
-
import { $channel } from "./
|
|
5
|
-
import { $websocket } from "./
|
|
4
|
+
import { $channel } from "./primitives/$channel.ts";
|
|
5
|
+
import { $websocket } from "./primitives/$websocket.ts";
|
|
6
6
|
import { NodeWebSocketServerProvider } from "./providers/NodeWebSocketServerProvider.ts";
|
|
7
7
|
import { WebSocketServerProvider } from "./providers/WebSocketServerProvider.ts";
|
|
8
8
|
import { RoomManager } from "./services/RoomManager.ts";
|
|
@@ -60,7 +60,7 @@ export * from "./providers/NodeWebSocketServerProvider.ts";
|
|
|
60
60
|
/**
|
|
61
61
|
* Provides real-time bidirectional communication using WebSockets.
|
|
62
62
|
*
|
|
63
|
-
* The WebSockets module enables building real-time applications using the `$websocket`
|
|
63
|
+
* The WebSockets module enables building real-time applications using the `$websocket` primitive
|
|
64
64
|
* on class properties. It provides automatic connection management, message routing, type-safe
|
|
65
65
|
* message handling, and seamless integration with other Alepha modules.
|
|
66
66
|
*
|
|
@@ -72,7 +72,7 @@ export * from "./providers/NodeWebSocketServerProvider.ts";
|
|
|
72
72
|
*/
|
|
73
73
|
export const AlephaWebSocket = $module({
|
|
74
74
|
name: "alepha.websocket",
|
|
75
|
-
|
|
75
|
+
primitives: [$channel, $websocket],
|
|
76
76
|
services: [
|
|
77
77
|
WebSocketServerProvider,
|
|
78
78
|
NodeWebSocketServerProvider,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Static } from "alepha";
|
|
2
|
-
import type {
|
|
2
|
+
import type { ChannelPrimitive, TWSObject } from "../primitives/$channel.ts";
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* WebSocket connection interface
|
|
@@ -54,14 +54,14 @@ export enum WebSocketState {
|
|
|
54
54
|
/**
|
|
55
55
|
* WebSocket endpoint configuration (server-side)
|
|
56
56
|
*/
|
|
57
|
-
export interface
|
|
57
|
+
export interface WebSocketPrimitiveOptions<
|
|
58
58
|
TClient extends TWSObject,
|
|
59
59
|
TServer extends TWSObject,
|
|
60
60
|
> {
|
|
61
61
|
/**
|
|
62
62
|
* Channel definition with schema and path
|
|
63
63
|
*/
|
|
64
|
-
channel:
|
|
64
|
+
channel: ChannelPrimitive<TClient, TServer>;
|
|
65
65
|
|
|
66
66
|
/**
|
|
67
67
|
* Handler for incoming messages from clients
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
Descriptor,
|
|
2
|
+
createPrimitive,
|
|
4
3
|
KIND,
|
|
4
|
+
Primitive,
|
|
5
5
|
type TObject,
|
|
6
6
|
type TString,
|
|
7
7
|
type TUnion,
|
|
@@ -10,9 +10,9 @@ import {
|
|
|
10
10
|
export type TWSObject = TObject | TUnion;
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
|
-
* Channel
|
|
13
|
+
* Channel primitive options
|
|
14
14
|
*/
|
|
15
|
-
export interface
|
|
15
|
+
export interface ChannelPrimitiveOptions<
|
|
16
16
|
TClient extends TWSObject,
|
|
17
17
|
TServer extends TWSObject,
|
|
18
18
|
> {
|
|
@@ -114,18 +114,18 @@ export interface ChannelDescriptorOptions<
|
|
|
114
114
|
* ```
|
|
115
115
|
*/
|
|
116
116
|
export const $channel = <TClient extends TWSObject, TServer extends TWSObject>(
|
|
117
|
-
options:
|
|
118
|
-
):
|
|
119
|
-
return
|
|
117
|
+
options: ChannelPrimitiveOptions<TClient, TServer>,
|
|
118
|
+
): ChannelPrimitive<TClient, TServer> => {
|
|
119
|
+
return createPrimitive(ChannelPrimitive<TClient, TServer>, options);
|
|
120
120
|
};
|
|
121
121
|
|
|
122
122
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
123
123
|
|
|
124
|
-
export class
|
|
124
|
+
export class ChannelPrimitive<
|
|
125
125
|
TClient extends TWSObject,
|
|
126
126
|
TServer extends TWSObject,
|
|
127
|
-
> extends
|
|
127
|
+
> extends Primitive<ChannelPrimitiveOptions<TClient, TServer>> {
|
|
128
128
|
// Channels are just schema definitions - no initialization logic needed
|
|
129
129
|
}
|
|
130
130
|
|
|
131
|
-
$channel[KIND] =
|
|
131
|
+
$channel[KIND] = ChannelPrimitive;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { $inject,
|
|
1
|
+
import { $inject, createPrimitive, KIND, Primitive } from "alepha";
|
|
2
2
|
import type {
|
|
3
3
|
EmitOptions,
|
|
4
|
-
|
|
4
|
+
WebSocketPrimitiveOptions,
|
|
5
5
|
} from "../interfaces/WebSocketInterfaces.ts";
|
|
6
6
|
import { WebSocketServerProvider } from "../providers/WebSocketServerProvider.ts";
|
|
7
7
|
import type { TWSObject } from "./$channel.ts";
|
|
@@ -51,17 +51,17 @@ export const $websocket = <
|
|
|
51
51
|
TClient extends TWSObject,
|
|
52
52
|
TServer extends TWSObject,
|
|
53
53
|
>(
|
|
54
|
-
options:
|
|
55
|
-
):
|
|
56
|
-
return
|
|
54
|
+
options: WebSocketPrimitiveOptions<TClient, TServer>,
|
|
55
|
+
): WebSocketPrimitive<TClient, TServer> => {
|
|
56
|
+
return createPrimitive(WebSocketPrimitive<TClient, TServer>, options);
|
|
57
57
|
};
|
|
58
58
|
|
|
59
59
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
60
60
|
|
|
61
|
-
export class
|
|
61
|
+
export class WebSocketPrimitive<
|
|
62
62
|
TClient extends TWSObject,
|
|
63
63
|
TServer extends TWSObject,
|
|
64
|
-
> extends
|
|
64
|
+
> extends Primitive<WebSocketPrimitiveOptions<TClient, TServer>> {
|
|
65
65
|
protected readonly webSocketServerProvider = $inject(WebSocketServerProvider);
|
|
66
66
|
|
|
67
67
|
protected onInit() {
|
|
@@ -104,4 +104,4 @@ export class WebSocketDescriptor<
|
|
|
104
104
|
}
|
|
105
105
|
}
|
|
106
106
|
|
|
107
|
-
$websocket[KIND] =
|
|
107
|
+
$websocket[KIND] = WebSocketPrimitive;
|
|
@@ -10,15 +10,15 @@ import {
|
|
|
10
10
|
} from "alepha";
|
|
11
11
|
import { $logger } from "alepha/logger";
|
|
12
12
|
import { WebSocket, WebSocketServer } from "ws";
|
|
13
|
-
import type { TWSObject } from "../descriptors/$channel.ts";
|
|
14
13
|
import { WebSocketValidationError } from "../errors/WebSocketError.ts";
|
|
15
14
|
import type {
|
|
16
15
|
EmitOptions,
|
|
17
16
|
WebSocketConnection,
|
|
18
|
-
WebSocketDescriptorOptions,
|
|
19
17
|
WebSocketHandlerContext,
|
|
18
|
+
WebSocketPrimitiveOptions,
|
|
20
19
|
WebSocketState,
|
|
21
20
|
} from "../interfaces/WebSocketInterfaces.ts";
|
|
21
|
+
import type { TWSObject } from "../primitives/$channel.ts";
|
|
22
22
|
import { RoomManager } from "../services/RoomManager.ts";
|
|
23
23
|
import { WebSocketTopicService } from "../services/WebSocketTopicService.ts";
|
|
24
24
|
import { WebSocketServerProvider } from "./WebSocketServerProvider.ts";
|
|
@@ -46,7 +46,7 @@ export class NodeWebSocketServerProvider extends WebSocketServerProvider {
|
|
|
46
46
|
protected readonly env = $env(envSchema);
|
|
47
47
|
|
|
48
48
|
protected wss?: WebSocketServer;
|
|
49
|
-
protected endpoints = new Map<string,
|
|
49
|
+
protected endpoints = new Map<string, WebSocketPrimitiveOptions<any, any>>();
|
|
50
50
|
protected connections = new Map<string, WebSocketConnection>();
|
|
51
51
|
protected userConnections = new Map<string, Set<string>>(); // userId → Set<connectionId>
|
|
52
52
|
protected nextConnectionId = 1;
|
|
@@ -54,7 +54,7 @@ export class NodeWebSocketServerProvider extends WebSocketServerProvider {
|
|
|
54
54
|
// -------------------------------------------------------------------------------------------------------------------
|
|
55
55
|
|
|
56
56
|
public registerEndpoint<TClient extends TWSObject, TServer extends TWSObject>(
|
|
57
|
-
config:
|
|
57
|
+
config: WebSocketPrimitiveOptions<TClient, TServer>,
|
|
58
58
|
): void {
|
|
59
59
|
const path = config.channel.options.path;
|
|
60
60
|
this.endpoints.set(path, config);
|
|
@@ -157,7 +157,7 @@ export class NodeWebSocketServerProvider extends WebSocketServerProvider {
|
|
|
157
157
|
TServer extends TWSObject,
|
|
158
158
|
>(
|
|
159
159
|
ws: WebSocket,
|
|
160
|
-
endpoint:
|
|
160
|
+
endpoint: WebSocketPrimitiveOptions<TClient, TServer>,
|
|
161
161
|
request: IncomingMessage,
|
|
162
162
|
): void {
|
|
163
163
|
const connectionId = `ws-${this.nextConnectionId++}`;
|
|
@@ -405,7 +405,7 @@ export class NodeWebSocketServerProvider extends WebSocketServerProvider {
|
|
|
405
405
|
}
|
|
406
406
|
|
|
407
407
|
// Attach upgrade handler to the HTTP server (must be done after HTTP server starts)
|
|
408
|
-
const httpServer = this.alepha.
|
|
408
|
+
const httpServer = this.alepha.store.get("alepha.node.server");
|
|
409
409
|
if (httpServer) {
|
|
410
410
|
httpServer.on("upgrade", (request, socket, head) => {
|
|
411
411
|
this.handleUpgrade(request, socket, head);
|
|
@@ -458,7 +458,7 @@ export class NodeWebSocketConnection implements WebSocketConnection {
|
|
|
458
458
|
public readonly roomIds: string[],
|
|
459
459
|
protected readonly ws: WebSocket,
|
|
460
460
|
protected readonly provider: NodeWebSocketServerProvider,
|
|
461
|
-
protected readonly endpoint:
|
|
461
|
+
protected readonly endpoint: WebSocketPrimitiveOptions<any, any>,
|
|
462
462
|
) {}
|
|
463
463
|
|
|
464
464
|
public get readyState(): WebSocketState {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type { TWSObject } from "../descriptors/$channel.ts";
|
|
2
1
|
import type {
|
|
3
2
|
EmitOptions,
|
|
4
3
|
WebSocketConnection,
|
|
5
|
-
|
|
4
|
+
WebSocketPrimitiveOptions,
|
|
6
5
|
} from "../interfaces/WebSocketInterfaces.ts";
|
|
6
|
+
import type { TWSObject } from "../primitives/$channel.ts";
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* Abstract WebSocket server provider
|
|
@@ -18,7 +18,7 @@ export abstract class WebSocketServerProvider {
|
|
|
18
18
|
abstract registerEndpoint<
|
|
19
19
|
TClient extends TWSObject,
|
|
20
20
|
TServer extends TWSObject,
|
|
21
|
-
>(config:
|
|
21
|
+
>(config: WebSocketPrimitiveOptions<TClient, TServer>): void;
|
|
22
22
|
|
|
23
23
|
/**
|
|
24
24
|
* Emit a message to clients based on targeting criteria
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
t,
|
|
9
9
|
} from "alepha";
|
|
10
10
|
import { $logger } from "alepha/logger";
|
|
11
|
-
import type {
|
|
11
|
+
import type { ChannelPrimitive, TWSObject } from "../primitives/$channel.ts";
|
|
12
12
|
|
|
13
13
|
const envSchema = t.object({
|
|
14
14
|
WEBSOCKET_URL: t.text({
|
|
@@ -75,7 +75,7 @@ export class WebSocketChannelConnection<
|
|
|
75
75
|
protected onErrorCallbacks = new Set<(error: Error) => void>();
|
|
76
76
|
|
|
77
77
|
constructor(
|
|
78
|
-
protected readonly channel:
|
|
78
|
+
protected readonly channel: ChannelPrimitive<TClient, TServer>,
|
|
79
79
|
protected readonly options: {
|
|
80
80
|
url?: string;
|
|
81
81
|
autoReconnect?: boolean;
|
|
@@ -472,7 +472,7 @@ export class WebSocketClient {
|
|
|
472
472
|
*/
|
|
473
473
|
public subscribe<TClient extends TWSObject, TServer extends TWSObject>(
|
|
474
474
|
roomId: string,
|
|
475
|
-
channel:
|
|
475
|
+
channel: ChannelPrimitive<TClient, TServer>,
|
|
476
476
|
handler: (message: Static<TClient>) => void,
|
|
477
477
|
options: {
|
|
478
478
|
url?: string;
|
|
@@ -547,7 +547,7 @@ export class WebSocketClient {
|
|
|
547
547
|
*/
|
|
548
548
|
public async send<TClient extends TWSObject, TServer extends TWSObject>(
|
|
549
549
|
roomId: string,
|
|
550
|
-
channel:
|
|
550
|
+
channel: ChannelPrimitive<TClient, TServer>,
|
|
551
551
|
message: Static<TServer>,
|
|
552
552
|
): Promise<void> {
|
|
553
553
|
const channelPath = channel.options.path;
|
|
@@ -574,7 +574,7 @@ export class WebSocketClient {
|
|
|
574
574
|
* Get connection for a channel
|
|
575
575
|
*/
|
|
576
576
|
public getConnection<TClient extends TWSObject, TServer extends TWSObject>(
|
|
577
|
-
channel:
|
|
577
|
+
channel: ChannelPrimitive<TClient, TServer>,
|
|
578
578
|
): WebSocketChannelConnection<TClient, TServer> | undefined {
|
|
579
579
|
const channelPath = channel.options.path;
|
|
580
580
|
const connection = this.connections.get(channelPath) as
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { SmsProvider, type SmsSendOptions } from "./SmsProvider.ts";
|
|
2
|
-
|
|
3
|
-
export interface SmsRecord {
|
|
4
|
-
to: string;
|
|
5
|
-
message: string;
|
|
6
|
-
sentAt: Date;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export class MemorySmsProvider extends SmsProvider {
|
|
10
|
-
protected records: SmsRecord[] = [];
|
|
11
|
-
|
|
12
|
-
public async send(options: SmsSendOptions): Promise<void> {
|
|
13
|
-
const { to, message } = options;
|
|
14
|
-
this.records.push({
|
|
15
|
-
to,
|
|
16
|
-
message,
|
|
17
|
-
sentAt: new Date(),
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|