@privateaim/server-kit 0.8.13 → 0.8.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,27 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.8.14](https://github.com/PrivateAIM/hub/compare/v0.8.13...v0.8.14) (2025-07-10)
4
+
5
+
6
+ ### Features
7
+
8
+ * enable custom url for loki compactor & querier ([2c0d7da](https://github.com/PrivateAIM/hub/commit/2c0d7dab59e18a3ba4bbe645366e9576d00fe845))
9
+ * submit & receive logs with loki ([#1100](https://github.com/PrivateAIM/hub/issues/1100)) ([83698d4](https://github.com/PrivateAIM/hub/commit/83698d43549cc3a34410bd01910288ba1b263201))
10
+
11
+
12
+ ### Bug Fixes
13
+
14
+ * **deps:** bump the minorandpatch group across 1 directory with 19 updates ([#1099](https://github.com/PrivateAIM/hub/issues/1099)) ([30b0ab6](https://github.com/PrivateAIM/hub/commit/30b0ab6b748b287380eb84ac0c8aae4ee22e0be7))
15
+ * **deps:** bump the minorandpatch group across 1 directory with 24 updates ([#1084](https://github.com/PrivateAIM/hub/issues/1084)) ([92a3f43](https://github.com/PrivateAIM/hub/commit/92a3f43eb47795a7fff756939a036f2e771bd3cd))
16
+ * **deps:** bump the minorandpatch group across 1 directory with 8 updates ([#1105](https://github.com/PrivateAIM/hub/issues/1105)) ([c4f9255](https://github.com/PrivateAIM/hub/commit/c4f9255832f6473ea1d3fc1793ff9ec2aefacf4c))
17
+
18
+
19
+ ### Dependencies
20
+
21
+ * The following workspace dependencies were updated
22
+ * dependencies
23
+ * @privateaim/kit bumped from ^0.8.13 to ^0.8.14
24
+
3
25
  ## [0.8.13](https://github.com/PrivateAIM/hub/compare/v0.8.12...v0.8.13) (2025-05-05)
4
26
 
5
27
 
package/dist/index.cjs CHANGED
@@ -12,6 +12,7 @@ var path = require('node:path');
12
12
  var typeormExtension = require('typeorm-extension');
13
13
  var winston = require('winston');
14
14
  var redisEmitter = require('@socket.io/redis-emitter');
15
+ var loki = require('@hapic/loki');
15
16
 
16
17
  /*
17
18
  * Copyright (c) 2023-2024.
@@ -83,30 +84,30 @@ function isQueueRouterPayload(input) {
83
84
  return kit.isObject(input) && typeof input.id === 'string' && typeof input.type === 'string' && kit.hasOwnProperty(input, 'data') && kit.isObject(input.data) && kit.hasOwnProperty(input, 'metadata') && kit.isObject(input.metadata);
84
85
  }
85
86
 
86
- const instance$a = singa.singa({
87
+ const instance$b = singa.singa({
87
88
  name: 'amqp'
88
89
  });
89
90
  function setAmqpClientFactory(factory) {
90
- instance$a.setFactory(factory);
91
+ instance$b.setFactory(factory);
91
92
  }
92
93
  function isAmqpClientUsable() {
93
- return instance$a.has() || instance$a.hasFactory();
94
+ return instance$b.has() || instance$b.hasFactory();
94
95
  }
95
96
  function useAmqpClient() {
96
- return instance$a.use();
97
+ return instance$b.use();
97
98
  }
98
99
 
99
- const instance$9 = singa.singa({
100
+ const instance$a = singa.singa({
100
101
  name: 'vault'
101
102
  });
102
103
  function setVaultFactory(factory) {
103
- instance$9.setFactory(factory);
104
+ instance$a.setFactory(factory);
104
105
  }
105
106
  function isVaultClientUsable() {
106
- return instance$9.has() || instance$9.hasFactory();
107
+ return instance$a.has() || instance$a.hasFactory();
107
108
  }
108
109
  function useVaultClient() {
109
- return instance$9.use();
110
+ return instance$a.use();
110
111
  }
111
112
 
112
113
  function guessAuthupTokenCreatorOptions() {
@@ -127,17 +128,17 @@ function guessAuthupTokenCreatorOptions() {
127
128
  return options;
128
129
  }
129
130
 
130
- const instance$8 = singa.singa({
131
+ const instance$9 = singa.singa({
131
132
  name: 'clientAuthenticationHook'
132
133
  });
133
134
  function setClientAuthenticationHookFactory(factory) {
134
- instance$8.setFactory(factory);
135
+ instance$9.setFactory(factory);
135
136
  }
136
137
  function isClientAuthenticationHookUsable() {
137
- return instance$8.has() || instance$8.hasFactory();
138
+ return instance$9.has() || instance$9.hasFactory();
138
139
  }
139
140
  function useClientAuthenticationHook() {
140
- return instance$8.use();
141
+ return instance$9.use();
141
142
  }
142
143
 
143
144
  class AuthupClient extends coreHttpKit.Client {
@@ -154,49 +155,49 @@ class AuthupClient extends coreHttpKit.Client {
154
155
  }
155
156
  }
156
157
 
157
- const instance$7 = singa.singa({
158
+ const instance$8 = singa.singa({
158
159
  name: 'authup'
159
160
  });
160
161
  function useAuthupClient() {
161
- return instance$7.use();
162
+ return instance$8.use();
162
163
  }
163
164
  function isAuthupClientUsable() {
164
- return instance$7.has() || instance$7.hasFactory();
165
+ return instance$8.has() || instance$8.hasFactory();
165
166
  }
166
167
  function setAuthupClientFactory(factory) {
167
- instance$7.setFactory(factory);
168
+ instance$8.setFactory(factory);
168
169
  }
169
170
 
170
- const instance$6 = singa.singa({
171
+ const instance$7 = singa.singa({
171
172
  name: 'redis'
172
173
  });
173
174
  function setRedisFactory(factory) {
174
- instance$6.setFactory(factory);
175
+ instance$7.setFactory(factory);
175
176
  }
176
177
  function isRedisClientUsable() {
177
- return instance$6.has() || instance$6.hasFactory();
178
+ return instance$7.has() || instance$7.hasFactory();
178
179
  }
179
180
  function setRedisClient(input) {
180
- instance$6.set(input);
181
+ instance$7.set(input);
181
182
  }
182
183
  function useRedisClient() {
183
- return instance$6.use();
184
+ return instance$7.use();
184
185
  }
185
186
 
186
- const instance$5 = singa.singa({
187
+ const instance$6 = singa.singa({
187
188
  name: 'redisPublish',
188
189
  factory: ()=>useRedisClient().duplicate()
189
190
  });
190
191
  function useRedisPublishClient() {
191
- return instance$5.use();
192
+ return instance$6.use();
192
193
  }
193
194
 
194
- const instance$4 = singa.singa({
195
+ const instance$5 = singa.singa({
195
196
  name: 'redisSubscribe',
196
197
  factory: ()=>useRedisClient().duplicate()
197
198
  });
198
199
  function useRedisSubscribeClient() {
199
- return instance$4.use();
200
+ return instance$5.use();
200
201
  }
201
202
 
202
203
  /*
@@ -376,7 +377,7 @@ class Cache {
376
377
  }
377
378
  }
378
379
 
379
- const instance$3 = singa.singa({
380
+ const instance$4 = singa.singa({
380
381
  name: 'cache',
381
382
  factory: ()=>{
382
383
  let adapter;
@@ -389,7 +390,7 @@ const instance$3 = singa.singa({
389
390
  }
390
391
  });
391
392
  function useCache() {
392
- return instance$3.use();
393
+ return instance$4.use();
393
394
  }
394
395
 
395
396
  function createLogger(ctx = {}) {
@@ -431,20 +432,20 @@ function createLogger(ctx = {}) {
431
432
  });
432
433
  }
433
434
 
434
- const instance$2 = singa.singa({
435
+ const instance$3 = singa.singa({
435
436
  name: 'logger'
436
437
  });
437
438
  function setLoggerFactory(factory) {
438
- instance$2.setFactory(factory);
439
+ instance$3.setFactory(factory);
439
440
  }
440
441
  function isLoggerUsable() {
441
- return instance$2.has() || instance$2.hasFactory();
442
+ return instance$3.has() || instance$3.hasFactory();
442
443
  }
443
444
  function setLogger(input) {
444
- instance$2.set(input);
445
+ instance$3.set(input);
445
446
  }
446
447
  function useLogger() {
447
- return instance$2.use();
448
+ return instance$3.use();
448
449
  }
449
450
 
450
451
  /*
@@ -609,7 +610,7 @@ class DomainEventSocketPublisher {
609
610
  }
610
611
  }
611
612
 
612
- const instance$1 = singa.singa({
613
+ const instance$2 = singa.singa({
613
614
  name: 'domainEventPublisher',
614
615
  factory: ()=>{
615
616
  const publisher = new DomainEventPublisher();
@@ -622,6 +623,19 @@ const instance$1 = singa.singa({
622
623
  }
623
624
  });
624
625
  function useDomainEventPublisher() {
626
+ return instance$2.use();
627
+ }
628
+
629
+ const instance$1 = singa.singa({
630
+ name: 'loki'
631
+ });
632
+ function setLokiFactory(factory) {
633
+ instance$1.setFactory(factory);
634
+ }
635
+ function isLokiClientUsable() {
636
+ return instance$1.has() || instance$1.hasFactory();
637
+ }
638
+ function useLokiClient() {
625
639
  return instance$1.use();
626
640
  }
627
641
 
@@ -769,6 +783,42 @@ Object.defineProperty(exports, "createRedisClient", {
769
783
  enumerable: true,
770
784
  get: function () { return redisExtension.createClient; }
771
785
  });
786
+ Object.defineProperty(exports, "LokiClient", {
787
+ enumerable: true,
788
+ get: function () { return loki.LokiClient; }
789
+ });
790
+ Object.defineProperty(exports, "LokiCompactorDeletionRequestCreate", {
791
+ enumerable: true,
792
+ get: function () { return loki.CompactorDeletionRequestCreate; }
793
+ });
794
+ Object.defineProperty(exports, "LokiConfig", {
795
+ enumerable: true,
796
+ get: function () { return loki.Config; }
797
+ });
798
+ Object.defineProperty(exports, "LokiConfigInput", {
799
+ enumerable: true,
800
+ get: function () { return loki.ConfigInput; }
801
+ });
802
+ Object.defineProperty(exports, "LokiDistributorPushStream", {
803
+ enumerable: true,
804
+ get: function () { return loki.DistributorPushStream; }
805
+ });
806
+ Object.defineProperty(exports, "LokiQuerierQueryRangeOptions", {
807
+ enumerable: true,
808
+ get: function () { return loki.QuerierQueryRangeOptions; }
809
+ });
810
+ Object.defineProperty(exports, "LokiQuerierQueryResult", {
811
+ enumerable: true,
812
+ get: function () { return loki.QuerierQueryResult; }
813
+ });
814
+ Object.defineProperty(exports, "createLokiClient", {
815
+ enumerable: true,
816
+ get: function () { return loki.createClient; }
817
+ });
818
+ Object.defineProperty(exports, "nanoSeconds", {
819
+ enumerable: true,
820
+ get: function () { return loki.nanoSeconds; }
821
+ });
772
822
  exports.AuthupClient = AuthupClient;
773
823
  exports.Cache = Cache;
774
824
  exports.ComponentError = ComponentError;
@@ -790,6 +840,7 @@ exports.isAuthupClientUsable = isAuthupClientUsable;
790
840
  exports.isClientAuthenticationHookUsable = isClientAuthenticationHookUsable;
791
841
  exports.isComponentError = isComponentError;
792
842
  exports.isLoggerUsable = isLoggerUsable;
843
+ exports.isLokiClientUsable = isLokiClientUsable;
793
844
  exports.isQueuePayload = isQueuePayload;
794
845
  exports.isQueueRouterPayload = isQueueRouterPayload;
795
846
  exports.isQueueRouterUsable = isQueueRouterUsable;
@@ -800,6 +851,7 @@ exports.setAuthupClientFactory = setAuthupClientFactory;
800
851
  exports.setClientAuthenticationHookFactory = setClientAuthenticationHookFactory;
801
852
  exports.setLogger = setLogger;
802
853
  exports.setLoggerFactory = setLoggerFactory;
854
+ exports.setLokiFactory = setLokiFactory;
803
855
  exports.setRedisClient = setRedisClient;
804
856
  exports.setRedisFactory = setRedisFactory;
805
857
  exports.setVaultFactory = setVaultFactory;
@@ -809,6 +861,7 @@ exports.useCache = useCache;
809
861
  exports.useClientAuthenticationHook = useClientAuthenticationHook;
810
862
  exports.useDomainEventPublisher = useDomainEventPublisher;
811
863
  exports.useLogger = useLogger;
864
+ exports.useLokiClient = useLokiClient;
812
865
  exports.useQueueRouter = useQueueRouter;
813
866
  exports.useRedisClient = useRedisClient;
814
867
  exports.useRedisPublishClient = useRedisPublishClient;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/core/component/error.ts","../src/core/component/helper.ts","../src/core/queue/utils.ts","../src/core/queue-router/constants.ts","../src/core/queue-router/helpers.ts","../src/services/amqp/module.ts","../src/services/vault/singleton.ts","../src/services/authup/helpers.ts","../src/services/authup-client-authentication-hook/singleton.ts","../src/services/authup/module.ts","../src/services/authup/singleton.ts","../src/services/redis/singleton.ts","../src/services/redis/singleton-publish.ts","../src/services/redis/singleton-subscribe.ts","../src/services/cache/adapters/memory.ts","../src/services/cache/adapters/redis.ts","../src/services/cache/adapters/factory.ts","../src/services/cache/helper.ts","../src/services/cache/module.ts","../src/services/cache/singleton.ts","../src/services/logger/module.ts","../src/services/logger/singleton.ts","../src/services/domain-event/module.ts","../src/services/domain-event/utils.ts","../src/services/domain-event/redis/module.ts","../src/services/domain-event/socket/module.ts","../src/services/domain-event/singleton.ts","../src/core/queue-router/module.ts","../src/core/queue-router/singleton.ts","../src/utils/has-property.ts"],"sourcesContent":["/*\n * Copyright (c) 2023-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { ComponentErrorOptions } from './type';\n\nexport class ComponentError extends Error {\n public code?: string | null;\n\n constructor(input: ComponentErrorOptions) {\n super(input.message, { cause: input.cause });\n\n this.code = input.code;\n }\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from '@privateaim/kit';\nimport type { ComponentError } from './error';\n\nexport function isComponentError(input: unknown) : input is ComponentError {\n if (!isObject(input)) {\n return false;\n }\n\n if (\n typeof input.message !== 'undefined' &&\n typeof input.message !== 'string'\n ) {\n return false;\n }\n\n if (typeof input.code === 'undefined') {\n return true;\n }\n\n return typeof input.code === 'string' || input.code === null;\n}\n","/*\n * Copyright (c) 2023-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { hasOwnProperty, isObject } from '@privateaim/kit';\nimport type { QueuePayload } from './type';\n\nexport function isQueuePayload(input: unknown) : input is QueuePayload {\n return isObject(input) &&\n hasOwnProperty(input, 'data') &&\n isObject(input.data) &&\n hasOwnProperty(input, 'metadata') &&\n isObject(input.metadata);\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum QueueRouterRoutingType {\n WORK = 'work',\n PUB_SUB = 'pubSub',\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { createNanoID, hasOwnProperty, isObject } from '@privateaim/kit';\nimport type { QueueRouterPayload, QueueRouterPayloadInput } from './types';\n\nexport function buildQueueRouterPublishPayload(\n input: QueueRouterPayloadInput,\n) : QueueRouterPayload {\n return {\n id: input.id || createNanoID(),\n type: input.type,\n data: input.data || {},\n metadata: {\n timestamp: Date.now(),\n ...input.metadata,\n },\n };\n}\n\nexport function isQueueRouterPayload(input: unknown) : input is QueueRouterPayload {\n return isObject(input) &&\n typeof input.id === 'string' &&\n typeof input.type === 'string' &&\n hasOwnProperty(input, 'data') &&\n isObject(input.data) &&\n hasOwnProperty(input, 'metadata') &&\n isObject(input.metadata);\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Client } from 'amqp-extension';\nimport type { Factory } from 'singa';\nimport { singa } from 'singa';\n\nconst instance = singa<Client>({\n name: 'amqp',\n});\n\nexport function setAmqpClientFactory(factory: Factory<Client>) {\n instance.setFactory(factory);\n}\n\nexport function isAmqpClientUsable() {\n return instance.has() || instance.hasFactory();\n}\n\nexport function useAmqpClient() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Factory } from 'singa';\nimport { singa } from 'singa';\nimport type { VaultClient } from '@hapic/vault';\n\nconst instance = singa<VaultClient>({\n name: 'vault',\n});\n\nexport function setVaultFactory(factory: Factory<VaultClient>) {\n instance.setFactory(factory);\n}\n\nexport function isVaultClientUsable() {\n return instance.has() || instance.hasFactory();\n}\n\nexport function useVaultClient() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { TokenCreatorOptions } from '@authup/core-http-kit';\nimport { isVaultClientUsable, useVaultClient } from '../vault';\n\nexport function guessAuthupTokenCreatorOptions() : TokenCreatorOptions {\n let options : TokenCreatorOptions;\n if (isVaultClientUsable()) {\n options = {\n type: 'robotInVault',\n name: 'system',\n vault: useVaultClient(),\n };\n } else {\n options = {\n type: 'user',\n name: 'admin',\n password: 'start123',\n };\n }\n\n return options;\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { ClientAuthenticationHook } from '@authup/core-http-kit';\nimport type { Factory } from 'singa';\nimport { singa } from 'singa';\n\nconst instance = singa<ClientAuthenticationHook>({\n name: 'clientAuthenticationHook',\n});\n\nexport function setClientAuthenticationHookFactory(factory: Factory<ClientAuthenticationHook>) {\n instance.setFactory(factory);\n}\n\nexport function isClientAuthenticationHookUsable() {\n return instance.has() || instance.hasFactory();\n}\n\nexport function useClientAuthenticationHook() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport {\n Client,\n ClientAuthenticationHook,\n} from '@authup/core-http-kit';\nimport {\n isClientAuthenticationHookUsable,\n setClientAuthenticationHookFactory,\n useClientAuthenticationHook,\n} from '../authup-client-authentication-hook';\nimport { guessAuthupTokenCreatorOptions } from './helpers';\nimport type { AuthupClientOptions } from './types';\n\nexport class AuthupClient extends Client {\n constructor(options: AuthupClientOptions = {}) {\n super(options);\n\n if (!isClientAuthenticationHookUsable()) {\n setClientAuthenticationHookFactory(\n () => new ClientAuthenticationHook({\n baseURL: options.baseURL,\n tokenCreator: options.tokenCreator || guessAuthupTokenCreatorOptions(),\n }),\n );\n }\n\n const hook = useClientAuthenticationHook();\n hook.attach(this);\n }\n}\n","/*\n * Copyright (c) 2023-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Client } from '@authup/core-http-kit';\nimport type { Factory } from 'singa';\nimport { singa } from 'singa';\n\nconst instance = singa<Client>({\n name: 'authup',\n});\n\nexport function useAuthupClient() {\n return instance.use();\n}\n\nexport function isAuthupClientUsable() {\n return instance.has() || instance.hasFactory();\n}\n\nexport function setAuthupClientFactory(factory: Factory<Client>) {\n instance.setFactory(factory);\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Client } from 'redis-extension';\nimport type { Factory } from 'singa';\nimport { singa } from 'singa';\n\nconst instance = singa<Client>({\n name: 'redis',\n});\n\nexport function setRedisFactory(factory: Factory<Client>) {\n instance.setFactory(factory);\n}\n\nexport function isRedisClientUsable() {\n return instance.has() || instance.hasFactory();\n}\n\nexport function setRedisClient(input: Client) {\n instance.set(input);\n}\n\nexport function useRedisClient() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Client } from 'redis-extension';\nimport { singa } from 'singa';\nimport { useRedisClient } from './singleton';\n\nconst instance = singa<Client>({\n name: 'redisPublish',\n factory: () => useRedisClient().duplicate(),\n});\n\nexport function useRedisPublishClient() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Client } from 'redis-extension';\nimport { singa } from 'singa';\nimport { useRedisClient } from './singleton';\n\nconst instance = singa<Client>({\n name: 'redisSubscribe',\n factory: () => useRedisClient().duplicate(),\n});\n\nexport function useRedisSubscribeClient() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Options } from '@isaacs/ttlcache';\nimport TTLCache from '@isaacs/ttlcache';\nimport type { CacheClearOptions, CacheSetOptions } from '../types';\nimport type { CacheAdapter } from './types';\n\nexport class MemoryCacheAdapter<\n VALUE = any,\n> implements CacheAdapter {\n protected instance : TTLCache<string, VALUE>;\n\n constructor(options: Options<string, VALUE> = {}) {\n this.instance = new TTLCache<string, VALUE>({\n checkAgeOnGet: true,\n ttl: Infinity,\n ...(options || {}),\n });\n }\n\n async get(key: string): Promise<VALUE> {\n return this.instance.get(key);\n }\n\n async has(key: string) : Promise<boolean> {\n return this.instance.has(key);\n }\n\n async set(key: string, value: VALUE, options: CacheSetOptions): Promise<void> {\n this.instance.set(key, value, {\n ttl: options.ttl,\n });\n }\n\n async drop(key: string): Promise<void> {\n this.instance.delete(key);\n }\n\n async dropMany(keys: string[]) : Promise<void> {\n for (let i = 0; i < keys.length; i++) {\n this.instance.delete(keys[i]);\n }\n }\n\n async clear(options: CacheClearOptions = {}) : Promise<void> {\n if (options.prefix) {\n const keys = this.instance.keys();\n let iterator = keys.next();\n while (!iterator.done) {\n if (iterator.value.startsWith(options.prefix)) {\n this.instance.delete(iterator.value);\n }\n\n iterator = keys.next();\n }\n\n return;\n }\n\n this.instance.clear();\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Client } from 'redis-extension';\nimport { JsonAdapter } from 'redis-extension';\nimport { useRedisClient } from '../../redis';\nimport type { CacheClearOptions, CacheSetOptions } from '../types';\nimport type { CacheAdapter } from './types';\n\nexport class RedisCacheAdapter implements CacheAdapter {\n protected client : Client;\n\n protected instance : JsonAdapter;\n\n constructor() {\n this.client = useRedisClient();\n this.instance = new JsonAdapter(this.client);\n }\n\n async get(key: string): Promise<any> {\n return this.instance.get(key);\n }\n\n async has(key: string) : Promise<boolean> {\n const exists = await this.client.exists(key);\n\n return !!exists;\n }\n\n async set(key: string, value: any, options: CacheSetOptions): Promise<void> {\n await this.instance.set(key, value, {\n milliseconds: options.ttl,\n });\n }\n\n async drop(key: string): Promise<void> {\n await this.instance.drop(key);\n }\n\n async dropMany(keys: string[]) : Promise<void> {\n const pipeline = this.client.pipeline();\n\n for (let i = 0; i < keys.length; i++) {\n pipeline.del(keys[i]);\n }\n\n await pipeline.exec();\n }\n\n async clear(options: CacheClearOptions = {}) : Promise<void> {\n if (options.prefix) {\n const pipeline = this.client.pipeline();\n\n const keys = await this.client.keys(`${options.prefix}*`);\n for (let i = 0; i < keys.length; i++) {\n pipeline.del(keys[i]);\n }\n\n await pipeline.exec();\n\n return;\n }\n await this.client.flushdb();\n }\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isRedisClientUsable } from '../../redis';\nimport { MemoryCacheAdapter } from './memory';\nimport { RedisCacheAdapter } from './redis';\n\nexport function createCacheAdapter() {\n if (isRedisClientUsable()) {\n return new RedisCacheAdapter();\n }\n\n return new MemoryCacheAdapter();\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { buildRedisKeyPath } from '../redis';\nimport type { CacheKeyBuildOptions } from './types';\n\nexport function buildCacheKey(options: CacheKeyBuildOptions) {\n return buildRedisKeyPath(options);\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { CacheAdapter } from './adapters';\nimport type { CacheClearOptions, CacheSetOptions } from './types';\n\nexport class Cache {\n protected adapter : CacheAdapter;\n\n constructor(adapter: CacheAdapter) {\n this.adapter = adapter;\n }\n\n async set(key: string, value: any, options: CacheSetOptions = {}) : Promise<void> {\n await this.adapter.set(key, value, options);\n }\n\n async get(key: string) : Promise<any | undefined> {\n return this.adapter.get(key);\n }\n\n async has(key: string) : Promise<boolean> {\n return this.adapter.has(key);\n }\n\n async drop(key: string) : Promise<void> {\n return this.adapter.drop(key);\n }\n\n async dropMany(keys: string[]) : Promise<void> {\n return this.adapter.dropMany(keys);\n }\n\n async clear(options: CacheClearOptions = {}) : Promise<void> {\n return this.adapter.clear(options);\n }\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { singa } from 'singa';\nimport { isRedisClientUsable } from '../redis';\nimport type { CacheAdapter } from './adapters';\nimport { MemoryCacheAdapter, RedisCacheAdapter } from './adapters';\nimport { Cache } from './module';\n\nconst instance = singa<Cache>({\n name: 'cache',\n factory: () => {\n let adapter : CacheAdapter;\n if (isRedisClientUsable()) {\n adapter = new RedisCacheAdapter();\n } else {\n adapter = new MemoryCacheAdapter();\n }\n\n return new Cache(adapter);\n },\n});\n\nexport function useCache() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { read } from 'envix';\nimport path from 'node:path';\nimport { EnvironmentName } from 'typeorm-extension';\nimport type { Logger } from 'winston';\nimport { createLogger as create, format, transports } from 'winston';\nimport type { LoggerCreateContext, LoggerTransports } from './types';\n\nexport function createLogger(ctx: LoggerCreateContext = {}) : Logger {\n const { directory, options = {} } = ctx;\n\n let loggerTransports : LoggerTransports;\n if (read('env') === EnvironmentName.PRODUCTION) {\n loggerTransports = [\n new transports.Console({\n level: 'info',\n }),\n new transports.File({\n filename: path.join(directory || process.cwd(), 'access.log'),\n level: 'http',\n maxsize: 10 * 1024 * 1024, // 10MB\n maxFiles: 5,\n }),\n new transports.File({\n filename: path.join(directory || process.cwd(), 'error.log'),\n level: 'warn',\n maxsize: 10 * 1024 * 1024, // 10MB\n maxFiles: 5,\n }),\n ];\n } else {\n loggerTransports = [\n new transports.Console({\n level: 'debug',\n }),\n ];\n }\n\n return create({\n format: format.combine(\n format.errors({ stack: true }),\n format.timestamp(),\n format.colorize(),\n format.simple(),\n ),\n level: 'debug',\n transports: loggerTransports,\n // todo: deeply merge options\n ...(options || {}),\n });\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { type Factory, singa } from 'singa';\nimport type { Logger } from 'winston';\n\nconst instance = singa<Logger>({\n name: 'logger',\n});\n\nexport function setLoggerFactory(factory: Factory<Logger>) {\n instance.setFactory(factory);\n}\n\nexport function isLoggerUsable() {\n return instance.has() || instance.hasFactory();\n}\n\nexport function setLogger(input: Logger) {\n instance.set(input);\n}\n\nexport function useLogger() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { DomainEventRecord } from '@privateaim/kit';\nimport { buildDomainEventFullName } from '@privateaim/kit';\nimport { isLoggerUsable, useLogger } from '../logger';\nimport type { DomainEventPublishContext, IDomainEventPublisher } from './type';\n\nexport class DomainEventPublisher implements IDomainEventPublisher {\n protected publishers : Set<IDomainEventPublisher>;\n\n constructor() {\n this.publishers = new Set<IDomainEventPublisher>();\n }\n\n addPublisher(publisher: IDomainEventPublisher) {\n this.publishers.add(publisher);\n }\n\n async safePublish<T extends DomainEventRecord>(\n ctx: DomainEventPublishContext<T>,\n ) : Promise<void> {\n try {\n await this.publish(ctx);\n } catch (e) {\n if (isLoggerUsable()) {\n useLogger().error(`Publishing event ${buildDomainEventFullName(ctx.data.type, ctx.data.event)} failed`);\n useLogger().error(e);\n }\n }\n }\n\n async publish<T extends DomainEventRecord>(\n ctx: DomainEventPublishContext<T>,\n ) : Promise<void> {\n if (isLoggerUsable()) {\n useLogger().info(`Publishing event ${buildDomainEventFullName(ctx.data.type, ctx.data.event)}`);\n }\n\n const publishers = this.publishers.values();\n while (true) {\n const it = publishers.next();\n if (it.done) {\n return;\n }\n\n await it.value.publish(ctx);\n }\n }\n}\n","/*\n * Copyright (c) 2023-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from '@privateaim/kit';\nimport type { DomainEventChannelName } from './type';\n\nexport function transformEventData<T>(input: T) : T {\n if (isObject(input)) {\n const keys = Object.keys(input);\n for (let i = 0; i < keys.length; i++) {\n const value = input[keys[i]];\n if (value instanceof Date) {\n input[keys[i]] = value.toISOString();\n }\n }\n }\n\n return input;\n}\n\nexport function buildEventChannelName(\n input: DomainEventChannelName,\n id?: string | number,\n) : string {\n if (typeof input === 'string') {\n return input;\n }\n\n return input(id);\n}\n","/*\n * Copyright (c) 2023-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Client } from 'redis-extension';\nimport type { DomainEventPublishContext, IDomainEventPublisher } from '../type';\nimport { buildEventChannelName, transformEventData } from '../utils';\n\nexport class DomainEventRedisPublisher implements IDomainEventPublisher {\n protected driver : Client;\n\n constructor(client: Client) {\n this.driver = client;\n }\n\n async publish(ctx: DomainEventPublishContext) : Promise<void> {\n const data = JSON.stringify(transformEventData(ctx.data));\n\n const pipeline = this.driver.pipeline();\n for (let i = 0; i < ctx.destinations.length; i++) {\n const keyPrefix = (ctx.destinations[i].namespace ? `${ctx.destinations[i].namespace}:` : '');\n\n let key = keyPrefix + buildEventChannelName(ctx.destinations[i].channel);\n pipeline.publish(key, data);\n\n if (typeof ctx.destinations[i].channel === 'function') {\n key = keyPrefix + buildEventChannelName(ctx.destinations[i].channel, ctx.data.data.id);\n pipeline.publish(key, data);\n }\n }\n\n await pipeline.exec();\n }\n}\n","/*\n * Copyright (c) 2022-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { buildDomainEventFullName } from '@privateaim/kit';\nimport { Emitter } from '@socket.io/redis-emitter';\nimport type { Client } from 'redis-extension';\nimport type { DomainEventPublishContext, IDomainEventPublisher } from '../type';\nimport { buildEventChannelName, transformEventData } from '../utils';\n\nexport class DomainEventSocketPublisher implements IDomainEventPublisher {\n protected client : Client;\n\n constructor(client: Client) {\n this.client = client;\n }\n\n async publish(ctx: DomainEventPublishContext) : Promise<void> {\n ctx.data = transformEventData(ctx.data);\n\n for (let i = 0; i < ctx.destinations.length; i++) {\n let namespace : string;\n if (ctx.destinations[i].namespace) {\n namespace = ctx.destinations[i].namespace;\n } else {\n namespace = '/';\n }\n\n const emitter = new Emitter(this.client, {}, namespace);\n\n const fullEventName = buildDomainEventFullName(ctx.data.type, ctx.data.event);\n\n const rooms : string[] = [\n buildEventChannelName(ctx.destinations[i].channel),\n ];\n\n if (typeof ctx.destinations[i].channel === 'function') {\n rooms.push(buildEventChannelName(ctx.destinations[i].channel, ctx.data.data.id));\n }\n\n for (let j = 0; j < rooms.length; j++) {\n emitter\n .in(rooms[j])\n .emit(fullEventName, {\n ...ctx.data,\n meta: {\n namespace,\n roomName: rooms[j],\n },\n });\n }\n }\n }\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { singa } from 'singa';\nimport { isRedisClientUsable, useRedisClient } from '../redis';\nimport { DomainEventPublisher } from './module';\nimport { DomainEventRedisPublisher } from './redis';\nimport { DomainEventSocketPublisher } from './socket';\n\nconst instance = singa<DomainEventPublisher>({\n name: 'domainEventPublisher',\n factory: () => {\n const publisher = new DomainEventPublisher();\n\n if (isRedisClientUsable()) {\n const client = useRedisClient();\n\n publisher.addPublisher(new DomainEventRedisPublisher(client));\n publisher.addPublisher(new DomainEventSocketPublisher(client));\n }\n\n return publisher;\n },\n});\n\nexport function useDomainEventPublisher() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { ExchangeType } from 'amqp-extension';\nimport type { Client } from 'amqp-extension';\nimport { isLoggerUsable, useLogger } from '../../services';\nimport { QueueRouterRoutingType } from './constants';\nimport { isQueueRouterPayload } from './helpers';\nimport type {\n QueueRouterHandler,\n QueueRouterHandlers,\n QueueRouterPayload, QueueRouterRouting,\n} from './types';\n\nexport class QueueRouter {\n protected driver : Client;\n\n //----------------------------------------------------------------\n\n constructor(driver: Client) {\n this.driver = driver;\n }\n\n //----------------------------------------------------------------\n\n publish(message: QueueRouterPayload) : Promise<boolean> {\n let exchange : Client;\n if (message.metadata.routing.type === 'work') {\n exchange = this.driver.of({\n type: ExchangeType.DIRECT,\n name: message.metadata.routing.namespace || '',\n });\n } else {\n exchange = this.driver.of({\n type: ExchangeType.TOPIC,\n name: message.metadata.routing.namespace || 'FLAME',\n });\n }\n\n if (isLoggerUsable()) {\n useLogger()\n .debug(`Publishing queue message ${message.type} in ${message.metadata.routing.key}`);\n }\n\n return exchange.publish(message.metadata.routing.key, message, {\n type: message.type,\n messageId: message.id,\n persistent: message.metadata.persistent ??\n message.metadata.routing.type === QueueRouterRoutingType.WORK,\n });\n }\n\n consume(routing: QueueRouterRouting, handlers: QueueRouterHandlers) : Promise<void> {\n let exchange : Client;\n if (routing.type === 'work') {\n exchange = this.driver.of({\n type: ExchangeType.DIRECT,\n name: routing.namespace || '',\n });\n } else {\n exchange = this.driver.of({\n type: ExchangeType.TOPIC,\n name: routing.namespace || 'FLAME',\n });\n }\n\n return exchange.consume(routing.key, {\n prefetchCount: routing.type === QueueRouterRoutingType.WORK ? 1 : undefined,\n // noAck: routing.type !== QueueRouterRoutingType.WORK,\n requeueOnFailure: routing.type === QueueRouterRoutingType.WORK,\n }, {\n $any: async (input) => {\n const payload = JSON.parse(input.content.toString('utf-8'));\n if (!isQueueRouterPayload(payload)) {\n return;\n }\n\n if (input.fields.redelivered) {\n if (isLoggerUsable()) {\n useLogger()\n .debug(`Queue message ${input.properties.type} in ${routing.key} is not processed again.`);\n }\n\n return;\n }\n\n if (isLoggerUsable()) {\n useLogger()\n .debug(`Consuming queue message ${input.properties.type} in ${routing.key}`);\n }\n\n let handler : QueueRouterHandler | undefined;\n\n if (\n typeof input.properties.type === 'string' &&\n handlers[input.properties.type]\n ) {\n handler = handlers[input.properties.type];\n } else {\n handler = handlers.$any;\n }\n\n if (typeof handler !== 'function') {\n if (isLoggerUsable()) {\n useLogger()\n .debug(`No queue handler to consume message ${input.properties.type} in ${routing.key}`);\n }\n\n return;\n }\n\n await handler(payload);\n },\n });\n }\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { singa } from 'singa';\nimport { isAmqpClientUsable, useAmqpClient } from '../../services';\nimport { QueueRouter } from './module';\n\nconst instance = singa<QueueRouter>({\n name: 'queueRouter',\n factory: () => {\n const amqp = useAmqpClient();\n\n return new QueueRouter(amqp);\n },\n});\n\nexport function isQueueRouterUsable() {\n return instance.has() || isAmqpClientUsable();\n}\n\nexport function useQueueRouter() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2022-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function hasOwnProperty<X extends Record<string, any>, Y extends PropertyKey>(\n obj: X,\n prop: Y,\n): obj is X & Record<Y, unknown> {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n"],"names":["_define_property","ComponentError","Error","constructor","input","message","cause","code","isComponentError","isObject","isQueuePayload","hasOwnProperty","data","metadata","QueueRouterRoutingType","buildQueueRouterPublishPayload","id","createNanoID","type","timestamp","Date","now","isQueueRouterPayload","instance","singa","name","setAmqpClientFactory","factory","setFactory","isAmqpClientUsable","has","hasFactory","useAmqpClient","use","setVaultFactory","isVaultClientUsable","useVaultClient","guessAuthupTokenCreatorOptions","options","vault","password","setClientAuthenticationHookFactory","isClientAuthenticationHookUsable","useClientAuthenticationHook","AuthupClient","Client","ClientAuthenticationHook","baseURL","tokenCreator","hook","attach","useAuthupClient","isAuthupClientUsable","setAuthupClientFactory","setRedisFactory","isRedisClientUsable","setRedisClient","set","useRedisClient","duplicate","useRedisPublishClient","useRedisSubscribeClient","MemoryCacheAdapter","get","key","value","ttl","drop","delete","dropMany","keys","i","length","clear","prefix","iterator","next","done","startsWith","TTLCache","checkAgeOnGet","Infinity","RedisCacheAdapter","exists","client","milliseconds","pipeline","del","exec","flushdb","JsonAdapter","createCacheAdapter","buildCacheKey","buildRedisKeyPath","Cache","adapter","useCache","createLogger","ctx","directory","loggerTransports","read","EnvironmentName","PRODUCTION","transports","Console","level","File","filename","path","join","process","cwd","maxsize","maxFiles","create","format","combine","errors","stack","colorize","simple","setLoggerFactory","isLoggerUsable","setLogger","useLogger","DomainEventPublisher","addPublisher","publisher","publishers","add","safePublish","publish","e","error","buildDomainEventFullName","event","info","values","it","Set","transformEventData","Object","toISOString","buildEventChannelName","DomainEventRedisPublisher","JSON","stringify","driver","destinations","keyPrefix","namespace","channel","DomainEventSocketPublisher","emitter","Emitter","fullEventName","rooms","push","j","in","emit","meta","roomName","useDomainEventPublisher","QueueRouter","exchange","routing","of","ExchangeType","DIRECT","TOPIC","debug","messageId","persistent","WORK","consume","handlers","prefetchCount","undefined","requeueOnFailure","$any","payload","parse","content","toString","fields","redelivered","properties","handler","amqp","isQueueRouterUsable","useQueueRouter","obj","prop","prototype","call"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/core/component/error.ts","../src/core/component/helper.ts","../src/core/queue/utils.ts","../src/core/queue-router/constants.ts","../src/core/queue-router/helpers.ts","../src/services/amqp/module.ts","../src/services/vault/singleton.ts","../src/services/authup/helpers.ts","../src/services/authup-client-authentication-hook/singleton.ts","../src/services/authup/module.ts","../src/services/authup/singleton.ts","../src/services/redis/singleton.ts","../src/services/redis/singleton-publish.ts","../src/services/redis/singleton-subscribe.ts","../src/services/cache/adapters/memory.ts","../src/services/cache/adapters/redis.ts","../src/services/cache/adapters/factory.ts","../src/services/cache/helper.ts","../src/services/cache/module.ts","../src/services/cache/singleton.ts","../src/services/logger/module.ts","../src/services/logger/singleton.ts","../src/services/domain-event/module.ts","../src/services/domain-event/utils.ts","../src/services/domain-event/redis/module.ts","../src/services/domain-event/socket/module.ts","../src/services/domain-event/singleton.ts","../src/services/loki/singleton.ts","../src/core/queue-router/module.ts","../src/core/queue-router/singleton.ts","../src/utils/has-property.ts"],"sourcesContent":["/*\n * Copyright (c) 2023-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { ComponentErrorOptions } from './type';\n\nexport class ComponentError extends Error {\n public code?: string | null;\n\n constructor(input: ComponentErrorOptions) {\n super(input.message, { cause: input.cause });\n\n this.code = input.code;\n }\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from '@privateaim/kit';\nimport type { ComponentError } from './error';\n\nexport function isComponentError(input: unknown) : input is ComponentError {\n if (!isObject(input)) {\n return false;\n }\n\n if (\n typeof input.message !== 'undefined' &&\n typeof input.message !== 'string'\n ) {\n return false;\n }\n\n if (typeof input.code === 'undefined') {\n return true;\n }\n\n return typeof input.code === 'string' || input.code === null;\n}\n","/*\n * Copyright (c) 2023-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { hasOwnProperty, isObject } from '@privateaim/kit';\nimport type { QueuePayload } from './type';\n\nexport function isQueuePayload(input: unknown) : input is QueuePayload {\n return isObject(input) &&\n hasOwnProperty(input, 'data') &&\n isObject(input.data) &&\n hasOwnProperty(input, 'metadata') &&\n isObject(input.metadata);\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum QueueRouterRoutingType {\n WORK = 'work',\n PUB_SUB = 'pubSub',\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { createNanoID, hasOwnProperty, isObject } from '@privateaim/kit';\nimport type { QueueRouterPayload, QueueRouterPayloadInput } from './types';\n\nexport function buildQueueRouterPublishPayload(\n input: QueueRouterPayloadInput,\n) : QueueRouterPayload {\n return {\n id: input.id || createNanoID(),\n type: input.type,\n data: input.data || {},\n metadata: {\n timestamp: Date.now(),\n ...input.metadata,\n },\n };\n}\n\nexport function isQueueRouterPayload(input: unknown) : input is QueueRouterPayload {\n return isObject(input) &&\n typeof input.id === 'string' &&\n typeof input.type === 'string' &&\n hasOwnProperty(input, 'data') &&\n isObject(input.data) &&\n hasOwnProperty(input, 'metadata') &&\n isObject(input.metadata);\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Client } from 'amqp-extension';\nimport type { Factory } from 'singa';\nimport { singa } from 'singa';\n\nconst instance = singa<Client>({\n name: 'amqp',\n});\n\nexport function setAmqpClientFactory(factory: Factory<Client>) {\n instance.setFactory(factory);\n}\n\nexport function isAmqpClientUsable() {\n return instance.has() || instance.hasFactory();\n}\n\nexport function useAmqpClient() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Factory } from 'singa';\nimport { singa } from 'singa';\nimport type { VaultClient } from '@hapic/vault';\n\nconst instance = singa<VaultClient>({\n name: 'vault',\n});\n\nexport function setVaultFactory(factory: Factory<VaultClient>) {\n instance.setFactory(factory);\n}\n\nexport function isVaultClientUsable() {\n return instance.has() || instance.hasFactory();\n}\n\nexport function useVaultClient() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { TokenCreatorOptions } from '@authup/core-http-kit';\nimport { isVaultClientUsable, useVaultClient } from '../vault';\n\nexport function guessAuthupTokenCreatorOptions() : TokenCreatorOptions {\n let options : TokenCreatorOptions;\n if (isVaultClientUsable()) {\n options = {\n type: 'robotInVault',\n name: 'system',\n vault: useVaultClient(),\n };\n } else {\n options = {\n type: 'user',\n name: 'admin',\n password: 'start123',\n };\n }\n\n return options;\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { ClientAuthenticationHook } from '@authup/core-http-kit';\nimport type { Factory } from 'singa';\nimport { singa } from 'singa';\n\nconst instance = singa<ClientAuthenticationHook>({\n name: 'clientAuthenticationHook',\n});\n\nexport function setClientAuthenticationHookFactory(factory: Factory<ClientAuthenticationHook>) {\n instance.setFactory(factory);\n}\n\nexport function isClientAuthenticationHookUsable() {\n return instance.has() || instance.hasFactory();\n}\n\nexport function useClientAuthenticationHook() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport {\n Client,\n ClientAuthenticationHook,\n} from '@authup/core-http-kit';\nimport {\n isClientAuthenticationHookUsable,\n setClientAuthenticationHookFactory,\n useClientAuthenticationHook,\n} from '../authup-client-authentication-hook';\nimport { guessAuthupTokenCreatorOptions } from './helpers';\nimport type { AuthupClientOptions } from './types';\n\nexport class AuthupClient extends Client {\n constructor(options: AuthupClientOptions = {}) {\n super(options);\n\n if (!isClientAuthenticationHookUsable()) {\n setClientAuthenticationHookFactory(\n () => new ClientAuthenticationHook({\n baseURL: options.baseURL,\n tokenCreator: options.tokenCreator || guessAuthupTokenCreatorOptions(),\n }),\n );\n }\n\n const hook = useClientAuthenticationHook();\n hook.attach(this);\n }\n}\n","/*\n * Copyright (c) 2023-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Client } from '@authup/core-http-kit';\nimport type { Factory } from 'singa';\nimport { singa } from 'singa';\n\nconst instance = singa<Client>({\n name: 'authup',\n});\n\nexport function useAuthupClient() {\n return instance.use();\n}\n\nexport function isAuthupClientUsable() {\n return instance.has() || instance.hasFactory();\n}\n\nexport function setAuthupClientFactory(factory: Factory<Client>) {\n instance.setFactory(factory);\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Client } from 'redis-extension';\nimport type { Factory } from 'singa';\nimport { singa } from 'singa';\n\nconst instance = singa<Client>({\n name: 'redis',\n});\n\nexport function setRedisFactory(factory: Factory<Client>) {\n instance.setFactory(factory);\n}\n\nexport function isRedisClientUsable() {\n return instance.has() || instance.hasFactory();\n}\n\nexport function setRedisClient(input: Client) {\n instance.set(input);\n}\n\nexport function useRedisClient() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Client } from 'redis-extension';\nimport { singa } from 'singa';\nimport { useRedisClient } from './singleton';\n\nconst instance = singa<Client>({\n name: 'redisPublish',\n factory: () => useRedisClient().duplicate(),\n});\n\nexport function useRedisPublishClient() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Client } from 'redis-extension';\nimport { singa } from 'singa';\nimport { useRedisClient } from './singleton';\n\nconst instance = singa<Client>({\n name: 'redisSubscribe',\n factory: () => useRedisClient().duplicate(),\n});\n\nexport function useRedisSubscribeClient() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Options } from '@isaacs/ttlcache';\nimport TTLCache from '@isaacs/ttlcache';\nimport type { CacheClearOptions, CacheSetOptions } from '../types';\nimport type { CacheAdapter } from './types';\n\nexport class MemoryCacheAdapter<\n VALUE = any,\n> implements CacheAdapter {\n protected instance : TTLCache<string, VALUE>;\n\n constructor(options: Options<string, VALUE> = {}) {\n this.instance = new TTLCache<string, VALUE>({\n checkAgeOnGet: true,\n ttl: Infinity,\n ...(options || {}),\n });\n }\n\n async get(key: string): Promise<VALUE> {\n return this.instance.get(key);\n }\n\n async has(key: string) : Promise<boolean> {\n return this.instance.has(key);\n }\n\n async set(key: string, value: VALUE, options: CacheSetOptions): Promise<void> {\n this.instance.set(key, value, {\n ttl: options.ttl,\n });\n }\n\n async drop(key: string): Promise<void> {\n this.instance.delete(key);\n }\n\n async dropMany(keys: string[]) : Promise<void> {\n for (let i = 0; i < keys.length; i++) {\n this.instance.delete(keys[i]);\n }\n }\n\n async clear(options: CacheClearOptions = {}) : Promise<void> {\n if (options.prefix) {\n const keys = this.instance.keys();\n let iterator = keys.next();\n while (!iterator.done) {\n if (iterator.value.startsWith(options.prefix)) {\n this.instance.delete(iterator.value);\n }\n\n iterator = keys.next();\n }\n\n return;\n }\n\n this.instance.clear();\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Client } from 'redis-extension';\nimport { JsonAdapter } from 'redis-extension';\nimport { useRedisClient } from '../../redis';\nimport type { CacheClearOptions, CacheSetOptions } from '../types';\nimport type { CacheAdapter } from './types';\n\nexport class RedisCacheAdapter implements CacheAdapter {\n protected client : Client;\n\n protected instance : JsonAdapter;\n\n constructor() {\n this.client = useRedisClient();\n this.instance = new JsonAdapter(this.client);\n }\n\n async get(key: string): Promise<any> {\n return this.instance.get(key);\n }\n\n async has(key: string) : Promise<boolean> {\n const exists = await this.client.exists(key);\n\n return !!exists;\n }\n\n async set(key: string, value: any, options: CacheSetOptions): Promise<void> {\n await this.instance.set(key, value, {\n milliseconds: options.ttl,\n });\n }\n\n async drop(key: string): Promise<void> {\n await this.instance.drop(key);\n }\n\n async dropMany(keys: string[]) : Promise<void> {\n const pipeline = this.client.pipeline();\n\n for (let i = 0; i < keys.length; i++) {\n pipeline.del(keys[i]);\n }\n\n await pipeline.exec();\n }\n\n async clear(options: CacheClearOptions = {}) : Promise<void> {\n if (options.prefix) {\n const pipeline = this.client.pipeline();\n\n const keys = await this.client.keys(`${options.prefix}*`);\n for (let i = 0; i < keys.length; i++) {\n pipeline.del(keys[i]);\n }\n\n await pipeline.exec();\n\n return;\n }\n await this.client.flushdb();\n }\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isRedisClientUsable } from '../../redis';\nimport { MemoryCacheAdapter } from './memory';\nimport { RedisCacheAdapter } from './redis';\n\nexport function createCacheAdapter() {\n if (isRedisClientUsable()) {\n return new RedisCacheAdapter();\n }\n\n return new MemoryCacheAdapter();\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { buildRedisKeyPath } from '../redis';\nimport type { CacheKeyBuildOptions } from './types';\n\nexport function buildCacheKey(options: CacheKeyBuildOptions) {\n return buildRedisKeyPath(options);\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { CacheAdapter } from './adapters';\nimport type { CacheClearOptions, CacheSetOptions } from './types';\n\nexport class Cache {\n protected adapter : CacheAdapter;\n\n constructor(adapter: CacheAdapter) {\n this.adapter = adapter;\n }\n\n async set(key: string, value: any, options: CacheSetOptions = {}) : Promise<void> {\n await this.adapter.set(key, value, options);\n }\n\n async get(key: string) : Promise<any | undefined> {\n return this.adapter.get(key);\n }\n\n async has(key: string) : Promise<boolean> {\n return this.adapter.has(key);\n }\n\n async drop(key: string) : Promise<void> {\n return this.adapter.drop(key);\n }\n\n async dropMany(keys: string[]) : Promise<void> {\n return this.adapter.dropMany(keys);\n }\n\n async clear(options: CacheClearOptions = {}) : Promise<void> {\n return this.adapter.clear(options);\n }\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { singa } from 'singa';\nimport { isRedisClientUsable } from '../redis';\nimport type { CacheAdapter } from './adapters';\nimport { MemoryCacheAdapter, RedisCacheAdapter } from './adapters';\nimport { Cache } from './module';\n\nconst instance = singa<Cache>({\n name: 'cache',\n factory: () => {\n let adapter : CacheAdapter;\n if (isRedisClientUsable()) {\n adapter = new RedisCacheAdapter();\n } else {\n adapter = new MemoryCacheAdapter();\n }\n\n return new Cache(adapter);\n },\n});\n\nexport function useCache() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { read } from 'envix';\nimport path from 'node:path';\nimport { EnvironmentName } from 'typeorm-extension';\nimport type { Logger } from 'winston';\nimport { createLogger as create, format, transports } from 'winston';\nimport type { LoggerCreateContext, LoggerTransports } from './types';\n\nexport function createLogger(ctx: LoggerCreateContext = {}) : Logger {\n const { directory, options = {} } = ctx;\n\n let loggerTransports : LoggerTransports;\n if (read('env') === EnvironmentName.PRODUCTION) {\n loggerTransports = [\n new transports.Console({\n level: 'info',\n }),\n new transports.File({\n filename: path.join(directory || process.cwd(), 'access.log'),\n level: 'http',\n maxsize: 10 * 1024 * 1024, // 10MB\n maxFiles: 5,\n }),\n new transports.File({\n filename: path.join(directory || process.cwd(), 'error.log'),\n level: 'warn',\n maxsize: 10 * 1024 * 1024, // 10MB\n maxFiles: 5,\n }),\n ];\n } else {\n loggerTransports = [\n new transports.Console({\n level: 'debug',\n }),\n ];\n }\n\n return create({\n format: format.combine(\n format.errors({ stack: true }),\n format.timestamp(),\n format.colorize(),\n format.simple(),\n ),\n level: 'debug',\n transports: loggerTransports,\n // todo: deeply merge options\n ...(options || {}),\n });\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { type Factory, singa } from 'singa';\nimport type { Logger } from 'winston';\n\nconst instance = singa<Logger>({\n name: 'logger',\n});\n\nexport function setLoggerFactory(factory: Factory<Logger>) {\n instance.setFactory(factory);\n}\n\nexport function isLoggerUsable() {\n return instance.has() || instance.hasFactory();\n}\n\nexport function setLogger(input: Logger) {\n instance.set(input);\n}\n\nexport function useLogger() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { DomainEventRecord } from '@privateaim/kit';\nimport { buildDomainEventFullName } from '@privateaim/kit';\nimport { isLoggerUsable, useLogger } from '../logger';\nimport type { DomainEventPublishContext, IDomainEventPublisher } from './type';\n\nexport class DomainEventPublisher implements IDomainEventPublisher {\n protected publishers : Set<IDomainEventPublisher>;\n\n constructor() {\n this.publishers = new Set<IDomainEventPublisher>();\n }\n\n addPublisher(publisher: IDomainEventPublisher) {\n this.publishers.add(publisher);\n }\n\n async safePublish<T extends DomainEventRecord>(\n ctx: DomainEventPublishContext<T>,\n ) : Promise<void> {\n try {\n await this.publish(ctx);\n } catch (e) {\n if (isLoggerUsable()) {\n useLogger().error(`Publishing event ${buildDomainEventFullName(ctx.data.type, ctx.data.event)} failed`);\n useLogger().error(e);\n }\n }\n }\n\n async publish<T extends DomainEventRecord>(\n ctx: DomainEventPublishContext<T>,\n ) : Promise<void> {\n if (isLoggerUsable()) {\n useLogger().info(`Publishing event ${buildDomainEventFullName(ctx.data.type, ctx.data.event)}`);\n }\n\n const publishers = this.publishers.values();\n while (true) {\n const it = publishers.next();\n if (it.done) {\n return;\n }\n\n await it.value.publish(ctx);\n }\n }\n}\n","/*\n * Copyright (c) 2023-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from '@privateaim/kit';\nimport type { DomainEventChannelName } from './type';\n\nexport function transformEventData<T>(input: T) : T {\n if (isObject(input)) {\n const keys = Object.keys(input);\n for (let i = 0; i < keys.length; i++) {\n const value = input[keys[i]];\n if (value instanceof Date) {\n input[keys[i]] = value.toISOString();\n }\n }\n }\n\n return input;\n}\n\nexport function buildEventChannelName(\n input: DomainEventChannelName,\n id?: string | number,\n) : string {\n if (typeof input === 'string') {\n return input;\n }\n\n return input(id);\n}\n","/*\n * Copyright (c) 2023-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Client } from 'redis-extension';\nimport type { DomainEventPublishContext, IDomainEventPublisher } from '../type';\nimport { buildEventChannelName, transformEventData } from '../utils';\n\nexport class DomainEventRedisPublisher implements IDomainEventPublisher {\n protected driver : Client;\n\n constructor(client: Client) {\n this.driver = client;\n }\n\n async publish(ctx: DomainEventPublishContext) : Promise<void> {\n const data = JSON.stringify(transformEventData(ctx.data));\n\n const pipeline = this.driver.pipeline();\n for (let i = 0; i < ctx.destinations.length; i++) {\n const keyPrefix = (ctx.destinations[i].namespace ? `${ctx.destinations[i].namespace}:` : '');\n\n let key = keyPrefix + buildEventChannelName(ctx.destinations[i].channel);\n pipeline.publish(key, data);\n\n if (typeof ctx.destinations[i].channel === 'function') {\n key = keyPrefix + buildEventChannelName(ctx.destinations[i].channel, ctx.data.data.id);\n pipeline.publish(key, data);\n }\n }\n\n await pipeline.exec();\n }\n}\n","/*\n * Copyright (c) 2022-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { buildDomainEventFullName } from '@privateaim/kit';\nimport { Emitter } from '@socket.io/redis-emitter';\nimport type { Client } from 'redis-extension';\nimport type { DomainEventPublishContext, IDomainEventPublisher } from '../type';\nimport { buildEventChannelName, transformEventData } from '../utils';\n\nexport class DomainEventSocketPublisher implements IDomainEventPublisher {\n protected client : Client;\n\n constructor(client: Client) {\n this.client = client;\n }\n\n async publish(ctx: DomainEventPublishContext) : Promise<void> {\n ctx.data = transformEventData(ctx.data);\n\n for (let i = 0; i < ctx.destinations.length; i++) {\n let namespace : string;\n if (ctx.destinations[i].namespace) {\n namespace = ctx.destinations[i].namespace;\n } else {\n namespace = '/';\n }\n\n const emitter = new Emitter(this.client, {}, namespace);\n\n const fullEventName = buildDomainEventFullName(ctx.data.type, ctx.data.event);\n\n const rooms : string[] = [\n buildEventChannelName(ctx.destinations[i].channel),\n ];\n\n if (typeof ctx.destinations[i].channel === 'function') {\n rooms.push(buildEventChannelName(ctx.destinations[i].channel, ctx.data.data.id));\n }\n\n for (let j = 0; j < rooms.length; j++) {\n emitter\n .in(rooms[j])\n .emit(fullEventName, {\n ...ctx.data,\n meta: {\n namespace,\n roomName: rooms[j],\n },\n });\n }\n }\n }\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { singa } from 'singa';\nimport { isRedisClientUsable, useRedisClient } from '../redis';\nimport { DomainEventPublisher } from './module';\nimport { DomainEventRedisPublisher } from './redis';\nimport { DomainEventSocketPublisher } from './socket';\n\nconst instance = singa<DomainEventPublisher>({\n name: 'domainEventPublisher',\n factory: () => {\n const publisher = new DomainEventPublisher();\n\n if (isRedisClientUsable()) {\n const client = useRedisClient();\n\n publisher.addPublisher(new DomainEventRedisPublisher(client));\n publisher.addPublisher(new DomainEventSocketPublisher(client));\n }\n\n return publisher;\n },\n});\n\nexport function useDomainEventPublisher() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Factory } from 'singa';\nimport { singa } from 'singa';\nimport type { LokiClient } from '@hapic/loki';\n\nconst instance = singa<LokiClient>({\n name: 'loki',\n});\n\nexport function setLokiFactory(factory: Factory<LokiClient>) {\n instance.setFactory(factory);\n}\n\nexport function isLokiClientUsable() {\n return instance.has() || instance.hasFactory();\n}\n\nexport function useLokiClient() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { ExchangeType } from 'amqp-extension';\nimport type { Client } from 'amqp-extension';\nimport { isLoggerUsable, useLogger } from '../../services';\nimport { QueueRouterRoutingType } from './constants';\nimport { isQueueRouterPayload } from './helpers';\nimport type {\n QueueRouterHandler,\n QueueRouterHandlers,\n QueueRouterPayload, QueueRouterRouting,\n} from './types';\n\nexport class QueueRouter {\n protected driver : Client;\n\n //----------------------------------------------------------------\n\n constructor(driver: Client) {\n this.driver = driver;\n }\n\n //----------------------------------------------------------------\n\n publish(message: QueueRouterPayload) : Promise<boolean> {\n let exchange : Client;\n if (message.metadata.routing.type === 'work') {\n exchange = this.driver.of({\n type: ExchangeType.DIRECT,\n name: message.metadata.routing.namespace || '',\n });\n } else {\n exchange = this.driver.of({\n type: ExchangeType.TOPIC,\n name: message.metadata.routing.namespace || 'FLAME',\n });\n }\n\n if (isLoggerUsable()) {\n useLogger()\n .debug(`Publishing queue message ${message.type} in ${message.metadata.routing.key}`);\n }\n\n return exchange.publish(message.metadata.routing.key, message, {\n type: message.type,\n messageId: message.id,\n persistent: message.metadata.persistent ??\n message.metadata.routing.type === QueueRouterRoutingType.WORK,\n });\n }\n\n consume(routing: QueueRouterRouting, handlers: QueueRouterHandlers) : Promise<void> {\n let exchange : Client;\n if (routing.type === 'work') {\n exchange = this.driver.of({\n type: ExchangeType.DIRECT,\n name: routing.namespace || '',\n });\n } else {\n exchange = this.driver.of({\n type: ExchangeType.TOPIC,\n name: routing.namespace || 'FLAME',\n });\n }\n\n return exchange.consume(routing.key, {\n prefetchCount: routing.type === QueueRouterRoutingType.WORK ? 1 : undefined,\n // noAck: routing.type !== QueueRouterRoutingType.WORK,\n requeueOnFailure: routing.type === QueueRouterRoutingType.WORK,\n }, {\n $any: async (input) => {\n const payload = JSON.parse(input.content.toString('utf-8'));\n if (!isQueueRouterPayload(payload)) {\n return;\n }\n\n if (input.fields.redelivered) {\n if (isLoggerUsable()) {\n useLogger()\n .debug(`Queue message ${input.properties.type} in ${routing.key} is not processed again.`);\n }\n\n return;\n }\n\n if (isLoggerUsable()) {\n useLogger()\n .debug(`Consuming queue message ${input.properties.type} in ${routing.key}`);\n }\n\n let handler : QueueRouterHandler | undefined;\n\n if (\n typeof input.properties.type === 'string' &&\n handlers[input.properties.type]\n ) {\n handler = handlers[input.properties.type];\n } else {\n handler = handlers.$any;\n }\n\n if (typeof handler !== 'function') {\n if (isLoggerUsable()) {\n useLogger()\n .debug(`No queue handler to consume message ${input.properties.type} in ${routing.key}`);\n }\n\n return;\n }\n\n await handler(payload);\n },\n });\n }\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { singa } from 'singa';\nimport { isAmqpClientUsable, useAmqpClient } from '../../services';\nimport { QueueRouter } from './module';\n\nconst instance = singa<QueueRouter>({\n name: 'queueRouter',\n factory: () => {\n const amqp = useAmqpClient();\n\n return new QueueRouter(amqp);\n },\n});\n\nexport function isQueueRouterUsable() {\n return instance.has() || isAmqpClientUsable();\n}\n\nexport function useQueueRouter() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2022-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function hasOwnProperty<X extends Record<string, any>, Y extends PropertyKey>(\n obj: X,\n prop: Y,\n): obj is X & Record<Y, unknown> {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n"],"names":["_define_property","ComponentError","Error","input","message","cause","code","isComponentError","isObject","isQueuePayload","hasOwnProperty","data","metadata","QueueRouterRoutingType","buildQueueRouterPublishPayload","id","createNanoID","type","timestamp","Date","now","isQueueRouterPayload","instance","singa","name","setAmqpClientFactory","factory","setFactory","isAmqpClientUsable","has","hasFactory","useAmqpClient","use","setVaultFactory","isVaultClientUsable","useVaultClient","guessAuthupTokenCreatorOptions","options","vault","password","setClientAuthenticationHookFactory","isClientAuthenticationHookUsable","useClientAuthenticationHook","AuthupClient","Client","ClientAuthenticationHook","baseURL","tokenCreator","hook","attach","useAuthupClient","isAuthupClientUsable","setAuthupClientFactory","setRedisFactory","isRedisClientUsable","setRedisClient","set","useRedisClient","duplicate","useRedisPublishClient","useRedisSubscribeClient","MemoryCacheAdapter","get","key","value","ttl","drop","delete","dropMany","keys","i","length","clear","prefix","iterator","next","done","startsWith","TTLCache","checkAgeOnGet","Infinity","RedisCacheAdapter","exists","client","milliseconds","pipeline","del","exec","flushdb","JsonAdapter","createCacheAdapter","buildCacheKey","buildRedisKeyPath","Cache","adapter","useCache","createLogger","ctx","directory","loggerTransports","read","EnvironmentName","PRODUCTION","transports","Console","level","File","filename","path","join","process","cwd","maxsize","maxFiles","create","format","combine","errors","stack","colorize","simple","setLoggerFactory","isLoggerUsable","setLogger","useLogger","DomainEventPublisher","addPublisher","publisher","publishers","add","safePublish","publish","e","error","buildDomainEventFullName","event","info","values","it","Set","transformEventData","Object","toISOString","buildEventChannelName","DomainEventRedisPublisher","JSON","stringify","driver","destinations","keyPrefix","namespace","channel","DomainEventSocketPublisher","emitter","Emitter","fullEventName","rooms","push","j","in","emit","meta","roomName","useDomainEventPublisher","setLokiFactory","isLokiClientUsable","useLokiClient","QueueRouter","exchange","routing","of","ExchangeType","DIRECT","TOPIC","debug","messageId","persistent","WORK","consume","handlers","prefetchCount","undefined","requeueOnFailure","$any","payload","parse","content","toString","fields","redelivered","properties","handler","amqp","isQueueRouterUsable","useQueueRouter","obj","prop","prototype","call"],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -11,6 +11,7 @@ import path from 'node:path';
11
11
  import { EnvironmentName } from 'typeorm-extension';
12
12
  import { transports, createLogger as createLogger$1, format } from 'winston';
13
13
  import { Emitter } from '@socket.io/redis-emitter';
14
+ export { LokiClient, CompactorDeletionRequestCreate as LokiCompactorDeletionRequestCreate, Config as LokiConfig, ConfigInput as LokiConfigInput, DistributorPushStream as LokiDistributorPushStream, QuerierQueryRangeOptions as LokiQuerierQueryRangeOptions, QuerierQueryResult as LokiQuerierQueryResult, createClient as createLokiClient, nanoSeconds } from '@hapic/loki';
14
15
 
15
16
  /*
16
17
  * Copyright (c) 2023-2024.
@@ -82,30 +83,30 @@ function isQueueRouterPayload(input) {
82
83
  return isObject(input) && typeof input.id === 'string' && typeof input.type === 'string' && hasOwnProperty$1(input, 'data') && isObject(input.data) && hasOwnProperty$1(input, 'metadata') && isObject(input.metadata);
83
84
  }
84
85
 
85
- const instance$a = singa({
86
+ const instance$b = singa({
86
87
  name: 'amqp'
87
88
  });
88
89
  function setAmqpClientFactory(factory) {
89
- instance$a.setFactory(factory);
90
+ instance$b.setFactory(factory);
90
91
  }
91
92
  function isAmqpClientUsable() {
92
- return instance$a.has() || instance$a.hasFactory();
93
+ return instance$b.has() || instance$b.hasFactory();
93
94
  }
94
95
  function useAmqpClient() {
95
- return instance$a.use();
96
+ return instance$b.use();
96
97
  }
97
98
 
98
- const instance$9 = singa({
99
+ const instance$a = singa({
99
100
  name: 'vault'
100
101
  });
101
102
  function setVaultFactory(factory) {
102
- instance$9.setFactory(factory);
103
+ instance$a.setFactory(factory);
103
104
  }
104
105
  function isVaultClientUsable() {
105
- return instance$9.has() || instance$9.hasFactory();
106
+ return instance$a.has() || instance$a.hasFactory();
106
107
  }
107
108
  function useVaultClient() {
108
- return instance$9.use();
109
+ return instance$a.use();
109
110
  }
110
111
 
111
112
  function guessAuthupTokenCreatorOptions() {
@@ -126,17 +127,17 @@ function guessAuthupTokenCreatorOptions() {
126
127
  return options;
127
128
  }
128
129
 
129
- const instance$8 = singa({
130
+ const instance$9 = singa({
130
131
  name: 'clientAuthenticationHook'
131
132
  });
132
133
  function setClientAuthenticationHookFactory(factory) {
133
- instance$8.setFactory(factory);
134
+ instance$9.setFactory(factory);
134
135
  }
135
136
  function isClientAuthenticationHookUsable() {
136
- return instance$8.has() || instance$8.hasFactory();
137
+ return instance$9.has() || instance$9.hasFactory();
137
138
  }
138
139
  function useClientAuthenticationHook() {
139
- return instance$8.use();
140
+ return instance$9.use();
140
141
  }
141
142
 
142
143
  class AuthupClient extends Client {
@@ -153,49 +154,49 @@ class AuthupClient extends Client {
153
154
  }
154
155
  }
155
156
 
156
- const instance$7 = singa({
157
+ const instance$8 = singa({
157
158
  name: 'authup'
158
159
  });
159
160
  function useAuthupClient() {
160
- return instance$7.use();
161
+ return instance$8.use();
161
162
  }
162
163
  function isAuthupClientUsable() {
163
- return instance$7.has() || instance$7.hasFactory();
164
+ return instance$8.has() || instance$8.hasFactory();
164
165
  }
165
166
  function setAuthupClientFactory(factory) {
166
- instance$7.setFactory(factory);
167
+ instance$8.setFactory(factory);
167
168
  }
168
169
 
169
- const instance$6 = singa({
170
+ const instance$7 = singa({
170
171
  name: 'redis'
171
172
  });
172
173
  function setRedisFactory(factory) {
173
- instance$6.setFactory(factory);
174
+ instance$7.setFactory(factory);
174
175
  }
175
176
  function isRedisClientUsable() {
176
- return instance$6.has() || instance$6.hasFactory();
177
+ return instance$7.has() || instance$7.hasFactory();
177
178
  }
178
179
  function setRedisClient(input) {
179
- instance$6.set(input);
180
+ instance$7.set(input);
180
181
  }
181
182
  function useRedisClient() {
182
- return instance$6.use();
183
+ return instance$7.use();
183
184
  }
184
185
 
185
- const instance$5 = singa({
186
+ const instance$6 = singa({
186
187
  name: 'redisPublish',
187
188
  factory: ()=>useRedisClient().duplicate()
188
189
  });
189
190
  function useRedisPublishClient() {
190
- return instance$5.use();
191
+ return instance$6.use();
191
192
  }
192
193
 
193
- const instance$4 = singa({
194
+ const instance$5 = singa({
194
195
  name: 'redisSubscribe',
195
196
  factory: ()=>useRedisClient().duplicate()
196
197
  });
197
198
  function useRedisSubscribeClient() {
198
- return instance$4.use();
199
+ return instance$5.use();
199
200
  }
200
201
 
201
202
  /*
@@ -375,7 +376,7 @@ class Cache {
375
376
  }
376
377
  }
377
378
 
378
- const instance$3 = singa({
379
+ const instance$4 = singa({
379
380
  name: 'cache',
380
381
  factory: ()=>{
381
382
  let adapter;
@@ -388,7 +389,7 @@ const instance$3 = singa({
388
389
  }
389
390
  });
390
391
  function useCache() {
391
- return instance$3.use();
392
+ return instance$4.use();
392
393
  }
393
394
 
394
395
  function createLogger(ctx = {}) {
@@ -430,20 +431,20 @@ function createLogger(ctx = {}) {
430
431
  });
431
432
  }
432
433
 
433
- const instance$2 = singa({
434
+ const instance$3 = singa({
434
435
  name: 'logger'
435
436
  });
436
437
  function setLoggerFactory(factory) {
437
- instance$2.setFactory(factory);
438
+ instance$3.setFactory(factory);
438
439
  }
439
440
  function isLoggerUsable() {
440
- return instance$2.has() || instance$2.hasFactory();
441
+ return instance$3.has() || instance$3.hasFactory();
441
442
  }
442
443
  function setLogger(input) {
443
- instance$2.set(input);
444
+ instance$3.set(input);
444
445
  }
445
446
  function useLogger() {
446
- return instance$2.use();
447
+ return instance$3.use();
447
448
  }
448
449
 
449
450
  /*
@@ -608,7 +609,7 @@ class DomainEventSocketPublisher {
608
609
  }
609
610
  }
610
611
 
611
- const instance$1 = singa({
612
+ const instance$2 = singa({
612
613
  name: 'domainEventPublisher',
613
614
  factory: ()=>{
614
615
  const publisher = new DomainEventPublisher();
@@ -621,6 +622,19 @@ const instance$1 = singa({
621
622
  }
622
623
  });
623
624
  function useDomainEventPublisher() {
625
+ return instance$2.use();
626
+ }
627
+
628
+ const instance$1 = singa({
629
+ name: 'loki'
630
+ });
631
+ function setLokiFactory(factory) {
632
+ instance$1.setFactory(factory);
633
+ }
634
+ function isLokiClientUsable() {
635
+ return instance$1.has() || instance$1.hasFactory();
636
+ }
637
+ function useLokiClient() {
624
638
  return instance$1.use();
625
639
  }
626
640
 
@@ -744,5 +758,5 @@ function useQueueRouter() {
744
758
  return Object.prototype.hasOwnProperty.call(obj, prop);
745
759
  }
746
760
 
747
- export { AuthupClient, Cache, ComponentError, DomainEventPublisher, DomainEventRedisPublisher, DomainEventSocketPublisher, MemoryCacheAdapter, QueueRouter, QueueRouterRoutingType, RedisCacheAdapter, buildCacheKey, buildQueueRouterPublishPayload, createCacheAdapter, createLogger, guessAuthupTokenCreatorOptions, hasOwnProperty, isAmqpClientUsable, isAuthupClientUsable, isClientAuthenticationHookUsable, isComponentError, isLoggerUsable, isQueuePayload, isQueueRouterPayload, isQueueRouterUsable, isRedisClientUsable, isVaultClientUsable, setAmqpClientFactory, setAuthupClientFactory, setClientAuthenticationHookFactory, setLogger, setLoggerFactory, setRedisClient, setRedisFactory, setVaultFactory, useAmqpClient, useAuthupClient, useCache, useClientAuthenticationHook, useDomainEventPublisher, useLogger, useQueueRouter, useRedisClient, useRedisPublishClient, useRedisSubscribeClient, useVaultClient };
761
+ export { AuthupClient, Cache, ComponentError, DomainEventPublisher, DomainEventRedisPublisher, DomainEventSocketPublisher, MemoryCacheAdapter, QueueRouter, QueueRouterRoutingType, RedisCacheAdapter, buildCacheKey, buildQueueRouterPublishPayload, createCacheAdapter, createLogger, guessAuthupTokenCreatorOptions, hasOwnProperty, isAmqpClientUsable, isAuthupClientUsable, isClientAuthenticationHookUsable, isComponentError, isLoggerUsable, isLokiClientUsable, isQueuePayload, isQueueRouterPayload, isQueueRouterUsable, isRedisClientUsable, isVaultClientUsable, setAmqpClientFactory, setAuthupClientFactory, setClientAuthenticationHookFactory, setLogger, setLoggerFactory, setLokiFactory, setRedisClient, setRedisFactory, setVaultFactory, useAmqpClient, useAuthupClient, useCache, useClientAuthenticationHook, useDomainEventPublisher, useLogger, useLokiClient, useQueueRouter, useRedisClient, useRedisPublishClient, useRedisSubscribeClient, useVaultClient };
748
762
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/core/component/error.ts","../src/core/component/helper.ts","../src/core/queue/utils.ts","../src/core/queue-router/constants.ts","../src/core/queue-router/helpers.ts","../src/services/amqp/module.ts","../src/services/vault/singleton.ts","../src/services/authup/helpers.ts","../src/services/authup-client-authentication-hook/singleton.ts","../src/services/authup/module.ts","../src/services/authup/singleton.ts","../src/services/redis/singleton.ts","../src/services/redis/singleton-publish.ts","../src/services/redis/singleton-subscribe.ts","../src/services/cache/adapters/memory.ts","../src/services/cache/adapters/redis.ts","../src/services/cache/adapters/factory.ts","../src/services/cache/helper.ts","../src/services/cache/module.ts","../src/services/cache/singleton.ts","../src/services/logger/module.ts","../src/services/logger/singleton.ts","../src/services/domain-event/module.ts","../src/services/domain-event/utils.ts","../src/services/domain-event/redis/module.ts","../src/services/domain-event/socket/module.ts","../src/services/domain-event/singleton.ts","../src/core/queue-router/module.ts","../src/core/queue-router/singleton.ts","../src/utils/has-property.ts"],"sourcesContent":["/*\n * Copyright (c) 2023-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { ComponentErrorOptions } from './type';\n\nexport class ComponentError extends Error {\n public code?: string | null;\n\n constructor(input: ComponentErrorOptions) {\n super(input.message, { cause: input.cause });\n\n this.code = input.code;\n }\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from '@privateaim/kit';\nimport type { ComponentError } from './error';\n\nexport function isComponentError(input: unknown) : input is ComponentError {\n if (!isObject(input)) {\n return false;\n }\n\n if (\n typeof input.message !== 'undefined' &&\n typeof input.message !== 'string'\n ) {\n return false;\n }\n\n if (typeof input.code === 'undefined') {\n return true;\n }\n\n return typeof input.code === 'string' || input.code === null;\n}\n","/*\n * Copyright (c) 2023-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { hasOwnProperty, isObject } from '@privateaim/kit';\nimport type { QueuePayload } from './type';\n\nexport function isQueuePayload(input: unknown) : input is QueuePayload {\n return isObject(input) &&\n hasOwnProperty(input, 'data') &&\n isObject(input.data) &&\n hasOwnProperty(input, 'metadata') &&\n isObject(input.metadata);\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum QueueRouterRoutingType {\n WORK = 'work',\n PUB_SUB = 'pubSub',\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { createNanoID, hasOwnProperty, isObject } from '@privateaim/kit';\nimport type { QueueRouterPayload, QueueRouterPayloadInput } from './types';\n\nexport function buildQueueRouterPublishPayload(\n input: QueueRouterPayloadInput,\n) : QueueRouterPayload {\n return {\n id: input.id || createNanoID(),\n type: input.type,\n data: input.data || {},\n metadata: {\n timestamp: Date.now(),\n ...input.metadata,\n },\n };\n}\n\nexport function isQueueRouterPayload(input: unknown) : input is QueueRouterPayload {\n return isObject(input) &&\n typeof input.id === 'string' &&\n typeof input.type === 'string' &&\n hasOwnProperty(input, 'data') &&\n isObject(input.data) &&\n hasOwnProperty(input, 'metadata') &&\n isObject(input.metadata);\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Client } from 'amqp-extension';\nimport type { Factory } from 'singa';\nimport { singa } from 'singa';\n\nconst instance = singa<Client>({\n name: 'amqp',\n});\n\nexport function setAmqpClientFactory(factory: Factory<Client>) {\n instance.setFactory(factory);\n}\n\nexport function isAmqpClientUsable() {\n return instance.has() || instance.hasFactory();\n}\n\nexport function useAmqpClient() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Factory } from 'singa';\nimport { singa } from 'singa';\nimport type { VaultClient } from '@hapic/vault';\n\nconst instance = singa<VaultClient>({\n name: 'vault',\n});\n\nexport function setVaultFactory(factory: Factory<VaultClient>) {\n instance.setFactory(factory);\n}\n\nexport function isVaultClientUsable() {\n return instance.has() || instance.hasFactory();\n}\n\nexport function useVaultClient() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { TokenCreatorOptions } from '@authup/core-http-kit';\nimport { isVaultClientUsable, useVaultClient } from '../vault';\n\nexport function guessAuthupTokenCreatorOptions() : TokenCreatorOptions {\n let options : TokenCreatorOptions;\n if (isVaultClientUsable()) {\n options = {\n type: 'robotInVault',\n name: 'system',\n vault: useVaultClient(),\n };\n } else {\n options = {\n type: 'user',\n name: 'admin',\n password: 'start123',\n };\n }\n\n return options;\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { ClientAuthenticationHook } from '@authup/core-http-kit';\nimport type { Factory } from 'singa';\nimport { singa } from 'singa';\n\nconst instance = singa<ClientAuthenticationHook>({\n name: 'clientAuthenticationHook',\n});\n\nexport function setClientAuthenticationHookFactory(factory: Factory<ClientAuthenticationHook>) {\n instance.setFactory(factory);\n}\n\nexport function isClientAuthenticationHookUsable() {\n return instance.has() || instance.hasFactory();\n}\n\nexport function useClientAuthenticationHook() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport {\n Client,\n ClientAuthenticationHook,\n} from '@authup/core-http-kit';\nimport {\n isClientAuthenticationHookUsable,\n setClientAuthenticationHookFactory,\n useClientAuthenticationHook,\n} from '../authup-client-authentication-hook';\nimport { guessAuthupTokenCreatorOptions } from './helpers';\nimport type { AuthupClientOptions } from './types';\n\nexport class AuthupClient extends Client {\n constructor(options: AuthupClientOptions = {}) {\n super(options);\n\n if (!isClientAuthenticationHookUsable()) {\n setClientAuthenticationHookFactory(\n () => new ClientAuthenticationHook({\n baseURL: options.baseURL,\n tokenCreator: options.tokenCreator || guessAuthupTokenCreatorOptions(),\n }),\n );\n }\n\n const hook = useClientAuthenticationHook();\n hook.attach(this);\n }\n}\n","/*\n * Copyright (c) 2023-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Client } from '@authup/core-http-kit';\nimport type { Factory } from 'singa';\nimport { singa } from 'singa';\n\nconst instance = singa<Client>({\n name: 'authup',\n});\n\nexport function useAuthupClient() {\n return instance.use();\n}\n\nexport function isAuthupClientUsable() {\n return instance.has() || instance.hasFactory();\n}\n\nexport function setAuthupClientFactory(factory: Factory<Client>) {\n instance.setFactory(factory);\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Client } from 'redis-extension';\nimport type { Factory } from 'singa';\nimport { singa } from 'singa';\n\nconst instance = singa<Client>({\n name: 'redis',\n});\n\nexport function setRedisFactory(factory: Factory<Client>) {\n instance.setFactory(factory);\n}\n\nexport function isRedisClientUsable() {\n return instance.has() || instance.hasFactory();\n}\n\nexport function setRedisClient(input: Client) {\n instance.set(input);\n}\n\nexport function useRedisClient() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Client } from 'redis-extension';\nimport { singa } from 'singa';\nimport { useRedisClient } from './singleton';\n\nconst instance = singa<Client>({\n name: 'redisPublish',\n factory: () => useRedisClient().duplicate(),\n});\n\nexport function useRedisPublishClient() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Client } from 'redis-extension';\nimport { singa } from 'singa';\nimport { useRedisClient } from './singleton';\n\nconst instance = singa<Client>({\n name: 'redisSubscribe',\n factory: () => useRedisClient().duplicate(),\n});\n\nexport function useRedisSubscribeClient() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Options } from '@isaacs/ttlcache';\nimport TTLCache from '@isaacs/ttlcache';\nimport type { CacheClearOptions, CacheSetOptions } from '../types';\nimport type { CacheAdapter } from './types';\n\nexport class MemoryCacheAdapter<\n VALUE = any,\n> implements CacheAdapter {\n protected instance : TTLCache<string, VALUE>;\n\n constructor(options: Options<string, VALUE> = {}) {\n this.instance = new TTLCache<string, VALUE>({\n checkAgeOnGet: true,\n ttl: Infinity,\n ...(options || {}),\n });\n }\n\n async get(key: string): Promise<VALUE> {\n return this.instance.get(key);\n }\n\n async has(key: string) : Promise<boolean> {\n return this.instance.has(key);\n }\n\n async set(key: string, value: VALUE, options: CacheSetOptions): Promise<void> {\n this.instance.set(key, value, {\n ttl: options.ttl,\n });\n }\n\n async drop(key: string): Promise<void> {\n this.instance.delete(key);\n }\n\n async dropMany(keys: string[]) : Promise<void> {\n for (let i = 0; i < keys.length; i++) {\n this.instance.delete(keys[i]);\n }\n }\n\n async clear(options: CacheClearOptions = {}) : Promise<void> {\n if (options.prefix) {\n const keys = this.instance.keys();\n let iterator = keys.next();\n while (!iterator.done) {\n if (iterator.value.startsWith(options.prefix)) {\n this.instance.delete(iterator.value);\n }\n\n iterator = keys.next();\n }\n\n return;\n }\n\n this.instance.clear();\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Client } from 'redis-extension';\nimport { JsonAdapter } from 'redis-extension';\nimport { useRedisClient } from '../../redis';\nimport type { CacheClearOptions, CacheSetOptions } from '../types';\nimport type { CacheAdapter } from './types';\n\nexport class RedisCacheAdapter implements CacheAdapter {\n protected client : Client;\n\n protected instance : JsonAdapter;\n\n constructor() {\n this.client = useRedisClient();\n this.instance = new JsonAdapter(this.client);\n }\n\n async get(key: string): Promise<any> {\n return this.instance.get(key);\n }\n\n async has(key: string) : Promise<boolean> {\n const exists = await this.client.exists(key);\n\n return !!exists;\n }\n\n async set(key: string, value: any, options: CacheSetOptions): Promise<void> {\n await this.instance.set(key, value, {\n milliseconds: options.ttl,\n });\n }\n\n async drop(key: string): Promise<void> {\n await this.instance.drop(key);\n }\n\n async dropMany(keys: string[]) : Promise<void> {\n const pipeline = this.client.pipeline();\n\n for (let i = 0; i < keys.length; i++) {\n pipeline.del(keys[i]);\n }\n\n await pipeline.exec();\n }\n\n async clear(options: CacheClearOptions = {}) : Promise<void> {\n if (options.prefix) {\n const pipeline = this.client.pipeline();\n\n const keys = await this.client.keys(`${options.prefix}*`);\n for (let i = 0; i < keys.length; i++) {\n pipeline.del(keys[i]);\n }\n\n await pipeline.exec();\n\n return;\n }\n await this.client.flushdb();\n }\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isRedisClientUsable } from '../../redis';\nimport { MemoryCacheAdapter } from './memory';\nimport { RedisCacheAdapter } from './redis';\n\nexport function createCacheAdapter() {\n if (isRedisClientUsable()) {\n return new RedisCacheAdapter();\n }\n\n return new MemoryCacheAdapter();\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { buildRedisKeyPath } from '../redis';\nimport type { CacheKeyBuildOptions } from './types';\n\nexport function buildCacheKey(options: CacheKeyBuildOptions) {\n return buildRedisKeyPath(options);\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { CacheAdapter } from './adapters';\nimport type { CacheClearOptions, CacheSetOptions } from './types';\n\nexport class Cache {\n protected adapter : CacheAdapter;\n\n constructor(adapter: CacheAdapter) {\n this.adapter = adapter;\n }\n\n async set(key: string, value: any, options: CacheSetOptions = {}) : Promise<void> {\n await this.adapter.set(key, value, options);\n }\n\n async get(key: string) : Promise<any | undefined> {\n return this.adapter.get(key);\n }\n\n async has(key: string) : Promise<boolean> {\n return this.adapter.has(key);\n }\n\n async drop(key: string) : Promise<void> {\n return this.adapter.drop(key);\n }\n\n async dropMany(keys: string[]) : Promise<void> {\n return this.adapter.dropMany(keys);\n }\n\n async clear(options: CacheClearOptions = {}) : Promise<void> {\n return this.adapter.clear(options);\n }\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { singa } from 'singa';\nimport { isRedisClientUsable } from '../redis';\nimport type { CacheAdapter } from './adapters';\nimport { MemoryCacheAdapter, RedisCacheAdapter } from './adapters';\nimport { Cache } from './module';\n\nconst instance = singa<Cache>({\n name: 'cache',\n factory: () => {\n let adapter : CacheAdapter;\n if (isRedisClientUsable()) {\n adapter = new RedisCacheAdapter();\n } else {\n adapter = new MemoryCacheAdapter();\n }\n\n return new Cache(adapter);\n },\n});\n\nexport function useCache() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { read } from 'envix';\nimport path from 'node:path';\nimport { EnvironmentName } from 'typeorm-extension';\nimport type { Logger } from 'winston';\nimport { createLogger as create, format, transports } from 'winston';\nimport type { LoggerCreateContext, LoggerTransports } from './types';\n\nexport function createLogger(ctx: LoggerCreateContext = {}) : Logger {\n const { directory, options = {} } = ctx;\n\n let loggerTransports : LoggerTransports;\n if (read('env') === EnvironmentName.PRODUCTION) {\n loggerTransports = [\n new transports.Console({\n level: 'info',\n }),\n new transports.File({\n filename: path.join(directory || process.cwd(), 'access.log'),\n level: 'http',\n maxsize: 10 * 1024 * 1024, // 10MB\n maxFiles: 5,\n }),\n new transports.File({\n filename: path.join(directory || process.cwd(), 'error.log'),\n level: 'warn',\n maxsize: 10 * 1024 * 1024, // 10MB\n maxFiles: 5,\n }),\n ];\n } else {\n loggerTransports = [\n new transports.Console({\n level: 'debug',\n }),\n ];\n }\n\n return create({\n format: format.combine(\n format.errors({ stack: true }),\n format.timestamp(),\n format.colorize(),\n format.simple(),\n ),\n level: 'debug',\n transports: loggerTransports,\n // todo: deeply merge options\n ...(options || {}),\n });\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { type Factory, singa } from 'singa';\nimport type { Logger } from 'winston';\n\nconst instance = singa<Logger>({\n name: 'logger',\n});\n\nexport function setLoggerFactory(factory: Factory<Logger>) {\n instance.setFactory(factory);\n}\n\nexport function isLoggerUsable() {\n return instance.has() || instance.hasFactory();\n}\n\nexport function setLogger(input: Logger) {\n instance.set(input);\n}\n\nexport function useLogger() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { DomainEventRecord } from '@privateaim/kit';\nimport { buildDomainEventFullName } from '@privateaim/kit';\nimport { isLoggerUsable, useLogger } from '../logger';\nimport type { DomainEventPublishContext, IDomainEventPublisher } from './type';\n\nexport class DomainEventPublisher implements IDomainEventPublisher {\n protected publishers : Set<IDomainEventPublisher>;\n\n constructor() {\n this.publishers = new Set<IDomainEventPublisher>();\n }\n\n addPublisher(publisher: IDomainEventPublisher) {\n this.publishers.add(publisher);\n }\n\n async safePublish<T extends DomainEventRecord>(\n ctx: DomainEventPublishContext<T>,\n ) : Promise<void> {\n try {\n await this.publish(ctx);\n } catch (e) {\n if (isLoggerUsable()) {\n useLogger().error(`Publishing event ${buildDomainEventFullName(ctx.data.type, ctx.data.event)} failed`);\n useLogger().error(e);\n }\n }\n }\n\n async publish<T extends DomainEventRecord>(\n ctx: DomainEventPublishContext<T>,\n ) : Promise<void> {\n if (isLoggerUsable()) {\n useLogger().info(`Publishing event ${buildDomainEventFullName(ctx.data.type, ctx.data.event)}`);\n }\n\n const publishers = this.publishers.values();\n while (true) {\n const it = publishers.next();\n if (it.done) {\n return;\n }\n\n await it.value.publish(ctx);\n }\n }\n}\n","/*\n * Copyright (c) 2023-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from '@privateaim/kit';\nimport type { DomainEventChannelName } from './type';\n\nexport function transformEventData<T>(input: T) : T {\n if (isObject(input)) {\n const keys = Object.keys(input);\n for (let i = 0; i < keys.length; i++) {\n const value = input[keys[i]];\n if (value instanceof Date) {\n input[keys[i]] = value.toISOString();\n }\n }\n }\n\n return input;\n}\n\nexport function buildEventChannelName(\n input: DomainEventChannelName,\n id?: string | number,\n) : string {\n if (typeof input === 'string') {\n return input;\n }\n\n return input(id);\n}\n","/*\n * Copyright (c) 2023-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Client } from 'redis-extension';\nimport type { DomainEventPublishContext, IDomainEventPublisher } from '../type';\nimport { buildEventChannelName, transformEventData } from '../utils';\n\nexport class DomainEventRedisPublisher implements IDomainEventPublisher {\n protected driver : Client;\n\n constructor(client: Client) {\n this.driver = client;\n }\n\n async publish(ctx: DomainEventPublishContext) : Promise<void> {\n const data = JSON.stringify(transformEventData(ctx.data));\n\n const pipeline = this.driver.pipeline();\n for (let i = 0; i < ctx.destinations.length; i++) {\n const keyPrefix = (ctx.destinations[i].namespace ? `${ctx.destinations[i].namespace}:` : '');\n\n let key = keyPrefix + buildEventChannelName(ctx.destinations[i].channel);\n pipeline.publish(key, data);\n\n if (typeof ctx.destinations[i].channel === 'function') {\n key = keyPrefix + buildEventChannelName(ctx.destinations[i].channel, ctx.data.data.id);\n pipeline.publish(key, data);\n }\n }\n\n await pipeline.exec();\n }\n}\n","/*\n * Copyright (c) 2022-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { buildDomainEventFullName } from '@privateaim/kit';\nimport { Emitter } from '@socket.io/redis-emitter';\nimport type { Client } from 'redis-extension';\nimport type { DomainEventPublishContext, IDomainEventPublisher } from '../type';\nimport { buildEventChannelName, transformEventData } from '../utils';\n\nexport class DomainEventSocketPublisher implements IDomainEventPublisher {\n protected client : Client;\n\n constructor(client: Client) {\n this.client = client;\n }\n\n async publish(ctx: DomainEventPublishContext) : Promise<void> {\n ctx.data = transformEventData(ctx.data);\n\n for (let i = 0; i < ctx.destinations.length; i++) {\n let namespace : string;\n if (ctx.destinations[i].namespace) {\n namespace = ctx.destinations[i].namespace;\n } else {\n namespace = '/';\n }\n\n const emitter = new Emitter(this.client, {}, namespace);\n\n const fullEventName = buildDomainEventFullName(ctx.data.type, ctx.data.event);\n\n const rooms : string[] = [\n buildEventChannelName(ctx.destinations[i].channel),\n ];\n\n if (typeof ctx.destinations[i].channel === 'function') {\n rooms.push(buildEventChannelName(ctx.destinations[i].channel, ctx.data.data.id));\n }\n\n for (let j = 0; j < rooms.length; j++) {\n emitter\n .in(rooms[j])\n .emit(fullEventName, {\n ...ctx.data,\n meta: {\n namespace,\n roomName: rooms[j],\n },\n });\n }\n }\n }\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { singa } from 'singa';\nimport { isRedisClientUsable, useRedisClient } from '../redis';\nimport { DomainEventPublisher } from './module';\nimport { DomainEventRedisPublisher } from './redis';\nimport { DomainEventSocketPublisher } from './socket';\n\nconst instance = singa<DomainEventPublisher>({\n name: 'domainEventPublisher',\n factory: () => {\n const publisher = new DomainEventPublisher();\n\n if (isRedisClientUsable()) {\n const client = useRedisClient();\n\n publisher.addPublisher(new DomainEventRedisPublisher(client));\n publisher.addPublisher(new DomainEventSocketPublisher(client));\n }\n\n return publisher;\n },\n});\n\nexport function useDomainEventPublisher() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { ExchangeType } from 'amqp-extension';\nimport type { Client } from 'amqp-extension';\nimport { isLoggerUsable, useLogger } from '../../services';\nimport { QueueRouterRoutingType } from './constants';\nimport { isQueueRouterPayload } from './helpers';\nimport type {\n QueueRouterHandler,\n QueueRouterHandlers,\n QueueRouterPayload, QueueRouterRouting,\n} from './types';\n\nexport class QueueRouter {\n protected driver : Client;\n\n //----------------------------------------------------------------\n\n constructor(driver: Client) {\n this.driver = driver;\n }\n\n //----------------------------------------------------------------\n\n publish(message: QueueRouterPayload) : Promise<boolean> {\n let exchange : Client;\n if (message.metadata.routing.type === 'work') {\n exchange = this.driver.of({\n type: ExchangeType.DIRECT,\n name: message.metadata.routing.namespace || '',\n });\n } else {\n exchange = this.driver.of({\n type: ExchangeType.TOPIC,\n name: message.metadata.routing.namespace || 'FLAME',\n });\n }\n\n if (isLoggerUsable()) {\n useLogger()\n .debug(`Publishing queue message ${message.type} in ${message.metadata.routing.key}`);\n }\n\n return exchange.publish(message.metadata.routing.key, message, {\n type: message.type,\n messageId: message.id,\n persistent: message.metadata.persistent ??\n message.metadata.routing.type === QueueRouterRoutingType.WORK,\n });\n }\n\n consume(routing: QueueRouterRouting, handlers: QueueRouterHandlers) : Promise<void> {\n let exchange : Client;\n if (routing.type === 'work') {\n exchange = this.driver.of({\n type: ExchangeType.DIRECT,\n name: routing.namespace || '',\n });\n } else {\n exchange = this.driver.of({\n type: ExchangeType.TOPIC,\n name: routing.namespace || 'FLAME',\n });\n }\n\n return exchange.consume(routing.key, {\n prefetchCount: routing.type === QueueRouterRoutingType.WORK ? 1 : undefined,\n // noAck: routing.type !== QueueRouterRoutingType.WORK,\n requeueOnFailure: routing.type === QueueRouterRoutingType.WORK,\n }, {\n $any: async (input) => {\n const payload = JSON.parse(input.content.toString('utf-8'));\n if (!isQueueRouterPayload(payload)) {\n return;\n }\n\n if (input.fields.redelivered) {\n if (isLoggerUsable()) {\n useLogger()\n .debug(`Queue message ${input.properties.type} in ${routing.key} is not processed again.`);\n }\n\n return;\n }\n\n if (isLoggerUsable()) {\n useLogger()\n .debug(`Consuming queue message ${input.properties.type} in ${routing.key}`);\n }\n\n let handler : QueueRouterHandler | undefined;\n\n if (\n typeof input.properties.type === 'string' &&\n handlers[input.properties.type]\n ) {\n handler = handlers[input.properties.type];\n } else {\n handler = handlers.$any;\n }\n\n if (typeof handler !== 'function') {\n if (isLoggerUsable()) {\n useLogger()\n .debug(`No queue handler to consume message ${input.properties.type} in ${routing.key}`);\n }\n\n return;\n }\n\n await handler(payload);\n },\n });\n }\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { singa } from 'singa';\nimport { isAmqpClientUsable, useAmqpClient } from '../../services';\nimport { QueueRouter } from './module';\n\nconst instance = singa<QueueRouter>({\n name: 'queueRouter',\n factory: () => {\n const amqp = useAmqpClient();\n\n return new QueueRouter(amqp);\n },\n});\n\nexport function isQueueRouterUsable() {\n return instance.has() || isAmqpClientUsable();\n}\n\nexport function useQueueRouter() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2022-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function hasOwnProperty<X extends Record<string, any>, Y extends PropertyKey>(\n obj: X,\n prop: Y,\n): obj is X & Record<Y, unknown> {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n"],"names":["_define_property","ComponentError","Error","constructor","input","message","cause","code","isComponentError","isObject","isQueuePayload","hasOwnProperty","data","metadata","QueueRouterRoutingType","buildQueueRouterPublishPayload","id","createNanoID","type","timestamp","Date","now","isQueueRouterPayload","instance","singa","name","setAmqpClientFactory","factory","setFactory","isAmqpClientUsable","has","hasFactory","useAmqpClient","use","setVaultFactory","isVaultClientUsable","useVaultClient","guessAuthupTokenCreatorOptions","options","vault","password","setClientAuthenticationHookFactory","isClientAuthenticationHookUsable","useClientAuthenticationHook","AuthupClient","Client","ClientAuthenticationHook","baseURL","tokenCreator","hook","attach","useAuthupClient","isAuthupClientUsable","setAuthupClientFactory","setRedisFactory","isRedisClientUsable","setRedisClient","set","useRedisClient","duplicate","useRedisPublishClient","useRedisSubscribeClient","MemoryCacheAdapter","get","key","value","ttl","drop","delete","dropMany","keys","i","length","clear","prefix","iterator","next","done","startsWith","TTLCache","checkAgeOnGet","Infinity","RedisCacheAdapter","exists","client","milliseconds","pipeline","del","exec","flushdb","JsonAdapter","createCacheAdapter","buildCacheKey","buildRedisKeyPath","Cache","adapter","useCache","createLogger","ctx","directory","loggerTransports","read","EnvironmentName","PRODUCTION","transports","Console","level","File","filename","path","join","process","cwd","maxsize","maxFiles","create","format","combine","errors","stack","colorize","simple","setLoggerFactory","isLoggerUsable","setLogger","useLogger","DomainEventPublisher","addPublisher","publisher","publishers","add","safePublish","publish","e","error","buildDomainEventFullName","event","info","values","it","Set","transformEventData","Object","toISOString","buildEventChannelName","DomainEventRedisPublisher","JSON","stringify","driver","destinations","keyPrefix","namespace","channel","DomainEventSocketPublisher","emitter","Emitter","fullEventName","rooms","push","j","in","emit","meta","roomName","useDomainEventPublisher","QueueRouter","exchange","routing","of","ExchangeType","DIRECT","TOPIC","debug","messageId","persistent","WORK","consume","handlers","prefetchCount","undefined","requeueOnFailure","$any","payload","parse","content","toString","fields","redelivered","properties","handler","amqp","isQueueRouterUsable","useQueueRouter","obj","prop","prototype","call"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../src/core/component/error.ts","../src/core/component/helper.ts","../src/core/queue/utils.ts","../src/core/queue-router/constants.ts","../src/core/queue-router/helpers.ts","../src/services/amqp/module.ts","../src/services/vault/singleton.ts","../src/services/authup/helpers.ts","../src/services/authup-client-authentication-hook/singleton.ts","../src/services/authup/module.ts","../src/services/authup/singleton.ts","../src/services/redis/singleton.ts","../src/services/redis/singleton-publish.ts","../src/services/redis/singleton-subscribe.ts","../src/services/cache/adapters/memory.ts","../src/services/cache/adapters/redis.ts","../src/services/cache/adapters/factory.ts","../src/services/cache/helper.ts","../src/services/cache/module.ts","../src/services/cache/singleton.ts","../src/services/logger/module.ts","../src/services/logger/singleton.ts","../src/services/domain-event/module.ts","../src/services/domain-event/utils.ts","../src/services/domain-event/redis/module.ts","../src/services/domain-event/socket/module.ts","../src/services/domain-event/singleton.ts","../src/services/loki/singleton.ts","../src/core/queue-router/module.ts","../src/core/queue-router/singleton.ts","../src/utils/has-property.ts"],"sourcesContent":["/*\n * Copyright (c) 2023-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { ComponentErrorOptions } from './type';\n\nexport class ComponentError extends Error {\n public code?: string | null;\n\n constructor(input: ComponentErrorOptions) {\n super(input.message, { cause: input.cause });\n\n this.code = input.code;\n }\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from '@privateaim/kit';\nimport type { ComponentError } from './error';\n\nexport function isComponentError(input: unknown) : input is ComponentError {\n if (!isObject(input)) {\n return false;\n }\n\n if (\n typeof input.message !== 'undefined' &&\n typeof input.message !== 'string'\n ) {\n return false;\n }\n\n if (typeof input.code === 'undefined') {\n return true;\n }\n\n return typeof input.code === 'string' || input.code === null;\n}\n","/*\n * Copyright (c) 2023-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { hasOwnProperty, isObject } from '@privateaim/kit';\nimport type { QueuePayload } from './type';\n\nexport function isQueuePayload(input: unknown) : input is QueuePayload {\n return isObject(input) &&\n hasOwnProperty(input, 'data') &&\n isObject(input.data) &&\n hasOwnProperty(input, 'metadata') &&\n isObject(input.metadata);\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum QueueRouterRoutingType {\n WORK = 'work',\n PUB_SUB = 'pubSub',\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { createNanoID, hasOwnProperty, isObject } from '@privateaim/kit';\nimport type { QueueRouterPayload, QueueRouterPayloadInput } from './types';\n\nexport function buildQueueRouterPublishPayload(\n input: QueueRouterPayloadInput,\n) : QueueRouterPayload {\n return {\n id: input.id || createNanoID(),\n type: input.type,\n data: input.data || {},\n metadata: {\n timestamp: Date.now(),\n ...input.metadata,\n },\n };\n}\n\nexport function isQueueRouterPayload(input: unknown) : input is QueueRouterPayload {\n return isObject(input) &&\n typeof input.id === 'string' &&\n typeof input.type === 'string' &&\n hasOwnProperty(input, 'data') &&\n isObject(input.data) &&\n hasOwnProperty(input, 'metadata') &&\n isObject(input.metadata);\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Client } from 'amqp-extension';\nimport type { Factory } from 'singa';\nimport { singa } from 'singa';\n\nconst instance = singa<Client>({\n name: 'amqp',\n});\n\nexport function setAmqpClientFactory(factory: Factory<Client>) {\n instance.setFactory(factory);\n}\n\nexport function isAmqpClientUsable() {\n return instance.has() || instance.hasFactory();\n}\n\nexport function useAmqpClient() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Factory } from 'singa';\nimport { singa } from 'singa';\nimport type { VaultClient } from '@hapic/vault';\n\nconst instance = singa<VaultClient>({\n name: 'vault',\n});\n\nexport function setVaultFactory(factory: Factory<VaultClient>) {\n instance.setFactory(factory);\n}\n\nexport function isVaultClientUsable() {\n return instance.has() || instance.hasFactory();\n}\n\nexport function useVaultClient() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { TokenCreatorOptions } from '@authup/core-http-kit';\nimport { isVaultClientUsable, useVaultClient } from '../vault';\n\nexport function guessAuthupTokenCreatorOptions() : TokenCreatorOptions {\n let options : TokenCreatorOptions;\n if (isVaultClientUsable()) {\n options = {\n type: 'robotInVault',\n name: 'system',\n vault: useVaultClient(),\n };\n } else {\n options = {\n type: 'user',\n name: 'admin',\n password: 'start123',\n };\n }\n\n return options;\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { ClientAuthenticationHook } from '@authup/core-http-kit';\nimport type { Factory } from 'singa';\nimport { singa } from 'singa';\n\nconst instance = singa<ClientAuthenticationHook>({\n name: 'clientAuthenticationHook',\n});\n\nexport function setClientAuthenticationHookFactory(factory: Factory<ClientAuthenticationHook>) {\n instance.setFactory(factory);\n}\n\nexport function isClientAuthenticationHookUsable() {\n return instance.has() || instance.hasFactory();\n}\n\nexport function useClientAuthenticationHook() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport {\n Client,\n ClientAuthenticationHook,\n} from '@authup/core-http-kit';\nimport {\n isClientAuthenticationHookUsable,\n setClientAuthenticationHookFactory,\n useClientAuthenticationHook,\n} from '../authup-client-authentication-hook';\nimport { guessAuthupTokenCreatorOptions } from './helpers';\nimport type { AuthupClientOptions } from './types';\n\nexport class AuthupClient extends Client {\n constructor(options: AuthupClientOptions = {}) {\n super(options);\n\n if (!isClientAuthenticationHookUsable()) {\n setClientAuthenticationHookFactory(\n () => new ClientAuthenticationHook({\n baseURL: options.baseURL,\n tokenCreator: options.tokenCreator || guessAuthupTokenCreatorOptions(),\n }),\n );\n }\n\n const hook = useClientAuthenticationHook();\n hook.attach(this);\n }\n}\n","/*\n * Copyright (c) 2023-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Client } from '@authup/core-http-kit';\nimport type { Factory } from 'singa';\nimport { singa } from 'singa';\n\nconst instance = singa<Client>({\n name: 'authup',\n});\n\nexport function useAuthupClient() {\n return instance.use();\n}\n\nexport function isAuthupClientUsable() {\n return instance.has() || instance.hasFactory();\n}\n\nexport function setAuthupClientFactory(factory: Factory<Client>) {\n instance.setFactory(factory);\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Client } from 'redis-extension';\nimport type { Factory } from 'singa';\nimport { singa } from 'singa';\n\nconst instance = singa<Client>({\n name: 'redis',\n});\n\nexport function setRedisFactory(factory: Factory<Client>) {\n instance.setFactory(factory);\n}\n\nexport function isRedisClientUsable() {\n return instance.has() || instance.hasFactory();\n}\n\nexport function setRedisClient(input: Client) {\n instance.set(input);\n}\n\nexport function useRedisClient() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Client } from 'redis-extension';\nimport { singa } from 'singa';\nimport { useRedisClient } from './singleton';\n\nconst instance = singa<Client>({\n name: 'redisPublish',\n factory: () => useRedisClient().duplicate(),\n});\n\nexport function useRedisPublishClient() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Client } from 'redis-extension';\nimport { singa } from 'singa';\nimport { useRedisClient } from './singleton';\n\nconst instance = singa<Client>({\n name: 'redisSubscribe',\n factory: () => useRedisClient().duplicate(),\n});\n\nexport function useRedisSubscribeClient() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Options } from '@isaacs/ttlcache';\nimport TTLCache from '@isaacs/ttlcache';\nimport type { CacheClearOptions, CacheSetOptions } from '../types';\nimport type { CacheAdapter } from './types';\n\nexport class MemoryCacheAdapter<\n VALUE = any,\n> implements CacheAdapter {\n protected instance : TTLCache<string, VALUE>;\n\n constructor(options: Options<string, VALUE> = {}) {\n this.instance = new TTLCache<string, VALUE>({\n checkAgeOnGet: true,\n ttl: Infinity,\n ...(options || {}),\n });\n }\n\n async get(key: string): Promise<VALUE> {\n return this.instance.get(key);\n }\n\n async has(key: string) : Promise<boolean> {\n return this.instance.has(key);\n }\n\n async set(key: string, value: VALUE, options: CacheSetOptions): Promise<void> {\n this.instance.set(key, value, {\n ttl: options.ttl,\n });\n }\n\n async drop(key: string): Promise<void> {\n this.instance.delete(key);\n }\n\n async dropMany(keys: string[]) : Promise<void> {\n for (let i = 0; i < keys.length; i++) {\n this.instance.delete(keys[i]);\n }\n }\n\n async clear(options: CacheClearOptions = {}) : Promise<void> {\n if (options.prefix) {\n const keys = this.instance.keys();\n let iterator = keys.next();\n while (!iterator.done) {\n if (iterator.value.startsWith(options.prefix)) {\n this.instance.delete(iterator.value);\n }\n\n iterator = keys.next();\n }\n\n return;\n }\n\n this.instance.clear();\n }\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Client } from 'redis-extension';\nimport { JsonAdapter } from 'redis-extension';\nimport { useRedisClient } from '../../redis';\nimport type { CacheClearOptions, CacheSetOptions } from '../types';\nimport type { CacheAdapter } from './types';\n\nexport class RedisCacheAdapter implements CacheAdapter {\n protected client : Client;\n\n protected instance : JsonAdapter;\n\n constructor() {\n this.client = useRedisClient();\n this.instance = new JsonAdapter(this.client);\n }\n\n async get(key: string): Promise<any> {\n return this.instance.get(key);\n }\n\n async has(key: string) : Promise<boolean> {\n const exists = await this.client.exists(key);\n\n return !!exists;\n }\n\n async set(key: string, value: any, options: CacheSetOptions): Promise<void> {\n await this.instance.set(key, value, {\n milliseconds: options.ttl,\n });\n }\n\n async drop(key: string): Promise<void> {\n await this.instance.drop(key);\n }\n\n async dropMany(keys: string[]) : Promise<void> {\n const pipeline = this.client.pipeline();\n\n for (let i = 0; i < keys.length; i++) {\n pipeline.del(keys[i]);\n }\n\n await pipeline.exec();\n }\n\n async clear(options: CacheClearOptions = {}) : Promise<void> {\n if (options.prefix) {\n const pipeline = this.client.pipeline();\n\n const keys = await this.client.keys(`${options.prefix}*`);\n for (let i = 0; i < keys.length; i++) {\n pipeline.del(keys[i]);\n }\n\n await pipeline.exec();\n\n return;\n }\n await this.client.flushdb();\n }\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isRedisClientUsable } from '../../redis';\nimport { MemoryCacheAdapter } from './memory';\nimport { RedisCacheAdapter } from './redis';\n\nexport function createCacheAdapter() {\n if (isRedisClientUsable()) {\n return new RedisCacheAdapter();\n }\n\n return new MemoryCacheAdapter();\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { buildRedisKeyPath } from '../redis';\nimport type { CacheKeyBuildOptions } from './types';\n\nexport function buildCacheKey(options: CacheKeyBuildOptions) {\n return buildRedisKeyPath(options);\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { CacheAdapter } from './adapters';\nimport type { CacheClearOptions, CacheSetOptions } from './types';\n\nexport class Cache {\n protected adapter : CacheAdapter;\n\n constructor(adapter: CacheAdapter) {\n this.adapter = adapter;\n }\n\n async set(key: string, value: any, options: CacheSetOptions = {}) : Promise<void> {\n await this.adapter.set(key, value, options);\n }\n\n async get(key: string) : Promise<any | undefined> {\n return this.adapter.get(key);\n }\n\n async has(key: string) : Promise<boolean> {\n return this.adapter.has(key);\n }\n\n async drop(key: string) : Promise<void> {\n return this.adapter.drop(key);\n }\n\n async dropMany(keys: string[]) : Promise<void> {\n return this.adapter.dropMany(keys);\n }\n\n async clear(options: CacheClearOptions = {}) : Promise<void> {\n return this.adapter.clear(options);\n }\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { singa } from 'singa';\nimport { isRedisClientUsable } from '../redis';\nimport type { CacheAdapter } from './adapters';\nimport { MemoryCacheAdapter, RedisCacheAdapter } from './adapters';\nimport { Cache } from './module';\n\nconst instance = singa<Cache>({\n name: 'cache',\n factory: () => {\n let adapter : CacheAdapter;\n if (isRedisClientUsable()) {\n adapter = new RedisCacheAdapter();\n } else {\n adapter = new MemoryCacheAdapter();\n }\n\n return new Cache(adapter);\n },\n});\n\nexport function useCache() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { read } from 'envix';\nimport path from 'node:path';\nimport { EnvironmentName } from 'typeorm-extension';\nimport type { Logger } from 'winston';\nimport { createLogger as create, format, transports } from 'winston';\nimport type { LoggerCreateContext, LoggerTransports } from './types';\n\nexport function createLogger(ctx: LoggerCreateContext = {}) : Logger {\n const { directory, options = {} } = ctx;\n\n let loggerTransports : LoggerTransports;\n if (read('env') === EnvironmentName.PRODUCTION) {\n loggerTransports = [\n new transports.Console({\n level: 'info',\n }),\n new transports.File({\n filename: path.join(directory || process.cwd(), 'access.log'),\n level: 'http',\n maxsize: 10 * 1024 * 1024, // 10MB\n maxFiles: 5,\n }),\n new transports.File({\n filename: path.join(directory || process.cwd(), 'error.log'),\n level: 'warn',\n maxsize: 10 * 1024 * 1024, // 10MB\n maxFiles: 5,\n }),\n ];\n } else {\n loggerTransports = [\n new transports.Console({\n level: 'debug',\n }),\n ];\n }\n\n return create({\n format: format.combine(\n format.errors({ stack: true }),\n format.timestamp(),\n format.colorize(),\n format.simple(),\n ),\n level: 'debug',\n transports: loggerTransports,\n // todo: deeply merge options\n ...(options || {}),\n });\n}\n","/*\n * Copyright (c) 2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { type Factory, singa } from 'singa';\nimport type { Logger } from 'winston';\n\nconst instance = singa<Logger>({\n name: 'logger',\n});\n\nexport function setLoggerFactory(factory: Factory<Logger>) {\n instance.setFactory(factory);\n}\n\nexport function isLoggerUsable() {\n return instance.has() || instance.hasFactory();\n}\n\nexport function setLogger(input: Logger) {\n instance.set(input);\n}\n\nexport function useLogger() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2024-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { DomainEventRecord } from '@privateaim/kit';\nimport { buildDomainEventFullName } from '@privateaim/kit';\nimport { isLoggerUsable, useLogger } from '../logger';\nimport type { DomainEventPublishContext, IDomainEventPublisher } from './type';\n\nexport class DomainEventPublisher implements IDomainEventPublisher {\n protected publishers : Set<IDomainEventPublisher>;\n\n constructor() {\n this.publishers = new Set<IDomainEventPublisher>();\n }\n\n addPublisher(publisher: IDomainEventPublisher) {\n this.publishers.add(publisher);\n }\n\n async safePublish<T extends DomainEventRecord>(\n ctx: DomainEventPublishContext<T>,\n ) : Promise<void> {\n try {\n await this.publish(ctx);\n } catch (e) {\n if (isLoggerUsable()) {\n useLogger().error(`Publishing event ${buildDomainEventFullName(ctx.data.type, ctx.data.event)} failed`);\n useLogger().error(e);\n }\n }\n }\n\n async publish<T extends DomainEventRecord>(\n ctx: DomainEventPublishContext<T>,\n ) : Promise<void> {\n if (isLoggerUsable()) {\n useLogger().info(`Publishing event ${buildDomainEventFullName(ctx.data.type, ctx.data.event)}`);\n }\n\n const publishers = this.publishers.values();\n while (true) {\n const it = publishers.next();\n if (it.done) {\n return;\n }\n\n await it.value.publish(ctx);\n }\n }\n}\n","/*\n * Copyright (c) 2023-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { isObject } from '@privateaim/kit';\nimport type { DomainEventChannelName } from './type';\n\nexport function transformEventData<T>(input: T) : T {\n if (isObject(input)) {\n const keys = Object.keys(input);\n for (let i = 0; i < keys.length; i++) {\n const value = input[keys[i]];\n if (value instanceof Date) {\n input[keys[i]] = value.toISOString();\n }\n }\n }\n\n return input;\n}\n\nexport function buildEventChannelName(\n input: DomainEventChannelName,\n id?: string | number,\n) : string {\n if (typeof input === 'string') {\n return input;\n }\n\n return input(id);\n}\n","/*\n * Copyright (c) 2023-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Client } from 'redis-extension';\nimport type { DomainEventPublishContext, IDomainEventPublisher } from '../type';\nimport { buildEventChannelName, transformEventData } from '../utils';\n\nexport class DomainEventRedisPublisher implements IDomainEventPublisher {\n protected driver : Client;\n\n constructor(client: Client) {\n this.driver = client;\n }\n\n async publish(ctx: DomainEventPublishContext) : Promise<void> {\n const data = JSON.stringify(transformEventData(ctx.data));\n\n const pipeline = this.driver.pipeline();\n for (let i = 0; i < ctx.destinations.length; i++) {\n const keyPrefix = (ctx.destinations[i].namespace ? `${ctx.destinations[i].namespace}:` : '');\n\n let key = keyPrefix + buildEventChannelName(ctx.destinations[i].channel);\n pipeline.publish(key, data);\n\n if (typeof ctx.destinations[i].channel === 'function') {\n key = keyPrefix + buildEventChannelName(ctx.destinations[i].channel, ctx.data.data.id);\n pipeline.publish(key, data);\n }\n }\n\n await pipeline.exec();\n }\n}\n","/*\n * Copyright (c) 2022-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { buildDomainEventFullName } from '@privateaim/kit';\nimport { Emitter } from '@socket.io/redis-emitter';\nimport type { Client } from 'redis-extension';\nimport type { DomainEventPublishContext, IDomainEventPublisher } from '../type';\nimport { buildEventChannelName, transformEventData } from '../utils';\n\nexport class DomainEventSocketPublisher implements IDomainEventPublisher {\n protected client : Client;\n\n constructor(client: Client) {\n this.client = client;\n }\n\n async publish(ctx: DomainEventPublishContext) : Promise<void> {\n ctx.data = transformEventData(ctx.data);\n\n for (let i = 0; i < ctx.destinations.length; i++) {\n let namespace : string;\n if (ctx.destinations[i].namespace) {\n namespace = ctx.destinations[i].namespace;\n } else {\n namespace = '/';\n }\n\n const emitter = new Emitter(this.client, {}, namespace);\n\n const fullEventName = buildDomainEventFullName(ctx.data.type, ctx.data.event);\n\n const rooms : string[] = [\n buildEventChannelName(ctx.destinations[i].channel),\n ];\n\n if (typeof ctx.destinations[i].channel === 'function') {\n rooms.push(buildEventChannelName(ctx.destinations[i].channel, ctx.data.data.id));\n }\n\n for (let j = 0; j < rooms.length; j++) {\n emitter\n .in(rooms[j])\n .emit(fullEventName, {\n ...ctx.data,\n meta: {\n namespace,\n roomName: rooms[j],\n },\n });\n }\n }\n }\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { singa } from 'singa';\nimport { isRedisClientUsable, useRedisClient } from '../redis';\nimport { DomainEventPublisher } from './module';\nimport { DomainEventRedisPublisher } from './redis';\nimport { DomainEventSocketPublisher } from './socket';\n\nconst instance = singa<DomainEventPublisher>({\n name: 'domainEventPublisher',\n factory: () => {\n const publisher = new DomainEventPublisher();\n\n if (isRedisClientUsable()) {\n const client = useRedisClient();\n\n publisher.addPublisher(new DomainEventRedisPublisher(client));\n publisher.addPublisher(new DomainEventSocketPublisher(client));\n }\n\n return publisher;\n },\n});\n\nexport function useDomainEventPublisher() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport type { Factory } from 'singa';\nimport { singa } from 'singa';\nimport type { LokiClient } from '@hapic/loki';\n\nconst instance = singa<LokiClient>({\n name: 'loki',\n});\n\nexport function setLokiFactory(factory: Factory<LokiClient>) {\n instance.setFactory(factory);\n}\n\nexport function isLokiClientUsable() {\n return instance.has() || instance.hasFactory();\n}\n\nexport function useLokiClient() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { ExchangeType } from 'amqp-extension';\nimport type { Client } from 'amqp-extension';\nimport { isLoggerUsable, useLogger } from '../../services';\nimport { QueueRouterRoutingType } from './constants';\nimport { isQueueRouterPayload } from './helpers';\nimport type {\n QueueRouterHandler,\n QueueRouterHandlers,\n QueueRouterPayload, QueueRouterRouting,\n} from './types';\n\nexport class QueueRouter {\n protected driver : Client;\n\n //----------------------------------------------------------------\n\n constructor(driver: Client) {\n this.driver = driver;\n }\n\n //----------------------------------------------------------------\n\n publish(message: QueueRouterPayload) : Promise<boolean> {\n let exchange : Client;\n if (message.metadata.routing.type === 'work') {\n exchange = this.driver.of({\n type: ExchangeType.DIRECT,\n name: message.metadata.routing.namespace || '',\n });\n } else {\n exchange = this.driver.of({\n type: ExchangeType.TOPIC,\n name: message.metadata.routing.namespace || 'FLAME',\n });\n }\n\n if (isLoggerUsable()) {\n useLogger()\n .debug(`Publishing queue message ${message.type} in ${message.metadata.routing.key}`);\n }\n\n return exchange.publish(message.metadata.routing.key, message, {\n type: message.type,\n messageId: message.id,\n persistent: message.metadata.persistent ??\n message.metadata.routing.type === QueueRouterRoutingType.WORK,\n });\n }\n\n consume(routing: QueueRouterRouting, handlers: QueueRouterHandlers) : Promise<void> {\n let exchange : Client;\n if (routing.type === 'work') {\n exchange = this.driver.of({\n type: ExchangeType.DIRECT,\n name: routing.namespace || '',\n });\n } else {\n exchange = this.driver.of({\n type: ExchangeType.TOPIC,\n name: routing.namespace || 'FLAME',\n });\n }\n\n return exchange.consume(routing.key, {\n prefetchCount: routing.type === QueueRouterRoutingType.WORK ? 1 : undefined,\n // noAck: routing.type !== QueueRouterRoutingType.WORK,\n requeueOnFailure: routing.type === QueueRouterRoutingType.WORK,\n }, {\n $any: async (input) => {\n const payload = JSON.parse(input.content.toString('utf-8'));\n if (!isQueueRouterPayload(payload)) {\n return;\n }\n\n if (input.fields.redelivered) {\n if (isLoggerUsable()) {\n useLogger()\n .debug(`Queue message ${input.properties.type} in ${routing.key} is not processed again.`);\n }\n\n return;\n }\n\n if (isLoggerUsable()) {\n useLogger()\n .debug(`Consuming queue message ${input.properties.type} in ${routing.key}`);\n }\n\n let handler : QueueRouterHandler | undefined;\n\n if (\n typeof input.properties.type === 'string' &&\n handlers[input.properties.type]\n ) {\n handler = handlers[input.properties.type];\n } else {\n handler = handlers.$any;\n }\n\n if (typeof handler !== 'function') {\n if (isLoggerUsable()) {\n useLogger()\n .debug(`No queue handler to consume message ${input.properties.type} in ${routing.key}`);\n }\n\n return;\n }\n\n await handler(payload);\n },\n });\n }\n}\n","/*\n * Copyright (c) 2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nimport { singa } from 'singa';\nimport { isAmqpClientUsable, useAmqpClient } from '../../services';\nimport { QueueRouter } from './module';\n\nconst instance = singa<QueueRouter>({\n name: 'queueRouter',\n factory: () => {\n const amqp = useAmqpClient();\n\n return new QueueRouter(amqp);\n },\n});\n\nexport function isQueueRouterUsable() {\n return instance.has() || isAmqpClientUsable();\n}\n\nexport function useQueueRouter() {\n return instance.use();\n}\n","/*\n * Copyright (c) 2022-2024.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport function hasOwnProperty<X extends Record<string, any>, Y extends PropertyKey>(\n obj: X,\n prop: Y,\n): obj is X & Record<Y, unknown> {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n"],"names":["_define_property","ComponentError","Error","input","message","cause","code","isComponentError","isObject","isQueuePayload","hasOwnProperty","data","metadata","QueueRouterRoutingType","buildQueueRouterPublishPayload","id","createNanoID","type","timestamp","Date","now","isQueueRouterPayload","instance","singa","name","setAmqpClientFactory","factory","setFactory","isAmqpClientUsable","has","hasFactory","useAmqpClient","use","setVaultFactory","isVaultClientUsable","useVaultClient","guessAuthupTokenCreatorOptions","options","vault","password","setClientAuthenticationHookFactory","isClientAuthenticationHookUsable","useClientAuthenticationHook","AuthupClient","Client","ClientAuthenticationHook","baseURL","tokenCreator","hook","attach","useAuthupClient","isAuthupClientUsable","setAuthupClientFactory","setRedisFactory","isRedisClientUsable","setRedisClient","set","useRedisClient","duplicate","useRedisPublishClient","useRedisSubscribeClient","MemoryCacheAdapter","get","key","value","ttl","drop","delete","dropMany","keys","i","length","clear","prefix","iterator","next","done","startsWith","TTLCache","checkAgeOnGet","Infinity","RedisCacheAdapter","exists","client","milliseconds","pipeline","del","exec","flushdb","JsonAdapter","createCacheAdapter","buildCacheKey","buildRedisKeyPath","Cache","adapter","useCache","createLogger","ctx","directory","loggerTransports","read","EnvironmentName","PRODUCTION","transports","Console","level","File","filename","path","join","process","cwd","maxsize","maxFiles","create","format","combine","errors","stack","colorize","simple","setLoggerFactory","isLoggerUsable","setLogger","useLogger","DomainEventPublisher","addPublisher","publisher","publishers","add","safePublish","publish","e","error","buildDomainEventFullName","event","info","values","it","Set","transformEventData","Object","toISOString","buildEventChannelName","DomainEventRedisPublisher","JSON","stringify","driver","destinations","keyPrefix","namespace","channel","DomainEventSocketPublisher","emitter","Emitter","fullEventName","rooms","push","j","in","emit","meta","roomName","useDomainEventPublisher","setLokiFactory","isLokiClientUsable","useLokiClient","QueueRouter","exchange","routing","of","ExchangeType","DIRECT","TOPIC","debug","messageId","persistent","WORK","consume","handlers","prefetchCount","undefined","requeueOnFailure","$any","payload","parse","content","toString","fields","redelivered","properties","handler","amqp","isQueueRouterUsable","useQueueRouter","obj","prop","prototype","call"],"mappings":"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"}
@@ -3,6 +3,7 @@ export * from './authup';
3
3
  export * from './authup-client-authentication-hook';
4
4
  export * from './cache';
5
5
  export * from './domain-event';
6
+ export * from './loki';
6
7
  export * from './logger';
7
8
  export * from './redis';
8
9
  export * from './vault';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAOA,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,qCAAqC,CAAC;AACpD,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAOA,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,qCAAqC,CAAC;AACpD,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './module';
2
+ export * from './singleton';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/loki/index.ts"],"names":[],"mappings":"AAOA,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { LokiClient, CompactorDeletionRequestCreate as LokiCompactorDeletionRequestCreate, Config as LokiConfig, ConfigInput as LokiConfigInput, DistributorPushStream as LokiDistributorPushStream, QuerierQueryRangeOptions as LokiQuerierQueryRangeOptions, QuerierQueryResult as LokiQuerierQueryResult, createClient as createLokiClient, nanoSeconds } from '@hapic/loki';
2
+ export { LokiClient, LokiConfig, LokiConfigInput, LokiCompactorDeletionRequestCreate, LokiDistributorPushStream, LokiQuerierQueryRangeOptions, LokiQuerierQueryResult, createLokiClient, nanoSeconds, };
3
+ //# sourceMappingURL=module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../src/services/loki/module.ts"],"names":[],"mappings":"AAOA,OAAO,EACH,UAAU,EACV,8BAA8B,IAAI,kCAAkC,EACpE,MAAM,IAAI,UAAU,EACpB,WAAW,IAAI,eAAe,EAC9B,qBAAqB,IAAI,yBAAyB,EAClD,wBAAwB,IAAI,4BAA4B,EACxD,kBAAkB,IAAI,sBAAsB,EAC5C,YAAY,IAAI,gBAAgB,EAChC,WAAW,EACd,MAAM,aAAa,CAAC;AAErB,OAAO,EACH,UAAU,EACV,UAAU,EACV,eAAe,EACf,kCAAkC,EAClC,yBAAyB,EACzB,4BAA4B,EAC5B,sBAAsB,EACtB,gBAAgB,EAChB,WAAW,GACd,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { Factory } from 'singa';
2
+ import type { LokiClient } from '@hapic/loki';
3
+ export declare function setLokiFactory(factory: Factory<LokiClient>): void;
4
+ export declare function isLokiClientUsable(): boolean;
5
+ export declare function useLokiClient(): LokiClient;
6
+ //# sourceMappingURL=singleton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"singleton.d.ts","sourceRoot":"","sources":["../../../src/services/loki/singleton.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAErC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAM9C,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,QAE1D;AAED,wBAAgB,kBAAkB,YAEjC;AAED,wBAAgB,aAAa,eAE5B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@privateaim/server-kit",
3
- "version": "0.8.13",
3
+ "version": "0.8.14",
4
4
  "exports": {
5
5
  "./package.json": "./package.json",
6
6
  ".": {
@@ -28,24 +28,25 @@
28
28
  },
29
29
  "dependencies": {
30
30
  "@ebec/http": "^2.3.0",
31
+ "@hapic/loki": "^1.1.0",
31
32
  "@isaacs/ttlcache": "^1.4.1",
32
- "@privateaim/kit": "^0.8.13",
33
+ "@privateaim/kit": "^0.8.14",
33
34
  "@socket.io/redis-emitter": "^5.1.0",
34
35
  "envix": "^1.5.0",
35
- "hapic": "^2.5.2",
36
+ "hapic": "^2.7.0",
36
37
  "singa": "^1.0.0",
37
38
  "winston": "^3.17.0"
38
39
  },
39
40
  "devDependencies": {
40
41
  "@authup/core-http-kit": "^1.0.0-beta.26",
41
- "@hapic/vault": "^2.3.5",
42
+ "@hapic/vault": "^2.3.9",
42
43
  "amqp-extension": "^4.0.0",
43
44
  "redis-extension": "^2.0.2",
44
45
  "typeorm-extension": "^3.7.1"
45
46
  },
46
47
  "peerDependencies": {
47
48
  "@authup/core-http-kit": "^1.0.0-beta.26",
48
- "@hapic/vault": "^2.3.5",
49
+ "@hapic/vault": "^2.3.9",
49
50
  "amqp-extension": "^4.0.0",
50
51
  "redis-extension": "^2.0.2",
51
52
  "typeorm-extension": "^3.7.1"
@@ -10,6 +10,7 @@ export * from './authup';
10
10
  export * from './authup-client-authentication-hook';
11
11
  export * from './cache';
12
12
  export * from './domain-event';
13
+ export * from './loki';
13
14
  export * from './logger';
14
15
  export * from './redis';
15
16
  export * from './vault';
@@ -0,0 +1,9 @@
1
+ /*
2
+ * Copyright (c) 2024.
3
+ * Author Peter Placzek (tada5hi)
4
+ * For the full copyright and license information,
5
+ * view the LICENSE file that was distributed with this source code.
6
+ */
7
+
8
+ export * from './module';
9
+ export * from './singleton';
@@ -0,0 +1,30 @@
1
+ /*
2
+ * Copyright (c) 2024.
3
+ * Author Peter Placzek (tada5hi)
4
+ * For the full copyright and license information,
5
+ * view the LICENSE file that was distributed with this source code.
6
+ */
7
+
8
+ import {
9
+ LokiClient,
10
+ CompactorDeletionRequestCreate as LokiCompactorDeletionRequestCreate,
11
+ Config as LokiConfig,
12
+ ConfigInput as LokiConfigInput,
13
+ DistributorPushStream as LokiDistributorPushStream,
14
+ QuerierQueryRangeOptions as LokiQuerierQueryRangeOptions,
15
+ QuerierQueryResult as LokiQuerierQueryResult,
16
+ createClient as createLokiClient,
17
+ nanoSeconds,
18
+ } from '@hapic/loki';
19
+
20
+ export {
21
+ LokiClient,
22
+ LokiConfig,
23
+ LokiConfigInput,
24
+ LokiCompactorDeletionRequestCreate,
25
+ LokiDistributorPushStream,
26
+ LokiQuerierQueryRangeOptions,
27
+ LokiQuerierQueryResult,
28
+ createLokiClient,
29
+ nanoSeconds,
30
+ };
@@ -0,0 +1,26 @@
1
+ /*
2
+ * Copyright (c) 2024.
3
+ * Author Peter Placzek (tada5hi)
4
+ * For the full copyright and license information,
5
+ * view the LICENSE file that was distributed with this source code.
6
+ */
7
+
8
+ import type { Factory } from 'singa';
9
+ import { singa } from 'singa';
10
+ import type { LokiClient } from '@hapic/loki';
11
+
12
+ const instance = singa<LokiClient>({
13
+ name: 'loki',
14
+ });
15
+
16
+ export function setLokiFactory(factory: Factory<LokiClient>) {
17
+ instance.setFactory(factory);
18
+ }
19
+
20
+ export function isLokiClientUsable() {
21
+ return instance.has() || instance.hasFactory();
22
+ }
23
+
24
+ export function useLokiClient() {
25
+ return instance.use();
26
+ }