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.
Files changed (329) hide show
  1. package/README.md +1 -1
  2. package/dist/api-files/index.browser.js +80 -0
  3. package/dist/api-files/index.browser.js.map +1 -0
  4. package/dist/api-files/index.d.ts +28 -91
  5. package/dist/api-files/index.js +10 -755
  6. package/dist/api-files/index.js.map +1 -1
  7. package/dist/api-jobs/index.browser.js +56 -0
  8. package/dist/api-jobs/index.browser.js.map +1 -0
  9. package/dist/api-jobs/index.d.ts +46 -46
  10. package/dist/api-jobs/index.js +13 -13
  11. package/dist/api-jobs/index.js.map +1 -1
  12. package/dist/api-notifications/index.browser.js +382 -0
  13. package/dist/api-notifications/index.browser.js.map +1 -0
  14. package/dist/api-notifications/index.d.ts +231 -193
  15. package/dist/api-notifications/index.js +108 -78
  16. package/dist/api-notifications/index.js.map +1 -1
  17. package/dist/api-parameters/index.browser.js +29 -0
  18. package/dist/api-parameters/index.browser.js.map +1 -0
  19. package/dist/api-parameters/index.d.ts +21 -22
  20. package/dist/api-parameters/index.js +22 -22
  21. package/dist/api-parameters/index.js.map +1 -1
  22. package/dist/api-users/index.d.ts +237 -2001
  23. package/dist/api-users/index.js +969 -4795
  24. package/dist/api-users/index.js.map +1 -1
  25. package/dist/api-verifications/index.browser.js +52 -0
  26. package/dist/api-verifications/index.browser.js.map +1 -0
  27. package/dist/api-verifications/index.d.ts +119 -97
  28. package/dist/api-verifications/index.js +1 -1
  29. package/dist/api-verifications/index.js.map +1 -1
  30. package/dist/batch/index.d.ts +13 -13
  31. package/dist/batch/index.js +8 -13
  32. package/dist/batch/index.js.map +1 -1
  33. package/dist/bucket/index.d.ts +14 -14
  34. package/dist/bucket/index.js +19 -17
  35. package/dist/bucket/index.js.map +1 -1
  36. package/dist/cache/index.d.ts +11 -11
  37. package/dist/cache/index.js +9 -9
  38. package/dist/cache/index.js.map +1 -1
  39. package/dist/cli/{dist-Dl9Vl7Ur.js → dist-lGnqsKpu.js} +11 -15
  40. package/dist/cli/dist-lGnqsKpu.js.map +1 -0
  41. package/dist/cli/index.d.ts +32 -49
  42. package/dist/cli/index.js +90 -71
  43. package/dist/cli/index.js.map +1 -1
  44. package/dist/command/index.d.ts +20 -19
  45. package/dist/command/index.js +34 -25
  46. package/dist/command/index.js.map +1 -1
  47. package/dist/core/index.browser.js +218 -218
  48. package/dist/core/index.browser.js.map +1 -1
  49. package/dist/core/index.d.ts +232 -232
  50. package/dist/core/index.js +218 -218
  51. package/dist/core/index.js.map +1 -1
  52. package/dist/core/index.native.js +2113 -0
  53. package/dist/core/index.native.js.map +1 -0
  54. package/dist/datetime/index.d.ts +9 -9
  55. package/dist/datetime/index.js +7 -7
  56. package/dist/datetime/index.js.map +1 -1
  57. package/dist/email/index.d.ts +16 -16
  58. package/dist/email/index.js +14 -9
  59. package/dist/email/index.js.map +1 -1
  60. package/dist/file/index.js +1 -1
  61. package/dist/file/index.js.map +1 -1
  62. package/dist/lock/index.d.ts +9 -9
  63. package/dist/lock/index.js +8 -8
  64. package/dist/lock/index.js.map +1 -1
  65. package/dist/lock-redis/index.js +3 -66
  66. package/dist/lock-redis/index.js.map +1 -1
  67. package/dist/logger/index.d.ts +5 -5
  68. package/dist/logger/index.js +8 -8
  69. package/dist/logger/index.js.map +1 -1
  70. package/dist/orm/index.browser.js +114 -114
  71. package/dist/orm/index.browser.js.map +1 -1
  72. package/dist/orm/index.d.ts +218 -218
  73. package/dist/orm/index.js +49 -49
  74. package/dist/orm/index.js.map +1 -1
  75. package/dist/queue/index.d.ts +29 -29
  76. package/dist/queue/index.js +20 -20
  77. package/dist/queue/index.js.map +1 -1
  78. package/dist/queue-redis/index.d.ts +2 -2
  79. package/dist/redis/index.d.ts +4 -4
  80. package/dist/retry/index.d.ts +19 -19
  81. package/dist/retry/index.js +7 -7
  82. package/dist/retry/index.js.map +1 -1
  83. package/dist/scheduler/index.d.ts +16 -16
  84. package/dist/scheduler/index.js +9 -9
  85. package/dist/scheduler/index.js.map +1 -1
  86. package/dist/security/index.d.ts +53 -53
  87. package/dist/security/index.js +35 -35
  88. package/dist/security/index.js.map +1 -1
  89. package/dist/server/index.browser.js +1 -1
  90. package/dist/server/index.browser.js.map +1 -1
  91. package/dist/server/index.d.ts +92 -92
  92. package/dist/server/index.js +16 -16
  93. package/dist/server/index.js.map +1 -1
  94. package/dist/server-auth/index.browser.js +4 -982
  95. package/dist/server-auth/index.browser.js.map +1 -1
  96. package/dist/server-auth/index.d.ts +204 -785
  97. package/dist/server-auth/index.js +47 -1239
  98. package/dist/server-auth/index.js.map +1 -1
  99. package/dist/server-cache/index.d.ts +10 -10
  100. package/dist/server-cache/index.js +2 -2
  101. package/dist/server-cache/index.js.map +1 -1
  102. package/dist/server-compress/index.d.ts +4 -4
  103. package/dist/server-compress/index.js +1 -1
  104. package/dist/server-compress/index.js.map +1 -1
  105. package/dist/server-cookies/index.browser.js +8 -8
  106. package/dist/server-cookies/index.browser.js.map +1 -1
  107. package/dist/server-cookies/index.d.ts +17 -17
  108. package/dist/server-cookies/index.js +11 -11
  109. package/dist/server-cookies/index.js.map +1 -1
  110. package/dist/server-cors/index.d.ts +17 -17
  111. package/dist/server-cors/index.js +9 -9
  112. package/dist/server-cors/index.js.map +1 -1
  113. package/dist/server-health/index.d.ts +19 -19
  114. package/dist/server-helmet/index.d.ts +1 -1
  115. package/dist/server-links/index.browser.js +12 -12
  116. package/dist/server-links/index.browser.js.map +1 -1
  117. package/dist/server-links/index.d.ts +59 -251
  118. package/dist/server-links/index.js +23 -502
  119. package/dist/server-links/index.js.map +1 -1
  120. package/dist/server-metrics/index.d.ts +4 -4
  121. package/dist/server-multipart/index.d.ts +2 -2
  122. package/dist/server-proxy/index.d.ts +12 -12
  123. package/dist/server-proxy/index.js +10 -10
  124. package/dist/server-proxy/index.js.map +1 -1
  125. package/dist/server-rate-limit/index.d.ts +22 -22
  126. package/dist/server-rate-limit/index.js +12 -12
  127. package/dist/server-rate-limit/index.js.map +1 -1
  128. package/dist/server-security/index.d.ts +22 -22
  129. package/dist/server-security/index.js +15 -15
  130. package/dist/server-security/index.js.map +1 -1
  131. package/dist/server-static/index.d.ts +14 -14
  132. package/dist/server-static/index.js +26 -10
  133. package/dist/server-static/index.js.map +1 -1
  134. package/dist/server-swagger/index.d.ts +25 -184
  135. package/dist/server-swagger/index.js +21 -724
  136. package/dist/server-swagger/index.js.map +1 -1
  137. package/dist/sms/index.d.ts +14 -14
  138. package/dist/sms/index.js +9 -9
  139. package/dist/sms/index.js.map +1 -1
  140. package/dist/thread/index.d.ts +11 -11
  141. package/dist/thread/index.js +17 -17
  142. package/dist/thread/index.js.map +1 -1
  143. package/dist/topic/index.d.ts +26 -26
  144. package/dist/topic/index.js +16 -16
  145. package/dist/topic/index.js.map +1 -1
  146. package/dist/topic-redis/index.d.ts +1 -1
  147. package/dist/vite/index.d.ts +3 -3
  148. package/dist/vite/index.js +8 -8
  149. package/dist/vite/index.js.map +1 -1
  150. package/dist/websocket/index.browser.js +11 -11
  151. package/dist/websocket/index.browser.js.map +1 -1
  152. package/dist/websocket/index.d.ts +58 -58
  153. package/dist/websocket/index.js +13 -13
  154. package/dist/websocket/index.js.map +1 -1
  155. package/package.json +128 -57
  156. package/src/api-files/index.browser.ts +17 -0
  157. package/src/api-files/services/FileService.ts +5 -7
  158. package/src/api-jobs/index.browser.ts +15 -0
  159. package/src/api-jobs/index.ts +1 -1
  160. package/src/api-jobs/{descriptors → primitives}/$job.ts +8 -8
  161. package/src/api-jobs/providers/JobProvider.ts +9 -9
  162. package/src/api-jobs/services/JobService.ts +5 -5
  163. package/src/api-notifications/controllers/NotificationController.ts +26 -1
  164. package/src/api-notifications/index.browser.ts +17 -0
  165. package/src/api-notifications/index.ts +6 -15
  166. package/src/api-notifications/{descriptors → primitives}/$notification.ts +10 -10
  167. package/src/api-notifications/schemas/notificationQuerySchema.ts +13 -0
  168. package/src/api-notifications/services/NotificationSenderService.ts +3 -3
  169. package/src/api-notifications/services/NotificationService.ts +45 -2
  170. package/src/api-parameters/index.browser.ts +12 -0
  171. package/src/api-parameters/index.ts +1 -1
  172. package/src/api-parameters/{descriptors → primitives}/$config.ts +7 -12
  173. package/src/api-users/atoms/realmAuthSettingsAtom.ts +3 -1
  174. package/src/api-users/controllers/UserController.ts +21 -1
  175. package/src/api-users/index.ts +1 -1
  176. package/src/api-users/{descriptors → primitives}/$userRealm.ts +40 -17
  177. package/src/api-users/providers/UserRealmProvider.ts +2 -1
  178. package/src/api-users/services/SessionService.ts +2 -0
  179. package/src/api-users/services/UserService.ts +56 -16
  180. package/src/api-verifications/index.browser.ts +15 -0
  181. package/src/api-verifications/index.ts +1 -0
  182. package/src/batch/index.ts +3 -3
  183. package/src/batch/{descriptors → primitives}/$batch.ts +13 -16
  184. package/src/batch/providers/BatchProvider.ts +0 -7
  185. package/src/bucket/index.ts +15 -13
  186. package/src/bucket/{descriptors → primitives}/$bucket.ts +8 -8
  187. package/src/bucket/providers/LocalFileStorageProvider.ts +3 -3
  188. package/src/cache/index.ts +4 -4
  189. package/src/cache/{descriptors → primitives}/$cache.ts +15 -15
  190. package/src/cli/apps/AlephaCli.ts +27 -1
  191. package/src/cli/apps/AlephaPackageBuilderCli.ts +27 -2
  192. package/src/cli/commands/CoreCommands.ts +6 -2
  193. package/src/cli/commands/DrizzleCommands.ts +6 -6
  194. package/src/cli/commands/VerifyCommands.ts +1 -1
  195. package/src/cli/commands/ViteCommands.ts +8 -2
  196. package/src/cli/services/ProjectUtils.ts +74 -78
  197. package/src/command/helpers/Asker.ts +10 -0
  198. package/src/command/index.ts +5 -5
  199. package/src/command/{descriptors → primitives}/$command.ts +9 -12
  200. package/src/command/providers/CliProvider.ts +10 -10
  201. package/src/core/Alepha.ts +30 -33
  202. package/src/core/constants/KIND.ts +1 -1
  203. package/src/core/constants/OPTIONS.ts +1 -1
  204. package/src/core/helpers/{descriptor.ts → primitive.ts} +18 -18
  205. package/src/core/helpers/ref.ts +1 -1
  206. package/src/core/index.shared.ts +8 -8
  207. package/src/core/{descriptors → primitives}/$context.ts +5 -5
  208. package/src/core/{descriptors → primitives}/$hook.ts +4 -4
  209. package/src/core/{descriptors → primitives}/$inject.ts +2 -2
  210. package/src/core/{descriptors → primitives}/$module.ts +9 -9
  211. package/src/core/{descriptors → primitives}/$use.ts +2 -2
  212. package/src/core/providers/CodecManager.ts +1 -1
  213. package/src/core/providers/JsonSchemaCodec.ts +1 -1
  214. package/src/core/providers/StateManager.ts +2 -2
  215. package/src/datetime/index.ts +3 -3
  216. package/src/datetime/{descriptors → primitives}/$interval.ts +6 -6
  217. package/src/email/index.ts +17 -9
  218. package/src/email/{descriptors → primitives}/$email.ts +8 -8
  219. package/src/file/index.ts +1 -1
  220. package/src/lock/index.ts +3 -3
  221. package/src/lock/{descriptors → primitives}/$lock.ts +10 -10
  222. package/src/logger/index.ts +8 -8
  223. package/src/logger/{descriptors → primitives}/$logger.ts +2 -2
  224. package/src/logger/services/Logger.ts +1 -1
  225. package/src/orm/constants/PG_SYMBOLS.ts +2 -2
  226. package/src/orm/index.browser.ts +2 -2
  227. package/src/orm/index.ts +8 -8
  228. package/src/orm/{descriptors → primitives}/$entity.ts +11 -11
  229. package/src/orm/{descriptors → primitives}/$repository.ts +2 -2
  230. package/src/orm/{descriptors → primitives}/$sequence.ts +8 -8
  231. package/src/orm/{descriptors → primitives}/$transaction.ts +4 -4
  232. package/src/orm/providers/PostgresTypeProvider.ts +3 -3
  233. package/src/orm/providers/RepositoryProvider.ts +4 -4
  234. package/src/orm/providers/drivers/DatabaseProvider.ts +7 -7
  235. package/src/orm/providers/drivers/NodeSqliteProvider.ts +3 -3
  236. package/src/orm/services/ModelBuilder.ts +9 -9
  237. package/src/orm/services/PgRelationManager.ts +2 -2
  238. package/src/orm/services/PostgresModelBuilder.ts +5 -5
  239. package/src/orm/services/Repository.ts +7 -7
  240. package/src/orm/services/SqliteModelBuilder.ts +5 -5
  241. package/src/queue/index.ts +7 -7
  242. package/src/queue/{descriptors → primitives}/$consumer.ts +15 -15
  243. package/src/queue/{descriptors → primitives}/$queue.ts +12 -12
  244. package/src/queue/providers/WorkerProvider.ts +7 -7
  245. package/src/retry/index.ts +3 -3
  246. package/src/retry/{descriptors → primitives}/$retry.ts +14 -14
  247. package/src/scheduler/index.ts +3 -3
  248. package/src/scheduler/{descriptors → primitives}/$scheduler.ts +9 -9
  249. package/src/scheduler/providers/CronProvider.ts +1 -1
  250. package/src/security/index.ts +9 -9
  251. package/src/security/{descriptors → primitives}/$permission.ts +7 -7
  252. package/src/security/{descriptors → primitives}/$realm.ts +6 -12
  253. package/src/security/{descriptors → primitives}/$role.ts +12 -12
  254. package/src/security/{descriptors → primitives}/$serviceAccount.ts +8 -8
  255. package/src/server/index.browser.ts +1 -1
  256. package/src/server/index.ts +14 -14
  257. package/src/server/{descriptors → primitives}/$action.ts +13 -13
  258. package/src/server/{descriptors → primitives}/$route.ts +9 -9
  259. package/src/server/providers/NodeHttpServerProvider.ts +1 -1
  260. package/src/server/services/HttpClient.ts +1 -1
  261. package/src/server-auth/index.browser.ts +1 -1
  262. package/src/server-auth/index.ts +6 -6
  263. package/src/server-auth/{descriptors → primitives}/$auth.ts +10 -10
  264. package/src/server-auth/{descriptors → primitives}/$authCredentials.ts +4 -4
  265. package/src/server-auth/{descriptors → primitives}/$authGithub.ts +4 -4
  266. package/src/server-auth/{descriptors → primitives}/$authGoogle.ts +4 -4
  267. package/src/server-auth/providers/ServerAuthProvider.ts +4 -4
  268. package/src/server-cache/providers/ServerCacheProvider.ts +7 -7
  269. package/src/server-compress/providers/ServerCompressProvider.ts +3 -3
  270. package/src/server-cookies/index.browser.ts +2 -2
  271. package/src/server-cookies/index.ts +5 -5
  272. package/src/server-cookies/{descriptors → primitives}/$cookie.browser.ts +12 -12
  273. package/src/server-cookies/{descriptors → primitives}/$cookie.ts +13 -13
  274. package/src/server-cookies/providers/ServerCookiesProvider.ts +6 -5
  275. package/src/server-cookies/services/CookieParser.ts +1 -1
  276. package/src/server-cors/index.ts +3 -3
  277. package/src/server-cors/{descriptors → primitives}/$cors.ts +11 -13
  278. package/src/server-cors/providers/ServerCorsProvider.ts +5 -5
  279. package/src/server-links/index.browser.ts +5 -5
  280. package/src/server-links/index.ts +9 -9
  281. package/src/server-links/{descriptors → primitives}/$remote.ts +11 -11
  282. package/src/server-links/providers/LinkProvider.ts +7 -7
  283. package/src/server-links/providers/{RemoteDescriptorProvider.ts → RemotePrimitiveProvider.ts} +6 -6
  284. package/src/server-links/providers/ServerLinksProvider.ts +3 -3
  285. package/src/server-proxy/index.ts +3 -3
  286. package/src/server-proxy/{descriptors → primitives}/$proxy.ts +8 -8
  287. package/src/server-proxy/providers/ServerProxyProvider.ts +4 -4
  288. package/src/server-rate-limit/index.ts +6 -6
  289. package/src/server-rate-limit/{descriptors → primitives}/$rateLimit.ts +13 -13
  290. package/src/server-rate-limit/providers/ServerRateLimitProvider.ts +5 -5
  291. package/src/server-security/index.ts +3 -3
  292. package/src/server-security/{descriptors → primitives}/$basicAuth.ts +13 -13
  293. package/src/server-security/providers/ServerBasicAuthProvider.ts +5 -5
  294. package/src/server-security/providers/ServerSecurityProvider.ts +4 -4
  295. package/src/server-static/index.ts +3 -3
  296. package/src/server-static/{descriptors → primitives}/$serve.ts +8 -10
  297. package/src/server-static/providers/ServerStaticProvider.ts +24 -9
  298. package/src/server-swagger/index.ts +5 -5
  299. package/src/server-swagger/{descriptors → primitives}/$swagger.ts +9 -9
  300. package/src/server-swagger/providers/ServerSwaggerProvider.ts +11 -10
  301. package/src/sms/index.ts +4 -4
  302. package/src/sms/{descriptors → primitives}/$sms.ts +8 -8
  303. package/src/thread/index.ts +3 -3
  304. package/src/thread/{descriptors → primitives}/$thread.ts +13 -13
  305. package/src/thread/providers/ThreadProvider.ts +7 -9
  306. package/src/topic/index.ts +5 -5
  307. package/src/topic/{descriptors → primitives}/$subscriber.ts +14 -14
  308. package/src/topic/{descriptors → primitives}/$topic.ts +10 -10
  309. package/src/topic/providers/TopicProvider.ts +4 -4
  310. package/src/vite/tasks/copyAssets.ts +1 -1
  311. package/src/vite/tasks/generateSitemap.ts +3 -3
  312. package/src/vite/tasks/prerenderPages.ts +2 -2
  313. package/src/vite/tasks/runAlepha.ts +2 -2
  314. package/src/websocket/index.browser.ts +3 -3
  315. package/src/websocket/index.shared.ts +2 -2
  316. package/src/websocket/index.ts +4 -4
  317. package/src/websocket/interfaces/WebSocketInterfaces.ts +3 -3
  318. package/src/websocket/{descriptors → primitives}/$channel.ts +10 -10
  319. package/src/websocket/{descriptors → primitives}/$websocket.ts +8 -8
  320. package/src/websocket/providers/NodeWebSocketServerProvider.ts +7 -7
  321. package/src/websocket/providers/WebSocketServerProvider.ts +3 -3
  322. package/src/websocket/services/WebSocketClient.ts +5 -5
  323. package/dist/cli/dist-Dl9Vl7Ur.js.map +0 -1
  324. package/src/api-notifications/providers/MemorySmsProvider.ts +0 -20
  325. package/src/api-notifications/providers/SmsProvider.ts +0 -8
  326. /package/src/core/{descriptors → primitives}/$atom.ts +0 -0
  327. /package/src/core/{descriptors → primitives}/$env.ts +0 -0
  328. /package/src/server-auth/{descriptors → primitives}/$authApple.ts +0 -0
  329. /package/src/server-links/{descriptors → primitives}/$client.ts +0 -0
@@ -1,21 +1,21 @@
1
1
  import {
2
- createDescriptor,
3
- Descriptor,
2
+ createPrimitive,
4
3
  KIND,
4
+ Primitive,
5
5
  type Static,
6
6
  type TSchema,
7
7
  } from "alepha";
8
- import type { QueueDescriptor } from "./$queue.ts";
8
+ import type { QueuePrimitive } from "./$queue.ts";
9
9
 
10
10
  /**
11
- * Creates a consumer descriptor to process messages from a specific queue.
11
+ * Creates a consumer primitive to process messages from a specific queue.
12
12
  *
13
13
  * Provides a dedicated message consumer that connects to a queue and processes messages
14
14
  * with custom handler logic, enabling scalable architectures where multiple consumers
15
15
  * can process messages from the same queue.
16
16
  *
17
17
  * **Key Features**
18
- * - Seamless integration with any $queue descriptor
18
+ * - Seamless integration with any $queue primitive
19
19
  * - Full type safety inherited from queue schema
20
20
  * - Automatic worker management for background processing
21
21
  * - Built-in error handling and retry mechanisms
@@ -57,16 +57,16 @@ import type { QueueDescriptor } from "./$queue.ts";
57
57
  * ```
58
58
  */
59
59
  export const $consumer = <T extends TSchema>(
60
- options: ConsumerDescriptorOptions<T>,
61
- ): ConsumerDescriptor<T> => {
62
- return createDescriptor(ConsumerDescriptor<T>, options);
60
+ options: ConsumerPrimitiveOptions<T>,
61
+ ): ConsumerPrimitive<T> => {
62
+ return createPrimitive(ConsumerPrimitive<T>, options);
63
63
  };
64
64
 
65
65
  // ---------------------------------------------------------------------------------------------------------------------
66
66
 
67
- export interface ConsumerDescriptorOptions<T extends TSchema> {
67
+ export interface ConsumerPrimitiveOptions<T extends TSchema> {
68
68
  /**
69
- * The queue descriptor that this consumer will process messages from.
69
+ * The queue primitive that this consumer will process messages from.
70
70
  *
71
71
  * This establishes the connection between the consumer and its source queue:
72
72
  * - The consumer inherits the queue's message schema for type safety
@@ -90,12 +90,12 @@ export interface ConsumerDescriptorOptions<T extends TSchema> {
90
90
  *
91
91
  * // Then, create a consumer for that queue
92
92
  * emailConsumer = $consumer({
93
- * queue: this.emailQueue, // Reference the queue descriptor
93
+ * queue: this.emailQueue, // Reference the queue primitive
94
94
  * handler: async (message) => { } // process email
95
95
  * });
96
96
  * ```
97
97
  */
98
- queue: QueueDescriptor<T>;
98
+ queue: QueuePrimitive<T>;
99
99
 
100
100
  /**
101
101
  * Message handler function that processes individual messages from the queue.
@@ -175,8 +175,8 @@ export interface ConsumerDescriptorOptions<T extends TSchema> {
175
175
 
176
176
  // ---------------------------------------------------------------------------------------------------------------------
177
177
 
178
- export class ConsumerDescriptor<T extends TSchema> extends Descriptor<
179
- ConsumerDescriptorOptions<T>
178
+ export class ConsumerPrimitive<T extends TSchema> extends Primitive<
179
+ ConsumerPrimitiveOptions<T>
180
180
  > {}
181
181
 
182
- $consumer[KIND] = ConsumerDescriptor;
182
+ $consumer[KIND] = ConsumerPrimitive;
@@ -1,7 +1,7 @@
1
1
  import {
2
- createDescriptor,
3
- Descriptor,
2
+ createPrimitive,
4
3
  KIND,
4
+ Primitive,
5
5
  type Service,
6
6
  type Static,
7
7
  type TSchema,
@@ -15,9 +15,9 @@ import { MemoryQueueProvider } from "../providers/MemoryQueueProvider.ts";
15
15
  import { QueueProvider } from "../providers/QueueProvider.ts";
16
16
 
17
17
  /**
18
- * Creates a queue descriptor for asynchronous message processing with background workers.
18
+ * Creates a queue primitive for asynchronous message processing with background workers.
19
19
  *
20
- * The $queue descriptor enables powerful asynchronous communication patterns in your application.
20
+ * The $queue primitive enables powerful asynchronous communication patterns in your application.
21
21
  * It provides type-safe message queuing with automatic worker processing, making it perfect for
22
22
  * decoupling components and handling background tasks efficiently.
23
23
  *
@@ -126,14 +126,14 @@ import { QueueProvider } from "../providers/QueueProvider.ts";
126
126
  * ```
127
127
  */
128
128
  export const $queue = <T extends TSchema>(
129
- options: QueueDescriptorOptions<T>,
130
- ): QueueDescriptor<T> => {
131
- return createDescriptor(QueueDescriptor<T>, options);
129
+ options: QueuePrimitiveOptions<T>,
130
+ ): QueuePrimitive<T> => {
131
+ return createPrimitive(QueuePrimitive<T>, options);
132
132
  };
133
133
 
134
134
  // ---------------------------------------------------------------------------------------------------------------------
135
135
 
136
- export interface QueueDescriptorOptions<T extends TSchema> {
136
+ export interface QueuePrimitiveOptions<T extends TSchema> {
137
137
  /**
138
138
  * Unique name for the queue.
139
139
  *
@@ -337,8 +337,8 @@ export interface QueueDescriptorOptions<T extends TSchema> {
337
337
 
338
338
  // ---------------------------------------------------------------------------------------------------------------------
339
339
 
340
- export class QueueDescriptor<T extends TSchema> extends Descriptor<
341
- QueueDescriptorOptions<T>
340
+ export class QueuePrimitive<T extends TSchema> extends Primitive<
341
+ QueuePrimitiveOptions<T>
342
342
  > {
343
343
  protected readonly log = $logger();
344
344
  public readonly provider = this.$provider();
@@ -415,7 +415,7 @@ export class QueueDescriptor<T extends TSchema> extends Descriptor<
415
415
  }
416
416
 
417
417
  /**
418
- * Get default job options from descriptor configuration.
418
+ * Get default job options from primitive configuration.
419
419
  */
420
420
  protected getDefaultJobOptions() {
421
421
  return {
@@ -442,7 +442,7 @@ export class QueueDescriptor<T extends TSchema> extends Descriptor<
442
442
  }
443
443
  }
444
444
 
445
- $queue[KIND] = QueueDescriptor;
445
+ $queue[KIND] = QueuePrimitive;
446
446
 
447
447
  // ---------------------------------------------------------------------------------------------------------------------
448
448
 
@@ -9,13 +9,13 @@ import {
9
9
  } from "alepha";
10
10
  import { DateTimeProvider } from "alepha/datetime";
11
11
  import { $logger } from "alepha/logger";
12
- import { $consumer } from "../descriptors/$consumer.ts";
12
+ import type { QueueAcquiredJob } from "../interfaces/QueueJob.ts";
13
+ import { $consumer } from "../primitives/$consumer.ts";
13
14
  import {
14
15
  $queue,
15
- type QueueDescriptor,
16
16
  type QueueMessage,
17
- } from "../descriptors/$queue.ts";
18
- import type { QueueAcquiredJob } from "../interfaces/QueueJob.ts";
17
+ type QueuePrimitive,
18
+ } from "../primitives/$queue.ts";
19
19
  import { QueueProvider } from "./QueueProvider.ts";
20
20
 
21
21
  const envSchema = t.object({
@@ -83,7 +83,7 @@ export class WorkerProvider {
83
83
  on: "start",
84
84
  priority: "last",
85
85
  handler: () => {
86
- for (const queue of this.alepha.descriptors($queue)) {
86
+ for (const queue of this.alepha.primitives($queue)) {
87
87
  const handler = queue.options.handler;
88
88
  if (handler) {
89
89
  this.consumers.push({
@@ -93,7 +93,7 @@ export class WorkerProvider {
93
93
  }
94
94
  }
95
95
 
96
- for (const consumer of this.alepha.descriptors($consumer)) {
96
+ for (const consumer of this.alepha.primitives($consumer)) {
97
97
  this.consumers.push(consumer.options);
98
98
  }
99
99
 
@@ -333,7 +333,7 @@ export class WorkerProvider {
333
333
  }
334
334
 
335
335
  export interface Consumer<T extends TSchema = TSchema> {
336
- queue: QueueDescriptor<T>;
336
+ queue: QueuePrimitive<T>;
337
337
  handler: (message: QueueMessage<T>) => Promise<void>;
338
338
  }
339
339
 
@@ -1,12 +1,12 @@
1
1
  import { $module } from "alepha";
2
- import { $retry } from "./descriptors/$retry.ts";
2
+ import { $retry } from "./primitives/$retry.ts";
3
3
  import { RetryProvider } from "./providers/RetryProvider.ts";
4
4
 
5
5
  // ---------------------------------------------------------------------------------------------------------------------
6
6
 
7
- export * from "./descriptors/$retry.ts";
8
7
  export * from "./errors/RetryCancelError.ts";
9
8
  export * from "./errors/RetryTimeoutError.ts";
9
+ export * from "./primitives/$retry.ts";
10
10
  export * from "./providers/RetryProvider.ts";
11
11
 
12
12
  // ---------------------------------------------------------------------------------------------------------------------
@@ -19,6 +19,6 @@ export * from "./providers/RetryProvider.ts";
19
19
  */
20
20
  export const AlephaRetry = $module({
21
21
  name: "alepha.retry",
22
- descriptors: [$retry],
22
+ primitives: [$retry],
23
23
  services: [RetryProvider],
24
24
  });
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  $inject,
3
- createDescriptor,
4
- Descriptor,
5
- type DescriptorArgs,
3
+ createPrimitive,
6
4
  KIND,
5
+ Primitive,
6
+ type PrimitiveArgs,
7
7
  } from "alepha";
8
8
  import type { DurationLike } from "alepha/datetime";
9
9
  import type { RetryBackoffOptions } from "../providers/RetryProvider.ts";
@@ -14,16 +14,16 @@ import { RetryProvider } from "../providers/RetryProvider.ts";
14
14
  * with support for exponential backoff, max duration, and cancellation.
15
15
  */
16
16
  export const $retry = <T extends (...args: any[]) => any>(
17
- options: RetryDescriptorOptions<T>,
18
- ): RetryDescriptorFn<T> => {
19
- const instance = createDescriptor(RetryDescriptor, options);
17
+ options: RetryPrimitiveOptions<T>,
18
+ ): RetryPrimitiveFn<T> => {
19
+ const instance = createPrimitive(RetryPrimitive, options);
20
20
  const fn = (...args: Parameters<T>) => instance.run(...args);
21
- return Object.setPrototypeOf(fn, instance) as RetryDescriptorFn<T>;
21
+ return Object.setPrototypeOf(fn, instance) as RetryPrimitiveFn<T>;
22
22
  };
23
23
 
24
24
  // ---------------------------------------------------------------------------------------------------------------------
25
25
 
26
- export interface RetryDescriptorOptions<T extends (...args: any[]) => any> {
26
+ export interface RetryPrimitiveOptions<T extends (...args: any[]) => any> {
27
27
  /**
28
28
  * The function to retry.
29
29
  */
@@ -72,13 +72,13 @@ export interface RetryDescriptorOptions<T extends (...args: any[]) => any> {
72
72
 
73
73
  // ---------------------------------------------------------------------------------------------------------------------
74
74
 
75
- export class RetryDescriptor<
75
+ export class RetryPrimitive<
76
76
  T extends (...args: any[]) => any,
77
- > extends Descriptor<RetryDescriptorOptions<T>> {
77
+ > extends Primitive<RetryPrimitiveOptions<T>> {
78
78
  protected readonly retryProvider = $inject(RetryProvider);
79
79
  protected appAbortController?: AbortController;
80
80
 
81
- constructor(args: DescriptorArgs<RetryDescriptorOptions<T>>) {
81
+ constructor(args: PrimitiveArgs<RetryPrimitiveOptions<T>>) {
82
82
  super(args);
83
83
 
84
84
  this.alepha.events.on("stop", () => {
@@ -100,9 +100,9 @@ export class RetryDescriptor<
100
100
  }
101
101
  }
102
102
 
103
- export interface RetryDescriptorFn<T extends (...args: any[]) => any>
104
- extends RetryDescriptor<T> {
103
+ export interface RetryPrimitiveFn<T extends (...args: any[]) => any>
104
+ extends RetryPrimitive<T> {
105
105
  (...args: Parameters<T>): Promise<ReturnType<T>>;
106
106
  }
107
107
 
108
- $retry[KIND] = RetryDescriptor;
108
+ $retry[KIND] = RetryPrimitive;
@@ -1,13 +1,13 @@
1
1
  import { $module } from "alepha";
2
2
  import type { DateTime } from "alepha/datetime";
3
3
  import { AlephaLock } from "alepha/lock";
4
- import { $scheduler } from "./descriptors/$scheduler.ts";
4
+ import { $scheduler } from "./primitives/$scheduler.ts";
5
5
  import { CronProvider } from "./providers/CronProvider.ts";
6
6
 
7
7
  // ---------------------------------------------------------------------------------------------------------------------
8
8
 
9
9
  export * from "./constants/CRON.ts";
10
- export * from "./descriptors/$scheduler.ts";
10
+ export * from "./primitives/$scheduler.ts";
11
11
  export * from "./providers/CronProvider.ts";
12
12
 
13
13
  // ---------------------------------------------------------------------------------------------------------------------
@@ -42,6 +42,6 @@ declare module "alepha" {
42
42
  */
43
43
  export const AlephaScheduler = $module({
44
44
  name: "alepha.scheduler",
45
- descriptors: [$scheduler],
45
+ primitives: [$scheduler],
46
46
  services: [AlephaLock, CronProvider],
47
47
  });
@@ -3,9 +3,9 @@ import {
3
3
  $inject,
4
4
  Alepha,
5
5
  type Async,
6
- createDescriptor,
7
- Descriptor,
6
+ createPrimitive,
8
7
  KIND,
8
+ Primitive,
9
9
  type Static,
10
10
  t,
11
11
  } from "alepha";
@@ -19,17 +19,17 @@ import { $logger } from "alepha/logger";
19
19
  import { CronProvider } from "../providers/CronProvider.ts";
20
20
 
21
21
  /**
22
- * Scheduler descriptor.
22
+ * Scheduler primitive.
23
23
  */
24
24
  export const $scheduler = (
25
- options: SchedulerDescriptorOptions,
26
- ): SchedulerDescriptor => {
27
- return createDescriptor(SchedulerDescriptor, options);
25
+ options: SchedulerPrimitiveOptions,
26
+ ): SchedulerPrimitive => {
27
+ return createPrimitive(SchedulerPrimitive, options);
28
28
  };
29
29
 
30
30
  // ---------------------------------------------------------------------------------------------------------------------
31
31
 
32
- export type SchedulerDescriptorOptions = {
32
+ export type SchedulerPrimitiveOptions = {
33
33
  /**
34
34
  * Function to run on schedule.
35
35
  */
@@ -78,7 +78,7 @@ declare module "alepha" {
78
78
  interface Env extends Partial<Static<typeof envSchema>> {}
79
79
  }
80
80
 
81
- export class SchedulerDescriptor extends Descriptor<SchedulerDescriptorOptions> {
81
+ export class SchedulerPrimitive extends Primitive<SchedulerPrimitiveOptions> {
82
82
  protected readonly log = $logger();
83
83
  protected readonly env = $env(envSchema);
84
84
  protected readonly alepha = $inject(Alepha);
@@ -186,7 +186,7 @@ export class SchedulerDescriptor extends Descriptor<SchedulerDescriptorOptions>
186
186
  });
187
187
  }
188
188
 
189
- $scheduler[KIND] = SchedulerDescriptor;
189
+ $scheduler[KIND] = SchedulerPrimitive;
190
190
 
191
191
  // ---------------------------------------------------------------------------------------------------------------------
192
192
 
@@ -74,7 +74,7 @@ export class CronProvider {
74
74
  /**
75
75
  * Registers a cron job.
76
76
  *
77
- * It's automatically done when using the `$scheduler` descriptor but can also be used manually.
77
+ * It's automatically done when using the `$scheduler` primitive but can also be used manually.
78
78
  */
79
79
  public createCronJob(
80
80
  name: string,
@@ -1,20 +1,20 @@
1
1
  import { $module } from "alepha";
2
- import { $permission } from "./descriptors/$permission.ts";
3
- import { $realm } from "./descriptors/$realm.ts";
4
- import { $role } from "./descriptors/$role.ts";
2
+ import { $permission } from "./primitives/$permission.ts";
3
+ import { $realm } from "./primitives/$realm.ts";
4
+ import { $role } from "./primitives/$role.ts";
5
5
  import { CryptoProvider } from "./providers/CryptoProvider.ts";
6
6
  import { JwtProvider } from "./providers/JwtProvider.ts";
7
7
  import { SecurityProvider } from "./providers/SecurityProvider.ts";
8
8
  import type { UserAccount } from "./schemas/userAccountInfoSchema.ts";
9
9
 
10
- export * from "./descriptors/$permission.ts";
11
- export * from "./descriptors/$realm.ts";
12
- export * from "./descriptors/$role.ts";
13
- export * from "./descriptors/$serviceAccount.ts";
14
10
  export * from "./errors/InvalidCredentialsError.ts";
15
11
  export * from "./errors/InvalidPermissionError.ts";
16
12
  export * from "./errors/SecurityError.ts";
17
13
  export * from "./interfaces/UserAccountToken.ts";
14
+ export * from "./primitives/$permission.ts";
15
+ export * from "./primitives/$realm.ts";
16
+ export * from "./primitives/$role.ts";
17
+ export * from "./primitives/$serviceAccount.ts";
18
18
  export * from "./providers/CryptoProvider.ts";
19
19
  export * from "./providers/JwtProvider.ts";
20
20
  export * from "./providers/SecurityProvider.ts";
@@ -34,7 +34,7 @@ declare module "alepha" {
34
34
  /**
35
35
  * Provides comprehensive authentication and authorization capabilities with JWT tokens, role-based access control, and user management.
36
36
  *
37
- * The security module enables building secure applications using descriptors like `$realm`, `$role`, and `$permission`
37
+ * The security module enables building secure applications using primitives like `$realm`, `$role`, and `$permission`
38
38
  * on class properties. It offers JWT-based authentication, fine-grained permissions, service accounts, and seamless
39
39
  * integration with various authentication providers and user management systems.
40
40
  *
@@ -45,6 +45,6 @@ declare module "alepha" {
45
45
  */
46
46
  export const AlephaSecurity = $module({
47
47
  name: "alepha.security",
48
- descriptors: [$realm, $role, $permission],
48
+ primitives: [$realm, $role, $permission],
49
49
  services: [SecurityProvider, JwtProvider, CryptoProvider],
50
50
  });
@@ -1,4 +1,4 @@
1
- import { $inject, createDescriptor, Descriptor, KIND } from "alepha";
1
+ import { $inject, createPrimitive, KIND, Primitive } from "alepha";
2
2
  import { SecurityProvider } from "../providers/SecurityProvider.ts";
3
3
  import type { UserAccount } from "../schemas/userAccountInfoSchema.ts";
4
4
 
@@ -6,14 +6,14 @@ import type { UserAccount } from "../schemas/userAccountInfoSchema.ts";
6
6
  * Create a new permission.
7
7
  */
8
8
  export const $permission = (
9
- options: PermissionDescriptorOptions = {},
10
- ): PermissionDescriptor => {
11
- return createDescriptor(PermissionDescriptor, options);
9
+ options: PermissionPrimitiveOptions = {},
10
+ ): PermissionPrimitive => {
11
+ return createPrimitive(PermissionPrimitive, options);
12
12
  };
13
13
 
14
14
  // ---------------------------------------------------------------------------------------------------------------------
15
15
 
16
- export interface PermissionDescriptorOptions {
16
+ export interface PermissionPrimitiveOptions {
17
17
  /**
18
18
  * Name of the permission. Use Property name is not provided.
19
19
  */
@@ -32,7 +32,7 @@ export interface PermissionDescriptorOptions {
32
32
 
33
33
  // ---------------------------------------------------------------------------------------------------------------------
34
34
 
35
- export class PermissionDescriptor extends Descriptor<PermissionDescriptorOptions> {
35
+ export class PermissionPrimitive extends Primitive<PermissionPrimitiveOptions> {
36
36
  protected readonly securityProvider = $inject(SecurityProvider);
37
37
 
38
38
  public get name(): string {
@@ -67,4 +67,4 @@ export class PermissionDescriptor extends Descriptor<PermissionDescriptorOptions
67
67
  }
68
68
  }
69
69
 
70
- $permission[KIND] = PermissionDescriptor;
70
+ $permission[KIND] = PermissionPrimitive;
@@ -1,10 +1,4 @@
1
- import {
2
- $inject,
3
- AlephaError,
4
- createDescriptor,
5
- Descriptor,
6
- KIND,
7
- } from "alepha";
1
+ import { $inject, AlephaError, createPrimitive, KIND, Primitive } from "alepha";
8
2
  import {
9
3
  DateTimeProvider,
10
4
  type Duration,
@@ -21,13 +15,13 @@ import type { UserAccount } from "../schemas/userAccountInfoSchema.ts";
21
15
  /**
22
16
  * Create a new realm.
23
17
  */
24
- export const $realm = (options: RealmDescriptorOptions): RealmDescriptor => {
25
- return createDescriptor(RealmDescriptor, options);
18
+ export const $realm = (options: RealmPrimitiveOptions): RealmPrimitive => {
19
+ return createPrimitive(RealmPrimitive, options);
26
20
  };
27
21
 
28
22
  // ---------------------------------------------------------------------------------------------------------------------
29
23
 
30
- export type RealmDescriptorOptions = {
24
+ export type RealmPrimitiveOptions = {
31
25
  /**
32
26
  * Define the realm name.
33
27
  * If not provided, it will use the property key.
@@ -109,7 +103,7 @@ export interface RealmExternal {
109
103
 
110
104
  // ---------------------------------------------------------------------------------------------------------------------
111
105
 
112
- export class RealmDescriptor extends Descriptor<RealmDescriptorOptions> {
106
+ export class RealmPrimitive extends Primitive<RealmPrimitiveOptions> {
113
107
  protected readonly securityProvider = $inject(SecurityProvider);
114
108
  protected readonly dateTimeProvider = $inject(DateTimeProvider);
115
109
  protected readonly jwt = $inject(JwtProvider);
@@ -342,7 +336,7 @@ export class RealmDescriptor extends Descriptor<RealmDescriptorOptions> {
342
336
  }
343
337
  }
344
338
 
345
- $realm[KIND] = RealmDescriptor;
339
+ $realm[KIND] = RealmPrimitive;
346
340
 
347
341
  // ---------------------------------------------------------------------------------------------------------------------
348
342
 
@@ -1,18 +1,18 @@
1
- import { $inject, createDescriptor, Descriptor, KIND } from "alepha";
1
+ import { $inject, createPrimitive, KIND, Primitive } from "alepha";
2
2
  import { SecurityProvider } from "../providers/SecurityProvider.ts";
3
- import type { PermissionDescriptor } from "./$permission.ts";
4
- import type { RealmDescriptor } from "./$realm.ts";
3
+ import type { PermissionPrimitive } from "./$permission.ts";
4
+ import type { RealmPrimitive } from "./$realm.ts";
5
5
 
6
6
  /**
7
7
  * Create a new role.
8
8
  */
9
- export const $role = (options: RoleDescriptorOptions = {}): RoleDescriptor => {
10
- return createDescriptor(RoleDescriptor, options);
9
+ export const $role = (options: RolePrimitiveOptions = {}): RolePrimitive => {
10
+ return createPrimitive(RolePrimitive, options);
11
11
  };
12
12
 
13
13
  // ---------------------------------------------------------------------------------------------------------------------
14
14
 
15
- export interface RoleDescriptorOptions {
15
+ export interface RolePrimitiveOptions {
16
16
  /**
17
17
  * Name of the role.
18
18
  */
@@ -23,7 +23,7 @@ export interface RoleDescriptorOptions {
23
23
  */
24
24
  description?: string;
25
25
 
26
- realm?: string | RealmDescriptor;
26
+ realm?: string | RealmPrimitive;
27
27
 
28
28
  permissions?: Array<
29
29
  | string
@@ -35,7 +35,7 @@ export interface RoleDescriptorOptions {
35
35
  >;
36
36
  }
37
37
 
38
- export class RoleDescriptor extends Descriptor<RoleDescriptorOptions> {
38
+ export class RolePrimitive extends Primitive<RolePrimitiveOptions> {
39
39
  protected readonly securityProvider = $inject(SecurityProvider);
40
40
 
41
41
  public get name(): string {
@@ -62,19 +62,19 @@ export class RoleDescriptor extends Descriptor<RoleDescriptorOptions> {
62
62
  /**
63
63
  * Get the realm of the role.
64
64
  */
65
- public get realm(): string | RealmDescriptor | undefined {
65
+ public get realm(): string | RealmPrimitive | undefined {
66
66
  return this.options.realm;
67
67
  }
68
68
 
69
- public can(permission: string | PermissionDescriptor): boolean {
69
+ public can(permission: string | PermissionPrimitive): boolean {
70
70
  return this.securityProvider.can(this.name, permission);
71
71
  }
72
72
 
73
- public check(permission: string | PermissionDescriptor) {
73
+ public check(permission: string | PermissionPrimitive) {
74
74
  return this.securityProvider.checkPermission(permission, this.name);
75
75
  }
76
76
  }
77
77
 
78
78
  // ---------------------------------------------------------------------------------------------------------------------
79
79
 
80
- $role[KIND] = RoleDescriptor;
80
+ $role[KIND] = RolePrimitive;
@@ -1,7 +1,7 @@
1
1
  import { $context } from "alepha";
2
2
  import { DateTimeProvider } from "alepha/datetime";
3
3
  import type { UserAccount } from "../schemas/userAccountInfoSchema.ts";
4
- import type { AccessTokenResponse, RealmDescriptor } from "./$realm.ts";
4
+ import type { AccessTokenResponse, RealmPrimitive } from "./$realm.ts";
5
5
 
6
6
  /**
7
7
  * Allow to get an access token for a service account.
@@ -32,8 +32,8 @@ import type { AccessTokenResponse, RealmDescriptor } from "./$realm.ts";
32
32
  * ```
33
33
  */
34
34
  export const $serviceAccount = (
35
- options: ServiceAccountDescriptorOptions,
36
- ): ServiceAccountDescriptor => {
35
+ options: ServiceAccountPrimitiveOptions,
36
+ ): ServiceAccountPrimitive => {
37
37
  const { alepha } = $context();
38
38
  const store: {
39
39
  cache?: AccessTokenResponse;
@@ -150,19 +150,19 @@ export const $serviceAccount = (
150
150
  };
151
151
  };
152
152
 
153
- export type ServiceAccountDescriptorOptions = {
153
+ export type ServiceAccountPrimitiveOptions = {
154
154
  gracePeriod?: number; // Grace period in milliseconds before token expiration
155
155
  } & (
156
156
  | {
157
- oauth2: Oauth2ServiceAccountDescriptorOptions;
157
+ oauth2: Oauth2ServiceAccountPrimitiveOptions;
158
158
  }
159
159
  | {
160
- realm: RealmDescriptor;
160
+ realm: RealmPrimitive;
161
161
  user: UserAccount;
162
162
  }
163
163
  );
164
164
 
165
- export interface Oauth2ServiceAccountDescriptorOptions {
165
+ export interface Oauth2ServiceAccountPrimitiveOptions {
166
166
  /**
167
167
  * Get Token URL.
168
168
  */
@@ -179,7 +179,7 @@ export interface Oauth2ServiceAccountDescriptorOptions {
179
179
  clientSecret: string;
180
180
  }
181
181
 
182
- export interface ServiceAccountDescriptor {
182
+ export interface ServiceAccountPrimitive {
183
183
  token: () => Promise<string>;
184
184
  }
185
185
 
@@ -9,6 +9,6 @@ export * from "./index.shared.ts";
9
9
 
10
10
  export const AlephaServer = $module({
11
11
  name: "alepha.server",
12
- descriptors: [],
12
+ primitives: [],
13
13
  services: [HttpClient],
14
14
  });