@privateaim/server-kit 0.8.7 → 0.8.8
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 +22 -0
- package/dist/index.cjs +31 -23
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +30 -22
- package/dist/index.mjs.map +1 -1
- package/dist/services/authup/module.d.ts +1 -2
- package/dist/services/authup/module.d.ts.map +1 -1
- package/dist/services/authup/types.d.ts +2 -2
- package/dist/services/authup/types.d.ts.map +1 -1
- package/dist/services/authup-client-authentication-hook/index.d.ts +2 -0
- package/dist/services/authup-client-authentication-hook/index.d.ts.map +1 -0
- package/dist/services/authup-client-authentication-hook/singleton.d.ts +6 -0
- package/dist/services/authup-client-authentication-hook/singleton.d.ts.map +1 -0
- package/dist/services/index.d.ts +1 -0
- package/dist/services/index.d.ts.map +1 -1
- package/package.json +9 -9
- package/src/services/authup/module.ts +16 -18
- package/src/services/authup/types.ts +6 -2
- package/src/services/authup-client-authentication-hook/index.ts +8 -0
- package/src/services/authup-client-authentication-hook/singleton.ts +26 -0
- package/src/services/index.ts +1 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.8.8](https://github.com/PrivateAIM/hub/compare/v0.8.7...v0.8.8) (2025-04-15)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* migrated to authup v1.0.0-beta.25 ([a5f6b65](https://github.com/PrivateAIM/hub/commit/a5f6b65499ee3a8c4b4bbdcda47979fa73ee5c48))
|
|
9
|
+
* reusable client authentication hook ([0a608cd](https://github.com/PrivateAIM/hub/commit/0a608cd94984314166c15fa11684e022b5ceb53e))
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
### Bug Fixes
|
|
13
|
+
|
|
14
|
+
* **deps:** bump amqp-extension from 4.0.0-beta.3 to 4.0.0 ([#1018](https://github.com/PrivateAIM/hub/issues/1018)) ([6f969f1](https://github.com/PrivateAIM/hub/commit/6f969f17c64f61da85799fd1193d7343d0130ac5))
|
|
15
|
+
* **deps:** bump the minorandpatch group across 1 directory with 3 updates ([#1019](https://github.com/PrivateAIM/hub/issues/1019)) ([a82d65d](https://github.com/PrivateAIM/hub/commit/a82d65da5e08edce3d97e7432c22d8a028853217))
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
### Dependencies
|
|
19
|
+
|
|
20
|
+
* The following workspace dependencies were updated
|
|
21
|
+
* dependencies
|
|
22
|
+
* @privateaim/core-kit bumped from ^0.8.7 to ^0.8.8
|
|
23
|
+
* @privateaim/kit bumped from ^0.8.7 to ^0.8.8
|
|
24
|
+
|
|
3
25
|
## [0.8.7](https://github.com/PrivateAIM/hub/compare/v0.8.6...v0.8.7) (2025-03-12)
|
|
4
26
|
|
|
5
27
|
|
package/dist/index.cjs
CHANGED
|
@@ -84,30 +84,30 @@ function isQueueRouterPayload(input) {
|
|
|
84
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);
|
|
85
85
|
}
|
|
86
86
|
|
|
87
|
-
const instance$
|
|
87
|
+
const instance$9 = singa.singa({
|
|
88
88
|
name: 'amqp'
|
|
89
89
|
});
|
|
90
90
|
function setAmqpClientFactory(factory) {
|
|
91
|
-
instance$
|
|
91
|
+
instance$9.setFactory(factory);
|
|
92
92
|
}
|
|
93
93
|
function isAmqpClientUsable() {
|
|
94
|
-
return instance$
|
|
94
|
+
return instance$9.has() || instance$9.hasFactory();
|
|
95
95
|
}
|
|
96
96
|
function useAmqpClient() {
|
|
97
|
-
return instance$
|
|
97
|
+
return instance$9.use();
|
|
98
98
|
}
|
|
99
99
|
|
|
100
|
-
const instance$
|
|
100
|
+
const instance$8 = singa.singa({
|
|
101
101
|
name: 'vault'
|
|
102
102
|
});
|
|
103
103
|
function setVaultFactory(factory) {
|
|
104
|
-
instance$
|
|
104
|
+
instance$8.setFactory(factory);
|
|
105
105
|
}
|
|
106
106
|
function isVaultClientUsable() {
|
|
107
|
-
return instance$
|
|
107
|
+
return instance$8.has() || instance$8.hasFactory();
|
|
108
108
|
}
|
|
109
109
|
function useVaultClient() {
|
|
110
|
-
return instance$
|
|
110
|
+
return instance$8.use();
|
|
111
111
|
}
|
|
112
112
|
|
|
113
113
|
function guessAuthupTokenCreatorOptions() {
|
|
@@ -128,21 +128,30 @@ function guessAuthupTokenCreatorOptions() {
|
|
|
128
128
|
return options;
|
|
129
129
|
}
|
|
130
130
|
|
|
131
|
+
const instance$7 = singa.singa({
|
|
132
|
+
name: 'clientAuthenticationHook'
|
|
133
|
+
});
|
|
134
|
+
function setClientAuthenticationHookFactory(factory) {
|
|
135
|
+
instance$7.setFactory(factory);
|
|
136
|
+
}
|
|
137
|
+
function isClientAuthenticationHookUsable() {
|
|
138
|
+
return instance$7.has() || instance$7.hasFactory();
|
|
139
|
+
}
|
|
140
|
+
function useClientAuthenticationHook() {
|
|
141
|
+
return instance$7.use();
|
|
142
|
+
}
|
|
143
|
+
|
|
131
144
|
class AuthupClient extends coreHttpKit.Client {
|
|
132
145
|
constructor(options = {}){
|
|
133
146
|
super(options);
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
const tokenCreator = guessAuthupTokenCreatorOptions();
|
|
140
|
-
tokenHook = {
|
|
141
|
-
baseURL: options.baseURL,
|
|
142
|
-
tokenCreator
|
|
143
|
-
};
|
|
147
|
+
if (!isClientAuthenticationHookUsable()) {
|
|
148
|
+
setClientAuthenticationHookFactory(()=>new coreHttpKit.ClientAuthenticationHook({
|
|
149
|
+
baseURL: options.baseURL,
|
|
150
|
+
tokenCreator: options.tokenCreator || guessAuthupTokenCreatorOptions()
|
|
151
|
+
}));
|
|
144
152
|
}
|
|
145
|
-
|
|
153
|
+
const hook = useClientAuthenticationHook();
|
|
154
|
+
hook.attach(this);
|
|
146
155
|
}
|
|
147
156
|
}
|
|
148
157
|
|
|
@@ -636,10 +645,6 @@ Object.defineProperty(exports, "createVaultClient", {
|
|
|
636
645
|
enumerable: true,
|
|
637
646
|
get: function () { return vault.createClient; }
|
|
638
647
|
});
|
|
639
|
-
Object.defineProperty(exports, "mountAuthupClientResponseErrorTokenHook", {
|
|
640
|
-
enumerable: true,
|
|
641
|
-
get: function () { return coreHttpKit.mountClientResponseErrorTokenHook; }
|
|
642
|
-
});
|
|
643
648
|
Object.defineProperty(exports, "RedisClient", {
|
|
644
649
|
enumerable: true,
|
|
645
650
|
get: function () { return redisExtension.Client; }
|
|
@@ -671,6 +676,7 @@ exports.guessAuthupTokenCreatorOptions = guessAuthupTokenCreatorOptions;
|
|
|
671
676
|
exports.hasOwnProperty = hasOwnProperty;
|
|
672
677
|
exports.isAmqpClientUsable = isAmqpClientUsable;
|
|
673
678
|
exports.isAuthupClientUsable = isAuthupClientUsable;
|
|
679
|
+
exports.isClientAuthenticationHookUsable = isClientAuthenticationHookUsable;
|
|
674
680
|
exports.isComponentError = isComponentError;
|
|
675
681
|
exports.isLoggerUsable = isLoggerUsable;
|
|
676
682
|
exports.isQueuePayload = isQueuePayload;
|
|
@@ -683,6 +689,7 @@ exports.publishDomainRedisEvent = publishDomainRedisEvent;
|
|
|
683
689
|
exports.publishDomainSocketEvent = publishDomainSocketEvent;
|
|
684
690
|
exports.setAmqpClientFactory = setAmqpClientFactory;
|
|
685
691
|
exports.setAuthupClientFactory = setAuthupClientFactory;
|
|
692
|
+
exports.setClientAuthenticationHookFactory = setClientAuthenticationHookFactory;
|
|
686
693
|
exports.setLogger = setLogger;
|
|
687
694
|
exports.setLoggerFactory = setLoggerFactory;
|
|
688
695
|
exports.setRedisClient = setRedisClient;
|
|
@@ -691,6 +698,7 @@ exports.setVaultFactory = setVaultFactory;
|
|
|
691
698
|
exports.useAmqpClient = useAmqpClient;
|
|
692
699
|
exports.useAuthupClient = useAuthupClient;
|
|
693
700
|
exports.useCache = useCache;
|
|
701
|
+
exports.useClientAuthenticationHook = useClientAuthenticationHook;
|
|
694
702
|
exports.useLogger = useLogger;
|
|
695
703
|
exports.useQueueRouter = useQueueRouter;
|
|
696
704
|
exports.useRedisClient = useRedisClient;
|
package/dist/index.cjs.map
CHANGED
|
@@ -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/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/core/queue-router/module.ts","../src/core/queue-router/singleton.ts","../src/domain-event/utils.ts","../src/domain-event/redis/publish.ts","../src/domain-event/socket/publish.ts","../src/domain-event/publish.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 { ClientResponseErrorTokenHookOptions } from '@authup/core-http-kit';\nimport {\n Client, mountClientResponseErrorTokenHook as mountAuthupClientResponseErrorTokenHook,\n mountClientResponseErrorTokenHook,\n} from '@authup/core-http-kit';\nimport { guessAuthupTokenCreatorOptions } from './helpers';\nimport type { AuthupClientOptions } from './types';\n\nexport {\n mountAuthupClientResponseErrorTokenHook,\n};\n\nexport class AuthupClient extends Client {\n constructor(options: AuthupClientOptions = {}) {\n super(options);\n\n let tokenHook : ClientResponseErrorTokenHookOptions;\n if (options.tokenHook) {\n tokenHook = options.tokenHook;\n tokenHook.baseURL = tokenHook.baseURL || options.baseURL;\n } else {\n const tokenCreator = guessAuthupTokenCreatorOptions();\n tokenHook = {\n baseURL: options.baseURL,\n tokenCreator,\n };\n }\n\n mountClientResponseErrorTokenHook(this, tokenHook);\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.\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) 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 transformDomainEventData<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 buildDomainEventChannelName(\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 { DomainEventName } from '@privateaim/core-kit';\nimport type { DomainsEvents } from '@privateaim/core-kit';\nimport type { Client } from 'redis-extension';\nimport type { DomainEventDestinations } from '../type';\nimport { buildDomainEventChannelName, transformDomainEventData } from '../utils';\n\nexport async function publishDomainRedisEvent(\n client: Client,\n context: DomainsEvents,\n destinations: DomainEventDestinations,\n) : Promise<any> {\n context = transformDomainEventData(context);\n\n const json = JSON.stringify(context);\n\n const pipeline = client.pipeline();\n for (let i = 0; i < destinations.length; i++) {\n const { namespace } = destinations[i];\n const keyPrefix = (namespace ? `${namespace}:` : '');\n\n let key = keyPrefix + buildDomainEventChannelName(destinations[i].channel);\n pipeline.publish(key, json);\n\n if (\n context.event !== DomainEventName.CREATED &&\n typeof destinations[i].channel === 'function'\n ) {\n key = keyPrefix + buildDomainEventChannelName(destinations[i].channel, context.data.id);\n pipeline.publish(key, json);\n }\n }\n\n return pipeline.exec();\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 type { DomainsEvents } from '@privateaim/core-kit';\nimport { DomainEventName, buildDomainEventFullName } from '@privateaim/core-kit';\nimport { Emitter } from '@socket.io/redis-emitter';\nimport type { Client } from 'redis-extension';\nimport type { DomainEventDestinations } from '../type';\nimport { buildDomainEventChannelName, transformDomainEventData } from '../utils';\n\nexport function publishDomainSocketEvent(\n client: Client,\n context: DomainsEvents,\n destinations: DomainEventDestinations,\n) {\n context = transformDomainEventData(context);\n\n for (let i = 0; i < destinations.length; i++) {\n let emitter = new Emitter(client);\n if (destinations[i].namespace) {\n emitter = emitter.of(destinations[i].namespace);\n }\n\n let roomName = buildDomainEventChannelName(destinations[i].channel);\n\n const fullEventName = buildDomainEventFullName(\n context.type,\n context.event,\n );\n\n emitter\n .in(roomName)\n .emit(fullEventName, {\n ...context,\n meta: {\n roomName,\n },\n });\n\n if (\n context.event !== DomainEventName.CREATED &&\n typeof destinations[i].channel === 'function'\n ) {\n roomName = buildDomainEventChannelName(destinations[i].channel, context.data.id);\n emitter\n .in(roomName)\n .emit(fullEventName, {\n ...context,\n meta: {\n roomName,\n roomId: context.data.id,\n },\n });\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 type { DomainsEvents } from '@privateaim/core-kit';\nimport type { Client } from 'redis-extension';\nimport { publishDomainRedisEvent } from './redis';\nimport { publishDomainSocketEvent } from './socket';\nimport type { DomainEventDestinations } from './type';\n\nexport async function publishDomainEvent(\n client: Client,\n context: DomainsEvents,\n destinations: DomainEventDestinations,\n) {\n await publishDomainRedisEvent(client, context, destinations);\n publishDomainSocketEvent(client, context, destinations);\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","AuthupClient","Client","tokenHook","baseURL","tokenCreator","mountClientResponseErrorTokenHook","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","QueueRouter","publish","exchange","routing","driver","of","ExchangeType","DIRECT","namespace","TOPIC","debug","messageId","persistent","WORK","consume","handlers","prefetchCount","undefined","requeueOnFailure","$any","payload","JSON","parse","content","toString","fields","redelivered","properties","handler","amqp","isQueueRouterUsable","useQueueRouter","transformDomainEventData","Object","toISOString","buildDomainEventChannelName","publishDomainRedisEvent","context","destinations","json","stringify","keyPrefix","channel","event","DomainEventName","CREATED","publishDomainSocketEvent","emitter","Emitter","roomName","fullEventName","buildDomainEventFullName","in","emit","meta","roomId","publishDomainEvent","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/core/queue-router/module.ts","../src/core/queue-router/singleton.ts","../src/domain-event/utils.ts","../src/domain-event/redis/publish.ts","../src/domain-event/socket/publish.ts","../src/domain-event/publish.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.\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) 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 transformDomainEventData<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 buildDomainEventChannelName(\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 { DomainEventName } from '@privateaim/core-kit';\nimport type { DomainsEvents } from '@privateaim/core-kit';\nimport type { Client } from 'redis-extension';\nimport type { DomainEventDestinations } from '../type';\nimport { buildDomainEventChannelName, transformDomainEventData } from '../utils';\n\nexport async function publishDomainRedisEvent(\n client: Client,\n context: DomainsEvents,\n destinations: DomainEventDestinations,\n) : Promise<any> {\n context = transformDomainEventData(context);\n\n const json = JSON.stringify(context);\n\n const pipeline = client.pipeline();\n for (let i = 0; i < destinations.length; i++) {\n const { namespace } = destinations[i];\n const keyPrefix = (namespace ? `${namespace}:` : '');\n\n let key = keyPrefix + buildDomainEventChannelName(destinations[i].channel);\n pipeline.publish(key, json);\n\n if (\n context.event !== DomainEventName.CREATED &&\n typeof destinations[i].channel === 'function'\n ) {\n key = keyPrefix + buildDomainEventChannelName(destinations[i].channel, context.data.id);\n pipeline.publish(key, json);\n }\n }\n\n return pipeline.exec();\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 type { DomainsEvents } from '@privateaim/core-kit';\nimport { DomainEventName, buildDomainEventFullName } from '@privateaim/core-kit';\nimport { Emitter } from '@socket.io/redis-emitter';\nimport type { Client } from 'redis-extension';\nimport type { DomainEventDestinations } from '../type';\nimport { buildDomainEventChannelName, transformDomainEventData } from '../utils';\n\nexport function publishDomainSocketEvent(\n client: Client,\n context: DomainsEvents,\n destinations: DomainEventDestinations,\n) {\n context = transformDomainEventData(context);\n\n for (let i = 0; i < destinations.length; i++) {\n let emitter = new Emitter(client);\n if (destinations[i].namespace) {\n emitter = emitter.of(destinations[i].namespace);\n }\n\n let roomName = buildDomainEventChannelName(destinations[i].channel);\n\n const fullEventName = buildDomainEventFullName(\n context.type,\n context.event,\n );\n\n emitter\n .in(roomName)\n .emit(fullEventName, {\n ...context,\n meta: {\n roomName,\n },\n });\n\n if (\n context.event !== DomainEventName.CREATED &&\n typeof destinations[i].channel === 'function'\n ) {\n roomName = buildDomainEventChannelName(destinations[i].channel, context.data.id);\n emitter\n .in(roomName)\n .emit(fullEventName, {\n ...context,\n meta: {\n roomName,\n roomId: context.data.id,\n },\n });\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 type { DomainsEvents } from '@privateaim/core-kit';\nimport type { Client } from 'redis-extension';\nimport { publishDomainRedisEvent } from './redis';\nimport { publishDomainSocketEvent } from './socket';\nimport type { DomainEventDestinations } from './type';\n\nexport async function publishDomainEvent(\n client: Client,\n context: DomainsEvents,\n destinations: DomainEventDestinations,\n) {\n await publishDomainRedisEvent(client, context, destinations);\n publishDomainSocketEvent(client, context, destinations);\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","QueueRouter","publish","exchange","routing","driver","of","ExchangeType","DIRECT","namespace","TOPIC","debug","messageId","persistent","WORK","consume","handlers","prefetchCount","undefined","requeueOnFailure","$any","payload","JSON","parse","content","toString","fields","redelivered","properties","handler","amqp","isQueueRouterUsable","useQueueRouter","transformDomainEventData","Object","toISOString","buildDomainEventChannelName","publishDomainRedisEvent","context","destinations","json","stringify","keyPrefix","channel","event","DomainEventName","CREATED","publishDomainSocketEvent","emitter","Emitter","roomName","fullEventName","buildDomainEventFullName","in","emit","meta","roomId","publishDomainEvent","obj","prop","prototype","call"],"mappings":"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"}
|
package/dist/index.mjs
CHANGED
|
@@ -2,8 +2,7 @@ import { isObject, hasOwnProperty as hasOwnProperty$1, createNanoID } from '@pri
|
|
|
2
2
|
import { ExchangeType } from 'amqp-extension';
|
|
3
3
|
import { singa } from 'singa';
|
|
4
4
|
export { VaultClient, createClient as createVaultClient } from '@hapic/vault';
|
|
5
|
-
import { Client,
|
|
6
|
-
export { mountClientResponseErrorTokenHook as mountAuthupClientResponseErrorTokenHook } from '@authup/core-http-kit';
|
|
5
|
+
import { Client, ClientAuthenticationHook } from '@authup/core-http-kit';
|
|
7
6
|
import { JsonAdapter, buildKeyPath } from 'redis-extension';
|
|
8
7
|
export { Client as RedisClient, ClientOptions as RedisClientOptions, buildKeyPath as buildRedisKeyPath, createClient as createRedisClient } from 'redis-extension';
|
|
9
8
|
import TTLCache from '@isaacs/ttlcache';
|
|
@@ -84,30 +83,30 @@ function isQueueRouterPayload(input) {
|
|
|
84
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);
|
|
85
84
|
}
|
|
86
85
|
|
|
87
|
-
const instance$
|
|
86
|
+
const instance$9 = singa({
|
|
88
87
|
name: 'amqp'
|
|
89
88
|
});
|
|
90
89
|
function setAmqpClientFactory(factory) {
|
|
91
|
-
instance$
|
|
90
|
+
instance$9.setFactory(factory);
|
|
92
91
|
}
|
|
93
92
|
function isAmqpClientUsable() {
|
|
94
|
-
return instance$
|
|
93
|
+
return instance$9.has() || instance$9.hasFactory();
|
|
95
94
|
}
|
|
96
95
|
function useAmqpClient() {
|
|
97
|
-
return instance$
|
|
96
|
+
return instance$9.use();
|
|
98
97
|
}
|
|
99
98
|
|
|
100
|
-
const instance$
|
|
99
|
+
const instance$8 = singa({
|
|
101
100
|
name: 'vault'
|
|
102
101
|
});
|
|
103
102
|
function setVaultFactory(factory) {
|
|
104
|
-
instance$
|
|
103
|
+
instance$8.setFactory(factory);
|
|
105
104
|
}
|
|
106
105
|
function isVaultClientUsable() {
|
|
107
|
-
return instance$
|
|
106
|
+
return instance$8.has() || instance$8.hasFactory();
|
|
108
107
|
}
|
|
109
108
|
function useVaultClient() {
|
|
110
|
-
return instance$
|
|
109
|
+
return instance$8.use();
|
|
111
110
|
}
|
|
112
111
|
|
|
113
112
|
function guessAuthupTokenCreatorOptions() {
|
|
@@ -128,21 +127,30 @@ function guessAuthupTokenCreatorOptions() {
|
|
|
128
127
|
return options;
|
|
129
128
|
}
|
|
130
129
|
|
|
130
|
+
const instance$7 = singa({
|
|
131
|
+
name: 'clientAuthenticationHook'
|
|
132
|
+
});
|
|
133
|
+
function setClientAuthenticationHookFactory(factory) {
|
|
134
|
+
instance$7.setFactory(factory);
|
|
135
|
+
}
|
|
136
|
+
function isClientAuthenticationHookUsable() {
|
|
137
|
+
return instance$7.has() || instance$7.hasFactory();
|
|
138
|
+
}
|
|
139
|
+
function useClientAuthenticationHook() {
|
|
140
|
+
return instance$7.use();
|
|
141
|
+
}
|
|
142
|
+
|
|
131
143
|
class AuthupClient extends Client {
|
|
132
144
|
constructor(options = {}){
|
|
133
145
|
super(options);
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
const tokenCreator = guessAuthupTokenCreatorOptions();
|
|
140
|
-
tokenHook = {
|
|
141
|
-
baseURL: options.baseURL,
|
|
142
|
-
tokenCreator
|
|
143
|
-
};
|
|
146
|
+
if (!isClientAuthenticationHookUsable()) {
|
|
147
|
+
setClientAuthenticationHookFactory(()=>new ClientAuthenticationHook({
|
|
148
|
+
baseURL: options.baseURL,
|
|
149
|
+
tokenCreator: options.tokenCreator || guessAuthupTokenCreatorOptions()
|
|
150
|
+
}));
|
|
144
151
|
}
|
|
145
|
-
|
|
152
|
+
const hook = useClientAuthenticationHook();
|
|
153
|
+
hook.attach(this);
|
|
146
154
|
}
|
|
147
155
|
}
|
|
148
156
|
|
|
@@ -628,5 +636,5 @@ async function publishDomainEvent(client, context, destinations) {
|
|
|
628
636
|
return Object.prototype.hasOwnProperty.call(obj, prop);
|
|
629
637
|
}
|
|
630
638
|
|
|
631
|
-
export { AuthupClient, Cache, ComponentError, MemoryCacheAdapter, QueueRouter, QueueRouterRoutingType, RedisCacheAdapter, buildCacheKey, buildQueueRouterPublishPayload, createCacheAdapter, createLogger, guessAuthupTokenCreatorOptions, hasOwnProperty, isAmqpClientUsable, isAuthupClientUsable, isComponentError, isLoggerUsable, isQueuePayload, isQueueRouterPayload, isQueueRouterUsable, isRedisClientUsable, isVaultClientUsable, publishDomainEvent, publishDomainRedisEvent, publishDomainSocketEvent, setAmqpClientFactory, setAuthupClientFactory, setLogger, setLoggerFactory, setRedisClient, setRedisFactory, setVaultFactory, useAmqpClient, useAuthupClient, useCache, useLogger, useQueueRouter, useRedisClient, useRedisPublishClient, useRedisSubscribeClient, useVaultClient };
|
|
639
|
+
export { AuthupClient, Cache, ComponentError, MemoryCacheAdapter, QueueRouter, QueueRouterRoutingType, RedisCacheAdapter, buildCacheKey, buildQueueRouterPublishPayload, createCacheAdapter, createLogger, guessAuthupTokenCreatorOptions, hasOwnProperty, isAmqpClientUsable, isAuthupClientUsable, isClientAuthenticationHookUsable, isComponentError, isLoggerUsable, isQueuePayload, isQueueRouterPayload, isQueueRouterUsable, isRedisClientUsable, isVaultClientUsable, publishDomainEvent, publishDomainRedisEvent, publishDomainSocketEvent, setAmqpClientFactory, setAuthupClientFactory, setClientAuthenticationHookFactory, setLogger, setLoggerFactory, setRedisClient, setRedisFactory, setVaultFactory, useAmqpClient, useAuthupClient, useCache, useClientAuthenticationHook, useLogger, useQueueRouter, useRedisClient, useRedisPublishClient, useRedisSubscribeClient, useVaultClient };
|
|
632
640
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -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/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/core/queue-router/module.ts","../src/core/queue-router/singleton.ts","../src/domain-event/utils.ts","../src/domain-event/redis/publish.ts","../src/domain-event/socket/publish.ts","../src/domain-event/publish.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 { ClientResponseErrorTokenHookOptions } from '@authup/core-http-kit';\nimport {\n Client, mountClientResponseErrorTokenHook as mountAuthupClientResponseErrorTokenHook,\n mountClientResponseErrorTokenHook,\n} from '@authup/core-http-kit';\nimport { guessAuthupTokenCreatorOptions } from './helpers';\nimport type { AuthupClientOptions } from './types';\n\nexport {\n mountAuthupClientResponseErrorTokenHook,\n};\n\nexport class AuthupClient extends Client {\n constructor(options: AuthupClientOptions = {}) {\n super(options);\n\n let tokenHook : ClientResponseErrorTokenHookOptions;\n if (options.tokenHook) {\n tokenHook = options.tokenHook;\n tokenHook.baseURL = tokenHook.baseURL || options.baseURL;\n } else {\n const tokenCreator = guessAuthupTokenCreatorOptions();\n tokenHook = {\n baseURL: options.baseURL,\n tokenCreator,\n };\n }\n\n mountClientResponseErrorTokenHook(this, tokenHook);\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.\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) 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 transformDomainEventData<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 buildDomainEventChannelName(\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 { DomainEventName } from '@privateaim/core-kit';\nimport type { DomainsEvents } from '@privateaim/core-kit';\nimport type { Client } from 'redis-extension';\nimport type { DomainEventDestinations } from '../type';\nimport { buildDomainEventChannelName, transformDomainEventData } from '../utils';\n\nexport async function publishDomainRedisEvent(\n client: Client,\n context: DomainsEvents,\n destinations: DomainEventDestinations,\n) : Promise<any> {\n context = transformDomainEventData(context);\n\n const json = JSON.stringify(context);\n\n const pipeline = client.pipeline();\n for (let i = 0; i < destinations.length; i++) {\n const { namespace } = destinations[i];\n const keyPrefix = (namespace ? `${namespace}:` : '');\n\n let key = keyPrefix + buildDomainEventChannelName(destinations[i].channel);\n pipeline.publish(key, json);\n\n if (\n context.event !== DomainEventName.CREATED &&\n typeof destinations[i].channel === 'function'\n ) {\n key = keyPrefix + buildDomainEventChannelName(destinations[i].channel, context.data.id);\n pipeline.publish(key, json);\n }\n }\n\n return pipeline.exec();\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 type { DomainsEvents } from '@privateaim/core-kit';\nimport { DomainEventName, buildDomainEventFullName } from '@privateaim/core-kit';\nimport { Emitter } from '@socket.io/redis-emitter';\nimport type { Client } from 'redis-extension';\nimport type { DomainEventDestinations } from '../type';\nimport { buildDomainEventChannelName, transformDomainEventData } from '../utils';\n\nexport function publishDomainSocketEvent(\n client: Client,\n context: DomainsEvents,\n destinations: DomainEventDestinations,\n) {\n context = transformDomainEventData(context);\n\n for (let i = 0; i < destinations.length; i++) {\n let emitter = new Emitter(client);\n if (destinations[i].namespace) {\n emitter = emitter.of(destinations[i].namespace);\n }\n\n let roomName = buildDomainEventChannelName(destinations[i].channel);\n\n const fullEventName = buildDomainEventFullName(\n context.type,\n context.event,\n );\n\n emitter\n .in(roomName)\n .emit(fullEventName, {\n ...context,\n meta: {\n roomName,\n },\n });\n\n if (\n context.event !== DomainEventName.CREATED &&\n typeof destinations[i].channel === 'function'\n ) {\n roomName = buildDomainEventChannelName(destinations[i].channel, context.data.id);\n emitter\n .in(roomName)\n .emit(fullEventName, {\n ...context,\n meta: {\n roomName,\n roomId: context.data.id,\n },\n });\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 type { DomainsEvents } from '@privateaim/core-kit';\nimport type { Client } from 'redis-extension';\nimport { publishDomainRedisEvent } from './redis';\nimport { publishDomainSocketEvent } from './socket';\nimport type { DomainEventDestinations } from './type';\n\nexport async function publishDomainEvent(\n client: Client,\n context: DomainsEvents,\n destinations: DomainEventDestinations,\n) {\n await publishDomainRedisEvent(client, context, destinations);\n publishDomainSocketEvent(client, context, destinations);\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","AuthupClient","Client","tokenHook","baseURL","tokenCreator","mountClientResponseErrorTokenHook","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","QueueRouter","publish","exchange","routing","driver","of","ExchangeType","DIRECT","namespace","TOPIC","debug","messageId","persistent","WORK","consume","handlers","prefetchCount","undefined","requeueOnFailure","$any","payload","JSON","parse","content","toString","fields","redelivered","properties","handler","amqp","isQueueRouterUsable","useQueueRouter","transformDomainEventData","Object","toISOString","buildDomainEventChannelName","publishDomainRedisEvent","context","destinations","json","stringify","keyPrefix","channel","event","DomainEventName","CREATED","publishDomainSocketEvent","emitter","Emitter","roomName","fullEventName","buildDomainEventFullName","in","emit","meta","roomId","publishDomainEvent","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/core/queue-router/module.ts","../src/core/queue-router/singleton.ts","../src/domain-event/utils.ts","../src/domain-event/redis/publish.ts","../src/domain-event/socket/publish.ts","../src/domain-event/publish.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.\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) 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 transformDomainEventData<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 buildDomainEventChannelName(\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 { DomainEventName } from '@privateaim/core-kit';\nimport type { DomainsEvents } from '@privateaim/core-kit';\nimport type { Client } from 'redis-extension';\nimport type { DomainEventDestinations } from '../type';\nimport { buildDomainEventChannelName, transformDomainEventData } from '../utils';\n\nexport async function publishDomainRedisEvent(\n client: Client,\n context: DomainsEvents,\n destinations: DomainEventDestinations,\n) : Promise<any> {\n context = transformDomainEventData(context);\n\n const json = JSON.stringify(context);\n\n const pipeline = client.pipeline();\n for (let i = 0; i < destinations.length; i++) {\n const { namespace } = destinations[i];\n const keyPrefix = (namespace ? `${namespace}:` : '');\n\n let key = keyPrefix + buildDomainEventChannelName(destinations[i].channel);\n pipeline.publish(key, json);\n\n if (\n context.event !== DomainEventName.CREATED &&\n typeof destinations[i].channel === 'function'\n ) {\n key = keyPrefix + buildDomainEventChannelName(destinations[i].channel, context.data.id);\n pipeline.publish(key, json);\n }\n }\n\n return pipeline.exec();\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 type { DomainsEvents } from '@privateaim/core-kit';\nimport { DomainEventName, buildDomainEventFullName } from '@privateaim/core-kit';\nimport { Emitter } from '@socket.io/redis-emitter';\nimport type { Client } from 'redis-extension';\nimport type { DomainEventDestinations } from '../type';\nimport { buildDomainEventChannelName, transformDomainEventData } from '../utils';\n\nexport function publishDomainSocketEvent(\n client: Client,\n context: DomainsEvents,\n destinations: DomainEventDestinations,\n) {\n context = transformDomainEventData(context);\n\n for (let i = 0; i < destinations.length; i++) {\n let emitter = new Emitter(client);\n if (destinations[i].namespace) {\n emitter = emitter.of(destinations[i].namespace);\n }\n\n let roomName = buildDomainEventChannelName(destinations[i].channel);\n\n const fullEventName = buildDomainEventFullName(\n context.type,\n context.event,\n );\n\n emitter\n .in(roomName)\n .emit(fullEventName, {\n ...context,\n meta: {\n roomName,\n },\n });\n\n if (\n context.event !== DomainEventName.CREATED &&\n typeof destinations[i].channel === 'function'\n ) {\n roomName = buildDomainEventChannelName(destinations[i].channel, context.data.id);\n emitter\n .in(roomName)\n .emit(fullEventName, {\n ...context,\n meta: {\n roomName,\n roomId: context.data.id,\n },\n });\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 type { DomainsEvents } from '@privateaim/core-kit';\nimport type { Client } from 'redis-extension';\nimport { publishDomainRedisEvent } from './redis';\nimport { publishDomainSocketEvent } from './socket';\nimport type { DomainEventDestinations } from './type';\n\nexport async function publishDomainEvent(\n client: Client,\n context: DomainsEvents,\n destinations: DomainEventDestinations,\n) {\n await publishDomainRedisEvent(client, context, destinations);\n publishDomainSocketEvent(client, context, destinations);\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","QueueRouter","publish","exchange","routing","driver","of","ExchangeType","DIRECT","namespace","TOPIC","debug","messageId","persistent","WORK","consume","handlers","prefetchCount","undefined","requeueOnFailure","$any","payload","JSON","parse","content","toString","fields","redelivered","properties","handler","amqp","isQueueRouterUsable","useQueueRouter","transformDomainEventData","Object","toISOString","buildDomainEventChannelName","publishDomainRedisEvent","context","destinations","json","stringify","keyPrefix","channel","event","DomainEventName","CREATED","publishDomainSocketEvent","emitter","Emitter","roomName","fullEventName","buildDomainEventFullName","in","emit","meta","roomId","publishDomainEvent","obj","prop","prototype","call"],"mappings":"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"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { Client
|
|
1
|
+
import { Client } from '@authup/core-http-kit';
|
|
2
2
|
import type { AuthupClientOptions } from './types';
|
|
3
|
-
export { mountAuthupClientResponseErrorTokenHook, };
|
|
4
3
|
export declare class AuthupClient extends Client {
|
|
5
4
|
constructor(options?: AuthupClientOptions);
|
|
6
5
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../src/services/authup/module.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../src/services/authup/module.ts"],"names":[],"mappings":"AAOA,OAAO,EACH,MAAM,EAET,MAAM,uBAAuB,CAAC;AAO/B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEnD,qBAAa,YAAa,SAAQ,MAAM;gBACxB,OAAO,GAAE,mBAAwB;CAehD"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { ClientOptions,
|
|
1
|
+
import type { ClientOptions, TokenCreator, TokenCreatorOptions } from '@authup/core-http-kit';
|
|
2
2
|
export type AuthupClientOptions = ClientOptions & {
|
|
3
|
-
|
|
3
|
+
tokenCreator?: TokenCreator | TokenCreatorOptions;
|
|
4
4
|
};
|
|
5
5
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/authup/types.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/authup/types.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACR,aAAa,EACb,YAAY,EACZ,mBAAmB,EACtB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,MAAM,mBAAmB,GAAG,aAAa,GAAG;IAC9C,YAAY,CAAC,EAAE,YAAY,GAAG,mBAAmB,CAAA;CACpD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/authup-client-authentication-hook/index.ts"],"names":[],"mappings":"AAOA,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ClientAuthenticationHook } from '@authup/core-http-kit';
|
|
2
|
+
import type { Factory } from 'singa';
|
|
3
|
+
export declare function setClientAuthenticationHookFactory(factory: Factory<ClientAuthenticationHook>): void;
|
|
4
|
+
export declare function isClientAuthenticationHookUsable(): boolean;
|
|
5
|
+
export declare function useClientAuthenticationHook(): ClientAuthenticationHook;
|
|
6
|
+
//# sourceMappingURL=singleton.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"singleton.d.ts","sourceRoot":"","sources":["../../../src/services/authup-client-authentication-hook/singleton.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAOrC,wBAAgB,kCAAkC,CAAC,OAAO,EAAE,OAAO,CAAC,wBAAwB,CAAC,QAE5F;AAED,wBAAgB,gCAAgC,YAE/C;AAED,wBAAgB,2BAA2B,6BAE1C"}
|
package/dist/services/index.d.ts
CHANGED
|
@@ -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,SAAS,CAAC;AACxB,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,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@privateaim/server-kit",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.8",
|
|
4
4
|
"exports": {
|
|
5
5
|
"./package.json": "./package.json",
|
|
6
6
|
".": {
|
|
@@ -29,8 +29,8 @@
|
|
|
29
29
|
"dependencies": {
|
|
30
30
|
"@ebec/http": "^2.3.0",
|
|
31
31
|
"@isaacs/ttlcache": "^1.4.1",
|
|
32
|
-
"@privateaim/core-kit": "^0.8.
|
|
33
|
-
"@privateaim/kit": "^0.8.
|
|
32
|
+
"@privateaim/core-kit": "^0.8.8",
|
|
33
|
+
"@privateaim/kit": "^0.8.8",
|
|
34
34
|
"@socket.io/redis-emitter": "^5.1.0",
|
|
35
35
|
"envix": "^1.5.0",
|
|
36
36
|
"hapic": "^2.5.2",
|
|
@@ -38,17 +38,17 @@
|
|
|
38
38
|
"winston": "^3.17.0"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
|
-
"@authup/core-http-kit": "^1.0.0-beta.
|
|
41
|
+
"@authup/core-http-kit": "^1.0.0-beta.26",
|
|
42
42
|
"@hapic/vault": "^2.3.5",
|
|
43
|
-
"amqp-extension": "^4.0.0
|
|
44
|
-
"redis-extension": "^2.0.
|
|
43
|
+
"amqp-extension": "^4.0.0",
|
|
44
|
+
"redis-extension": "^2.0.2",
|
|
45
45
|
"typeorm-extension": "^3.7.0"
|
|
46
46
|
},
|
|
47
47
|
"peerDependencies": {
|
|
48
|
-
"@authup/core-http-kit": "^1.0.0-beta.
|
|
48
|
+
"@authup/core-http-kit": "^1.0.0-beta.26",
|
|
49
49
|
"@hapic/vault": "^2.3.5",
|
|
50
|
-
"amqp-extension": "^4.0.0
|
|
51
|
-
"redis-extension": "^2.0.
|
|
50
|
+
"amqp-extension": "^4.0.0",
|
|
51
|
+
"redis-extension": "^2.0.2",
|
|
52
52
|
"typeorm-extension": "^3.7.0"
|
|
53
53
|
},
|
|
54
54
|
"publishConfig": {
|
|
@@ -5,34 +5,32 @@
|
|
|
5
5
|
* view the LICENSE file that was distributed with this source code.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import type { ClientResponseErrorTokenHookOptions } from '@authup/core-http-kit';
|
|
9
8
|
import {
|
|
10
|
-
Client,
|
|
11
|
-
|
|
9
|
+
Client,
|
|
10
|
+
ClientAuthenticationHook,
|
|
12
11
|
} from '@authup/core-http-kit';
|
|
12
|
+
import {
|
|
13
|
+
isClientAuthenticationHookUsable,
|
|
14
|
+
setClientAuthenticationHookFactory,
|
|
15
|
+
useClientAuthenticationHook,
|
|
16
|
+
} from '../authup-client-authentication-hook';
|
|
13
17
|
import { guessAuthupTokenCreatorOptions } from './helpers';
|
|
14
18
|
import type { AuthupClientOptions } from './types';
|
|
15
19
|
|
|
16
|
-
export {
|
|
17
|
-
mountAuthupClientResponseErrorTokenHook,
|
|
18
|
-
};
|
|
19
|
-
|
|
20
20
|
export class AuthupClient extends Client {
|
|
21
21
|
constructor(options: AuthupClientOptions = {}) {
|
|
22
22
|
super(options);
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
baseURL: options.baseURL,
|
|
32
|
-
tokenCreator,
|
|
33
|
-
};
|
|
24
|
+
if (!isClientAuthenticationHookUsable()) {
|
|
25
|
+
setClientAuthenticationHookFactory(
|
|
26
|
+
() => new ClientAuthenticationHook({
|
|
27
|
+
baseURL: options.baseURL,
|
|
28
|
+
tokenCreator: options.tokenCreator || guessAuthupTokenCreatorOptions(),
|
|
29
|
+
}),
|
|
30
|
+
);
|
|
34
31
|
}
|
|
35
32
|
|
|
36
|
-
|
|
33
|
+
const hook = useClientAuthenticationHook();
|
|
34
|
+
hook.attach(this);
|
|
37
35
|
}
|
|
38
36
|
}
|
|
@@ -5,8 +5,12 @@
|
|
|
5
5
|
* view the LICENSE file that was distributed with this source code.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import type {
|
|
8
|
+
import type {
|
|
9
|
+
ClientOptions,
|
|
10
|
+
TokenCreator,
|
|
11
|
+
TokenCreatorOptions,
|
|
12
|
+
} from '@authup/core-http-kit';
|
|
9
13
|
|
|
10
14
|
export type AuthupClientOptions = ClientOptions & {
|
|
11
|
-
|
|
15
|
+
tokenCreator?: TokenCreator | TokenCreatorOptions
|
|
12
16
|
};
|
|
@@ -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 { ClientAuthenticationHook } from '@authup/core-http-kit';
|
|
9
|
+
import type { Factory } from 'singa';
|
|
10
|
+
import { singa } from 'singa';
|
|
11
|
+
|
|
12
|
+
const instance = singa<ClientAuthenticationHook>({
|
|
13
|
+
name: 'clientAuthenticationHook',
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
export function setClientAuthenticationHookFactory(factory: Factory<ClientAuthenticationHook>) {
|
|
17
|
+
instance.setFactory(factory);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export function isClientAuthenticationHookUsable() {
|
|
21
|
+
return instance.has() || instance.hasFactory();
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export function useClientAuthenticationHook() {
|
|
25
|
+
return instance.use();
|
|
26
|
+
}
|