@tstdl/base 0.92.167 → 0.93.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 (317) hide show
  1. package/application/application.d.ts +12 -18
  2. package/application/application.js +48 -69
  3. package/application/index.d.ts +1 -5
  4. package/application/index.js +1 -5
  5. package/application/providers.d.ts +10 -0
  6. package/application/providers.js +54 -0
  7. package/audit/audit.model.d.ts +15 -0
  8. package/audit/audit.model.js +73 -0
  9. package/audit/auditor.d.ts +42 -0
  10. package/audit/auditor.js +111 -0
  11. package/audit/index.d.ts +3 -0
  12. package/audit/index.js +3 -0
  13. package/audit/types.d.ts +22 -0
  14. package/audit/types.js +19 -0
  15. package/authentication/client/authentication.service.d.ts +1 -3
  16. package/authentication/client/authentication.service.js +4 -5
  17. package/browser/browser-context-controller.d.ts +2 -4
  18. package/browser/browser-context-controller.js +5 -6
  19. package/browser/browser-controller.d.ts +2 -4
  20. package/browser/browser-controller.js +3 -4
  21. package/browser/browser.service.d.ts +1 -3
  22. package/browser/browser.service.js +1 -2
  23. package/browser/page-controller.d.ts +2 -4
  24. package/browser/page-controller.js +7 -8
  25. package/browser/utils.js +3 -3
  26. package/cancellation/token.d.ts +104 -41
  27. package/cancellation/token.js +125 -54
  28. package/core.d.ts +1 -13
  29. package/core.js +1 -46
  30. package/disposable/disposable.d.ts +0 -8
  31. package/disposable/disposable.js +1 -3
  32. package/disposable/index.d.ts +0 -6
  33. package/disposable/index.js +0 -6
  34. package/disposable/using.d.ts +0 -1
  35. package/disposable/using.js +2 -3
  36. package/distributed-loop/distributed-loop.js +2 -2
  37. package/errors/utils.js +4 -1
  38. package/examples/api/authentication.js +11 -5
  39. package/examples/api/basic-overview.js +17 -12
  40. package/examples/api/custom-authentication.js +13 -7
  41. package/examples/api/streaming.js +15 -12
  42. package/examples/browser/basic.js +6 -3
  43. package/examples/document-management/main.js +6 -3
  44. package/examples/http/client.js +7 -3
  45. package/examples/mail/basic.js +9 -7
  46. package/examples/pdf/basic.js +8 -6
  47. package/examples/template/basic.js +7 -5
  48. package/http/client/http-client-request.d.ts +1 -2
  49. package/http/client/http-client-request.js +1 -2
  50. package/http/server/http-server.d.ts +1 -3
  51. package/http/server/http-server.js +0 -1
  52. package/http/server/node/node-http-server.d.ts +1 -2
  53. package/http/server/node/node-http-server.js +1 -2
  54. package/import.js +1 -1
  55. package/injector/injector.d.ts +1 -1
  56. package/injector/types.d.ts +3 -4
  57. package/lock/lock.d.ts +40 -21
  58. package/lock/lock.js +74 -1
  59. package/lock/postgres/drizzle/0000_busy_tattoo.sql +7 -0
  60. package/lock/postgres/drizzle/meta/0000_snapshot.json +65 -0
  61. package/lock/postgres/drizzle/meta/_journal.json +13 -0
  62. package/lock/postgres/drizzle.config.js +11 -0
  63. package/lock/postgres/index.d.ts +2 -0
  64. package/lock/postgres/index.js +2 -0
  65. package/lock/postgres/lock.d.ts +14 -0
  66. package/lock/postgres/lock.js +127 -0
  67. package/lock/postgres/models/index.d.ts +2 -0
  68. package/lock/postgres/models/index.js +2 -0
  69. package/lock/postgres/models/lock.model.d.ts +7 -0
  70. package/{examples/orm/user.model.js → lock/postgres/models/lock.model.js} +22 -30
  71. package/lock/postgres/models/schemas.d.ts +3 -0
  72. package/lock/postgres/models/schemas.js +4 -0
  73. package/lock/postgres/module.d.ts +6 -0
  74. package/lock/postgres/module.js +26 -0
  75. package/lock/postgres/provider.d.ts +6 -0
  76. package/lock/postgres/provider.js +29 -0
  77. package/lock/provider.d.ts +12 -2
  78. package/lock/provider.js +24 -1
  79. package/lock/web/web-lock.d.ts +4 -3
  80. package/lock/web/web-lock.js +49 -42
  81. package/lock/web/web-lock.provider.d.ts +0 -3
  82. package/lock/web/web-lock.provider.js +5 -22
  83. package/logger/formatter.d.ts +13 -0
  84. package/logger/formatter.js +3 -0
  85. package/logger/formatters/index.d.ts +2 -0
  86. package/logger/formatters/index.js +2 -0
  87. package/logger/formatters/json.d.ts +5 -0
  88. package/logger/formatters/json.js +33 -0
  89. package/logger/formatters/pretty-print.d.ts +5 -0
  90. package/logger/formatters/pretty-print.js +55 -0
  91. package/logger/index.d.ts +5 -2
  92. package/logger/index.js +5 -2
  93. package/logger/level.d.ts +10 -8
  94. package/logger/level.js +9 -9
  95. package/logger/logger.d.ts +21 -30
  96. package/logger/logger.js +98 -26
  97. package/logger/manager.d.ts +20 -0
  98. package/logger/manager.js +86 -0
  99. package/logger/tokens.d.ts +1 -1
  100. package/logger/tokens.js +1 -1
  101. package/logger/transport.d.ts +14 -0
  102. package/logger/transport.js +16 -0
  103. package/logger/transports/console.d.ts +14 -0
  104. package/logger/transports/console.js +36 -0
  105. package/logger/transports/index.d.ts +1 -0
  106. package/logger/transports/index.js +1 -0
  107. package/mail/clients/nodemailer.mail-client.d.ts +0 -1
  108. package/mail/clients/nodemailer.mail-client.js +9 -7
  109. package/message-bus/local/local-message-bus.js +2 -2
  110. package/message-bus/message-bus-base.d.ts +2 -3
  111. package/message-bus/message-bus-base.js +5 -6
  112. package/message-bus/message-bus.d.ts +1 -2
  113. package/message-bus/message-bus.js +1 -2
  114. package/module/index.d.ts +0 -2
  115. package/module/index.js +0 -2
  116. package/module/module.d.ts +17 -18
  117. package/module/module.js +47 -12
  118. package/module/modules/function.module.d.ts +6 -6
  119. package/module/modules/function.module.js +25 -9
  120. package/module/modules/web-server.module.d.ts +2 -10
  121. package/module/modules/web-server.module.js +3 -11
  122. package/openid-connect/index.d.ts +0 -2
  123. package/openid-connect/index.js +0 -2
  124. package/openid-connect/oidc-state.model.d.ts +4 -5
  125. package/openid-connect/oidc-state.model.js +51 -1
  126. package/openid-connect/oidc.service-model.d.ts +1 -1
  127. package/openid-connect/oidc.service.d.ts +2 -6
  128. package/openid-connect/oidc.service.js +24 -37
  129. package/orm/decorators.d.ts +10 -1
  130. package/orm/decorators.js +8 -0
  131. package/orm/server/repository.d.ts +3 -1
  132. package/orm/server/repository.js +32 -3
  133. package/package.json +19 -29
  134. package/pdf/pdf.service.js +9 -9
  135. package/pool/pool.d.ts +1 -3
  136. package/pool/pool.js +3 -4
  137. package/queue/postgres/job.model.d.ts +1 -2
  138. package/queue/postgres/job.model.js +1 -2
  139. package/queue/postgres/module.js +1 -1
  140. package/threading/thread-pool.d.ts +1 -3
  141. package/threading/thread-pool.js +7 -8
  142. package/utils/format-error.d.ts +7 -0
  143. package/utils/format-error.js +59 -17
  144. package/utils/function/memoize.d.ts +22 -7
  145. package/utils/function/memoize.js +82 -23
  146. package/utils/index.d.ts +1 -0
  147. package/utils/index.js +1 -0
  148. package/utils/object/dereference.d.ts +51 -19
  149. package/utils/object/dereference.js +52 -43
  150. package/utils/timing.js +2 -2
  151. package/utils/try-chain.d.ts +22 -0
  152. package/utils/try-chain.js +46 -0
  153. package/database/entity-repository.d.ts +0 -50
  154. package/database/entity-repository.js +0 -3
  155. package/database/entity.d.ts +0 -7
  156. package/database/entity.js +0 -1
  157. package/database/id.d.ts +0 -1
  158. package/database/id.js +0 -9
  159. package/database/index.d.ts +0 -11
  160. package/database/index.js +0 -11
  161. package/database/module.d.ts +0 -8
  162. package/database/module.js +0 -11
  163. package/database/mongo/classes.d.ts +0 -21
  164. package/database/mongo/classes.js +0 -26
  165. package/database/mongo/index.d.ts +0 -15
  166. package/database/mongo/index.js +0 -15
  167. package/database/mongo/model/document.d.ts +0 -29
  168. package/database/mongo/model/document.js +0 -63
  169. package/database/mongo/model/index.d.ts +0 -1
  170. package/database/mongo/model/index.js +0 -1
  171. package/database/mongo/module.d.ts +0 -8
  172. package/database/mongo/module.js +0 -68
  173. package/database/mongo/mongo-base.repository.d.ts +0 -103
  174. package/database/mongo/mongo-base.repository.js +0 -263
  175. package/database/mongo/mongo-bulk.d.ts +0 -35
  176. package/database/mongo/mongo-bulk.js +0 -90
  177. package/database/mongo/mongo-entity-repository.d.ts +0 -98
  178. package/database/mongo/mongo-entity-repository.js +0 -278
  179. package/database/mongo/operations.d.ts +0 -10
  180. package/database/mongo/operations.js +0 -54
  181. package/database/mongo/query-converter.d.ts +0 -6
  182. package/database/mongo/query-converter.js +0 -83
  183. package/database/mongo/simple-entity-repository.d.ts +0 -7
  184. package/database/mongo/simple-entity-repository.js +0 -6
  185. package/database/mongo/types.d.ts +0 -50
  186. package/database/mongo/types.js +0 -3
  187. package/database/query.d.ts +0 -121
  188. package/database/query.js +0 -7
  189. package/database/utils.d.ts +0 -2
  190. package/database/utils.js +0 -3
  191. package/disposable/async-disposer.d.ts +0 -35
  192. package/disposable/async-disposer.js +0 -125
  193. package/examples/orm/drizzle.config.js +0 -6
  194. package/examples/orm/schemas.d.ts +0 -3
  195. package/examples/orm/schemas.js +0 -4
  196. package/examples/orm/test.d.ts +0 -1
  197. package/examples/orm/test.js +0 -11
  198. package/examples/orm/user.model.d.ts +0 -13
  199. package/key-value-store/mongo/index.d.ts +0 -6
  200. package/key-value-store/mongo/index.js +0 -6
  201. package/key-value-store/mongo/module.d.ts +0 -8
  202. package/key-value-store/mongo/module.js +0 -18
  203. package/key-value-store/mongo/mongo-key-value-store.provider.d.ts +0 -8
  204. package/key-value-store/mongo/mongo-key-value-store.provider.js +0 -26
  205. package/key-value-store/mongo/mongo-key-value.model.d.ts +0 -7
  206. package/key-value-store/mongo/mongo-key-value.model.js +0 -1
  207. package/key-value-store/mongo/mongo-key-value.repository.d.ts +0 -10
  208. package/key-value-store/mongo/mongo-key-value.repository.js +0 -31
  209. package/key-value-store/mongo/mongo-key-value.store.d.ts +0 -15
  210. package/key-value-store/mongo/mongo-key-value.store.js +0 -82
  211. package/key-value-store/mongo/tokens.d.ts +0 -3
  212. package/key-value-store/mongo/tokens.js +0 -2
  213. package/lock/mongo/index.d.ts +0 -5
  214. package/lock/mongo/index.js +0 -5
  215. package/lock/mongo/lock.d.ts +0 -14
  216. package/lock/mongo/lock.js +0 -125
  217. package/lock/mongo/model.d.ts +0 -6
  218. package/lock/mongo/model.js +0 -1
  219. package/lock/mongo/module.d.ts +0 -12
  220. package/lock/mongo/module.js +0 -20
  221. package/lock/mongo/mongo-lock-repository.d.ts +0 -14
  222. package/lock/mongo/mongo-lock-repository.js +0 -67
  223. package/lock/mongo/provider.d.ts +0 -8
  224. package/lock/mongo/provider.js +0 -36
  225. package/logger/console/index.d.ts +0 -1
  226. package/logger/console/index.js +0 -1
  227. package/logger/console/logger.d.ts +0 -11
  228. package/logger/console/logger.js +0 -64
  229. package/logger/noop/index.d.ts +0 -1
  230. package/logger/noop/index.js +0 -1
  231. package/logger/noop/logger.d.ts +0 -9
  232. package/logger/noop/logger.js +0 -21
  233. package/migration/index.d.ts +0 -9
  234. package/migration/index.js +0 -9
  235. package/migration/migration-state-repository.d.ts +0 -4
  236. package/migration/migration-state-repository.js +0 -3
  237. package/migration/migration-state.d.ts +0 -6
  238. package/migration/migration-state.js +0 -1
  239. package/migration/migrator.d.ts +0 -23
  240. package/migration/migrator.js +0 -76
  241. package/migration/mongo/index.d.ts +0 -2
  242. package/migration/mongo/index.js +0 -2
  243. package/migration/mongo/migration-state-repository.d.ts +0 -11
  244. package/migration/mongo/migration-state-repository.js +0 -32
  245. package/migration/mongo/module.d.ts +0 -12
  246. package/migration/mongo/module.js +0 -17
  247. package/module/module-base.d.ts +0 -18
  248. package/module/module-base.js +0 -40
  249. package/module/module-metric-reporter.d.ts +0 -29
  250. package/module/module-metric-reporter.js +0 -62
  251. package/openid-connect/mongo-oidc-state.repository.d.ts +0 -21
  252. package/openid-connect/mongo-oidc-state.repository.js +0 -52
  253. package/openid-connect/oidc-state.repository.d.ts +0 -4
  254. package/openid-connect/oidc-state.repository.js +0 -3
  255. package/process-shutdown.d.ts +0 -9
  256. package/process-shutdown.js +0 -65
  257. package/queue/mongo/index.d.ts +0 -4
  258. package/queue/mongo/index.js +0 -4
  259. package/queue/mongo/job.d.ts +0 -12
  260. package/queue/mongo/job.js +0 -1
  261. package/queue/mongo/mongo-job.repository.d.ts +0 -13
  262. package/queue/mongo/mongo-job.repository.js +0 -54
  263. package/queue/mongo/queue.d.ts +0 -38
  264. package/queue/mongo/queue.js +0 -266
  265. package/queue/mongo/queue.provider.d.ts +0 -18
  266. package/queue/mongo/queue.provider.js +0 -38
  267. package/search-index/elastic/config.d.ts +0 -8
  268. package/search-index/elastic/config.js +0 -26
  269. package/search-index/elastic/index.d.ts +0 -8
  270. package/search-index/elastic/index.js +0 -8
  271. package/search-index/elastic/keyword-rewriter.d.ts +0 -8
  272. package/search-index/elastic/keyword-rewriter.js +0 -18
  273. package/search-index/elastic/model/elastic-query.d.ts +0 -16
  274. package/search-index/elastic/model/elastic-query.js +0 -1
  275. package/search-index/elastic/model/index-mapping.d.ts +0 -26
  276. package/search-index/elastic/model/index-mapping.js +0 -4
  277. package/search-index/elastic/model/index.d.ts +0 -3
  278. package/search-index/elastic/model/index.js +0 -3
  279. package/search-index/elastic/model/sort.d.ts +0 -8
  280. package/search-index/elastic/model/sort.js +0 -1
  281. package/search-index/elastic/module.d.ts +0 -10
  282. package/search-index/elastic/module.js +0 -49
  283. package/search-index/elastic/query-builder/boolean-query-builder.d.ts +0 -11
  284. package/search-index/elastic/query-builder/boolean-query-builder.js +0 -52
  285. package/search-index/elastic/query-builder/index.d.ts +0 -1
  286. package/search-index/elastic/query-builder/index.js +0 -1
  287. package/search-index/elastic/query-converter.d.ts +0 -9
  288. package/search-index/elastic/query-converter.js +0 -183
  289. package/search-index/elastic/search-index.d.ts +0 -30
  290. package/search-index/elastic/search-index.js +0 -144
  291. package/search-index/elastic/sort-converter.d.ts +0 -4
  292. package/search-index/elastic/sort-converter.js +0 -14
  293. package/search-index/elastic/types.d.ts +0 -5
  294. package/search-index/elastic/types.js +0 -1
  295. package/search-index/error.d.ts +0 -10
  296. package/search-index/error.js +0 -14
  297. package/search-index/index.d.ts +0 -3
  298. package/search-index/index.js +0 -3
  299. package/search-index/memory/index.d.ts +0 -1
  300. package/search-index/memory/index.js +0 -1
  301. package/search-index/memory/memory-search-index.d.ts +0 -19
  302. package/search-index/memory/memory-search-index.js +0 -144
  303. package/search-index/search-index.d.ts +0 -46
  304. package/search-index/search-index.js +0 -31
  305. package/search-index/search-result.d.ts +0 -12
  306. package/search-index/search-result.js +0 -1
  307. package/theme/adapters/css-adapter.d.ts +0 -5
  308. package/theme/adapters/css-adapter.js +0 -29
  309. package/theme/adapters/index.d.ts +0 -2
  310. package/theme/adapters/index.js +0 -2
  311. package/theme/adapters/tailwind-adapter.d.ts +0 -18
  312. package/theme/adapters/tailwind-adapter.js +0 -32
  313. package/theme/index.d.ts +0 -1
  314. package/theme/index.js +0 -1
  315. package/theme/theme-service.d.ts +0 -43
  316. package/theme/theme-service.js +0 -128
  317. /package/{examples/orm → lock/postgres}/drizzle.config.d.ts +0 -0
@@ -36,8 +36,8 @@ LocalMessageBus = __decorate([
36
36
  useFactory: (argument, context) => {
37
37
  const channel = assertStringPass(argument, 'LocalMessageBus resolve argument must be a string (channel)');
38
38
  return context.resolve(LocalMessageBusProvider).get(channel);
39
- }
40
- }
39
+ },
40
+ },
41
41
  }),
42
42
  __metadata("design:paramtypes", [Subject, Logger])
43
43
  ], LocalMessageBus);
@@ -1,7 +1,6 @@
1
1
  import type { Observable } from 'rxjs';
2
- import type { Logger } from '../logger/index.js';
3
2
  import { CancellationToken } from '../cancellation/token.js';
4
- import { disposeAsync } from '../disposable/disposable.js';
3
+ import type { Logger } from '../logger/index.js';
5
4
  import { MessageBus } from './message-bus.js';
6
5
  export declare abstract class MessageBusBase<T> extends MessageBus<T> {
7
6
  private readonly logger;
@@ -16,7 +15,7 @@ export declare abstract class MessageBusBase<T> extends MessageBus<T> {
16
15
  constructor(logger: Logger);
17
16
  publishAndForget(message: T): void;
18
17
  publish(message: T): Promise<void>;
19
- [disposeAsync](): Promise<void>;
18
+ [Symbol.asyncDispose](): Promise<void>;
20
19
  /**
21
20
  * publish messages to other instances
22
21
  * @param message message to send to other instances
@@ -1,7 +1,6 @@
1
1
  import { defer, merge, share, Subject, takeUntil } from 'rxjs';
2
- import { tryIgnoreLogAsync } from '../utils/try-ignore.js';
3
2
  import { CancellationToken } from '../cancellation/token.js';
4
- import { disposeAsync } from '../disposable/disposable.js';
3
+ import { tryIgnoreLogAsync } from '../utils/try-ignore.js';
5
4
  import { MessageBus } from './message-bus.js';
6
5
  export class MessageBusBase extends MessageBus {
7
6
  logger;
@@ -18,21 +17,21 @@ export class MessageBusBase extends MessageBus {
18
17
  this.allMessages$ = merge(this.messages$, this.publishSubject);
19
18
  }
20
19
  publishAndForget(message) {
21
- void tryIgnoreLogAsync(this.logger, async () => this.publish(message));
20
+ void tryIgnoreLogAsync(this.logger, async () => await this.publish(message));
22
21
  }
23
22
  async publish(message) {
24
23
  if (this.disposeToken.isSet) {
25
24
  throw new Error('message-bus is disposed');
26
25
  }
27
26
  this.publishSubject.next(message);
28
- return this._publish(message);
27
+ await this._publish(message);
29
28
  }
30
- async [disposeAsync]() {
29
+ async [Symbol.asyncDispose]() {
31
30
  if (this.disposeToken.isSet) {
32
31
  throw new Error('message-bus is disposed');
33
32
  }
34
33
  this.disposeToken.set();
35
34
  this.publishSubject.complete();
36
- return this._dispose();
35
+ await this._dispose();
37
36
  }
38
37
  }
@@ -1,6 +1,5 @@
1
1
  import type { Observable } from 'rxjs';
2
2
  import { type Resolvable, resolveArgumentType } from '../injector/interfaces.js';
3
- import { type AsyncDisposable, disposeAsync } from '../disposable/disposable.js';
4
3
  export type MessageBusArgument = string;
5
4
  export declare abstract class MessageBus<T> implements AsyncDisposable, Resolvable<MessageBusArgument> {
6
5
  readonly [resolveArgumentType]: string;
@@ -11,5 +10,5 @@ export declare abstract class MessageBus<T> implements AsyncDisposable, Resolvab
11
10
  dispose(): Promise<void>;
12
11
  abstract publish(message: T): Promise<void>;
13
12
  abstract publishAndForget(message: T): void;
14
- abstract [disposeAsync](): Promise<void>;
13
+ abstract [Symbol.asyncDispose](): Promise<void>;
15
14
  }
@@ -1,7 +1,6 @@
1
1
  import { resolveArgumentType } from '../injector/interfaces.js';
2
- import { disposeAsync } from '../disposable/disposable.js';
3
2
  export class MessageBus {
4
3
  async dispose() {
5
- await this[disposeAsync]();
4
+ await this[Symbol.asyncDispose]();
6
5
  }
7
6
  }
package/module/index.d.ts CHANGED
@@ -3,7 +3,5 @@
3
3
  *
4
4
  * @module Module
5
5
  */
6
- export * from './module-base.js';
7
- export * from './module-metric-reporter.js';
8
6
  export * from './module.js';
9
7
  export * from './modules/index.js';
package/module/index.js CHANGED
@@ -3,7 +3,5 @@
3
3
  *
4
4
  * @module Module
5
5
  */
6
- export * from './module-base.js';
7
- export * from './module-metric-reporter.js';
8
6
  export * from './module.js';
9
7
  export * from './modules/index.js';
@@ -1,23 +1,22 @@
1
- import type { StringMap } from '../types/index.js';
2
- export declare enum ModuleMetricType {
3
- Counter = 0,
4
- Gauge = 1
5
- }
6
- export type ModuleMetric = {
7
- type: ModuleMetricType;
8
- labels?: string[];
9
- getValue(): number;
1
+ import type { CancellationSignal } from '../cancellation/index.js';
2
+ import { CancellationToken } from '../cancellation/index.js';
3
+ import { type EnumType } from '../enumeration/enumeration.js';
4
+ export declare const ModuleState: {
5
+ readonly Running: 0;
6
+ readonly Stopping: 1;
7
+ readonly Stopped: 2;
8
+ readonly Erroneous: 3;
10
9
  };
11
- export declare enum ModuleState {
12
- Running = 0,
13
- Stopping = 1,
14
- Stopped = 2,
15
- Erroneous = 3
16
- }
17
- export interface Module {
10
+ export type ModuleState = EnumType<typeof ModuleState>;
11
+ export declare abstract class Module {
12
+ private runPromise;
13
+ private _state;
14
+ protected readonly cancellationToken: CancellationToken;
18
15
  readonly name: string;
19
- readonly state: ModuleState;
20
- readonly metrics: StringMap<ModuleMetric>;
16
+ get state(): ModuleState;
17
+ private get stateString();
18
+ constructor(name: string);
21
19
  run(): Promise<void>;
22
20
  stop(): Promise<void>;
21
+ protected abstract _run(cancellationSignal: CancellationSignal): Promise<void>;
23
22
  }
package/module/module.js CHANGED
@@ -1,12 +1,47 @@
1
- export var ModuleMetricType;
2
- (function (ModuleMetricType) {
3
- ModuleMetricType[ModuleMetricType["Counter"] = 0] = "Counter";
4
- ModuleMetricType[ModuleMetricType["Gauge"] = 1] = "Gauge";
5
- })(ModuleMetricType || (ModuleMetricType = {}));
6
- export var ModuleState;
7
- (function (ModuleState) {
8
- ModuleState[ModuleState["Running"] = 0] = "Running";
9
- ModuleState[ModuleState["Stopping"] = 1] = "Stopping";
10
- ModuleState[ModuleState["Stopped"] = 2] = "Stopped";
11
- ModuleState[ModuleState["Erroneous"] = 3] = "Erroneous";
12
- })(ModuleState || (ModuleState = {}));
1
+ import { CancellationToken } from '../cancellation/index.js';
2
+ import { defineEnum } from '../enumeration/enumeration.js';
3
+ import { enumValueName } from '../utils/enum.js';
4
+ export const ModuleState = defineEnum('ModuleState', {
5
+ Running: 0,
6
+ Stopping: 1,
7
+ Stopped: 2,
8
+ Erroneous: 3,
9
+ });
10
+ export class Module {
11
+ runPromise;
12
+ _state;
13
+ cancellationToken;
14
+ name;
15
+ get state() {
16
+ return this._state;
17
+ }
18
+ get stateString() {
19
+ return enumValueName(ModuleState, this.state).toLowerCase();
20
+ }
21
+ constructor(name) {
22
+ this.name = name;
23
+ this.runPromise = Promise.resolve();
24
+ this._state = ModuleState.Stopped;
25
+ this.cancellationToken = new CancellationToken();
26
+ }
27
+ async run() {
28
+ if (this._state != ModuleState.Stopped) {
29
+ throw new Error(`cannot start module, it is ${this.stateString}`);
30
+ }
31
+ this.cancellationToken.unset();
32
+ try {
33
+ this._state = ModuleState.Running;
34
+ this.runPromise = this._run(this.cancellationToken);
35
+ await this.runPromise;
36
+ this._state = ModuleState.Stopped;
37
+ }
38
+ catch (error) {
39
+ this._state = ModuleState.Erroneous;
40
+ throw error;
41
+ }
42
+ }
43
+ async stop() {
44
+ this.cancellationToken.set();
45
+ await this.runPromise.catch(() => { });
46
+ }
47
+ }
@@ -1,10 +1,10 @@
1
1
  import type { CancellationSignal } from '../../cancellation/index.js';
2
- import { ModuleBase } from '../module-base.js';
3
- import type { Module } from '../module.js';
2
+ import type { Resolvable, resolveArgumentType } from '../../injector/interfaces.js';
3
+ import { Module } from '../module.js';
4
4
  export type FunctionModuleFunction = (cancellationToken: CancellationSignal) => void | Promise<void>;
5
- export declare class FunctionModule extends ModuleBase implements Module {
6
- private readonly fn;
7
- readonly metrics: {};
8
- constructor(fn: FunctionModuleFunction, name?: string);
5
+ export declare class FunctionModule extends Module implements Resolvable<FunctionModuleFunction> {
6
+ #private;
7
+ readonly [resolveArgumentType]: FunctionModuleFunction;
8
+ constructor();
9
9
  protected _run(cancellationSignal: CancellationSignal): Promise<void>;
10
10
  }
@@ -1,12 +1,28 @@
1
- import { ModuleBase } from '../module-base.js';
2
- export class FunctionModule extends ModuleBase {
3
- fn;
4
- metrics = {};
5
- constructor(fn, name = fn.name) {
6
- super(name);
7
- this.fn = fn;
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { Singleton } from '../../injector/decorators.js';
11
+ import { injectArgument } from '../../injector/inject.js';
12
+ import { Module } from '../module.js';
13
+ let FunctionModule = class FunctionModule extends Module {
14
+ #fn;
15
+ constructor() {
16
+ const fn = injectArgument(null);
17
+ super(fn.name);
18
+ this.#fn = fn;
8
19
  }
9
20
  async _run(cancellationSignal) {
10
- await this.fn(cancellationSignal);
21
+ await this.#fn(cancellationSignal);
11
22
  }
12
- }
23
+ };
24
+ FunctionModule = __decorate([
25
+ Singleton(),
26
+ __metadata("design:paramtypes", [])
27
+ ], FunctionModule);
28
+ export { FunctionModule };
@@ -1,24 +1,16 @@
1
1
  import type { CancellationSignal } from '../../cancellation/index.js';
2
2
  import type { Resolvable, resolveArgumentType } from '../../injector/interfaces.js';
3
- import { ModuleBase } from '../module-base.js';
4
- import type { Module } from '../module.js';
5
- import { ModuleMetricType } from '../module.js';
3
+ import { Module } from '../module.js';
6
4
  export type WebServerModuleConfiguration = {
7
5
  port: number;
8
6
  };
9
7
  export declare const webServerModuleConfiguration: WebServerModuleConfiguration;
10
- export declare class WebServerModule extends ModuleBase implements Module, Resolvable<WebServerModuleConfiguration> {
8
+ export declare class WebServerModule extends Module implements Resolvable<WebServerModuleConfiguration> {
11
9
  private readonly config;
12
10
  private readonly httpServer;
13
11
  private readonly apiGateway;
14
12
  private readonly apiControllers;
15
13
  private initialized;
16
- readonly metrics: {
17
- connectedSockets: {
18
- type: ModuleMetricType;
19
- getValue: () => number;
20
- };
21
- };
22
14
  readonly [resolveArgumentType]: WebServerModuleConfiguration;
23
15
  constructor();
24
16
  initialize(): void;
@@ -8,27 +8,19 @@ var __metadata = (this && this.__metadata) || function (k, v) {
8
8
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
9
  };
10
10
  import { API_CONTROLLERS, ApiGateway, getApiControllerDefinition } from '../../api/server/index.js';
11
- import { disposeAsync } from '../../disposable/disposable.js';
12
11
  import { HttpServer } from '../../http/server/http-server.js';
13
12
  import { Singleton } from '../../injector/decorators.js';
14
13
  import { inject, injectArgument } from '../../injector/inject.js';
15
- import { ModuleBase } from '../module-base.js';
16
- import { ModuleMetricType } from '../module.js';
14
+ import { Module } from '../module.js';
17
15
  export const webServerModuleConfiguration = {
18
16
  port: 8000,
19
17
  };
20
- let WebServerModule = class WebServerModule extends ModuleBase {
18
+ let WebServerModule = class WebServerModule extends Module {
21
19
  config = injectArgument(this);
22
20
  httpServer = inject(HttpServer);
23
21
  apiGateway = inject(ApiGateway);
24
22
  apiControllers = inject(API_CONTROLLERS);
25
23
  initialized = false;
26
- metrics = {
27
- connectedSockets: {
28
- type: ModuleMetricType.Gauge,
29
- getValue: () => this.httpServer.connectedSocketsCount,
30
- },
31
- };
32
24
  constructor() {
33
25
  super('WebServer');
34
26
  }
@@ -45,7 +37,7 @@ let WebServerModule = class WebServerModule extends ModuleBase {
45
37
  this.initialize();
46
38
  await this.httpServer.listen(this.config.port);
47
39
  const closePromise = cancellationSignal.$set.then(async () => {
48
- await this.httpServer[disposeAsync]();
40
+ await this.httpServer[Symbol.asyncDispose]();
49
41
  });
50
42
  for await (const context of this.httpServer) {
51
43
  void this.apiGateway.handleHttpServerRequestContext(context);
@@ -4,9 +4,7 @@
4
4
  * @module OpenID Connect
5
5
  */
6
6
  export * from './cached-oidc-configuration.service.js';
7
- export * from './mongo-oidc-state.repository.js';
8
7
  export * from './oidc-configuration.service.js';
9
8
  export * from './oidc-state.model.js';
10
- export * from './oidc-state.repository.js';
11
9
  export * from './oidc.service-model.js';
12
10
  export * from './oidc.service.js';
@@ -7,10 +7,8 @@ import { Injector } from '../injector/injector.js';
7
7
  import { CachedOidcConfigurationService } from './cached-oidc-configuration.service.js';
8
8
  import { OidcConfigurationService } from './oidc-configuration.service.js';
9
9
  export * from './cached-oidc-configuration.service.js';
10
- export * from './mongo-oidc-state.repository.js';
11
10
  export * from './oidc-configuration.service.js';
12
11
  export * from './oidc-state.model.js';
13
- export * from './oidc-state.repository.js';
14
12
  export * from './oidc.service-model.js';
15
13
  export * from './oidc.service.js';
16
14
  Injector.registerSingleton(OidcConfigurationService, { useToken: CachedOidcConfigurationService });
@@ -1,11 +1,10 @@
1
- import type { Entity, NewEntity } from '../database/index.js';
2
- export type OidcState<Data = any> = Entity & {
1
+ import { EntityWithoutMetadata, Json } from '../orm/index.js';
2
+ export declare class OidcState<Data> extends EntityWithoutMetadata {
3
3
  value: string;
4
4
  codeVerifier: string;
5
5
  endpoint: string;
6
6
  clientId: string;
7
7
  clientSecret: string;
8
8
  expiration: number;
9
- data: Data;
10
- };
11
- export type NewOidcState<Data = any> = NewEntity<OidcState<Data>>;
9
+ data: Json<Data>;
10
+ }
@@ -1 +1,51 @@
1
- export {};
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { ExpiresAt as Expires } from '../orm/decorators.js';
11
+ import { EntityWithoutMetadata, Json, Unique } from '../orm/index.js';
12
+ import { any, NumberProperty, StringProperty } from '../schema/index.js';
13
+ export class OidcState extends EntityWithoutMetadata {
14
+ value;
15
+ codeVerifier;
16
+ endpoint;
17
+ clientId;
18
+ clientSecret;
19
+ expiration;
20
+ data;
21
+ }
22
+ __decorate([
23
+ Unique(),
24
+ StringProperty(),
25
+ __metadata("design:type", String)
26
+ ], OidcState.prototype, "value", void 0);
27
+ __decorate([
28
+ StringProperty(),
29
+ __metadata("design:type", String)
30
+ ], OidcState.prototype, "codeVerifier", void 0);
31
+ __decorate([
32
+ StringProperty(),
33
+ __metadata("design:type", String)
34
+ ], OidcState.prototype, "endpoint", void 0);
35
+ __decorate([
36
+ StringProperty(),
37
+ __metadata("design:type", String)
38
+ ], OidcState.prototype, "clientId", void 0);
39
+ __decorate([
40
+ StringProperty(),
41
+ __metadata("design:type", String)
42
+ ], OidcState.prototype, "clientSecret", void 0);
43
+ __decorate([
44
+ Expires(),
45
+ NumberProperty(),
46
+ __metadata("design:type", Number)
47
+ ], OidcState.prototype, "expiration", void 0);
48
+ __decorate([
49
+ Json({ schema: any() }),
50
+ __metadata("design:type", Object)
51
+ ], OidcState.prototype, "data", void 0);
@@ -1,4 +1,4 @@
1
- export type OidcInitParameters<Data = void> = {
1
+ export type OidcInitParameters<Data> = {
2
2
  endpoint: string;
3
3
  clientId: string;
4
4
  clientSecret: string;
@@ -1,15 +1,11 @@
1
- import { HttpClient } from '../http/client/index.js';
2
1
  import type { Record } from '../types/index.js';
3
- import { OidcConfigurationService } from './oidc-configuration.service.js';
4
- import type { OidcState } from './oidc-state.model.js';
5
- import { OidcStateRepository } from './oidc-state.repository.js';
2
+ import { OidcState } from './oidc-state.model.js';
6
3
  import type { OidcGetTokenParameters, OidcInitParameters, OidcInitResult, OidcRefreshTokenParameters, OidcToken } from './oidc.service-model.js';
7
- export declare class OidcService<Data = any> {
4
+ export declare class OidcService<Data> {
8
5
  private readonly oidcConfigurationService;
9
6
  private readonly maybeOidcStateRepository;
10
7
  private readonly httpClient;
11
8
  private get oidcStateRepository();
12
- constructor(oidcConfigurationService: OidcConfigurationService, oidcStateRepository: OidcStateRepository | undefined, httpClient: HttpClient);
13
9
  initAuthorization({ endpoint, clientId, clientSecret, scope, expiration, data }: OidcInitParameters<Data>): Promise<OidcInitResult>;
14
10
  getState(state: string): Promise<OidcState<Data>>;
15
11
  deleteState(state: string): Promise<void>;
@@ -4,57 +4,46 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- var __metadata = (this && this.__metadata) || function (k, v) {
8
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
- };
10
- var __param = (this && this.__param) || function (paramIndex, decorator) {
11
- return function (target, key) { decorator(target, key, paramIndex); }
12
- };
13
7
  import { ForbiddenError } from '../errors/forbidden.error.js';
14
8
  import { NotImplementedError } from '../errors/not-implemented.error.js';
15
9
  import { HttpClient } from '../http/client/index.js';
16
10
  import { HttpHeaders } from '../http/http-headers.js';
17
- import { Inject, Optional, Singleton } from '../injector/index.js';
18
- import { Schema, object, optional, string } from '../schema/index.js';
11
+ import { inject, Singleton } from '../injector/index.js';
12
+ import { injectRepository } from '../orm/server/repository.js';
13
+ import { object, optional, Schema, string } from '../schema/index.js';
19
14
  import { Alphabet } from '../utils/alphabet.js';
20
15
  import { digest } from '../utils/cryptography.js';
21
16
  import { currentTimestamp } from '../utils/date-time.js';
22
17
  import { getRandomString } from '../utils/random.js';
23
18
  import { assertDefinedPass, isUndefined } from '../utils/type-guards.js';
24
19
  import { OidcConfigurationService } from './oidc-configuration.service.js';
25
- import { OidcStateRepository } from './oidc-state.repository.js';
20
+ import { OidcState } from './oidc-state.model.js';
26
21
  const tokenResponseSchema = object({
27
22
  /* eslint-disable @typescript-eslint/naming-convention */
28
23
  access_token: string(),
29
24
  id_token: optional(string()),
30
25
  token_type: string(),
31
- refresh_token: optional(string())
26
+ refresh_token: optional(string()),
32
27
  /* eslint-enable @typescript-eslint/naming-convention */
33
28
  });
34
29
  let OidcService = class OidcService {
35
- oidcConfigurationService;
36
- maybeOidcStateRepository;
37
- httpClient;
30
+ oidcConfigurationService = inject(OidcConfigurationService);
31
+ maybeOidcStateRepository = injectRepository(OidcState);
32
+ httpClient = inject(HttpClient);
38
33
  get oidcStateRepository() {
39
34
  return assertDefinedPass(this.maybeOidcStateRepository, 'OidcStateRepository is not provided but required.');
40
35
  }
41
- constructor(oidcConfigurationService, oidcStateRepository, httpClient) {
42
- this.oidcConfigurationService = oidcConfigurationService;
43
- this.maybeOidcStateRepository = oidcStateRepository;
44
- this.httpClient = httpClient;
45
- }
46
36
  async initAuthorization({ endpoint, clientId, clientSecret, scope, expiration, data }) {
47
37
  const oidcConfiguration = await this.oidcConfigurationService.getConfiguration(endpoint);
48
- const state = {
38
+ const state = await this.oidcStateRepository.insert({
49
39
  value: getRandomString(64, Alphabet.LowerUpperCaseNumbers),
50
40
  codeVerifier: getRandomString(64, Alphabet.LowerUpperCaseNumbers),
51
41
  endpoint,
52
42
  clientId,
53
43
  clientSecret,
54
44
  expiration: currentTimestamp() + expiration,
55
- data
56
- };
57
- await this.oidcStateRepository.insert(state);
45
+ data,
46
+ });
58
47
  const codeChallenge = await digest('SHA-256', state.codeVerifier).toBase64Url();
59
48
  const result = {
60
49
  authorizationEndpoint: oidcConfiguration.authorizationEndpoint,
@@ -62,21 +51,22 @@ let OidcService = class OidcService {
62
51
  clientId,
63
52
  scope,
64
53
  codeChallenge,
65
- codeChallengeMethod: 'S256'
54
+ codeChallengeMethod: 'S256',
66
55
  };
67
56
  return result;
68
57
  }
69
58
  async getState(state) {
70
- return this.oidcStateRepository.loadByFilter({ value: state });
59
+ return await this.oidcStateRepository.loadByQuery({ value: state });
71
60
  }
72
61
  async deleteState(state) {
73
- await this.oidcStateRepository.deleteByFilter({ value: state });
62
+ await this.oidcStateRepository.deleteByQuery({ value: state });
74
63
  }
75
64
  async validateState(state) {
76
- const oidcState = await this.oidcStateRepository.tryLoadByFilterAndDelete({ value: state });
65
+ const oidcState = await this.oidcStateRepository.tryLoadByQuery({ value: state });
77
66
  if (isUndefined(oidcState)) {
78
- throw new ForbiddenError('invalid state code');
67
+ throw new ForbiddenError('Invalid state code.');
79
68
  }
69
+ await this.oidcStateRepository.deleteByQuery({ value: state });
80
70
  return oidcState;
81
71
  }
82
72
  async getToken(parameters, additionalData) {
@@ -96,7 +86,7 @@ let OidcService = class OidcService {
96
86
  code: parameters.code,
97
87
  code_verifier: parameters.codeVerifier,
98
88
  redirect_uri: parameters.redirectUri,
99
- ...additionalData
89
+ ...additionalData,
100
90
  /* eslint-enable @typescript-eslint/naming-convention */
101
91
  };
102
92
  break;
@@ -105,7 +95,7 @@ let OidcService = class OidcService {
105
95
  /* eslint-disable @typescript-eslint/naming-convention */
106
96
  grant_type: 'client_credentials',
107
97
  scope: parameters.scope,
108
- ...additionalData
98
+ ...additionalData,
109
99
  /* eslint-enable @typescript-eslint/naming-convention */
110
100
  };
111
101
  break;
@@ -122,8 +112,8 @@ let OidcService = class OidcService {
122
112
  authorization = {
123
113
  basic: {
124
114
  username: parameters.clientId,
125
- password: parameters.clientSecret
126
- }
115
+ password: parameters.clientSecret,
116
+ },
127
117
  };
128
118
  break;
129
119
  default:
@@ -139,7 +129,7 @@ let OidcService = class OidcService {
139
129
  client_id: clientId,
140
130
  client_secret: clientSecret,
141
131
  grant_type: 'refresh_token',
142
- refresh_token: refreshToken
132
+ refresh_token: refreshToken,
143
133
  /* eslint-enable @typescript-eslint/naming-convention */
144
134
  };
145
135
  const tokenResponse = await this.httpClient.postJson(oidcConfiguration.tokenEndpoint, { headers: { authorization: `Bearer ${refreshToken}` }, body: { form: formData } });
@@ -155,10 +145,7 @@ let OidcService = class OidcService {
155
145
  }
156
146
  };
157
147
  OidcService = __decorate([
158
- Singleton(),
159
- __param(1, Inject(OidcStateRepository)),
160
- __param(1, Optional()),
161
- __metadata("design:paramtypes", [OidcConfigurationService, Object, HttpClient])
148
+ Singleton()
162
149
  ], OidcService);
163
150
  export { OidcService };
164
151
  function parseTokenResponse(response) {
@@ -168,7 +155,7 @@ function parseTokenResponse(response) {
168
155
  accessToken: access_token,
169
156
  idToken: id_token,
170
157
  refreshToken: refresh_token,
171
- raw: response
158
+ raw: response,
172
159
  };
173
160
  return token;
174
161
  }
@@ -57,6 +57,9 @@ export type OrmColumnReflectionData = {
57
57
  targetColumn?: TargetColumnPaths<any>;
58
58
  }[];
59
59
  encrypted?: boolean;
60
+ expirationField?: {
61
+ mode: 'soft' | 'hard';
62
+ };
60
63
  };
61
64
  /**
62
65
  * Reflection data for unique constraints.
@@ -121,7 +124,7 @@ export declare function createColumnDecorator(data?: OrmColumnReflectionData): P
121
124
  * @param data - The ORM reflection data to add.
122
125
  * @returns A class or property decorator.
123
126
  */
124
- export declare function createTableAndColumnDecorator(data?: OrmColumnReflectionData): ClassDecorator & PropertyDecorator;
127
+ export declare function createTableAndColumnDecorator(data?: OrmColumnReflectionData): PropertyDecorator & ClassDecorator;
125
128
  /**
126
129
  * Decorator to specify ORM column options.
127
130
  * @param options - Column configuration options.
@@ -217,4 +220,10 @@ export declare function Index<T extends Entity | EntityWithoutMetadata = any>(op
217
220
  * @returns A class decorator.
218
221
  */
219
222
  export declare function Index<T extends Entity | EntityWithoutMetadata = any>(columns: Columns<T>, options?: IndexReflectionData<T>['options']): ClassDecorator;
223
+ /**
224
+ * Decorator to mark a column as an expiration field. This will be used to automatically delete records when expired.
225
+ * @param mode - Whether to delete soft or hard.
226
+ * @returns A property decorator.
227
+ */
228
+ export declare function ExpiresAt(mode?: 'soft' | 'hard'): PropertyDecorator;
220
229
  export {};