alepha 0.14.4 → 0.15.0

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 (277) hide show
  1. package/README.md +1 -4
  2. package/dist/api/audits/index.d.ts +619 -731
  3. package/dist/api/audits/index.d.ts.map +1 -1
  4. package/dist/api/files/index.d.ts +185 -298
  5. package/dist/api/files/index.d.ts.map +1 -1
  6. package/dist/api/files/index.js +0 -1
  7. package/dist/api/files/index.js.map +1 -1
  8. package/dist/api/jobs/index.d.ts +245 -356
  9. package/dist/api/jobs/index.d.ts.map +1 -1
  10. package/dist/api/notifications/index.d.ts +238 -350
  11. package/dist/api/notifications/index.d.ts.map +1 -1
  12. package/dist/api/parameters/index.d.ts +499 -611
  13. package/dist/api/parameters/index.d.ts.map +1 -1
  14. package/dist/api/users/index.browser.js +1 -2
  15. package/dist/api/users/index.browser.js.map +1 -1
  16. package/dist/api/users/index.d.ts +1697 -1804
  17. package/dist/api/users/index.d.ts.map +1 -1
  18. package/dist/api/users/index.js +178 -151
  19. package/dist/api/users/index.js.map +1 -1
  20. package/dist/api/verifications/index.d.ts +132 -132
  21. package/dist/api/verifications/index.d.ts.map +1 -1
  22. package/dist/batch/index.d.ts +122 -122
  23. package/dist/batch/index.d.ts.map +1 -1
  24. package/dist/batch/index.js +1 -2
  25. package/dist/batch/index.js.map +1 -1
  26. package/dist/bucket/index.d.ts +163 -163
  27. package/dist/bucket/index.d.ts.map +1 -1
  28. package/dist/cache/core/index.d.ts +46 -46
  29. package/dist/cache/core/index.d.ts.map +1 -1
  30. package/dist/cache/redis/index.d.ts.map +1 -1
  31. package/dist/cli/index.d.ts +302 -299
  32. package/dist/cli/index.d.ts.map +1 -1
  33. package/dist/cli/index.js +966 -564
  34. package/dist/cli/index.js.map +1 -1
  35. package/dist/command/index.d.ts +303 -299
  36. package/dist/command/index.d.ts.map +1 -1
  37. package/dist/command/index.js +11 -7
  38. package/dist/command/index.js.map +1 -1
  39. package/dist/core/index.browser.js +419 -99
  40. package/dist/core/index.browser.js.map +1 -1
  41. package/dist/core/index.d.ts +718 -625
  42. package/dist/core/index.d.ts.map +1 -1
  43. package/dist/core/index.js +420 -99
  44. package/dist/core/index.js.map +1 -1
  45. package/dist/core/index.native.js +419 -99
  46. package/dist/core/index.native.js.map +1 -1
  47. package/dist/datetime/index.d.ts +44 -44
  48. package/dist/datetime/index.d.ts.map +1 -1
  49. package/dist/datetime/index.js +4 -4
  50. package/dist/datetime/index.js.map +1 -1
  51. package/dist/email/index.d.ts +97 -50
  52. package/dist/email/index.d.ts.map +1 -1
  53. package/dist/email/index.js +129 -33
  54. package/dist/email/index.js.map +1 -1
  55. package/dist/fake/index.d.ts +7981 -14
  56. package/dist/fake/index.d.ts.map +1 -1
  57. package/dist/file/index.d.ts +523 -390
  58. package/dist/file/index.d.ts.map +1 -1
  59. package/dist/file/index.js +253 -1
  60. package/dist/file/index.js.map +1 -1
  61. package/dist/lock/core/index.d.ts +208 -208
  62. package/dist/lock/core/index.d.ts.map +1 -1
  63. package/dist/lock/redis/index.d.ts.map +1 -1
  64. package/dist/logger/index.d.ts +25 -26
  65. package/dist/logger/index.d.ts.map +1 -1
  66. package/dist/mcp/index.d.ts +197 -197
  67. package/dist/mcp/index.d.ts.map +1 -1
  68. package/dist/orm/chunk-DtkW-qnP.js +38 -0
  69. package/dist/orm/index.browser.js.map +1 -1
  70. package/dist/orm/index.bun.js +2814 -0
  71. package/dist/orm/index.bun.js.map +1 -0
  72. package/dist/orm/index.d.ts +1205 -1057
  73. package/dist/orm/index.d.ts.map +1 -1
  74. package/dist/orm/index.js +2056 -1753
  75. package/dist/orm/index.js.map +1 -1
  76. package/dist/queue/core/index.d.ts +248 -248
  77. package/dist/queue/core/index.d.ts.map +1 -1
  78. package/dist/queue/redis/index.d.ts.map +1 -1
  79. package/dist/redis/index.bun.js +285 -0
  80. package/dist/redis/index.bun.js.map +1 -0
  81. package/dist/redis/index.d.ts +118 -136
  82. package/dist/redis/index.d.ts.map +1 -1
  83. package/dist/redis/index.js +18 -38
  84. package/dist/redis/index.js.map +1 -1
  85. package/dist/retry/index.d.ts +69 -69
  86. package/dist/retry/index.d.ts.map +1 -1
  87. package/dist/router/index.d.ts +6 -6
  88. package/dist/router/index.d.ts.map +1 -1
  89. package/dist/scheduler/index.d.ts +25 -25
  90. package/dist/scheduler/index.d.ts.map +1 -1
  91. package/dist/security/index.browser.js +5 -1
  92. package/dist/security/index.browser.js.map +1 -1
  93. package/dist/security/index.d.ts +417 -254
  94. package/dist/security/index.d.ts.map +1 -1
  95. package/dist/security/index.js +386 -86
  96. package/dist/security/index.js.map +1 -1
  97. package/dist/server/auth/index.d.ts +277 -277
  98. package/dist/server/auth/index.d.ts.map +1 -1
  99. package/dist/server/auth/index.js +20 -20
  100. package/dist/server/auth/index.js.map +1 -1
  101. package/dist/server/cache/index.d.ts +60 -57
  102. package/dist/server/cache/index.d.ts.map +1 -1
  103. package/dist/server/cache/index.js +1 -1
  104. package/dist/server/cache/index.js.map +1 -1
  105. package/dist/server/compress/index.d.ts +3 -3
  106. package/dist/server/compress/index.d.ts.map +1 -1
  107. package/dist/server/cookies/index.d.ts +6 -6
  108. package/dist/server/cookies/index.d.ts.map +1 -1
  109. package/dist/server/cookies/index.js +3 -3
  110. package/dist/server/cookies/index.js.map +1 -1
  111. package/dist/server/core/index.d.ts +242 -150
  112. package/dist/server/core/index.d.ts.map +1 -1
  113. package/dist/server/core/index.js +288 -122
  114. package/dist/server/core/index.js.map +1 -1
  115. package/dist/server/cors/index.d.ts +11 -12
  116. package/dist/server/cors/index.d.ts.map +1 -1
  117. package/dist/server/health/index.d.ts +0 -1
  118. package/dist/server/health/index.d.ts.map +1 -1
  119. package/dist/server/helmet/index.d.ts +2 -2
  120. package/dist/server/helmet/index.d.ts.map +1 -1
  121. package/dist/server/links/index.browser.js.map +1 -1
  122. package/dist/server/links/index.d.ts +84 -85
  123. package/dist/server/links/index.d.ts.map +1 -1
  124. package/dist/server/links/index.js +1 -2
  125. package/dist/server/links/index.js.map +1 -1
  126. package/dist/server/metrics/index.d.ts.map +1 -1
  127. package/dist/server/multipart/index.d.ts +6 -6
  128. package/dist/server/multipart/index.d.ts.map +1 -1
  129. package/dist/server/proxy/index.d.ts +102 -103
  130. package/dist/server/proxy/index.d.ts.map +1 -1
  131. package/dist/server/rate-limit/index.d.ts +16 -16
  132. package/dist/server/rate-limit/index.d.ts.map +1 -1
  133. package/dist/server/static/index.d.ts +44 -44
  134. package/dist/server/static/index.d.ts.map +1 -1
  135. package/dist/server/swagger/index.d.ts +48 -49
  136. package/dist/server/swagger/index.d.ts.map +1 -1
  137. package/dist/server/swagger/index.js +1 -2
  138. package/dist/server/swagger/index.js.map +1 -1
  139. package/dist/sms/index.d.ts +13 -11
  140. package/dist/sms/index.d.ts.map +1 -1
  141. package/dist/sms/index.js +7 -7
  142. package/dist/sms/index.js.map +1 -1
  143. package/dist/thread/index.d.ts +71 -72
  144. package/dist/thread/index.d.ts.map +1 -1
  145. package/dist/topic/core/index.d.ts +318 -318
  146. package/dist/topic/core/index.d.ts.map +1 -1
  147. package/dist/topic/redis/index.d.ts +6 -6
  148. package/dist/topic/redis/index.d.ts.map +1 -1
  149. package/dist/vite/index.d.ts +5720 -159
  150. package/dist/vite/index.d.ts.map +1 -1
  151. package/dist/vite/index.js +41 -18
  152. package/dist/vite/index.js.map +1 -1
  153. package/dist/websocket/index.browser.js +6 -6
  154. package/dist/websocket/index.browser.js.map +1 -1
  155. package/dist/websocket/index.d.ts +247 -247
  156. package/dist/websocket/index.d.ts.map +1 -1
  157. package/dist/websocket/index.js +6 -6
  158. package/dist/websocket/index.js.map +1 -1
  159. package/package.json +9 -14
  160. package/src/api/files/controllers/AdminFileStatsController.ts +0 -1
  161. package/src/api/users/atoms/realmAuthSettingsAtom.ts +5 -0
  162. package/src/api/users/controllers/{UserRealmController.ts → RealmController.ts} +11 -11
  163. package/src/api/users/entities/users.ts +1 -1
  164. package/src/api/users/index.ts +8 -8
  165. package/src/api/users/primitives/{$userRealm.ts → $realm.ts} +17 -19
  166. package/src/api/users/providers/{UserRealmProvider.ts → RealmProvider.ts} +26 -30
  167. package/src/api/users/schemas/{userRealmConfigSchema.ts → realmConfigSchema.ts} +2 -2
  168. package/src/api/users/services/CredentialService.ts +7 -7
  169. package/src/api/users/services/IdentityService.ts +4 -4
  170. package/src/api/users/services/RegistrationService.spec.ts +25 -27
  171. package/src/api/users/services/RegistrationService.ts +38 -27
  172. package/src/api/users/services/SessionCrudService.ts +3 -3
  173. package/src/api/users/services/SessionService.spec.ts +3 -3
  174. package/src/api/users/services/SessionService.ts +28 -9
  175. package/src/api/users/services/UserService.ts +7 -7
  176. package/src/batch/providers/BatchProvider.ts +1 -2
  177. package/src/cli/apps/AlephaPackageBuilderCli.ts +38 -19
  178. package/src/cli/assets/apiHelloControllerTs.ts +18 -0
  179. package/src/cli/assets/apiIndexTs.ts +16 -0
  180. package/src/cli/assets/claudeMd.ts +303 -0
  181. package/src/cli/assets/mainBrowserTs.ts +2 -2
  182. package/src/cli/assets/mainServerTs.ts +24 -0
  183. package/src/cli/assets/webAppRouterTs.ts +15 -0
  184. package/src/cli/assets/webHelloComponentTsx.ts +16 -0
  185. package/src/cli/assets/webIndexTs.ts +16 -0
  186. package/src/cli/commands/build.ts +41 -21
  187. package/src/cli/commands/db.ts +21 -18
  188. package/src/cli/commands/deploy.ts +17 -5
  189. package/src/cli/commands/dev.ts +13 -17
  190. package/src/cli/commands/format.ts +8 -2
  191. package/src/cli/commands/init.ts +74 -29
  192. package/src/cli/commands/lint.ts +8 -2
  193. package/src/cli/commands/test.ts +8 -2
  194. package/src/cli/commands/typecheck.ts +5 -1
  195. package/src/cli/commands/verify.ts +4 -2
  196. package/src/cli/services/AlephaCliUtils.ts +39 -600
  197. package/src/cli/services/PackageManagerUtils.ts +301 -0
  198. package/src/cli/services/ProjectScaffolder.ts +306 -0
  199. package/src/command/helpers/Runner.ts +15 -3
  200. package/src/core/__tests__/Alepha-graph.spec.ts +4 -0
  201. package/src/core/index.shared.ts +1 -0
  202. package/src/core/index.ts +2 -0
  203. package/src/core/primitives/$hook.ts +6 -2
  204. package/src/core/primitives/$module.spec.ts +4 -0
  205. package/src/core/providers/AlsProvider.ts +1 -1
  206. package/src/core/providers/CodecManager.spec.ts +12 -6
  207. package/src/core/providers/CodecManager.ts +26 -6
  208. package/src/core/providers/EventManager.ts +169 -13
  209. package/src/core/providers/KeylessJsonSchemaCodec.spec.ts +621 -0
  210. package/src/core/providers/KeylessJsonSchemaCodec.ts +407 -0
  211. package/src/core/providers/StateManager.spec.ts +27 -16
  212. package/src/email/providers/LocalEmailProvider.spec.ts +111 -87
  213. package/src/email/providers/LocalEmailProvider.ts +52 -15
  214. package/src/email/providers/NodemailerEmailProvider.ts +167 -56
  215. package/src/file/errors/FileError.ts +7 -0
  216. package/src/file/index.ts +9 -1
  217. package/src/file/providers/MemoryFileSystemProvider.ts +393 -0
  218. package/src/orm/index.browser.ts +1 -19
  219. package/src/orm/index.bun.ts +77 -0
  220. package/src/orm/index.shared-server.ts +22 -0
  221. package/src/orm/index.shared.ts +15 -0
  222. package/src/orm/index.ts +19 -39
  223. package/src/orm/providers/drivers/BunPostgresProvider.ts +3 -5
  224. package/src/orm/providers/drivers/BunSqliteProvider.ts +1 -1
  225. package/src/orm/providers/drivers/CloudflareD1Provider.ts +4 -0
  226. package/src/orm/providers/drivers/DatabaseProvider.ts +4 -0
  227. package/src/orm/providers/drivers/PglitePostgresProvider.ts +4 -0
  228. package/src/orm/services/Repository.ts +8 -0
  229. package/src/redis/index.bun.ts +35 -0
  230. package/src/redis/providers/BunRedisProvider.ts +12 -43
  231. package/src/redis/providers/BunRedisSubscriberProvider.ts +2 -3
  232. package/src/redis/providers/NodeRedisProvider.ts +16 -34
  233. package/src/{server/security → security}/__tests__/BasicAuth.spec.ts +11 -11
  234. package/src/{server/security → security}/__tests__/ServerSecurityProvider-realm.spec.ts +21 -16
  235. package/src/{server/security/providers → security/__tests__}/ServerSecurityProvider.spec.ts +5 -5
  236. package/src/security/index.browser.ts +5 -0
  237. package/src/security/index.ts +90 -7
  238. package/src/security/primitives/{$realm.spec.ts → $issuer.spec.ts} +11 -11
  239. package/src/security/primitives/{$realm.ts → $issuer.ts} +20 -17
  240. package/src/security/primitives/$role.ts +5 -5
  241. package/src/security/primitives/$serviceAccount.spec.ts +5 -5
  242. package/src/security/primitives/$serviceAccount.ts +3 -3
  243. package/src/{server/security → security}/providers/ServerSecurityProvider.ts +5 -7
  244. package/src/server/auth/primitives/$auth.ts +10 -10
  245. package/src/server/auth/primitives/$authCredentials.ts +3 -3
  246. package/src/server/auth/primitives/$authGithub.ts +3 -3
  247. package/src/server/auth/primitives/$authGoogle.ts +3 -3
  248. package/src/server/auth/providers/ServerAuthProvider.ts +13 -13
  249. package/src/server/cache/providers/ServerCacheProvider.ts +1 -1
  250. package/src/server/cookies/providers/ServerCookiesProvider.ts +3 -3
  251. package/src/server/core/providers/NodeHttpServerProvider.ts +25 -6
  252. package/src/server/core/providers/ServerBodyParserProvider.ts +19 -23
  253. package/src/server/core/providers/ServerLoggerProvider.ts +23 -19
  254. package/src/server/core/providers/ServerProvider.ts +144 -21
  255. package/src/server/core/providers/ServerRouterProvider.ts +259 -115
  256. package/src/server/core/providers/ServerTimingProvider.ts +2 -2
  257. package/src/server/links/index.ts +1 -1
  258. package/src/server/links/providers/LinkProvider.ts +1 -1
  259. package/src/server/swagger/index.ts +1 -1
  260. package/src/sms/providers/LocalSmsProvider.spec.ts +153 -111
  261. package/src/sms/providers/LocalSmsProvider.ts +8 -7
  262. package/src/vite/helpers/boot.ts +28 -17
  263. package/src/vite/tasks/buildServer.ts +12 -1
  264. package/src/vite/tasks/devServer.ts +3 -1
  265. package/src/vite/tasks/generateCloudflare.ts +7 -0
  266. package/dist/server/security/index.browser.js +0 -13
  267. package/dist/server/security/index.browser.js.map +0 -1
  268. package/dist/server/security/index.d.ts +0 -173
  269. package/dist/server/security/index.d.ts.map +0 -1
  270. package/dist/server/security/index.js +0 -311
  271. package/dist/server/security/index.js.map +0 -1
  272. package/src/cli/assets/appRouterTs.ts +0 -9
  273. package/src/cli/assets/mainTs.ts +0 -13
  274. package/src/server/security/index.browser.ts +0 -10
  275. package/src/server/security/index.ts +0 -94
  276. /package/src/{server/security → security}/primitives/$basicAuth.ts +0 -0
  277. /package/src/{server/security → security}/providers/ServerBasicAuthProvider.ts +0 -0
@@ -17,28 +17,28 @@ declare class TopicTimeoutError extends Error {
17
17
  declare abstract class TopicProvider {
18
18
  protected readonly alepha: Alepha;
19
19
  /**
20
- * Publish a message to a topic.
21
- *
22
- * @param topic - The topic to publish to.
23
- * @param message - The message to publish.
24
- */
20
+ * Publish a message to a topic.
21
+ *
22
+ * @param topic - The topic to publish to.
23
+ * @param message - The message to publish.
24
+ */
25
25
  abstract publish(topic: string, message: string): Promise<void>;
26
26
  /**
27
- * Subscribe to a topic.
28
- *
29
- * @param topic - The topic to subscribe to.
30
- * @param callback - The callback to call when a message is received.
31
- */
27
+ * Subscribe to a topic.
28
+ *
29
+ * @param topic - The topic to subscribe to.
30
+ * @param callback - The callback to call when a message is received.
31
+ */
32
32
  abstract subscribe(topic: string, callback: SubscribeCallback): Promise<UnSubscribeFn>;
33
33
  /**
34
- * Unsubscribe from a topic.
35
- *
36
- * @param topic - The topic to unsubscribe from.
37
- */
34
+ * Unsubscribe from a topic.
35
+ *
36
+ * @param topic - The topic to unsubscribe from.
37
+ */
38
38
  abstract unsubscribe(topic: string): Promise<void>;
39
39
  /**
40
- * Returns the list of $subscribers for this provider.
41
- */
40
+ * Returns the list of $subscribers for this provider.
41
+ */
42
42
  protected subscribers(): Array<() => Promise<unknown>>;
43
43
  }
44
44
  type SubscribeCallback = (message: string) => Promise<void> | void;
@@ -89,177 +89,177 @@ declare const $topic: {
89
89
  };
90
90
  interface TopicPrimitiveOptions<T extends TopicMessageSchema> {
91
91
  /**
92
- * Unique name identifier for the topic.
93
- *
94
- * This name is used for:
95
- * - Topic identification across the pub/sub system
96
- * - Message routing between publishers and subscribers
97
- * - Logging and debugging topic-related operations
98
- * - Provider-specific topic management (channels, keys, etc.)
99
- *
100
- * If not provided, defaults to the property key where the topic is declared.
101
- *
102
- * **Naming Conventions**:
103
- * - Use descriptive, hierarchical names: "user.activity", "order.events"
104
- * - Avoid spaces and special characters
105
- * - Consider using dot notation for categorization
106
- * - Keep names concise but meaningful
107
- *
108
- * @example "user-activity"
109
- * @example "chat.messages"
110
- * @example "system.health.checks"
111
- * @example "payment.webhooks"
112
- */
92
+ * Unique name identifier for the topic.
93
+ *
94
+ * This name is used for:
95
+ * - Topic identification across the pub/sub system
96
+ * - Message routing between publishers and subscribers
97
+ * - Logging and debugging topic-related operations
98
+ * - Provider-specific topic management (channels, keys, etc.)
99
+ *
100
+ * If not provided, defaults to the property key where the topic is declared.
101
+ *
102
+ * **Naming Conventions**:
103
+ * - Use descriptive, hierarchical names: "user.activity", "order.events"
104
+ * - Avoid spaces and special characters
105
+ * - Consider using dot notation for categorization
106
+ * - Keep names concise but meaningful
107
+ *
108
+ * @example "user-activity"
109
+ * @example "chat.messages"
110
+ * @example "system.health.checks"
111
+ * @example "payment.webhooks"
112
+ */
113
113
  name?: string;
114
114
  /**
115
- * Human-readable description of the topic's purpose and usage.
116
- *
117
- * Used for:
118
- * - Documentation generation and API references
119
- * - Developer onboarding and understanding
120
- * - Monitoring dashboards and admin interfaces
121
- * - Team communication about system architecture
122
- *
123
- * **Description Best Practices**:
124
- * - Explain what events/messages this topic handles
125
- * - Mention key use cases and subscribers
126
- * - Include any important timing or ordering guarantees
127
- * - Note any special processing requirements
128
- *
129
- * @example "Real-time user activity events for analytics and notifications"
130
- * @example "Order lifecycle events from creation to delivery"
131
- * @example "Chat messages broadcast to all room participants"
132
- * @example "System health checks and service status updates"
133
- */
115
+ * Human-readable description of the topic's purpose and usage.
116
+ *
117
+ * Used for:
118
+ * - Documentation generation and API references
119
+ * - Developer onboarding and understanding
120
+ * - Monitoring dashboards and admin interfaces
121
+ * - Team communication about system architecture
122
+ *
123
+ * **Description Best Practices**:
124
+ * - Explain what events/messages this topic handles
125
+ * - Mention key use cases and subscribers
126
+ * - Include any important timing or ordering guarantees
127
+ * - Note any special processing requirements
128
+ *
129
+ * @example "Real-time user activity events for analytics and notifications"
130
+ * @example "Order lifecycle events from creation to delivery"
131
+ * @example "Chat messages broadcast to all room participants"
132
+ * @example "System health checks and service status updates"
133
+ */
134
134
  description?: string;
135
135
  /**
136
- * Topic provider configuration for message storage and delivery.
137
- *
138
- * Options:
139
- * - **"memory"**: In-memory provider (default for development, lost on restart)
140
- * - **Service<TopicProvider>**: Custom provider class (e.g., RedisTopicProvider)
141
- * - **undefined**: Uses the default topic provider from dependency injection
142
- *
143
- * **Provider Selection Guidelines**:
144
- * - **Development**: Use "memory" for fast, simple testing without external dependencies
145
- * - **Production**: Use Redis or message brokers for persistence and scalability
146
- * - **Distributed systems**: Use Redis/RabbitMQ for cross-service communication
147
- * - **High-throughput**: Use specialized providers with connection pooling
148
- * - **Real-time**: Ensure provider supports low-latency message delivery
149
- *
150
- * **Provider Capabilities**:
151
- * - Message persistence and durability
152
- * - Subscriber management and connection handling
153
- * - Message ordering and delivery guarantees
154
- * - Horizontal scaling and load distribution
155
- *
156
- * @default Uses injected TopicProvider
157
- * @example "memory"
158
- * @example RedisTopicProvider
159
- * @example RabbitMQTopicProvider
160
- */
136
+ * Topic provider configuration for message storage and delivery.
137
+ *
138
+ * Options:
139
+ * - **"memory"**: In-memory provider (default for development, lost on restart)
140
+ * - **Service<TopicProvider>**: Custom provider class (e.g., RedisTopicProvider)
141
+ * - **undefined**: Uses the default topic provider from dependency injection
142
+ *
143
+ * **Provider Selection Guidelines**:
144
+ * - **Development**: Use "memory" for fast, simple testing without external dependencies
145
+ * - **Production**: Use Redis or message brokers for persistence and scalability
146
+ * - **Distributed systems**: Use Redis/RabbitMQ for cross-service communication
147
+ * - **High-throughput**: Use specialized providers with connection pooling
148
+ * - **Real-time**: Ensure provider supports low-latency message delivery
149
+ *
150
+ * **Provider Capabilities**:
151
+ * - Message persistence and durability
152
+ * - Subscriber management and connection handling
153
+ * - Message ordering and delivery guarantees
154
+ * - Horizontal scaling and load distribution
155
+ *
156
+ * @default Uses injected TopicProvider
157
+ * @example "memory"
158
+ * @example RedisTopicProvider
159
+ * @example RabbitMQTopicProvider
160
+ */
161
161
  provider?: "memory" | Service<TopicProvider>;
162
162
  /**
163
- * TypeBox schema defining the structure of messages published to this topic.
164
- *
165
- * The schema must include:
166
- * - **payload**: Required schema for the main message data
167
- * - **headers**: Optional schema for message metadata
168
- *
169
- * This schema:
170
- * - Validates all messages published to the topic
171
- * - Provides full TypeScript type inference for subscribers
172
- * - Ensures type safety between publishers and subscribers
173
- * - Enables automatic serialization/deserialization
174
- *
175
- * **Schema Design Best Practices**:
176
- * - Keep payload schemas focused and cohesive
177
- * - Use optional fields for data that might not always be present
178
- * - Include timestamp fields for event ordering
179
- * - Consider versioning for schema evolution
180
- * - Use union types for different event types in the same topic
181
- *
182
- * @example
183
- * ```ts
184
- * {
185
- * payload: t.object({
186
- * eventId: t.text(),
187
- * eventType: t.enum(["created", "updated"]),
188
- * data: t.record(t.text(), t.any()),
189
- * timestamp: t.number(),
190
- * userId: t.optional(t.text())
191
- * }),
192
- * headers: t.optional(t.object({
193
- * source: t.text(),
194
- * correlationId: t.text()
195
- * }))
196
- * }
197
- * ```
198
- */
163
+ * TypeBox schema defining the structure of messages published to this topic.
164
+ *
165
+ * The schema must include:
166
+ * - **payload**: Required schema for the main message data
167
+ * - **headers**: Optional schema for message metadata
168
+ *
169
+ * This schema:
170
+ * - Validates all messages published to the topic
171
+ * - Provides full TypeScript type inference for subscribers
172
+ * - Ensures type safety between publishers and subscribers
173
+ * - Enables automatic serialization/deserialization
174
+ *
175
+ * **Schema Design Best Practices**:
176
+ * - Keep payload schemas focused and cohesive
177
+ * - Use optional fields for data that might not always be present
178
+ * - Include timestamp fields for event ordering
179
+ * - Consider versioning for schema evolution
180
+ * - Use union types for different event types in the same topic
181
+ *
182
+ * @example
183
+ * ```ts
184
+ * {
185
+ * payload: t.object({
186
+ * eventId: t.text(),
187
+ * eventType: t.enum(["created", "updated"]),
188
+ * data: t.record(t.text(), t.any()),
189
+ * timestamp: t.number(),
190
+ * userId: t.optional(t.text())
191
+ * }),
192
+ * headers: t.optional(t.object({
193
+ * source: t.text(),
194
+ * correlationId: t.text()
195
+ * }))
196
+ * }
197
+ * ```
198
+ */
199
199
  schema: T;
200
200
  /**
201
- * Default subscriber handler function that processes messages published to this topic.
202
- *
203
- * This handler:
204
- * - Automatically subscribes when the topic is initialized
205
- * - Receives all messages published to the topic
206
- * - Runs for every message without additional subscription setup
207
- * - Can be supplemented with additional subscribers via `subscribe()` method
208
- * - Should handle errors gracefully to avoid breaking other subscribers
209
- *
210
- * **Handler Design Guidelines**:
211
- * - Keep handlers focused on a single responsibility
212
- * - Use proper error handling and logging
213
- * - Consider performance impact for high-frequency topics
214
- * - Make handlers idempotent when possible
215
- * - Validate business rules within the handler logic
216
- * - Log important processing steps for debugging
217
- *
218
- * **Error Handling Strategy**:
219
- * - Log errors but don't re-throw to avoid affecting other subscribers
220
- * - Use try-catch blocks for external service calls
221
- * - Consider implementing circuit breakers for resilience
222
- * - Monitor error rates and patterns for system health
223
- *
224
- * @param message - The topic message with validated payload and headers
225
- * @param message.payload - The typed message data based on the schema
226
- * @returns Promise that resolves when processing is complete
227
- *
228
- * @example
229
- * ```ts
230
- * handler: async (message) => {
231
- * const { eventType, data, timestamp } = message.payload;
232
- *
233
- * try {
234
- * // Log message receipt
235
- * this.logger.info(`Processing ${eventType} event`, { timestamp, data });
236
- *
237
- * // Process based on event type
238
- * switch (eventType) {
239
- * case "created":
240
- * await this.handleCreation(data);
241
- * break;
242
- * case "updated":
243
- * await this.handleUpdate(data);
244
- * break;
245
- * default:
246
- * this.logger.warn(`Unknown event type: ${eventType}`);
247
- * }
248
- *
249
- * this.logger.info(`Successfully processed ${eventType} event`);
250
- *
251
- * } catch (error) {
252
- * // Log error but don't re-throw to avoid affecting other subscribers
253
- * this.logger.error(`Failed to process ${eventType} event`, {
254
- * error: error.message,
255
- * eventType,
256
- * timestamp,
257
- * data
258
- * });
259
- * }
260
- * }
261
- * ```
262
- */
201
+ * Default subscriber handler function that processes messages published to this topic.
202
+ *
203
+ * This handler:
204
+ * - Automatically subscribes when the topic is initialized
205
+ * - Receives all messages published to the topic
206
+ * - Runs for every message without additional subscription setup
207
+ * - Can be supplemented with additional subscribers via `subscribe()` method
208
+ * - Should handle errors gracefully to avoid breaking other subscribers
209
+ *
210
+ * **Handler Design Guidelines**:
211
+ * - Keep handlers focused on a single responsibility
212
+ * - Use proper error handling and logging
213
+ * - Consider performance impact for high-frequency topics
214
+ * - Make handlers idempotent when possible
215
+ * - Validate business rules within the handler logic
216
+ * - Log important processing steps for debugging
217
+ *
218
+ * **Error Handling Strategy**:
219
+ * - Log errors but don't re-throw to avoid affecting other subscribers
220
+ * - Use try-catch blocks for external service calls
221
+ * - Consider implementing circuit breakers for resilience
222
+ * - Monitor error rates and patterns for system health
223
+ *
224
+ * @param message - The topic message with validated payload and headers
225
+ * @param message.payload - The typed message data based on the schema
226
+ * @returns Promise that resolves when processing is complete
227
+ *
228
+ * @example
229
+ * ```ts
230
+ * handler: async (message) => {
231
+ * const { eventType, data, timestamp } = message.payload;
232
+ *
233
+ * try {
234
+ * // Log message receipt
235
+ * this.logger.info(`Processing ${eventType} event`, { timestamp, data });
236
+ *
237
+ * // Process based on event type
238
+ * switch (eventType) {
239
+ * case "created":
240
+ * await this.handleCreation(data);
241
+ * break;
242
+ * case "updated":
243
+ * await this.handleUpdate(data);
244
+ * break;
245
+ * default:
246
+ * this.logger.warn(`Unknown event type: ${eventType}`);
247
+ * }
248
+ *
249
+ * this.logger.info(`Successfully processed ${eventType} event`);
250
+ *
251
+ * } catch (error) {
252
+ * // Log error but don't re-throw to avoid affecting other subscribers
253
+ * this.logger.error(`Failed to process ${eventType} event`, {
254
+ * error: error.message,
255
+ * eventType,
256
+ * timestamp,
257
+ * data
258
+ * });
259
+ * }
260
+ * }
261
+ * ```
262
+ */
263
263
  handler?: TopicHandler<T>;
264
264
  }
265
265
  declare class TopicPrimitive<T extends TopicMessageSchema> extends Primitive<TopicPrimitiveOptions<T>> {
@@ -349,133 +349,133 @@ declare const $subscriber: {
349
349
  };
350
350
  interface SubscriberPrimitiveOptions<T extends TopicMessageSchema> {
351
351
  /**
352
- * The topic primitive that this subscriber will listen to for messages.
353
- *
354
- * This establishes the connection between the subscriber and its source topic:
355
- * - The subscriber inherits the topic's message schema for type safety
356
- * - Messages published to the topic will be automatically delivered to this subscriber
357
- * - Multiple subscribers can listen to the same topic independently
358
- * - The subscriber will use the topic's provider and configuration settings
359
- *
360
- * **Topic Integration Benefits**:
361
- * - Type safety: Subscriber handler gets fully typed message payloads
362
- * - Schema validation: Messages are validated before reaching the subscriber
363
- * - Real-time delivery: Messages are delivered immediately upon publication
364
- * - Error isolation: Subscriber errors don't affect the topic or other subscribers
365
- * - Monitoring: Topic metrics include subscriber processing statistics
366
- *
367
- * @example
368
- * ```ts
369
- * // First, define a topic
370
- * userEvents = $topic({
371
- * name: "user-activity",
372
- * schema: {
373
- * payload: t.object({ userId: t.text(), action: t.text() })
374
- * }
375
- * });
376
- *
377
- * // Then, create a subscriber for that topic
378
- * activitySubscriber = $subscriber({
379
- * topic: this.userEvents, // Reference the topic primitive
380
- * handler: async (message) => { } // Process messages here
381
- * });
382
- * ```
383
- */
352
+ * The topic primitive that this subscriber will listen to for messages.
353
+ *
354
+ * This establishes the connection between the subscriber and its source topic:
355
+ * - The subscriber inherits the topic's message schema for type safety
356
+ * - Messages published to the topic will be automatically delivered to this subscriber
357
+ * - Multiple subscribers can listen to the same topic independently
358
+ * - The subscriber will use the topic's provider and configuration settings
359
+ *
360
+ * **Topic Integration Benefits**:
361
+ * - Type safety: Subscriber handler gets fully typed message payloads
362
+ * - Schema validation: Messages are validated before reaching the subscriber
363
+ * - Real-time delivery: Messages are delivered immediately upon publication
364
+ * - Error isolation: Subscriber errors don't affect the topic or other subscribers
365
+ * - Monitoring: Topic metrics include subscriber processing statistics
366
+ *
367
+ * @example
368
+ * ```ts
369
+ * // First, define a topic
370
+ * userEvents = $topic({
371
+ * name: "user-activity",
372
+ * schema: {
373
+ * payload: t.object({ userId: t.text(), action: t.text() })
374
+ * }
375
+ * });
376
+ *
377
+ * // Then, create a subscriber for that topic
378
+ * activitySubscriber = $subscriber({
379
+ * topic: this.userEvents, // Reference the topic primitive
380
+ * handler: async (message) => { } // Process messages here
381
+ * });
382
+ * ```
383
+ */
384
384
  topic: TopicPrimitive<T>;
385
385
  /**
386
- * Message handler function that processes individual messages from the topic.
387
- *
388
- * This function:
389
- * - Receives fully typed and validated message payloads from the connected topic
390
- * - Executes immediately when messages are published to the topic
391
- * - Should implement the core business logic for reacting to these events
392
- * - Runs independently of other subscribers to the same topic
393
- * - Should handle errors gracefully to avoid affecting other subscribers
394
- * - Has access to the full Alepha dependency injection container
395
- *
396
- * **Handler Design Guidelines**:
397
- * - Keep handlers focused on a single responsibility
398
- * - Use proper error handling and logging
399
- * - Consider performance impact for high-frequency topics
400
- * - Make handlers idempotent when possible for reliability
401
- * - Validate business rules within the handler logic
402
- * - Log important processing steps for debugging and monitoring
403
- *
404
- * **Error Handling Strategy**:
405
- * - Log errors but don't re-throw to avoid affecting other subscribers
406
- * - Use try-catch blocks for external service calls
407
- * - Implement circuit breakers for resilience with external systems
408
- * - Monitor error rates and patterns for system health
409
- * - Consider implementing retry logic for temporary failures
410
- *
411
- * **Performance Considerations**:
412
- * - Keep handler execution time minimal for high-throughput topics
413
- * - Use background queues for heavy processing triggered by events
414
- * - Implement batching for efficiency when processing many similar events
415
- * - Consider async processing patterns for non-critical operations
416
- *
417
- * @param message - The topic message with validated payload and optional headers
418
- * @param message.payload - The typed message data based on the topic's schema
419
- * @returns Promise that resolves when processing is complete
420
- *
421
- * @example
422
- * ```ts
423
- * handler: async (message) => {
424
- * const { userId, eventType, timestamp } = message.payload;
425
- *
426
- * try {
427
- * // Log event receipt
428
- * this.logger.info(`Processing ${eventType} event for user ${userId}`, {
429
- * timestamp,
430
- * userId,
431
- * eventType
432
- * });
433
- *
434
- * // Perform event-specific processing
435
- * switch (eventType) {
436
- * case 'user.login':
437
- * await this.updateLastLogin(userId, timestamp);
438
- * await this.sendWelcomeNotification(userId);
439
- * break;
440
- * case 'user.logout':
441
- * await this.updateSessionDuration(userId, timestamp);
442
- * break;
443
- * case 'user.purchase':
444
- * await this.updateRewardsPoints(userId, message.payload.purchaseAmount);
445
- * await this.triggerRecommendations(userId);
446
- * break;
447
- * default:
448
- * this.logger.warn(`Unknown event type: ${eventType}`);
449
- * }
450
- *
451
- * // Update analytics
452
- * await this.analytics.track(eventType, {
453
- * userId,
454
- * timestamp,
455
- * source: 'topic-subscriber'
456
- * });
457
- *
458
- * this.logger.info(`Successfully processed ${eventType} for user ${userId}`);
459
- *
460
- * } catch (error) {
461
- * // Log error but don't re-throw to avoid affecting other subscribers
462
- * this.logger.error(`Failed to process ${eventType} for user ${userId}`, {
463
- * error: error.message,
464
- * stack: error.stack,
465
- * userId,
466
- * eventType,
467
- * timestamp
468
- * });
469
- *
470
- * // Optionally send to error tracking service
471
- * await this.errorTracker.captureException(error, {
472
- * context: { userId, eventType, timestamp },
473
- * tags: { component: 'topic-subscriber' }
474
- * });
475
- * }
476
- * }
477
- * ```
478
- */
386
+ * Message handler function that processes individual messages from the topic.
387
+ *
388
+ * This function:
389
+ * - Receives fully typed and validated message payloads from the connected topic
390
+ * - Executes immediately when messages are published to the topic
391
+ * - Should implement the core business logic for reacting to these events
392
+ * - Runs independently of other subscribers to the same topic
393
+ * - Should handle errors gracefully to avoid affecting other subscribers
394
+ * - Has access to the full Alepha dependency injection container
395
+ *
396
+ * **Handler Design Guidelines**:
397
+ * - Keep handlers focused on a single responsibility
398
+ * - Use proper error handling and logging
399
+ * - Consider performance impact for high-frequency topics
400
+ * - Make handlers idempotent when possible for reliability
401
+ * - Validate business rules within the handler logic
402
+ * - Log important processing steps for debugging and monitoring
403
+ *
404
+ * **Error Handling Strategy**:
405
+ * - Log errors but don't re-throw to avoid affecting other subscribers
406
+ * - Use try-catch blocks for external service calls
407
+ * - Implement circuit breakers for resilience with external systems
408
+ * - Monitor error rates and patterns for system health
409
+ * - Consider implementing retry logic for temporary failures
410
+ *
411
+ * **Performance Considerations**:
412
+ * - Keep handler execution time minimal for high-throughput topics
413
+ * - Use background queues for heavy processing triggered by events
414
+ * - Implement batching for efficiency when processing many similar events
415
+ * - Consider async processing patterns for non-critical operations
416
+ *
417
+ * @param message - The topic message with validated payload and optional headers
418
+ * @param message.payload - The typed message data based on the topic's schema
419
+ * @returns Promise that resolves when processing is complete
420
+ *
421
+ * @example
422
+ * ```ts
423
+ * handler: async (message) => {
424
+ * const { userId, eventType, timestamp } = message.payload;
425
+ *
426
+ * try {
427
+ * // Log event receipt
428
+ * this.logger.info(`Processing ${eventType} event for user ${userId}`, {
429
+ * timestamp,
430
+ * userId,
431
+ * eventType
432
+ * });
433
+ *
434
+ * // Perform event-specific processing
435
+ * switch (eventType) {
436
+ * case 'user.login':
437
+ * await this.updateLastLogin(userId, timestamp);
438
+ * await this.sendWelcomeNotification(userId);
439
+ * break;
440
+ * case 'user.logout':
441
+ * await this.updateSessionDuration(userId, timestamp);
442
+ * break;
443
+ * case 'user.purchase':
444
+ * await this.updateRewardsPoints(userId, message.payload.purchaseAmount);
445
+ * await this.triggerRecommendations(userId);
446
+ * break;
447
+ * default:
448
+ * this.logger.warn(`Unknown event type: ${eventType}`);
449
+ * }
450
+ *
451
+ * // Update analytics
452
+ * await this.analytics.track(eventType, {
453
+ * userId,
454
+ * timestamp,
455
+ * source: 'topic-subscriber'
456
+ * });
457
+ *
458
+ * this.logger.info(`Successfully processed ${eventType} for user ${userId}`);
459
+ *
460
+ * } catch (error) {
461
+ * // Log error but don't re-throw to avoid affecting other subscribers
462
+ * this.logger.error(`Failed to process ${eventType} for user ${userId}`, {
463
+ * error: error.message,
464
+ * stack: error.stack,
465
+ * userId,
466
+ * eventType,
467
+ * timestamp
468
+ * });
469
+ *
470
+ * // Optionally send to error tracking service
471
+ * await this.errorTracker.captureException(error, {
472
+ * context: { userId, eventType, timestamp },
473
+ * tags: { component: 'topic-subscriber' }
474
+ * });
475
+ * }
476
+ * }
477
+ * ```
478
+ */
479
479
  handler: TopicHandler<T>;
480
480
  }
481
481
  declare class SubscriberPrimitive<T extends TopicMessageSchema> extends Primitive<SubscriberPrimitiveOptions<T>> {}
@@ -486,24 +486,24 @@ declare class MemoryTopicProvider extends TopicProvider {
486
486
  protected readonly subscriptions: Record<string, SubscribeCallback[]>;
487
487
  protected readonly start: alepha1.HookPrimitive<"start">;
488
488
  /**
489
- * Publish a message to a topic.
490
- *
491
- * @param topic
492
- * @param message
493
- */
489
+ * Publish a message to a topic.
490
+ *
491
+ * @param topic
492
+ * @param message
493
+ */
494
494
  publish(topic: string, message: string): Promise<void>;
495
495
  /**
496
- * Subscribe to a topic.
497
- *
498
- * @param topic - The topic to subscribe to.
499
- * @param callback
500
- */
496
+ * Subscribe to a topic.
497
+ *
498
+ * @param topic - The topic to subscribe to.
499
+ * @param callback
500
+ */
501
501
  subscribe(topic: string, callback: SubscribeCallback): Promise<UnSubscribeFn>;
502
502
  /**
503
- * Unsubscribe from a topic.
504
- *
505
- * @param topic - The topic to unsubscribe from.
506
- */
503
+ * Unsubscribe from a topic.
504
+ *
505
+ * @param topic - The topic to unsubscribe from.
506
+ */
507
507
  unsubscribe(topic: string): Promise<void>;
508
508
  }
509
509
  //#endregion