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
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { $inject,
|
|
1
|
+
import { $inject, createPrimitive, KIND, Primitive } from "alepha";
|
|
2
2
|
import type { ServerRequest } from "alepha/server";
|
|
3
3
|
import type { RateLimitOptions } from "../index.ts";
|
|
4
4
|
import {
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* Declares rate limiting for server routes or custom usage.
|
|
11
|
-
* This
|
|
11
|
+
* This primitive provides methods to check rate limits and configure behavior
|
|
12
12
|
* within the server request/response cycle.
|
|
13
13
|
*
|
|
14
14
|
* @example
|
|
@@ -33,32 +33,32 @@ import {
|
|
|
33
33
|
* ```
|
|
34
34
|
*/
|
|
35
35
|
export const $rateLimit = (
|
|
36
|
-
options:
|
|
37
|
-
):
|
|
38
|
-
return
|
|
36
|
+
options: RateLimitPrimitiveOptions = {},
|
|
37
|
+
): AbstractRateLimitPrimitive => {
|
|
38
|
+
return createPrimitive(RateLimitPrimitive, options);
|
|
39
39
|
};
|
|
40
40
|
|
|
41
41
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
42
42
|
|
|
43
|
-
export interface
|
|
43
|
+
export interface RateLimitPrimitiveOptions extends RateLimitOptions {
|
|
44
44
|
/** Name identifier for this rate limit (default: property key) */
|
|
45
45
|
name?: string;
|
|
46
46
|
/** Path patterns to match (supports wildcards like /api/*) */
|
|
47
47
|
paths?: string[];
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
-
export interface
|
|
50
|
+
export interface AbstractRateLimitPrimitive {
|
|
51
51
|
readonly name: string;
|
|
52
|
-
readonly options:
|
|
52
|
+
readonly options: RateLimitPrimitiveOptions;
|
|
53
53
|
check(
|
|
54
54
|
request: ServerRequest,
|
|
55
55
|
options?: RateLimitOptions,
|
|
56
56
|
): Promise<RateLimitResult>;
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
-
export class
|
|
60
|
-
extends
|
|
61
|
-
implements
|
|
59
|
+
export class RateLimitPrimitive
|
|
60
|
+
extends Primitive<RateLimitPrimitiveOptions>
|
|
61
|
+
implements AbstractRateLimitPrimitive
|
|
62
62
|
{
|
|
63
63
|
protected readonly serverRateLimitProvider = $inject(ServerRateLimitProvider);
|
|
64
64
|
|
|
@@ -72,7 +72,7 @@ export class RateLimitDescriptor
|
|
|
72
72
|
}
|
|
73
73
|
|
|
74
74
|
/**
|
|
75
|
-
* Checks rate limit for the given request using this
|
|
75
|
+
* Checks rate limit for the given request using this primitive's configuration.
|
|
76
76
|
*/
|
|
77
77
|
public async check(
|
|
78
78
|
request: ServerRequest,
|
|
@@ -83,4 +83,4 @@ export class RateLimitDescriptor
|
|
|
83
83
|
}
|
|
84
84
|
}
|
|
85
85
|
|
|
86
|
-
$rateLimit[KIND] =
|
|
86
|
+
$rateLimit[KIND] = RateLimitPrimitive;
|
|
@@ -6,8 +6,8 @@ import {
|
|
|
6
6
|
type ServerRequest,
|
|
7
7
|
ServerRouterProvider,
|
|
8
8
|
} from "alepha/server";
|
|
9
|
-
import type { RateLimitDescriptorOptions } from "../descriptors/$rateLimit.ts";
|
|
10
9
|
import type { RateLimitOptions } from "../index.ts";
|
|
10
|
+
import type { RateLimitPrimitiveOptions } from "../primitives/$rateLimit.ts";
|
|
11
11
|
|
|
12
12
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
13
13
|
|
|
@@ -85,12 +85,12 @@ export class ServerRateLimitProvider {
|
|
|
85
85
|
/**
|
|
86
86
|
* Registered rate limit configurations with their path patterns
|
|
87
87
|
*/
|
|
88
|
-
public readonly registeredConfigs:
|
|
88
|
+
public readonly registeredConfigs: RateLimitPrimitiveOptions[] = [];
|
|
89
89
|
|
|
90
90
|
/**
|
|
91
|
-
* Register a rate limit configuration (called by
|
|
91
|
+
* Register a rate limit configuration (called by primitives)
|
|
92
92
|
*/
|
|
93
|
-
public registerRateLimit(config:
|
|
93
|
+
public registerRateLimit(config: RateLimitPrimitiveOptions): void {
|
|
94
94
|
this.registeredConfigs.push(config);
|
|
95
95
|
}
|
|
96
96
|
|
|
@@ -168,7 +168,7 @@ export class ServerRateLimitProvider {
|
|
|
168
168
|
* Build complete rate limit options by merging with global defaults
|
|
169
169
|
*/
|
|
170
170
|
protected buildRateLimitOptions(
|
|
171
|
-
config:
|
|
171
|
+
config: RateLimitPrimitiveOptions,
|
|
172
172
|
): RateLimitOptions {
|
|
173
173
|
return {
|
|
174
174
|
max: config.max ?? this.globalOptions.max,
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
type UserAccountToken,
|
|
9
9
|
} from "alepha/security";
|
|
10
10
|
import { AlephaServer, type FetchOptions } from "alepha/server";
|
|
11
|
-
import { $basicAuth } from "./
|
|
11
|
+
import { $basicAuth } from "./primitives/$basicAuth.ts";
|
|
12
12
|
import { ServerBasicAuthProvider } from "./providers/ServerBasicAuthProvider.ts";
|
|
13
13
|
import {
|
|
14
14
|
type ServerRouteSecure,
|
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
|
|
18
18
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
19
19
|
|
|
20
|
-
export * from "./
|
|
20
|
+
export * from "./primitives/$basicAuth.ts";
|
|
21
21
|
export * from "./providers/ServerBasicAuthProvider.ts";
|
|
22
22
|
export * from "./providers/ServerSecurityProvider.ts";
|
|
23
23
|
|
|
@@ -84,7 +84,7 @@ declare module "alepha/server" {
|
|
|
84
84
|
*/
|
|
85
85
|
export const AlephaServerSecurity = $module({
|
|
86
86
|
name: "alepha.server.security",
|
|
87
|
-
|
|
87
|
+
primitives: [$realm, $role, $permission, $basicAuth],
|
|
88
88
|
services: [
|
|
89
89
|
AlephaServer,
|
|
90
90
|
AlephaSecurity,
|
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
import { $inject,
|
|
1
|
+
import { $inject, createPrimitive, KIND, Primitive } from "alepha";
|
|
2
2
|
import type { ServerRequest } from "alepha/server";
|
|
3
3
|
import type {
|
|
4
|
-
BasicAuthDescriptorConfig,
|
|
5
4
|
BasicAuthOptions,
|
|
5
|
+
BasicAuthPrimitiveConfig,
|
|
6
6
|
} from "../providers/ServerBasicAuthProvider.ts";
|
|
7
7
|
import { ServerBasicAuthProvider } from "../providers/ServerBasicAuthProvider.ts";
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* Declares HTTP Basic Authentication for server routes.
|
|
11
|
-
* This
|
|
11
|
+
* This primitive provides methods to protect routes with username/password authentication.
|
|
12
12
|
*/
|
|
13
13
|
export const $basicAuth = (
|
|
14
|
-
options:
|
|
15
|
-
):
|
|
16
|
-
return
|
|
14
|
+
options: BasicAuthPrimitiveConfig,
|
|
15
|
+
): AbstractBasicAuthPrimitive => {
|
|
16
|
+
return createPrimitive(BasicAuthPrimitive, options);
|
|
17
17
|
};
|
|
18
18
|
|
|
19
19
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
20
20
|
|
|
21
|
-
export interface
|
|
21
|
+
export interface AbstractBasicAuthPrimitive {
|
|
22
22
|
readonly name: string;
|
|
23
|
-
readonly options:
|
|
23
|
+
readonly options: BasicAuthPrimitiveConfig;
|
|
24
24
|
check(request: ServerRequest, options?: BasicAuthOptions): void;
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
export class
|
|
28
|
-
extends
|
|
29
|
-
implements
|
|
27
|
+
export class BasicAuthPrimitive
|
|
28
|
+
extends Primitive<BasicAuthPrimitiveConfig>
|
|
29
|
+
implements AbstractBasicAuthPrimitive
|
|
30
30
|
{
|
|
31
31
|
protected readonly serverBasicAuthProvider = $inject(ServerBasicAuthProvider);
|
|
32
32
|
|
|
@@ -40,7 +40,7 @@ export class BasicAuthDescriptor
|
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
/**
|
|
43
|
-
* Checks basic auth for the given request using this
|
|
43
|
+
* Checks basic auth for the given request using this primitive's configuration.
|
|
44
44
|
*/
|
|
45
45
|
public check(request: ServerRequest, options?: BasicAuthOptions): void {
|
|
46
46
|
const mergedOptions = { ...this.options, ...options };
|
|
@@ -48,4 +48,4 @@ export class BasicAuthDescriptor
|
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
-
$basicAuth[KIND] =
|
|
51
|
+
$basicAuth[KIND] = BasicAuthPrimitive;
|
|
@@ -14,7 +14,7 @@ export interface BasicAuthOptions {
|
|
|
14
14
|
password: string;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
export interface
|
|
17
|
+
export interface BasicAuthPrimitiveConfig extends BasicAuthOptions {
|
|
18
18
|
/** Name identifier for this basic auth (default: property key) */
|
|
19
19
|
name?: string;
|
|
20
20
|
/** Path patterns to match (supports wildcards like /devtools/*) */
|
|
@@ -30,14 +30,14 @@ export class ServerBasicAuthProvider {
|
|
|
30
30
|
protected readonly realm = "Secure Area";
|
|
31
31
|
|
|
32
32
|
/**
|
|
33
|
-
* Registered basic auth
|
|
33
|
+
* Registered basic auth primitives with their configurations
|
|
34
34
|
*/
|
|
35
|
-
public readonly registeredAuths:
|
|
35
|
+
public readonly registeredAuths: BasicAuthPrimitiveConfig[] = [];
|
|
36
36
|
|
|
37
37
|
/**
|
|
38
|
-
* Register a basic auth configuration (called by
|
|
38
|
+
* Register a basic auth configuration (called by primitives)
|
|
39
39
|
*/
|
|
40
|
-
public registerAuth(config:
|
|
40
|
+
public registerAuth(config: BasicAuthPrimitiveConfig): void {
|
|
41
41
|
this.registeredAuths.push(config);
|
|
42
42
|
}
|
|
43
43
|
|
|
@@ -28,7 +28,7 @@ export class ServerSecurityProvider {
|
|
|
28
28
|
protected readonly onConfigure = $hook({
|
|
29
29
|
on: "configure",
|
|
30
30
|
handler: async () => {
|
|
31
|
-
for (const action of this.alepha.
|
|
31
|
+
for (const action of this.alepha.primitives($action)) {
|
|
32
32
|
// -------------------------------------------------------------------------------------------------------------
|
|
33
33
|
// if the action is disabled or not secure, we do NOT create a permission for it
|
|
34
34
|
// -------------------------------------------------------------------------------------------------------------
|
|
@@ -87,7 +87,7 @@ export class ServerSecurityProvider {
|
|
|
87
87
|
this.check(request.user, route.secure);
|
|
88
88
|
}
|
|
89
89
|
|
|
90
|
-
this.alepha.
|
|
90
|
+
this.alepha.store.set(
|
|
91
91
|
"alepha.server.request.user",
|
|
92
92
|
this.alepha.codec.decode(userAccountInfoSchema, request.user),
|
|
93
93
|
);
|
|
@@ -139,7 +139,7 @@ export class ServerSecurityProvider {
|
|
|
139
139
|
this.check(request.user, route.secure);
|
|
140
140
|
}
|
|
141
141
|
|
|
142
|
-
this.alepha.
|
|
142
|
+
this.alepha.store.set(
|
|
143
143
|
"alepha.server.request.user",
|
|
144
144
|
// remove sensitive info
|
|
145
145
|
this.alepha.codec.decode(userAccountInfoSchema, request.user),
|
|
@@ -198,7 +198,7 @@ export class ServerSecurityProvider {
|
|
|
198
198
|
let user: UserAccountToken | undefined;
|
|
199
199
|
|
|
200
200
|
const fromContext = this.alepha.context.get<ServerRequest>("request")?.user;
|
|
201
|
-
const fromSystem = this.alepha.
|
|
201
|
+
const fromSystem = this.alepha.store.get(
|
|
202
202
|
"alepha.server.security.system.user",
|
|
203
203
|
);
|
|
204
204
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { $module } from "alepha";
|
|
2
2
|
import { AlephaServer } from "alepha/server";
|
|
3
|
-
import { $serve } from "./
|
|
3
|
+
import { $serve } from "./primitives/$serve.ts";
|
|
4
4
|
import { ServerStaticProvider } from "./providers/ServerStaticProvider.ts";
|
|
5
5
|
|
|
6
6
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
7
7
|
|
|
8
|
-
export * from "./
|
|
8
|
+
export * from "./primitives/$serve.ts";
|
|
9
9
|
export * from "./providers/ServerStaticProvider.ts";
|
|
10
10
|
|
|
11
11
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
@@ -18,6 +18,6 @@ export * from "./providers/ServerStaticProvider.ts";
|
|
|
18
18
|
*/
|
|
19
19
|
export const AlephaServerStatic = $module({
|
|
20
20
|
name: "alepha.server.static",
|
|
21
|
-
|
|
21
|
+
primitives: [$serve],
|
|
22
22
|
services: [AlephaServer, ServerStaticProvider],
|
|
23
23
|
});
|
|
@@ -1,16 +1,14 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createPrimitive, KIND, Primitive } from "alepha";
|
|
2
2
|
import type { DurationLike } from "alepha/datetime";
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Create a new static file handler.
|
|
6
6
|
*/
|
|
7
|
-
export const $serve = (
|
|
8
|
-
|
|
9
|
-
): ServeDescriptor => {
|
|
10
|
-
return createDescriptor(ServeDescriptor, options);
|
|
7
|
+
export const $serve = (options: ServePrimitiveOptions = {}): ServePrimitive => {
|
|
8
|
+
return createPrimitive(ServePrimitive, options);
|
|
11
9
|
};
|
|
12
10
|
|
|
13
|
-
export interface
|
|
11
|
+
export interface ServePrimitiveOptions {
|
|
14
12
|
/**
|
|
15
13
|
* Prefix for the served path.
|
|
16
14
|
*
|
|
@@ -26,7 +24,7 @@ export interface ServeDescriptorOptions {
|
|
|
26
24
|
root?: string;
|
|
27
25
|
|
|
28
26
|
/**
|
|
29
|
-
* If true,
|
|
27
|
+
* If true, primitive will be ignored.
|
|
30
28
|
*
|
|
31
29
|
* @default false
|
|
32
30
|
*/
|
|
@@ -53,7 +51,7 @@ export interface ServeDescriptorOptions {
|
|
|
53
51
|
historyApiFallback?: boolean;
|
|
54
52
|
|
|
55
53
|
/**
|
|
56
|
-
* Optional name of the
|
|
54
|
+
* Optional name of the primitive.
|
|
57
55
|
* This is used for logging and debugging purposes.
|
|
58
56
|
*
|
|
59
57
|
* @default Key name.
|
|
@@ -91,6 +89,6 @@ export interface CacheControlOptions {
|
|
|
91
89
|
immutable: boolean;
|
|
92
90
|
}
|
|
93
91
|
|
|
94
|
-
export class
|
|
92
|
+
export class ServePrimitive extends Primitive<ServePrimitiveOptions> {}
|
|
95
93
|
|
|
96
|
-
$serve[KIND] =
|
|
94
|
+
$serve[KIND] = ServePrimitive;
|
|
@@ -7,7 +7,7 @@ import { DateTimeProvider } from "alepha/datetime";
|
|
|
7
7
|
import { FileDetector } from "alepha/file";
|
|
8
8
|
import { $logger } from "alepha/logger";
|
|
9
9
|
import { type ServerHandler, ServerRouterProvider } from "alepha/server";
|
|
10
|
-
import { $serve, type
|
|
10
|
+
import { $serve, type ServePrimitiveOptions } from "../primitives/$serve.ts";
|
|
11
11
|
|
|
12
12
|
export class ServerStaticProvider {
|
|
13
13
|
protected readonly alepha = $inject(Alepha);
|
|
@@ -22,14 +22,14 @@ export class ServerStaticProvider {
|
|
|
22
22
|
handler: async () => {
|
|
23
23
|
await Promise.all(
|
|
24
24
|
this.alepha
|
|
25
|
-
.
|
|
25
|
+
.primitives($serve)
|
|
26
26
|
.map((it) => this.createStaticServer(it.options)),
|
|
27
27
|
);
|
|
28
28
|
},
|
|
29
29
|
});
|
|
30
30
|
|
|
31
31
|
public async createStaticServer(
|
|
32
|
-
options:
|
|
32
|
+
options: ServePrimitiveOptions,
|
|
33
33
|
): Promise<void> {
|
|
34
34
|
const prefix = options.path ?? "/";
|
|
35
35
|
|
|
@@ -98,8 +98,15 @@ export class ServerStaticProvider {
|
|
|
98
98
|
reply.headers["content-type"] = "text/html";
|
|
99
99
|
reply.status = 200;
|
|
100
100
|
|
|
101
|
-
|
|
102
|
-
|
|
101
|
+
return new Promise<any>((resolve, reject) => {
|
|
102
|
+
const stream = createReadStream(join(root, "index.html"));
|
|
103
|
+
stream.on("open", () => {
|
|
104
|
+
resolve(stream);
|
|
105
|
+
});
|
|
106
|
+
stream.on("error", (err) => {
|
|
107
|
+
reject(err);
|
|
108
|
+
});
|
|
109
|
+
});
|
|
103
110
|
},
|
|
104
111
|
});
|
|
105
112
|
}
|
|
@@ -107,7 +114,7 @@ export class ServerStaticProvider {
|
|
|
107
114
|
|
|
108
115
|
public async createFileHandler(
|
|
109
116
|
filepath: string,
|
|
110
|
-
options:
|
|
117
|
+
options: ServePrimitiveOptions,
|
|
111
118
|
): Promise<ServerHandler> {
|
|
112
119
|
const filename = basename(filepath);
|
|
113
120
|
|
|
@@ -161,7 +168,15 @@ export class ServerStaticProvider {
|
|
|
161
168
|
return;
|
|
162
169
|
}
|
|
163
170
|
|
|
164
|
-
return
|
|
171
|
+
return new Promise<any>((resolve, reject) => {
|
|
172
|
+
const stream = createReadStream(path);
|
|
173
|
+
stream.on("open", () => {
|
|
174
|
+
resolve(stream);
|
|
175
|
+
});
|
|
176
|
+
stream.on("error", (err) => {
|
|
177
|
+
reject(err);
|
|
178
|
+
});
|
|
179
|
+
});
|
|
165
180
|
};
|
|
166
181
|
}
|
|
167
182
|
|
|
@@ -184,7 +199,7 @@ export class ServerStaticProvider {
|
|
|
184
199
|
|
|
185
200
|
protected getCacheControl(
|
|
186
201
|
filename: string,
|
|
187
|
-
options:
|
|
202
|
+
options: ServePrimitiveOptions,
|
|
188
203
|
): { maxAge: number; immutable: boolean } | undefined {
|
|
189
204
|
if (!options.cacheControl) {
|
|
190
205
|
return;
|
|
@@ -228,6 +243,6 @@ export class ServerStaticProvider {
|
|
|
228
243
|
}
|
|
229
244
|
|
|
230
245
|
export interface ServeDirectory {
|
|
231
|
-
options:
|
|
246
|
+
options: ServePrimitiveOptions;
|
|
232
247
|
files: string[];
|
|
233
248
|
}
|
|
@@ -3,18 +3,18 @@ import { $module } from "alepha";
|
|
|
3
3
|
import { AlephaServer, type RequestConfigSchema } from "alepha/server";
|
|
4
4
|
import { AlephaServerCache } from "alepha/server/cache";
|
|
5
5
|
import { AlephaServerStatic } from "alepha/server/static";
|
|
6
|
-
import { $swagger } from "./
|
|
6
|
+
import { $swagger } from "./primitives/$swagger.ts";
|
|
7
7
|
import { ServerSwaggerProvider } from "./providers/ServerSwaggerProvider.ts";
|
|
8
8
|
|
|
9
9
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
10
10
|
|
|
11
|
-
export * from "./
|
|
11
|
+
export * from "./primitives/$swagger.ts";
|
|
12
12
|
export * from "./providers/ServerSwaggerProvider.ts";
|
|
13
13
|
|
|
14
14
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
15
15
|
|
|
16
16
|
declare module "alepha/server" {
|
|
17
|
-
interface
|
|
17
|
+
interface ActionPrimitiveOptions<TConfig extends RequestConfigSchema> {
|
|
18
18
|
/**
|
|
19
19
|
* Short description of the route.
|
|
20
20
|
*/
|
|
@@ -39,13 +39,13 @@ declare module "alepha/server" {
|
|
|
39
39
|
*/
|
|
40
40
|
export const AlephaServerSwagger = $module({
|
|
41
41
|
name: "alepha.server.swagger",
|
|
42
|
-
|
|
42
|
+
primitives: [$swagger],
|
|
43
43
|
services: [ServerSwaggerProvider],
|
|
44
44
|
register: (alepha) => {
|
|
45
45
|
alepha.with(AlephaServer);
|
|
46
46
|
alepha.with(AlephaServerCache);
|
|
47
47
|
alepha.with(AlephaServerStatic);
|
|
48
48
|
alepha.with(ServerSwaggerProvider);
|
|
49
|
-
alepha.
|
|
49
|
+
alepha.store.push("alepha.build.assets", "alepha");
|
|
50
50
|
},
|
|
51
51
|
});
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createPrimitive, KIND, Primitive } from "alepha";
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* Creates an OpenAPI/Swagger documentation
|
|
4
|
+
* Creates an OpenAPI/Swagger documentation primitive with interactive UI.
|
|
5
5
|
*
|
|
6
|
-
* Automatically generates API documentation from your $action
|
|
6
|
+
* Automatically generates API documentation from your $action primitives and serves
|
|
7
7
|
* an interactive Swagger UI for testing endpoints. Supports customization, tag filtering,
|
|
8
8
|
* and OAuth configuration.
|
|
9
9
|
*
|
|
@@ -24,12 +24,12 @@ import { createDescriptor, Descriptor, KIND } from "alepha";
|
|
|
24
24
|
* ```
|
|
25
25
|
*/
|
|
26
26
|
export const $swagger = (
|
|
27
|
-
options:
|
|
28
|
-
):
|
|
29
|
-
return
|
|
27
|
+
options: SwaggerPrimitiveOptions = {},
|
|
28
|
+
): SwaggerPrimitive => {
|
|
29
|
+
return createPrimitive(SwaggerPrimitive, options);
|
|
30
30
|
};
|
|
31
31
|
|
|
32
|
-
export interface
|
|
32
|
+
export interface SwaggerPrimitiveOptions {
|
|
33
33
|
info?: OpenApiDocument["info"];
|
|
34
34
|
|
|
35
35
|
/**
|
|
@@ -121,9 +121,9 @@ export interface SwaggerUiOptions {
|
|
|
121
121
|
};
|
|
122
122
|
}
|
|
123
123
|
|
|
124
|
-
export class
|
|
124
|
+
export class SwaggerPrimitive extends Primitive<SwaggerPrimitiveOptions> {}
|
|
125
125
|
|
|
126
|
-
$swagger[KIND] =
|
|
126
|
+
$swagger[KIND] = SwaggerPrimitive;
|
|
127
127
|
|
|
128
128
|
export interface OpenApiDocument {
|
|
129
129
|
openapi: string;
|
|
@@ -17,7 +17,7 @@ import { $logger } from "alepha/logger";
|
|
|
17
17
|
import { AlephaSecurity } from "alepha/security";
|
|
18
18
|
import {
|
|
19
19
|
$action,
|
|
20
|
-
type
|
|
20
|
+
type ActionPrimitive,
|
|
21
21
|
type RequestConfigSchema,
|
|
22
22
|
ServerProvider,
|
|
23
23
|
ServerRouterProvider,
|
|
@@ -27,8 +27,8 @@ import {
|
|
|
27
27
|
$swagger,
|
|
28
28
|
type OpenApiDocument,
|
|
29
29
|
type OpenApiOperation,
|
|
30
|
-
type
|
|
31
|
-
} from "../
|
|
30
|
+
type SwaggerPrimitiveOptions,
|
|
31
|
+
} from "../primitives/$swagger.ts";
|
|
32
32
|
|
|
33
33
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
34
34
|
|
|
@@ -74,7 +74,7 @@ export class ServerSwaggerProvider {
|
|
|
74
74
|
on: "configure",
|
|
75
75
|
priority: "last", // wait for all configurations, sometimes some actions are registered late!
|
|
76
76
|
handler: async (alepha) => {
|
|
77
|
-
const options = alepha.
|
|
77
|
+
const options = alepha.primitives($swagger)?.[0]?.options;
|
|
78
78
|
if (!options) {
|
|
79
79
|
return;
|
|
80
80
|
}
|
|
@@ -84,14 +84,14 @@ export class ServerSwaggerProvider {
|
|
|
84
84
|
});
|
|
85
85
|
|
|
86
86
|
public async createSwagger(
|
|
87
|
-
options:
|
|
87
|
+
options: SwaggerPrimitiveOptions,
|
|
88
88
|
): Promise<OpenApiDocument | undefined> {
|
|
89
89
|
if (options.disabled) {
|
|
90
90
|
return;
|
|
91
91
|
}
|
|
92
92
|
|
|
93
93
|
const json = this.configureOpenApi(
|
|
94
|
-
this.alepha.
|
|
94
|
+
this.alepha.primitives($action),
|
|
95
95
|
options,
|
|
96
96
|
);
|
|
97
97
|
|
|
@@ -111,8 +111,8 @@ export class ServerSwaggerProvider {
|
|
|
111
111
|
}
|
|
112
112
|
|
|
113
113
|
protected configureOpenApi(
|
|
114
|
-
actions:
|
|
115
|
-
doc:
|
|
114
|
+
actions: ActionPrimitive<RequestConfigSchema>[],
|
|
115
|
+
doc: SwaggerPrimitiveOptions,
|
|
116
116
|
): OpenApiDocument {
|
|
117
117
|
const openApi: OpenApiDocument = {
|
|
118
118
|
openapi: "3.0.0",
|
|
@@ -290,7 +290,7 @@ export class ServerSwaggerProvider {
|
|
|
290
290
|
});
|
|
291
291
|
}
|
|
292
292
|
|
|
293
|
-
public getResponseSchema(route:
|
|
293
|
+
public getResponseSchema(route: ActionPrimitive<RequestConfigSchema>):
|
|
294
294
|
| {
|
|
295
295
|
type?: string;
|
|
296
296
|
schema?: any;
|
|
@@ -357,7 +357,7 @@ export class ServerSwaggerProvider {
|
|
|
357
357
|
|
|
358
358
|
protected async configureSwaggerUi(
|
|
359
359
|
prefix: string,
|
|
360
|
-
options:
|
|
360
|
+
options: SwaggerPrimitiveOptions,
|
|
361
361
|
): Promise<void> {
|
|
362
362
|
const ui = typeof options.ui === "object" ? options.ui : {};
|
|
363
363
|
const initializer = `
|
|
@@ -391,6 +391,7 @@ window.onload = function() {
|
|
|
391
391
|
const root = await this.getAssetPath(
|
|
392
392
|
ui.root,
|
|
393
393
|
join(dirname, "../../assets/swagger-ui"),
|
|
394
|
+
join(dirname, "../../../assets/swagger-ui"),
|
|
394
395
|
join(dirname, "../../../../assets/swagger-ui"),
|
|
395
396
|
);
|
|
396
397
|
|
package/src/sms/index.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { $module } from "alepha";
|
|
2
|
-
import { $sms } from "./
|
|
2
|
+
import { $sms } from "./primitives/$sms.ts";
|
|
3
3
|
import { LocalSmsProvider } from "./providers/LocalSmsProvider.ts";
|
|
4
4
|
import { MemorySmsProvider } from "./providers/MemorySmsProvider.ts";
|
|
5
5
|
import { SmsProvider } from "./providers/SmsProvider.ts";
|
|
6
6
|
|
|
7
7
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
8
8
|
|
|
9
|
-
export * from "./descriptors/$sms.ts";
|
|
10
9
|
export * from "./errors/SmsError.ts";
|
|
10
|
+
export * from "./primitives/$sms.ts";
|
|
11
11
|
export * from "./providers/LocalSmsProvider.ts";
|
|
12
12
|
export * from "./providers/MemorySmsProvider.ts";
|
|
13
13
|
export * from "./providers/SmsProvider.ts";
|
|
@@ -36,7 +36,7 @@ declare module "alepha" {
|
|
|
36
36
|
/**
|
|
37
37
|
* Provides SMS sending capabilities for Alepha applications with multiple provider backends.
|
|
38
38
|
*
|
|
39
|
-
* The SMS module enables declarative SMS sending through the `$sms`
|
|
39
|
+
* The SMS module enables declarative SMS sending through the `$sms` primitive, allowing you to send
|
|
40
40
|
* text messages through different providers: memory (for testing) or local file system.
|
|
41
41
|
* It supports automatic provider selection based on environment configuration.
|
|
42
42
|
*
|
|
@@ -45,7 +45,7 @@ declare module "alepha" {
|
|
|
45
45
|
*/
|
|
46
46
|
export const AlephaSms = $module({
|
|
47
47
|
name: "alepha.sms",
|
|
48
|
-
|
|
48
|
+
primitives: [$sms],
|
|
49
49
|
services: [SmsProvider, MemorySmsProvider, LocalSmsProvider],
|
|
50
50
|
register: (alepha) =>
|
|
51
51
|
alepha.with({
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
Descriptor,
|
|
2
|
+
createPrimitive,
|
|
4
3
|
type InstantiableClass,
|
|
5
4
|
KIND,
|
|
5
|
+
Primitive,
|
|
6
6
|
} from "alepha";
|
|
7
7
|
import { MemorySmsProvider } from "../providers/MemorySmsProvider.ts";
|
|
8
8
|
import type { SmsSendOptions } from "../providers/SmsProvider.ts";
|
|
@@ -10,12 +10,12 @@ import { SmsProvider } from "../providers/SmsProvider.ts";
|
|
|
10
10
|
|
|
11
11
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
12
12
|
|
|
13
|
-
export const $sms = (options:
|
|
14
|
-
|
|
13
|
+
export const $sms = (options: SmsPrimitiveOptions = {}) =>
|
|
14
|
+
createPrimitive(SmsPrimitive, options);
|
|
15
15
|
|
|
16
16
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
17
17
|
|
|
18
|
-
export interface
|
|
18
|
+
export interface SmsPrimitiveOptions {
|
|
19
19
|
name?: string;
|
|
20
20
|
provider?: InstantiableClass<SmsProvider> | "memory";
|
|
21
21
|
}
|
|
@@ -23,7 +23,7 @@ export interface SmsDescriptorOptions {
|
|
|
23
23
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
24
24
|
|
|
25
25
|
/**
|
|
26
|
-
* SMS
|
|
26
|
+
* SMS primitive for sending SMS messages through various providers.
|
|
27
27
|
*
|
|
28
28
|
* Usage:
|
|
29
29
|
* ```typescript
|
|
@@ -39,7 +39,7 @@ export interface SmsDescriptorOptions {
|
|
|
39
39
|
* }
|
|
40
40
|
* ```
|
|
41
41
|
*/
|
|
42
|
-
export class
|
|
42
|
+
export class SmsPrimitive extends Primitive<SmsPrimitiveOptions> {
|
|
43
43
|
protected readonly provider = this.$provider();
|
|
44
44
|
|
|
45
45
|
public get name() {
|
|
@@ -82,4 +82,4 @@ export class SmsDescriptor extends Descriptor<SmsDescriptorOptions> {
|
|
|
82
82
|
|
|
83
83
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
84
84
|
|
|
85
|
-
$sms[KIND] =
|
|
85
|
+
$sms[KIND] = SmsPrimitive;
|