alepha 0.12.1 → 0.13.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (198) hide show
  1. package/dist/api-notifications/index.d.ts +111 -111
  2. package/dist/api-users/index.d.ts +1240 -1240
  3. package/dist/api-verifications/index.d.ts +94 -94
  4. package/dist/cli/{dist-Sz2EXvQX.cjs → dist-Dl9Vl7Ur.js} +17 -13
  5. package/dist/cli/{dist-BBPjuQ56.js.map → dist-Dl9Vl7Ur.js.map} +1 -1
  6. package/dist/cli/index.d.ts +3 -11
  7. package/dist/cli/index.js +106 -74
  8. package/dist/cli/index.js.map +1 -1
  9. package/dist/email/index.js +71 -73
  10. package/dist/email/index.js.map +1 -1
  11. package/dist/orm/index.d.ts +1 -1
  12. package/dist/orm/index.js.map +1 -1
  13. package/dist/queue/index.d.ts +4 -4
  14. package/dist/redis/index.d.ts +10 -10
  15. package/dist/retry/index.d.ts +1 -1
  16. package/dist/retry/index.js +2 -2
  17. package/dist/retry/index.js.map +1 -1
  18. package/dist/scheduler/index.d.ts +6 -6
  19. package/dist/server/index.js +1 -1
  20. package/dist/server/index.js.map +1 -1
  21. package/dist/server-auth/index.d.ts +193 -193
  22. package/dist/server-health/index.d.ts +17 -17
  23. package/dist/server-links/index.d.ts +34 -34
  24. package/dist/server-metrics/index.js +170 -174
  25. package/dist/server-metrics/index.js.map +1 -1
  26. package/dist/server-security/index.d.ts +9 -9
  27. package/dist/vite/index.js +4 -5
  28. package/dist/vite/index.js.map +1 -1
  29. package/dist/websocket/index.d.ts +7 -7
  30. package/package.json +52 -103
  31. package/src/cli/apps/AlephaPackageBuilderCli.ts +7 -2
  32. package/src/cli/assets/appRouterTs.ts +9 -0
  33. package/src/cli/assets/indexHtml.ts +2 -1
  34. package/src/cli/assets/mainBrowserTs.ts +10 -0
  35. package/src/cli/commands/CoreCommands.ts +6 -5
  36. package/src/cli/commands/DrizzleCommands.ts +65 -57
  37. package/src/cli/commands/VerifyCommands.ts +1 -1
  38. package/src/cli/services/ProjectUtils.ts +44 -38
  39. package/src/orm/providers/DrizzleKitProvider.ts +1 -1
  40. package/src/retry/descriptors/$retry.ts +5 -3
  41. package/src/server/providers/NodeHttpServerProvider.ts +1 -1
  42. package/src/vite/helpers/boot.ts +3 -3
  43. package/dist/api-files/index.cjs +0 -1293
  44. package/dist/api-files/index.cjs.map +0 -1
  45. package/dist/api-files/index.d.cts +0 -829
  46. package/dist/api-jobs/index.cjs +0 -274
  47. package/dist/api-jobs/index.cjs.map +0 -1
  48. package/dist/api-jobs/index.d.cts +0 -654
  49. package/dist/api-notifications/index.cjs +0 -380
  50. package/dist/api-notifications/index.cjs.map +0 -1
  51. package/dist/api-notifications/index.d.cts +0 -289
  52. package/dist/api-parameters/index.cjs +0 -66
  53. package/dist/api-parameters/index.cjs.map +0 -1
  54. package/dist/api-parameters/index.d.cts +0 -84
  55. package/dist/api-users/index.cjs +0 -6009
  56. package/dist/api-users/index.cjs.map +0 -1
  57. package/dist/api-users/index.d.cts +0 -4740
  58. package/dist/api-verifications/index.cjs +0 -407
  59. package/dist/api-verifications/index.cjs.map +0 -1
  60. package/dist/api-verifications/index.d.cts +0 -207
  61. package/dist/batch/index.cjs +0 -408
  62. package/dist/batch/index.cjs.map +0 -1
  63. package/dist/batch/index.d.cts +0 -330
  64. package/dist/bin/index.cjs +0 -17
  65. package/dist/bin/index.cjs.map +0 -1
  66. package/dist/bin/index.d.cts +0 -1
  67. package/dist/bucket/index.cjs +0 -303
  68. package/dist/bucket/index.cjs.map +0 -1
  69. package/dist/bucket/index.d.cts +0 -355
  70. package/dist/cache/index.cjs +0 -241
  71. package/dist/cache/index.cjs.map +0 -1
  72. package/dist/cache/index.d.cts +0 -202
  73. package/dist/cache-redis/index.cjs +0 -84
  74. package/dist/cache-redis/index.cjs.map +0 -1
  75. package/dist/cache-redis/index.d.cts +0 -40
  76. package/dist/cli/chunk-DSlc6foC.cjs +0 -43
  77. package/dist/cli/dist-BBPjuQ56.js +0 -2778
  78. package/dist/cli/dist-Sz2EXvQX.cjs.map +0 -1
  79. package/dist/cli/index.cjs +0 -1241
  80. package/dist/cli/index.cjs.map +0 -1
  81. package/dist/cli/index.d.cts +0 -422
  82. package/dist/command/index.cjs +0 -693
  83. package/dist/command/index.cjs.map +0 -1
  84. package/dist/command/index.d.cts +0 -340
  85. package/dist/core/index.cjs +0 -2264
  86. package/dist/core/index.cjs.map +0 -1
  87. package/dist/core/index.d.cts +0 -1927
  88. package/dist/datetime/index.cjs +0 -318
  89. package/dist/datetime/index.cjs.map +0 -1
  90. package/dist/datetime/index.d.cts +0 -145
  91. package/dist/email/index.cjs +0 -10874
  92. package/dist/email/index.cjs.map +0 -1
  93. package/dist/email/index.d.cts +0 -186
  94. package/dist/fake/index.cjs +0 -34641
  95. package/dist/fake/index.cjs.map +0 -1
  96. package/dist/fake/index.d.cts +0 -74
  97. package/dist/file/index.cjs +0 -1212
  98. package/dist/file/index.cjs.map +0 -1
  99. package/dist/file/index.d.cts +0 -698
  100. package/dist/lock/index.cjs +0 -226
  101. package/dist/lock/index.cjs.map +0 -1
  102. package/dist/lock/index.d.cts +0 -361
  103. package/dist/lock-redis/index.cjs +0 -113
  104. package/dist/lock-redis/index.cjs.map +0 -1
  105. package/dist/lock-redis/index.d.cts +0 -24
  106. package/dist/logger/index.cjs +0 -521
  107. package/dist/logger/index.cjs.map +0 -1
  108. package/dist/logger/index.d.cts +0 -281
  109. package/dist/orm/index.cjs +0 -2986
  110. package/dist/orm/index.cjs.map +0 -1
  111. package/dist/orm/index.d.cts +0 -2213
  112. package/dist/queue/index.cjs +0 -1044
  113. package/dist/queue/index.cjs.map +0 -1
  114. package/dist/queue/index.d.cts +0 -1265
  115. package/dist/queue-redis/index.cjs +0 -873
  116. package/dist/queue-redis/index.cjs.map +0 -1
  117. package/dist/queue-redis/index.d.cts +0 -82
  118. package/dist/redis/index.cjs +0 -153
  119. package/dist/redis/index.cjs.map +0 -1
  120. package/dist/redis/index.d.cts +0 -82
  121. package/dist/retry/index.cjs +0 -146
  122. package/dist/retry/index.cjs.map +0 -1
  123. package/dist/retry/index.d.cts +0 -172
  124. package/dist/router/index.cjs +0 -111
  125. package/dist/router/index.cjs.map +0 -1
  126. package/dist/router/index.d.cts +0 -46
  127. package/dist/scheduler/index.cjs +0 -576
  128. package/dist/scheduler/index.cjs.map +0 -1
  129. package/dist/scheduler/index.d.cts +0 -145
  130. package/dist/security/index.cjs +0 -2402
  131. package/dist/security/index.cjs.map +0 -1
  132. package/dist/security/index.d.cts +0 -598
  133. package/dist/server/index.cjs +0 -1680
  134. package/dist/server/index.cjs.map +0 -1
  135. package/dist/server/index.d.cts +0 -810
  136. package/dist/server-auth/index.cjs +0 -3146
  137. package/dist/server-auth/index.cjs.map +0 -1
  138. package/dist/server-auth/index.d.cts +0 -1164
  139. package/dist/server-cache/index.cjs +0 -252
  140. package/dist/server-cache/index.cjs.map +0 -1
  141. package/dist/server-cache/index.d.cts +0 -164
  142. package/dist/server-compress/index.cjs +0 -141
  143. package/dist/server-compress/index.cjs.map +0 -1
  144. package/dist/server-compress/index.d.cts +0 -38
  145. package/dist/server-cookies/index.cjs +0 -234
  146. package/dist/server-cookies/index.cjs.map +0 -1
  147. package/dist/server-cookies/index.d.cts +0 -144
  148. package/dist/server-cors/index.cjs +0 -201
  149. package/dist/server-cors/index.cjs.map +0 -1
  150. package/dist/server-cors/index.d.cts +0 -140
  151. package/dist/server-health/index.cjs +0 -62
  152. package/dist/server-health/index.cjs.map +0 -1
  153. package/dist/server-health/index.d.cts +0 -58
  154. package/dist/server-helmet/index.cjs +0 -131
  155. package/dist/server-helmet/index.cjs.map +0 -1
  156. package/dist/server-helmet/index.d.cts +0 -97
  157. package/dist/server-links/index.cjs +0 -992
  158. package/dist/server-links/index.cjs.map +0 -1
  159. package/dist/server-links/index.d.cts +0 -513
  160. package/dist/server-metrics/index.cjs +0 -4535
  161. package/dist/server-metrics/index.cjs.map +0 -1
  162. package/dist/server-metrics/index.d.cts +0 -35
  163. package/dist/server-multipart/index.cjs +0 -237
  164. package/dist/server-multipart/index.cjs.map +0 -1
  165. package/dist/server-multipart/index.d.cts +0 -50
  166. package/dist/server-proxy/index.cjs +0 -186
  167. package/dist/server-proxy/index.cjs.map +0 -1
  168. package/dist/server-proxy/index.d.cts +0 -234
  169. package/dist/server-rate-limit/index.cjs +0 -241
  170. package/dist/server-rate-limit/index.cjs.map +0 -1
  171. package/dist/server-rate-limit/index.d.cts +0 -183
  172. package/dist/server-security/index.cjs +0 -316
  173. package/dist/server-security/index.cjs.map +0 -1
  174. package/dist/server-security/index.d.cts +0 -173
  175. package/dist/server-static/index.cjs +0 -170
  176. package/dist/server-static/index.cjs.map +0 -1
  177. package/dist/server-static/index.d.cts +0 -121
  178. package/dist/server-swagger/index.cjs +0 -1021
  179. package/dist/server-swagger/index.cjs.map +0 -1
  180. package/dist/server-swagger/index.d.cts +0 -382
  181. package/dist/sms/index.cjs +0 -221
  182. package/dist/sms/index.cjs.map +0 -1
  183. package/dist/sms/index.d.cts +0 -130
  184. package/dist/thread/index.cjs +0 -350
  185. package/dist/thread/index.cjs.map +0 -1
  186. package/dist/thread/index.d.cts +0 -260
  187. package/dist/topic/index.cjs +0 -282
  188. package/dist/topic/index.cjs.map +0 -1
  189. package/dist/topic/index.d.cts +0 -523
  190. package/dist/topic-redis/index.cjs +0 -71
  191. package/dist/topic-redis/index.cjs.map +0 -1
  192. package/dist/topic-redis/index.d.cts +0 -42
  193. package/dist/vite/index.cjs +0 -1077
  194. package/dist/vite/index.cjs.map +0 -1
  195. package/dist/vite/index.d.cts +0 -542
  196. package/dist/websocket/index.cjs +0 -1117
  197. package/dist/websocket/index.cjs.map +0 -1
  198. package/dist/websocket/index.d.cts +0 -861
@@ -1,221 +0,0 @@
1
- //#region rolldown:runtime
2
- var __create = Object.create;
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
- var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __copyProps = (to, from, except, desc) => {
9
- if (from && typeof from === "object" || typeof from === "function") {
10
- for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
11
- key = keys[i];
12
- if (!__hasOwnProp.call(to, key) && key !== except) {
13
- __defProp(to, key, {
14
- get: ((k) => from[k]).bind(null, key),
15
- enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
16
- });
17
- }
18
- }
19
- }
20
- return to;
21
- };
22
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
23
- value: mod,
24
- enumerable: true
25
- }) : target, mod));
26
-
27
- //#endregion
28
- let alepha = require("alepha");
29
- let alepha_logger = require("alepha/logger");
30
- let node_fs_promises = require("node:fs/promises");
31
- node_fs_promises = __toESM(node_fs_promises);
32
- let node_path = require("node:path");
33
- node_path = __toESM(node_path);
34
-
35
- //#region src/sms/providers/MemorySmsProvider.ts
36
- var MemorySmsProvider = class {
37
- log = (0, alepha_logger.$logger)();
38
- records = [];
39
- async send(options) {
40
- const { to, message } = options;
41
- this.log.debug("Sending SMS to memory store", {
42
- to,
43
- message
44
- });
45
- for (const recipient of Array.isArray(to) ? to : [to]) this.records.push({
46
- to: recipient,
47
- message,
48
- sentAt: /* @__PURE__ */ new Date()
49
- });
50
- }
51
- /**
52
- * Get the last SMS sent (for testing purposes).
53
- */
54
- get last() {
55
- return this.records[this.records.length - 1];
56
- }
57
- };
58
-
59
- //#endregion
60
- //#region src/sms/providers/SmsProvider.ts
61
- /**
62
- * SMS provider interface.
63
- *
64
- * All methods are asynchronous and return promises.
65
- */
66
- var SmsProvider = class {};
67
-
68
- //#endregion
69
- //#region src/sms/descriptors/$sms.ts
70
- const $sms = (options = {}) => (0, alepha.createDescriptor)(SmsDescriptor, options);
71
- /**
72
- * SMS descriptor for sending SMS messages through various providers.
73
- *
74
- * Usage:
75
- * ```typescript
76
- * class MyService {
77
- * private readonly welcomeSms = $sms({ name: "welcome" });
78
- *
79
- * async sendWelcome(phoneNumber: string, userName: string) {
80
- * await this.welcomeSms.send({
81
- * to: phoneNumber,
82
- * message: `Hello ${userName}! Welcome to our service.`
83
- * });
84
- * }
85
- * }
86
- * ```
87
- */
88
- var SmsDescriptor = class extends alepha.Descriptor {
89
- provider = this.$provider();
90
- get name() {
91
- return this.options.name ?? `${this.config.propertyKey}`;
92
- }
93
- /**
94
- * Send an SMS using the configured provider.
95
- */
96
- async send(options) {
97
- await this.alepha.events.emit("sms:sending", {
98
- to: options.to,
99
- template: this.name,
100
- variables: {},
101
- provider: this.provider,
102
- abort: () => {
103
- throw new Error("SMS sending aborted by hook");
104
- }
105
- });
106
- await this.provider.send(options);
107
- await this.alepha.events.emit("sms:sent", {
108
- to: options.to,
109
- template: this.name,
110
- provider: this.provider
111
- });
112
- }
113
- $provider() {
114
- if (!this.options.provider) return this.alepha.inject(SmsProvider);
115
- if (this.options.provider === "memory") return this.alepha.inject(MemorySmsProvider);
116
- return this.alepha.inject(this.options.provider);
117
- }
118
- };
119
- $sms[alepha.KIND] = SmsDescriptor;
120
-
121
- //#endregion
122
- //#region src/sms/errors/SmsError.ts
123
- var SmsError = class extends Error {
124
- constructor(message, cause) {
125
- super(message);
126
- this.name = "SmsError";
127
- this.cause = cause;
128
- }
129
- };
130
-
131
- //#endregion
132
- //#region src/sms/providers/LocalSmsProvider.ts
133
- var LocalSmsProvider = class {
134
- log = (0, alepha_logger.$logger)();
135
- directory;
136
- constructor(options = {}) {
137
- this.directory = options.directory ?? "node_modules/.sms";
138
- }
139
- async send(options) {
140
- const { to, message } = options;
141
- this.log.debug("Sending SMS to local file", {
142
- to,
143
- message,
144
- directory: this.directory
145
- });
146
- try {
147
- await node_fs_promises.mkdir(this.directory, { recursive: true });
148
- const timestamp = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-");
149
- for (const recipient of Array.isArray(to) ? to : [to]) {
150
- const filename = `${recipient.replace(/[^0-9+]/g, "_")}+${timestamp}.txt`;
151
- const filepath = node_path.join(this.directory, filename);
152
- const textContent = this.createSmsText({
153
- to: recipient,
154
- message
155
- });
156
- await node_fs_promises.writeFile(filepath, textContent, "utf8");
157
- this.log.info("SMS saved to local file", {
158
- filepath,
159
- to
160
- });
161
- }
162
- } catch (error) {
163
- const message$1 = `Failed to save SMS to local file: ${error instanceof Error ? error.message : String(error)}`;
164
- this.log.error(message$1, {
165
- to,
166
- directory: this.directory
167
- });
168
- throw new SmsError(message$1, error instanceof Error ? error : void 0);
169
- }
170
- }
171
- createSmsText(options) {
172
- const { to, message } = options;
173
- return `SMS Message
174
- ===========
175
-
176
- Sent: ${(/* @__PURE__ */ new Date()).toISOString()}
177
- To: ${to}
178
-
179
- Message:
180
- --------
181
- ${message}
182
- `;
183
- }
184
- };
185
-
186
- //#endregion
187
- //#region src/sms/index.ts
188
- /**
189
- * Provides SMS sending capabilities for Alepha applications with multiple provider backends.
190
- *
191
- * The SMS module enables declarative SMS sending through the `$sms` descriptor, allowing you to send
192
- * text messages through different providers: memory (for testing) or local file system.
193
- * It supports automatic provider selection based on environment configuration.
194
- *
195
- * @see {@link SmsProvider}
196
- * @module alepha.sms
197
- */
198
- const AlephaSms = (0, alepha.$module)({
199
- name: "alepha.sms",
200
- descriptors: [$sms],
201
- services: [
202
- SmsProvider,
203
- MemorySmsProvider,
204
- LocalSmsProvider
205
- ],
206
- register: (alepha$1) => alepha$1.with({
207
- optional: true,
208
- provide: SmsProvider,
209
- use: MemorySmsProvider
210
- })
211
- });
212
-
213
- //#endregion
214
- exports.$sms = $sms;
215
- exports.AlephaSms = AlephaSms;
216
- exports.LocalSmsProvider = LocalSmsProvider;
217
- exports.MemorySmsProvider = MemorySmsProvider;
218
- exports.SmsDescriptor = SmsDescriptor;
219
- exports.SmsError = SmsError;
220
- exports.SmsProvider = SmsProvider;
221
- //# sourceMappingURL=index.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs","names":["Descriptor","KIND","fs","path","message","alepha"],"sources":["../../src/sms/providers/MemorySmsProvider.ts","../../src/sms/providers/SmsProvider.ts","../../src/sms/descriptors/$sms.ts","../../src/sms/errors/SmsError.ts","../../src/sms/providers/LocalSmsProvider.ts","../../src/sms/index.ts"],"sourcesContent":["import { $logger } from \"alepha/logger\";\nimport type { SmsProvider, SmsSendOptions } from \"./SmsProvider.ts\";\n\nexport interface SmsRecord {\n to: string;\n message: string;\n sentAt: Date;\n}\n\nexport class MemorySmsProvider implements SmsProvider {\n protected readonly log = $logger();\n public records: SmsRecord[] = [];\n\n public async send(options: SmsSendOptions): Promise<void> {\n const { to, message } = options;\n this.log.debug(\"Sending SMS to memory store\", { to, message });\n\n for (const recipient of Array.isArray(to) ? to : [to]) {\n this.records.push({\n to: recipient,\n message,\n sentAt: new Date(),\n });\n }\n }\n\n /**\n * Get the last SMS sent (for testing purposes).\n */\n public get last(): SmsRecord | undefined {\n return this.records[this.records.length - 1];\n }\n}\n","/**\n * SMS provider interface.\n *\n * All methods are asynchronous and return promises.\n */\nexport abstract class SmsProvider {\n /**\n * Send an SMS.\n *\n * @return Promise that resolves when the SMS is sent.\n */\n public abstract send(options: SmsSendOptions): Promise<void>;\n}\n\nexport type SmsSendOptions = {\n to: string | string[];\n message: string;\n};\n","import {\n createDescriptor,\n Descriptor,\n type InstantiableClass,\n KIND,\n} from \"alepha\";\nimport { MemorySmsProvider } from \"../providers/MemorySmsProvider.ts\";\nimport type { SmsSendOptions } from \"../providers/SmsProvider.ts\";\nimport { SmsProvider } from \"../providers/SmsProvider.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport const $sms = (options: SmsDescriptorOptions = {}) =>\n createDescriptor(SmsDescriptor, options);\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport interface SmsDescriptorOptions {\n name?: string;\n provider?: InstantiableClass<SmsProvider> | \"memory\";\n}\n\n// ---------------------------------------------------------------------------------------------------------------------\n\n/**\n * SMS descriptor for sending SMS messages through various providers.\n *\n * Usage:\n * ```typescript\n * class MyService {\n * private readonly welcomeSms = $sms({ name: \"welcome\" });\n *\n * async sendWelcome(phoneNumber: string, userName: string) {\n * await this.welcomeSms.send({\n * to: phoneNumber,\n * message: `Hello ${userName}! Welcome to our service.`\n * });\n * }\n * }\n * ```\n */\nexport class SmsDescriptor extends Descriptor<SmsDescriptorOptions> {\n protected readonly provider = this.$provider();\n\n public get name() {\n return this.options.name ?? `${this.config.propertyKey}`;\n }\n\n /**\n * Send an SMS using the configured provider.\n */\n public async send(options: SmsSendOptions): Promise<void> {\n await this.alepha.events.emit(\"sms:sending\", {\n to: options.to,\n template: this.name,\n variables: {},\n provider: this.provider,\n abort: () => {\n throw new Error(\"SMS sending aborted by hook\");\n },\n });\n\n await this.provider.send(options);\n\n await this.alepha.events.emit(\"sms:sent\", {\n to: options.to,\n template: this.name,\n provider: this.provider,\n });\n }\n\n protected $provider(): SmsProvider {\n if (!this.options.provider) {\n return this.alepha.inject(SmsProvider);\n }\n if (this.options.provider === \"memory\") {\n return this.alepha.inject(MemorySmsProvider);\n }\n return this.alepha.inject(this.options.provider);\n }\n}\n\n// ---------------------------------------------------------------------------------------------------------------------\n\n$sms[KIND] = SmsDescriptor;\n","export class SmsError extends Error {\n constructor(message: string, cause?: Error) {\n super(message);\n this.name = \"SmsError\";\n this.cause = cause;\n }\n}\n","import * as fs from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport { $logger } from \"alepha/logger\";\nimport { SmsError } from \"../errors/SmsError.ts\";\nimport type { SmsProvider, SmsSendOptions } from \"./SmsProvider.ts\";\n\nexport interface LocalSmsProviderOptions {\n /**\n * Directory to save SMS files.\n * @default \"node_modules/.sms\" (relative to project root)\n */\n directory?: string;\n}\n\nexport class LocalSmsProvider implements SmsProvider {\n protected readonly log = $logger();\n protected readonly directory: string;\n\n constructor(options: LocalSmsProviderOptions = {}) {\n this.directory = options.directory ?? \"node_modules/.sms\";\n }\n\n public async send(options: SmsSendOptions): Promise<void> {\n const { to, message } = options;\n\n this.log.debug(\"Sending SMS to local file\", {\n to,\n message,\n directory: this.directory,\n });\n\n try {\n // Ensure directory exists\n await fs.mkdir(this.directory, { recursive: true });\n\n // Create filename: phone+date\n const timestamp = new Date().toISOString().replace(/[:.]/g, \"-\");\n for (const recipient of Array.isArray(to) ? to : [to]) {\n const sanitizedPhone = recipient.replace(/[^0-9+]/g, \"_\");\n const filename = `${sanitizedPhone}+${timestamp}.txt`;\n const filepath = path.join(this.directory, filename);\n\n // Create text content\n const textContent = this.createSmsText({\n to: recipient,\n message,\n });\n\n // Write to file\n await fs.writeFile(filepath, textContent, \"utf8\");\n\n this.log.info(\"SMS saved to local file\", { filepath, to });\n }\n } catch (error) {\n const message = `Failed to save SMS to local file: ${error instanceof Error ? error.message : String(error)}`;\n this.log.error(message, { to, directory: this.directory });\n throw new SmsError(message, error instanceof Error ? error : undefined);\n }\n }\n\n public createSmsText(options: { to: string; message: string }): string {\n const { to, message } = options;\n const timestamp = new Date().toISOString();\n\n return `SMS Message\n===========\n\nSent: ${timestamp}\nTo: ${to}\n\nMessage:\n--------\n${message}\n`;\n }\n}\n","import { $module } from \"alepha\";\nimport { $sms } from \"./descriptors/$sms.ts\";\nimport { LocalSmsProvider } from \"./providers/LocalSmsProvider.ts\";\nimport { MemorySmsProvider } from \"./providers/MemorySmsProvider.ts\";\nimport { SmsProvider } from \"./providers/SmsProvider.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport * from \"./descriptors/$sms.ts\";\nexport * from \"./errors/SmsError.ts\";\nexport * from \"./providers/LocalSmsProvider.ts\";\nexport * from \"./providers/MemorySmsProvider.ts\";\nexport * from \"./providers/SmsProvider.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\ndeclare module \"alepha\" {\n interface Hooks {\n \"sms:sending\": {\n to: string | string[];\n template: string;\n variables: Record<string, unknown>;\n provider: SmsProvider;\n abort(): void;\n };\n \"sms:sent\": {\n to: string | string[];\n template: string;\n provider: SmsProvider;\n };\n }\n}\n\n// ---------------------------------------------------------------------------------------------------------------------\n\n/**\n * Provides SMS sending capabilities for Alepha applications with multiple provider backends.\n *\n * The SMS module enables declarative SMS sending through the `$sms` descriptor, allowing you to send\n * text messages through different providers: memory (for testing) or local file system.\n * It supports automatic provider selection based on environment configuration.\n *\n * @see {@link SmsProvider}\n * @module alepha.sms\n */\nexport const AlephaSms = $module({\n name: \"alepha.sms\",\n descriptors: [$sms],\n services: [SmsProvider, MemorySmsProvider, LocalSmsProvider],\n register: (alepha) =>\n alepha.with({\n optional: true,\n provide: SmsProvider,\n use: MemorySmsProvider,\n }),\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,IAAa,oBAAb,MAAsD;CACpD,AAAmB,kCAAe;CAClC,AAAO,UAAuB,EAAE;CAEhC,MAAa,KAAK,SAAwC;EACxD,MAAM,EAAE,IAAI,YAAY;AACxB,OAAK,IAAI,MAAM,+BAA+B;GAAE;GAAI;GAAS,CAAC;AAE9D,OAAK,MAAM,aAAa,MAAM,QAAQ,GAAG,GAAG,KAAK,CAAC,GAAG,CACnD,MAAK,QAAQ,KAAK;GAChB,IAAI;GACJ;GACA,wBAAQ,IAAI,MAAM;GACnB,CAAC;;;;;CAON,IAAW,OAA8B;AACvC,SAAO,KAAK,QAAQ,KAAK,QAAQ,SAAS;;;;;;;;;;;ACzB9C,IAAsB,cAAtB,MAAkC;;;;ACOlC,MAAa,QAAQ,UAAgC,EAAE,kCACpC,eAAe,QAAQ;;;;;;;;;;;;;;;;;;AA4B1C,IAAa,gBAAb,cAAmCA,kBAAiC;CAClE,AAAmB,WAAW,KAAK,WAAW;CAE9C,IAAW,OAAO;AAChB,SAAO,KAAK,QAAQ,QAAQ,GAAG,KAAK,OAAO;;;;;CAM7C,MAAa,KAAK,SAAwC;AACxD,QAAM,KAAK,OAAO,OAAO,KAAK,eAAe;GAC3C,IAAI,QAAQ;GACZ,UAAU,KAAK;GACf,WAAW,EAAE;GACb,UAAU,KAAK;GACf,aAAa;AACX,UAAM,IAAI,MAAM,8BAA8B;;GAEjD,CAAC;AAEF,QAAM,KAAK,SAAS,KAAK,QAAQ;AAEjC,QAAM,KAAK,OAAO,OAAO,KAAK,YAAY;GACxC,IAAI,QAAQ;GACZ,UAAU,KAAK;GACf,UAAU,KAAK;GAChB,CAAC;;CAGJ,AAAU,YAAyB;AACjC,MAAI,CAAC,KAAK,QAAQ,SAChB,QAAO,KAAK,OAAO,OAAO,YAAY;AAExC,MAAI,KAAK,QAAQ,aAAa,SAC5B,QAAO,KAAK,OAAO,OAAO,kBAAkB;AAE9C,SAAO,KAAK,OAAO,OAAO,KAAK,QAAQ,SAAS;;;AAMpD,KAAKC,eAAQ;;;;ACpFb,IAAa,WAAb,cAA8B,MAAM;CAClC,YAAY,SAAiB,OAAe;AAC1C,QAAM,QAAQ;AACd,OAAK,OAAO;AACZ,OAAK,QAAQ;;;;;;ACUjB,IAAa,mBAAb,MAAqD;CACnD,AAAmB,kCAAe;CAClC,AAAmB;CAEnB,YAAY,UAAmC,EAAE,EAAE;AACjD,OAAK,YAAY,QAAQ,aAAa;;CAGxC,MAAa,KAAK,SAAwC;EACxD,MAAM,EAAE,IAAI,YAAY;AAExB,OAAK,IAAI,MAAM,6BAA6B;GAC1C;GACA;GACA,WAAW,KAAK;GACjB,CAAC;AAEF,MAAI;AAEF,SAAMC,iBAAG,MAAM,KAAK,WAAW,EAAE,WAAW,MAAM,CAAC;GAGnD,MAAM,6BAAY,IAAI,MAAM,EAAC,aAAa,CAAC,QAAQ,SAAS,IAAI;AAChE,QAAK,MAAM,aAAa,MAAM,QAAQ,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE;IAErD,MAAM,WAAW,GADM,UAAU,QAAQ,YAAY,IAAI,CACtB,GAAG,UAAU;IAChD,MAAM,WAAWC,UAAK,KAAK,KAAK,WAAW,SAAS;IAGpD,MAAM,cAAc,KAAK,cAAc;KACrC,IAAI;KACJ;KACD,CAAC;AAGF,UAAMD,iBAAG,UAAU,UAAU,aAAa,OAAO;AAEjD,SAAK,IAAI,KAAK,2BAA2B;KAAE;KAAU;KAAI,CAAC;;WAErD,OAAO;GACd,MAAME,YAAU,qCAAqC,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;AAC3G,QAAK,IAAI,MAAMA,WAAS;IAAE;IAAI,WAAW,KAAK;IAAW,CAAC;AAC1D,SAAM,IAAI,SAASA,WAAS,iBAAiB,QAAQ,QAAQ,OAAU;;;CAI3E,AAAO,cAAc,SAAkD;EACrE,MAAM,EAAE,IAAI,YAAY;AAGxB,SAAO;;;yBAFW,IAAI,MAAM,EAAC,aAAa,CAK5B;MACZ,GAAG;;;;EAIP,QAAQ;;;;;;;;;;;;;;;;;AC3BV,MAAa,gCAAoB;CAC/B,MAAM;CACN,aAAa,CAAC,KAAK;CACnB,UAAU;EAAC;EAAa;EAAmB;EAAiB;CAC5D,WAAW,aACTC,SAAO,KAAK;EACV,UAAU;EACV,SAAS;EACT,KAAK;EACN,CAAC;CACL,CAAC"}
@@ -1,130 +0,0 @@
1
- import * as alepha0 from "alepha";
2
- import { Descriptor, InstantiableClass, KIND } from "alepha";
3
- import * as alepha_logger0 from "alepha/logger";
4
-
5
- //#region src/sms/providers/SmsProvider.d.ts
6
- /**
7
- * SMS provider interface.
8
- *
9
- * All methods are asynchronous and return promises.
10
- */
11
- declare abstract class SmsProvider {
12
- /**
13
- * Send an SMS.
14
- *
15
- * @return Promise that resolves when the SMS is sent.
16
- */
17
- abstract send(options: SmsSendOptions): Promise<void>;
18
- }
19
- type SmsSendOptions = {
20
- to: string | string[];
21
- message: string;
22
- };
23
- //#endregion
24
- //#region src/sms/descriptors/$sms.d.ts
25
- declare const $sms: {
26
- (options?: SmsDescriptorOptions): SmsDescriptor;
27
- [KIND]: typeof SmsDescriptor;
28
- };
29
- interface SmsDescriptorOptions {
30
- name?: string;
31
- provider?: InstantiableClass<SmsProvider> | "memory";
32
- }
33
- /**
34
- * SMS descriptor for sending SMS messages through various providers.
35
- *
36
- * Usage:
37
- * ```typescript
38
- * class MyService {
39
- * private readonly welcomeSms = $sms({ name: "welcome" });
40
- *
41
- * async sendWelcome(phoneNumber: string, userName: string) {
42
- * await this.welcomeSms.send({
43
- * to: phoneNumber,
44
- * message: `Hello ${userName}! Welcome to our service.`
45
- * });
46
- * }
47
- * }
48
- * ```
49
- */
50
- declare class SmsDescriptor extends Descriptor<SmsDescriptorOptions> {
51
- protected readonly provider: SmsProvider;
52
- get name(): string;
53
- /**
54
- * Send an SMS using the configured provider.
55
- */
56
- send(options: SmsSendOptions): Promise<void>;
57
- protected $provider(): SmsProvider;
58
- }
59
- //#endregion
60
- //#region src/sms/errors/SmsError.d.ts
61
- declare class SmsError extends Error {
62
- constructor(message: string, cause?: Error);
63
- }
64
- //#endregion
65
- //#region src/sms/providers/LocalSmsProvider.d.ts
66
- interface LocalSmsProviderOptions {
67
- /**
68
- * Directory to save SMS files.
69
- * @default "node_modules/.sms" (relative to project root)
70
- */
71
- directory?: string;
72
- }
73
- declare class LocalSmsProvider implements SmsProvider {
74
- protected readonly log: alepha_logger0.Logger;
75
- protected readonly directory: string;
76
- constructor(options?: LocalSmsProviderOptions);
77
- send(options: SmsSendOptions): Promise<void>;
78
- createSmsText(options: {
79
- to: string;
80
- message: string;
81
- }): string;
82
- }
83
- //#endregion
84
- //#region src/sms/providers/MemorySmsProvider.d.ts
85
- interface SmsRecord {
86
- to: string;
87
- message: string;
88
- sentAt: Date;
89
- }
90
- declare class MemorySmsProvider implements SmsProvider {
91
- protected readonly log: alepha_logger0.Logger;
92
- records: SmsRecord[];
93
- send(options: SmsSendOptions): Promise<void>;
94
- /**
95
- * Get the last SMS sent (for testing purposes).
96
- */
97
- get last(): SmsRecord | undefined;
98
- }
99
- //#endregion
100
- //#region src/sms/index.d.ts
101
- declare module "alepha" {
102
- interface Hooks {
103
- "sms:sending": {
104
- to: string | string[];
105
- template: string;
106
- variables: Record<string, unknown>;
107
- provider: SmsProvider;
108
- abort(): void;
109
- };
110
- "sms:sent": {
111
- to: string | string[];
112
- template: string;
113
- provider: SmsProvider;
114
- };
115
- }
116
- }
117
- /**
118
- * Provides SMS sending capabilities for Alepha applications with multiple provider backends.
119
- *
120
- * The SMS module enables declarative SMS sending through the `$sms` descriptor, allowing you to send
121
- * text messages through different providers: memory (for testing) or local file system.
122
- * It supports automatic provider selection based on environment configuration.
123
- *
124
- * @see {@link SmsProvider}
125
- * @module alepha.sms
126
- */
127
- declare const AlephaSms: alepha0.Service<alepha0.Module>;
128
- //#endregion
129
- export { $sms, AlephaSms, LocalSmsProvider, LocalSmsProviderOptions, MemorySmsProvider, SmsDescriptor, SmsDescriptorOptions, SmsError, SmsProvider, SmsRecord, SmsSendOptions };
130
- //# sourceMappingURL=index.d.cts.map