@privateaim/server-kit 0.8.4 → 0.8.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/dist/core/index.d.ts +0 -1
  3. package/dist/core/index.d.ts.map +1 -1
  4. package/dist/domain-event/publish.d.ts +2 -2
  5. package/dist/domain-event/publish.d.ts.map +1 -1
  6. package/dist/domain-event/redis/publish.d.ts +2 -2
  7. package/dist/domain-event/redis/publish.d.ts.map +1 -1
  8. package/dist/domain-event/socket/publish.d.ts +2 -2
  9. package/dist/domain-event/socket/publish.d.ts.map +1 -1
  10. package/dist/index.cjs +251 -107
  11. package/dist/index.cjs.map +1 -1
  12. package/dist/index.mjs +247 -106
  13. package/dist/index.mjs.map +1 -1
  14. package/dist/services/cache/adapters/factory.d.ts +4 -0
  15. package/dist/services/cache/adapters/factory.d.ts.map +1 -0
  16. package/dist/services/cache/adapters/index.d.ts +5 -0
  17. package/dist/services/cache/adapters/index.d.ts.map +1 -0
  18. package/dist/services/cache/adapters/memory.d.ts +15 -0
  19. package/dist/services/cache/adapters/memory.d.ts.map +1 -0
  20. package/dist/services/cache/adapters/redis.d.ts +16 -0
  21. package/dist/services/cache/adapters/redis.d.ts.map +1 -0
  22. package/dist/services/cache/adapters/types.d.ts +10 -0
  23. package/dist/services/cache/adapters/types.d.ts.map +1 -0
  24. package/dist/services/cache/helper.d.ts +3 -0
  25. package/dist/services/cache/helper.d.ts.map +1 -0
  26. package/dist/services/cache/index.d.ts +6 -0
  27. package/dist/services/cache/index.d.ts.map +1 -0
  28. package/dist/services/cache/module.d.ts +13 -0
  29. package/dist/services/cache/module.d.ts.map +1 -0
  30. package/dist/services/cache/singleton.d.ts +3 -0
  31. package/dist/services/cache/singleton.d.ts.map +1 -0
  32. package/dist/services/cache/types.d.ts +16 -0
  33. package/dist/services/cache/types.d.ts.map +1 -0
  34. package/dist/services/index.d.ts +1 -0
  35. package/dist/services/index.d.ts.map +1 -1
  36. package/package.json +13 -13
  37. package/src/core/index.ts +0 -1
  38. package/src/domain-event/publish.ts +2 -2
  39. package/src/domain-event/redis/publish.ts +2 -2
  40. package/src/domain-event/socket/publish.ts +6 -3
  41. package/src/services/cache/adapters/factory.ts +18 -0
  42. package/src/services/cache/adapters/index.ts +11 -0
  43. package/src/services/cache/adapters/memory.ts +67 -0
  44. package/src/services/cache/adapters/redis.ts +69 -0
  45. package/src/services/cache/adapters/types.ts +22 -0
  46. package/src/services/cache/helper.ts +13 -0
  47. package/src/{core/memory-cache → services/cache}/index.ts +4 -1
  48. package/src/services/cache/module.ts +41 -0
  49. package/src/services/cache/singleton.ts +30 -0
  50. package/src/services/cache/types.ts +24 -0
  51. package/src/services/index.ts +1 -0
  52. package/test/unit/memory-cache.spec.ts +10 -9
  53. package/dist/core/memory-cache/index.d.ts +0 -3
  54. package/dist/core/memory-cache/index.d.ts.map +0 -1
  55. package/dist/core/memory-cache/module.d.ts +0 -15
  56. package/dist/core/memory-cache/module.d.ts.map +0 -1
  57. package/dist/core/memory-cache/singleton.d.ts +0 -3
  58. package/dist/core/memory-cache/singleton.d.ts.map +0 -1
  59. package/src/core/memory-cache/module.ts +0 -48
  60. package/src/core/memory-cache/singleton.ts +0 -18
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/core/memory-cache/module.ts","../src/core/memory-cache/singleton.ts","../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/logger/module.ts","../src/services/logger/singleton.ts","../src/services/redis/singleton.ts","../src/services/redis/singleton-publish.ts","../src/services/redis/singleton-subscribe.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) 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 TTLCache from '@isaacs/ttlcache';\n\ntype BlockerOptions = {\n ttl: number;\n};\n\nexport class MemoryCache<\n KEY extends string = string,\n VALUE = any,\n> {\n protected options : BlockerOptions;\n\n protected cache : TTLCache<KEY, VALUE>;\n\n constructor(options: Partial<BlockerOptions> = {}) {\n this.options = {\n // 60 seconds\n ttl: 1000 * 60,\n ...options,\n };\n this.cache = new TTLCache<KEY, VALUE>();\n }\n\n set(id: KEY, value: VALUE, options: BlockerOptions) {\n this.cache.set(id, value, {\n ttl: options.ttl,\n });\n }\n\n get(id: KEY): VALUE | undefined {\n return this.cache.get(id);\n }\n\n del(id: KEY) : void {\n this.cache.delete(id);\n }\n\n has(id: KEY) : boolean {\n return this.cache.has(id);\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 { MemoryCache } from './module';\n\nconst instance = singa<MemoryCache>({\n name: 'queueRouter',\n factory: () => new MemoryCache(),\n});\n\nexport function useMemoryCache() {\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 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 { 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 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.\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 { DomainsEventContext } 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: DomainsEventContext,\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 { DomainsEventContext } 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: DomainsEventContext,\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(context.type, context.event);\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 { DomainsEventContext } 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: DomainsEventContext,\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","MemoryCache","set","id","value","options","cache","ttl","get","del","delete","has","constructor","TTLCache","instance","singa","name","factory","useMemoryCache","use","ComponentError","Error","input","message","cause","code","isComponentError","isObject","isQueuePayload","hasOwnProperty","data","metadata","QueueRouterRoutingType","buildQueueRouterPublishPayload","createNanoID","type","timestamp","Date","now","isQueueRouterPayload","setAmqpClientFactory","setFactory","isAmqpClientUsable","hasFactory","useAmqpClient","setVaultFactory","isVaultClientUsable","useVaultClient","guessAuthupTokenCreatorOptions","vault","password","AuthupClient","Client","tokenHook","baseURL","tokenCreator","mountClientResponseErrorTokenHook","useAuthupClient","isAuthupClientUsable","setAuthupClientFactory","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","setRedisFactory","isRedisClientUsable","setRedisClient","useRedisClient","duplicate","useRedisPublishClient","useRedisSubscribeClient","QueueRouter","publish","exchange","routing","driver","of","ExchangeType","DIRECT","namespace","TOPIC","debug","key","messageId","persistent","WORK","consume","handlers","prefetchCount","undefined","requeueOnFailure","$any","payload","JSON","parse","content","toString","fields","redelivered","properties","handler","amqp","isQueueRouterUsable","useQueueRouter","transformDomainEventData","keys","Object","i","length","toISOString","buildDomainEventChannelName","publishDomainRedisEvent","client","context","destinations","json","stringify","pipeline","keyPrefix","channel","event","DomainEventName","CREATED","exec","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/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":";;;;;;;;;;;;;;;;AAAA;;;;;AAKC,IAAA,SAAAA,kBAAA,CAAA,GAAA,EAAA,GAAA,EAAA,KAAA,EAAA;;;;;;;;;;;;;AAIM,MAAMC,cAAuBC,SAAAA,KAAAA,CAAAA;AAGhCC,IAAAA,WAAAA,CAAYC,KAA4B,CAAE;QACtC,KAAK,CAACA,KAAMC,CAAAA,OAAO,EAAE;AAAEC,YAAAA,KAAAA,EAAOF,MAAME;SAHxC,CAAA,EAAAN,kBAAA,CAAA,IAAA,EAAOO,QAAP,MAAA,CAAA;AAKI,QAAA,IAAI,CAACA,IAAI,GAAGH,KAAAA,CAAMG,IAAI;AAC1B;AACJ;;ACPO,SAASC,iBAAiBJ,KAAc,EAAA;IAC3C,IAAI,CAACK,aAASL,KAAQ,CAAA,EAAA;QAClB,OAAO,KAAA;AACX;IAEA,IACI,OAAOA,MAAMC,OAAO,KAAK,eACzB,OAAOD,KAAAA,CAAMC,OAAO,KAAK,QAC3B,EAAA;QACE,OAAO,KAAA;AACX;AAEA,IAAA,IAAI,OAAOD,KAAAA,CAAMG,IAAI,KAAK,WAAa,EAAA;QACnC,OAAO,IAAA;AACX;AAEA,IAAA,OAAO,OAAOH,KAAMG,CAAAA,IAAI,KAAK,QAAYH,IAAAA,KAAAA,CAAMG,IAAI,KAAK,IAAA;AAC5D;;ACjBO,SAASG,eAAeN,KAAc,EAAA;AACzC,IAAA,OAAOK,YAASL,CAAAA,KAAAA,CAAAA,IACZO,kBAAeP,CAAAA,KAAAA,EAAO,WACtBK,YAASL,CAAAA,KAAAA,CAAMQ,IAAI,CAAA,IACnBD,kBAAeP,CAAAA,KAAAA,EAAO,UACtBK,CAAAA,IAAAA,YAAAA,CAASL,MAAMS,QAAQ,CAAA;AAC/B;;AChBA;;;;;IAOO,IAAKC,sBAAAA,iBAAAA,SAAAA,sBAAAA,EAAAA;;;AAAAA,IAAAA,OAAAA,sBAAAA;AAGX,CAAA,CAAA,EAAA;;ACAM,SAASC,+BACZX,KAA8B,EAAA;IAE9B,OAAO;QACHY,EAAIZ,EAAAA,KAAAA,CAAMY,EAAE,IAAIC,gBAAAA,EAAAA;AAChBC,QAAAA,IAAAA,EAAMd,MAAMc,IAAI;QAChBN,IAAMR,EAAAA,KAAAA,CAAMQ,IAAI,IAAI,EAAC;QACrBC,QAAU,EAAA;AACNM,YAAAA,SAAAA,EAAWC,KAAKC,GAAG,EAAA;AACnB,YAAA,GAAGjB,MAAMS;AACb;AACJ,KAAA;AACJ;AAEO,SAASS,qBAAqBlB,KAAc,EAAA;IAC/C,OAAOK,YAAAA,CAASL,KACZ,CAAA,IAAA,OAAOA,KAAMY,CAAAA,EAAE,KAAK,QACpB,IAAA,OAAOZ,KAAMc,CAAAA,IAAI,KAAK,QAAA,IACtBP,mBAAeP,KAAO,EAAA,MAAA,CAAA,IACtBK,YAASL,CAAAA,KAAAA,CAAMQ,IAAI,CAAA,IACnBD,mBAAeP,KAAO,EAAA,UAAA,CAAA,IACtBK,YAASL,CAAAA,KAAAA,CAAMS,QAAQ,CAAA;AAC/B;;ACrBA,MAAMU,aAAWC,WAAc,CAAA;IAC3BC,IAAM,EAAA;AACV,CAAA,CAAA;AAEO,SAASC,qBAAqBC,OAAwB,EAAA;AACzDJ,IAAAA,UAAAA,CAASK,UAAU,CAACD,OAAAA,CAAAA;AACxB;AAEO,SAASE,kBAAAA,GAAAA;AACZ,IAAA,OAAON,UAASO,CAAAA,GAAG,EAAMP,IAAAA,UAAAA,CAASQ,UAAU,EAAA;AAChD;AAEO,SAASC,aAAAA,GAAAA;AACZ,IAAA,OAAOT,WAASU,GAAG,EAAA;AACvB;;ACdA,MAAMV,aAAWC,WAAmB,CAAA;IAChCC,IAAM,EAAA;AACV,CAAA,CAAA;AAEO,SAASS,gBAAgBP,OAA6B,EAAA;AACzDJ,IAAAA,UAAAA,CAASK,UAAU,CAACD,OAAAA,CAAAA;AACxB;AAEO,SAASQ,mBAAAA,GAAAA;AACZ,IAAA,OAAOZ,UAASO,CAAAA,GAAG,EAAMP,IAAAA,UAAAA,CAASQ,UAAU,EAAA;AAChD;AAEO,SAASK,cAAAA,GAAAA;AACZ,IAAA,OAAOb,WAASU,GAAG,EAAA;AACvB;;ACfO,SAASI,8BAAAA,GAAAA;IACZ,IAAIC,OAAAA;AACJ,IAAA,IAAIH,mBAAuB,EAAA,EAAA;QACvBG,OAAU,GAAA;YACNpB,IAAM,EAAA,cAAA;YACNO,IAAM,EAAA,QAAA;YACNc,KAAOH,EAAAA,cAAAA;AACX,SAAA;KACG,MAAA;QACHE,OAAU,GAAA;YACNpB,IAAM,EAAA,MAAA;YACNO,IAAM,EAAA,OAAA;YACNe,QAAU,EAAA;AACd,SAAA;AACJ;IAEA,OAAOF,OAAAA;AACX;;ACRO,MAAMG,YAAqBC,SAAAA,kBAAAA,CAAAA;IAC9BvC,WAAYmC,CAAAA,OAAAA,GAA+B,EAAE,CAAE;AAC3C,QAAA,KAAK,CAACA,OAAAA,CAAAA;QAEN,IAAIK,SAAAA;QACJ,IAAIL,OAAAA,CAAQK,SAAS,EAAE;AACnBA,YAAAA,SAAAA,GAAYL,QAAQK,SAAS;AAC7BA,YAAAA,SAAAA,CAAUC,OAAO,GAAGD,SAAAA,CAAUC,OAAO,IAAIN,QAAQM,OAAO;SACrD,MAAA;AACH,YAAA,MAAMC,YAAeR,GAAAA,8BAAAA,EAAAA;YACrBM,SAAY,GAAA;AACRC,gBAAAA,OAAAA,EAASN,QAAQM,OAAO;AACxBC,gBAAAA;AACJ,aAAA;AACJ;AAEAC,QAAAA,6CAAAA,CAAkC,IAAI,EAAEH,SAAAA,CAAAA;AAC5C;AACJ;;AC1BA,MAAMpB,aAAWC,WAAc,CAAA;IAC3BC,IAAM,EAAA;AACV,CAAA,CAAA;AAEO,SAASsB,eAAAA,GAAAA;AACZ,IAAA,OAAOxB,WAASU,GAAG,EAAA;AACvB;AAEO,SAASe,oBAAAA,GAAAA;AACZ,IAAA,OAAOzB,UAASO,CAAAA,GAAG,EAAMP,IAAAA,UAAAA,CAASQ,UAAU,EAAA;AAChD;AAEO,SAASkB,uBAAuBtB,OAAwB,EAAA;AAC3DJ,IAAAA,UAAAA,CAASK,UAAU,CAACD,OAAAA,CAAAA;AACxB;;ACdA,MAAMJ,aAAWC,WAAc,CAAA;IAC3BC,IAAM,EAAA;AACV,CAAA,CAAA;AAEO,SAASyB,gBAAgBvB,OAAwB,EAAA;AACpDJ,IAAAA,UAAAA,CAASK,UAAU,CAACD,OAAAA,CAAAA;AACxB;AAEO,SAASwB,mBAAAA,GAAAA;AACZ,IAAA,OAAO5B,UAASO,CAAAA,GAAG,EAAMP,IAAAA,UAAAA,CAASQ,UAAU,EAAA;AAChD;AAEO,SAASqB,eAAehD,KAAa,EAAA;AACxCmB,IAAAA,UAAAA,CAAS8B,GAAG,CAACjD,KAAAA,CAAAA;AACjB;AAEO,SAASkD,cAAAA,GAAAA;AACZ,IAAA,OAAO/B,WAASU,GAAG,EAAA;AACvB;;AClBA,MAAMV,aAAWC,WAAc,CAAA;IAC3BC,IAAM,EAAA,cAAA;IACNE,OAAS,EAAA,IAAM2B,iBAAiBC,SAAS;AAC7C,CAAA,CAAA;AAEO,SAASC,qBAAAA,GAAAA;AACZ,IAAA,OAAOjC,WAASU,GAAG,EAAA;AACvB;;ACPA,MAAMV,aAAWC,WAAc,CAAA;IAC3BC,IAAM,EAAA,gBAAA;IACNE,OAAS,EAAA,IAAM2B,iBAAiBC,SAAS;AAC7C,CAAA,CAAA;AAEO,SAASE,uBAAAA,GAAAA;AACZ,IAAA,OAAOlC,WAASU,GAAG,EAAA;AACvB;;AClBA;;;;;AAKC,IAAA,SAAAjC,kBAAA,CAAA,GAAA,EAAA,GAAA,EAAA,KAAA,EAAA;;;;;;;;;;;;;AAOM,MAAM0D,kBAAAA,CAAAA;IAaT,MAAMC,GAAAA,CAAIC,GAAW,EAAkB;AACnC,QAAA,OAAO,IAAI,CAACrC,QAAQ,CAACoC,GAAG,CAACC,GAAAA,CAAAA;AAC7B;IAEA,MAAM9B,GAAAA,CAAI8B,GAAW,EAAqB;AACtC,QAAA,OAAO,IAAI,CAACrC,QAAQ,CAACO,GAAG,CAAC8B,GAAAA,CAAAA;AAC7B;AAEA,IAAA,MAAMP,IAAIO,GAAW,EAAEC,KAAY,EAAEvB,OAAwB,EAAiB;AAC1E,QAAA,IAAI,CAACf,QAAQ,CAAC8B,GAAG,CAACO,KAAKC,KAAO,EAAA;AAC1BC,YAAAA,GAAAA,EAAKxB,QAAQwB;AACjB,SAAA,CAAA;AACJ;IAEA,MAAMC,IAAAA,CAAKH,GAAW,EAAiB;AACnC,QAAA,IAAI,CAACrC,QAAQ,CAACyC,MAAM,CAACJ,GAAAA,CAAAA;AACzB;IAEA,MAAMK,QAAAA,CAASC,IAAc,EAAkB;AAC3C,QAAA,IAAK,IAAIC,CAAI,GAAA,CAAA,EAAGA,IAAID,IAAKE,CAAAA,MAAM,EAAED,CAAK,EAAA,CAAA;AAClC,YAAA,IAAI,CAAC5C,QAAQ,CAACyC,MAAM,CAACE,IAAI,CAACC,CAAE,CAAA,CAAA;AAChC;AACJ;AAEA,IAAA,MAAME,KAAM/B,CAAAA,OAAAA,GAA6B,EAAE,EAAkB;QACzD,IAAIA,OAAAA,CAAQgC,MAAM,EAAE;AAChB,YAAA,MAAMJ,IAAO,GAAA,IAAI,CAAC3C,QAAQ,CAAC2C,IAAI,EAAA;YAC/B,IAAIK,QAAAA,GAAWL,KAAKM,IAAI,EAAA;YACxB,MAAO,CAACD,QAASE,CAAAA,IAAI,CAAE;AACnB,gBAAA,IAAIF,SAASV,KAAK,CAACa,UAAU,CAACpC,OAAAA,CAAQgC,MAAM,CAAG,EAAA;AAC3C,oBAAA,IAAI,CAAC/C,QAAQ,CAACyC,MAAM,CAACO,SAASV,KAAK,CAAA;AACvC;AAEAU,gBAAAA,QAAAA,GAAWL,KAAKM,IAAI,EAAA;AACxB;AAEA,YAAA;AACJ;QAEA,IAAI,CAACjD,QAAQ,CAAC8C,KAAK,EAAA;AACvB;IAhDAlE,WAAYmC,CAAAA,OAAAA,GAAkC,EAAE,CAAE;AAFlD,QAAAtC,kBAAA,CAAA,IAAA,EAAUuB,YAAV,MAAA,CAAA;AAGI,QAAA,IAAI,CAACA,QAAQ,GAAG,IAAIoD,QAAwB,CAAA;YACxCC,aAAe,EAAA,IAAA;YACfd,GAAKe,EAAAA,QAAAA;YACL,GAAIvC,OAAAA,IAAW;AACnB,SAAA,CAAA;AACJ;AA2CJ;;AClEA;;;;;AAKC,IAAA,SAAAtC,kBAAA,CAAA,GAAA,EAAA,GAAA,EAAA,KAAA,EAAA;;;;;;;;;;;;;AAQM,MAAM8E,iBAAAA,CAAAA;IAUT,MAAMnB,GAAAA,CAAIC,GAAW,EAAgB;AACjC,QAAA,OAAO,IAAI,CAACrC,QAAQ,CAACoC,GAAG,CAACC,GAAAA,CAAAA;AAC7B;IAEA,MAAM9B,GAAAA,CAAI8B,GAAW,EAAqB;AACtC,QAAA,MAAMmB,SAAS,MAAM,IAAI,CAACC,MAAM,CAACD,MAAM,CAACnB,GAAAA,CAAAA;AAExC,QAAA,OAAO,CAAC,CAACmB,MAAAA;AACb;AAEA,IAAA,MAAM1B,IAAIO,GAAW,EAAEC,KAAU,EAAEvB,OAAwB,EAAiB;AACxE,QAAA,MAAM,IAAI,CAACf,QAAQ,CAAC8B,GAAG,CAACO,KAAKC,KAAO,EAAA;AAChCoB,YAAAA,YAAAA,EAAc3C,QAAQwB;AAC1B,SAAA,CAAA;AACJ;IAEA,MAAMC,IAAAA,CAAKH,GAAW,EAAiB;AACnC,QAAA,MAAM,IAAI,CAACrC,QAAQ,CAACwC,IAAI,CAACH,GAAAA,CAAAA;AAC7B;IAEA,MAAMK,QAAAA,CAASC,IAAc,EAAkB;AAC3C,QAAA,MAAMgB,QAAW,GAAA,IAAI,CAACF,MAAM,CAACE,QAAQ,EAAA;AAErC,QAAA,IAAK,IAAIf,CAAI,GAAA,CAAA,EAAGA,IAAID,IAAKE,CAAAA,MAAM,EAAED,CAAK,EAAA,CAAA;AAClCe,YAAAA,QAAAA,CAASC,GAAG,CAACjB,IAAI,CAACC,CAAE,CAAA,CAAA;AACxB;AAEA,QAAA,MAAMe,SAASE,IAAI,EAAA;AACvB;AAEA,IAAA,MAAMf,KAAM/B,CAAAA,OAAAA,GAA6B,EAAE,EAAkB;QACzD,IAAIA,OAAAA,CAAQgC,MAAM,EAAE;AAChB,YAAA,MAAMY,QAAW,GAAA,IAAI,CAACF,MAAM,CAACE,QAAQ,EAAA;AAErC,YAAA,MAAMhB,IAAO,GAAA,MAAM,IAAI,CAACc,MAAM,CAACd,IAAI,CAAC,CAAG5B,EAAAA,OAAAA,CAAQgC,MAAM,CAAC,CAAC,CAAC,CAAA;AACxD,YAAA,IAAK,IAAIH,CAAI,GAAA,CAAA,EAAGA,IAAID,IAAKE,CAAAA,MAAM,EAAED,CAAK,EAAA,CAAA;AAClCe,gBAAAA,QAAAA,CAASC,GAAG,CAACjB,IAAI,CAACC,CAAE,CAAA,CAAA;AACxB;AAEA,YAAA,MAAMe,SAASE,IAAI,EAAA;AAEnB,YAAA;AACJ;AACA,QAAA,MAAM,IAAI,CAACJ,MAAM,CAACK,OAAO,EAAA;AAC7B;IAjDAlF,WAAc,EAAA;AAJd,QAAAH,kBAAA,CAAA,IAAA,EAAUgF,UAAV,MAAA,CAAA;AAEA,QAAAhF,kBAAA,CAAA,IAAA,EAAUuB,YAAV,MAAA,CAAA;QAGI,IAAI,CAACyD,MAAM,GAAG1B,cAAAA,EAAAA;AACd,QAAA,IAAI,CAAC/B,QAAQ,GAAG,IAAI+D,0BAAY,CAAA,IAAI,CAACN,MAAM,CAAA;AAC/C;AA+CJ;;ACzDO,SAASO,kBAAAA,GAAAA;AACZ,IAAA,IAAIpC,mBAAuB,EAAA,EAAA;AACvB,QAAA,OAAO,IAAI2B,iBAAAA,EAAAA;AACf;AAEA,IAAA,OAAO,IAAIpB,kBAAAA,EAAAA;AACf;;ACPO,SAAS8B,cAAclD,OAA6B,EAAA;AACvD,IAAA,OAAOmD,2BAAkBnD,CAAAA,OAAAA,CAAAA;AAC7B;;ACZA;;;;;AAKC,IAAA,SAAAtC,kBAAA,CAAA,GAAA,EAAA,GAAA,EAAA,KAAA,EAAA;;;;;;;;;;;;;AAKM,MAAM0F,KAAAA,CAAAA;IAOT,MAAMrC,GAAAA,CAAIO,GAAW,EAAEC,KAAU,EAAEvB,OAA2B,GAAA,EAAE,EAAkB;AAC9E,QAAA,MAAM,IAAI,CAACqD,OAAO,CAACtC,GAAG,CAACO,KAAKC,KAAOvB,EAAAA,OAAAA,CAAAA;AACvC;IAEA,MAAMqB,GAAAA,CAAIC,GAAW,EAA6B;AAC9C,QAAA,OAAO,IAAI,CAAC+B,OAAO,CAAChC,GAAG,CAACC,GAAAA,CAAAA;AAC5B;IAEA,MAAM9B,GAAAA,CAAI8B,GAAW,EAAqB;AACtC,QAAA,OAAO,IAAI,CAAC+B,OAAO,CAAC7D,GAAG,CAAC8B,GAAAA,CAAAA;AAC5B;IAEA,MAAMG,IAAAA,CAAKH,GAAW,EAAkB;AACpC,QAAA,OAAO,IAAI,CAAC+B,OAAO,CAAC5B,IAAI,CAACH,GAAAA,CAAAA;AAC7B;IAEA,MAAMK,QAAAA,CAASC,IAAc,EAAkB;AAC3C,QAAA,OAAO,IAAI,CAACyB,OAAO,CAAC1B,QAAQ,CAACC,IAAAA,CAAAA;AACjC;AAEA,IAAA,MAAMG,KAAM/B,CAAAA,OAAAA,GAA6B,EAAE,EAAkB;AACzD,QAAA,OAAO,IAAI,CAACqD,OAAO,CAACtB,KAAK,CAAC/B,OAAAA,CAAAA;AAC9B;AA1BAnC,IAAAA,WAAAA,CAAYwF,OAAqB,CAAE;AAFnC,QAAA3F,kBAAA,CAAA,IAAA,EAAU2F,WAAV,MAAA,CAAA;QAGI,IAAI,CAACA,OAAO,GAAGA,OAAAA;AACnB;AAyBJ;;AC3BA,MAAMpE,aAAWC,WAAa,CAAA;IAC1BC,IAAM,EAAA,OAAA;IACNE,OAAS,EAAA,IAAA;QACL,IAAIgE,OAAAA;AACJ,QAAA,IAAIxC,mBAAuB,EAAA,EAAA;AACvBwC,YAAAA,OAAAA,GAAU,IAAIb,iBAAAA,EAAAA;SACX,MAAA;AACHa,YAAAA,OAAAA,GAAU,IAAIjC,kBAAAA,EAAAA;AAClB;AAEA,QAAA,OAAO,IAAIgC,KAAMC,CAAAA,OAAAA,CAAAA;AACrB;AACJ,CAAA,CAAA;AAEO,SAASC,QAAAA,GAAAA;AACZ,IAAA,OAAOrE,WAASU,GAAG,EAAA;AACvB;;ACfO,SAAS4D,YAAAA,CAAaC,GAA2B,GAAA,EAAE,EAAA;AACtD,IAAA,MAAM,EAAEC,SAAS,EAAEzD,UAAU,EAAE,EAAE,GAAGwD,GAAAA;IAEpC,IAAIE,gBAAAA;AACJ,IAAA,IAAIC,UAAK,CAAA,KAAA,CAAA,KAAWC,gCAAgBC,CAAAA,UAAU,EAAE;QAC5CH,gBAAmB,GAAA;YACf,IAAII,kBAAAA,CAAWC,OAAO,CAAC;gBACnBC,KAAO,EAAA;AACX,aAAA,CAAA;YACA,IAAIF,kBAAAA,CAAWG,IAAI,CAAC;AAChBC,gBAAAA,QAAAA,EAAUC,KAAKC,IAAI,CAACX,SAAaY,IAAAA,OAAAA,CAAQC,GAAG,EAAI,EAAA,YAAA,CAAA;gBAChDN,KAAO,EAAA,MAAA;AACPO,gBAAAA,OAAAA,EAAS,KAAK,IAAO,GAAA,IAAA;gBACrBC,QAAU,EAAA;AACd,aAAA,CAAA;YACA,IAAIV,kBAAAA,CAAWG,IAAI,CAAC;AAChBC,gBAAAA,QAAAA,EAAUC,KAAKC,IAAI,CAACX,SAAaY,IAAAA,OAAAA,CAAQC,GAAG,EAAI,EAAA,WAAA,CAAA;gBAChDN,KAAO,EAAA,MAAA;AACPO,gBAAAA,OAAAA,EAAS,KAAK,IAAO,GAAA,IAAA;gBACrBC,QAAU,EAAA;AACd,aAAA;AACH,SAAA;KACE,MAAA;QACHd,gBAAmB,GAAA;YACf,IAAII,kBAAAA,CAAWC,OAAO,CAAC;gBACnBC,KAAO,EAAA;AACX,aAAA;AACH,SAAA;AACL;AAEA,IAAA,OAAOS,oBAAO,CAAA;AACVC,QAAAA,MAAAA,EAAQA,cAAOC,CAAAA,OAAO,CAClBD,cAAAA,CAAOE,MAAM,CAAC;YAAEC,KAAO,EAAA;AAAK,SAAA,CAAA,EAC5BH,eAAO7F,SAAS,EAAA,EAChB6F,eAAOI,QAAQ,EAAA,EACfJ,eAAOK,MAAM,EAAA,CAAA;QAEjBf,KAAO,EAAA,OAAA;QACPF,UAAYJ,EAAAA,gBAAAA;;QAEZ,GAAI1D,OAAAA,IAAW;AACnB,KAAA,CAAA;AACJ;;AC9CA,MAAMf,aAAWC,WAAc,CAAA;IAC3BC,IAAM,EAAA;AACV,CAAA,CAAA;AAEO,SAAS6F,iBAAiB3F,OAAwB,EAAA;AACrDJ,IAAAA,UAAAA,CAASK,UAAU,CAACD,OAAAA,CAAAA;AACxB;AAEO,SAAS4F,cAAAA,GAAAA;AACZ,IAAA,OAAOhG,UAASO,CAAAA,GAAG,EAAMP,IAAAA,UAAAA,CAASQ,UAAU,EAAA;AAChD;AAEO,SAASyF,UAAUpH,KAAa,EAAA;AACnCmB,IAAAA,UAAAA,CAAS8B,GAAG,CAACjD,KAAAA,CAAAA;AACjB;AAEO,SAASqH,SAAAA,GAAAA;AACZ,IAAA,OAAOlG,WAASU,GAAG,EAAA;AACvB;;AC5BA;;;;;AAKC,IAAA,SAAA,gBAAA,CAAA,GAAA,EAAA,GAAA,EAAA,KAAA,EAAA;;;;;;;;;;;;;AAaM,MAAMyF,WAAAA,CAAAA;;AAWTC,IAAAA,OAAAA,CAAQtH,OAA2B,EAAqB;QACpD,IAAIuH,QAAAA;AACJ,QAAA,IAAIvH,QAAQQ,QAAQ,CAACgH,OAAO,CAAC3G,IAAI,KAAK,MAAQ,EAAA;AAC1C0G,YAAAA,QAAAA,GAAW,IAAI,CAACE,MAAM,CAACC,EAAE,CAAC;AACtB7G,gBAAAA,IAAAA,EAAM8G,2BAAaC,MAAM;AACzBxG,gBAAAA,IAAAA,EAAMpB,QAAQQ,QAAQ,CAACgH,OAAO,CAACK,SAAS,IAAI;AAChD,aAAA,CAAA;SACG,MAAA;AACHN,YAAAA,QAAAA,GAAW,IAAI,CAACE,MAAM,CAACC,EAAE,CAAC;AACtB7G,gBAAAA,IAAAA,EAAM8G,2BAAaG,KAAK;AACxB1G,gBAAAA,IAAAA,EAAMpB,QAAQQ,QAAQ,CAACgH,OAAO,CAACK,SAAS,IAAI;AAChD,aAAA,CAAA;AACJ;AAEA,QAAA,IAAIX,cAAkB,EAAA,EAAA;AAClBE,YAAAA,SAAAA,EAAAA,CACKW,KAAK,CAAC,CAAC,yBAAyB,EAAE/H,QAAQa,IAAI,CAAC,IAAI,EAAEb,QAAQQ,QAAQ,CAACgH,OAAO,CAACjE,GAAG,CAAE,CAAA,CAAA;AAC5F;QAEA,OAAOgE,QAAAA,CAASD,OAAO,CAACtH,OAAQQ,CAAAA,QAAQ,CAACgH,OAAO,CAACjE,GAAG,EAAEvD,OAAS,EAAA;AAC3Da,YAAAA,IAAAA,EAAMb,QAAQa,IAAI;AAClBmH,YAAAA,SAAAA,EAAWhI,QAAQW,EAAE;AACrBsH,YAAAA,UAAAA,EAAYjI,OAAQQ,CAAAA,QAAQ,CAACyH,UAAU,IACnCjI,OAAAA,CAAQQ,QAAQ,CAACgH,OAAO,CAAC3G,IAAI,KAAKJ,uBAAuByH;AACjE,SAAA,CAAA;AACJ;IAEAC,OAAQX,CAAAA,OAA2B,EAAEY,QAA6B,EAAkB;QAChF,IAAIb,QAAAA;QACJ,IAAIC,OAAAA,CAAQ3G,IAAI,KAAK,MAAQ,EAAA;AACzB0G,YAAAA,QAAAA,GAAW,IAAI,CAACE,MAAM,CAACC,EAAE,CAAC;AACtB7G,gBAAAA,IAAAA,EAAM8G,2BAAaC,MAAM;gBACzBxG,IAAMoG,EAAAA,OAAAA,CAAQK,SAAS,IAAI;AAC/B,aAAA,CAAA;SACG,MAAA;AACHN,YAAAA,QAAAA,GAAW,IAAI,CAACE,MAAM,CAACC,EAAE,CAAC;AACtB7G,gBAAAA,IAAAA,EAAM8G,2BAAaG,KAAK;gBACxB1G,IAAMoG,EAAAA,OAAAA,CAAQK,SAAS,IAAI;AAC/B,aAAA,CAAA;AACJ;AAEA,QAAA,OAAON,QAASY,CAAAA,OAAO,CAACX,OAAAA,CAAQjE,GAAG,EAAE;AACjC8E,YAAAA,aAAAA,EAAeb,QAAQ3G,IAAI,KAAKJ,sBAAuByH,CAAAA,IAAI,GAAG,CAAII,GAAAA,SAAAA;;AAElEC,YAAAA,gBAAAA,EAAkBf,OAAQ3G,CAAAA,IAAI,KAAKJ,sBAAAA,CAAuByH;SAC3D,EAAA;AACCM,YAAAA,IAAAA,EAAM,OAAOzI,KAAAA,GAAAA;gBACT,MAAM0I,OAAAA,GAAUC,KAAKC,KAAK,CAAC5I,MAAM6I,OAAO,CAACC,QAAQ,CAAC,OAAA,CAAA,CAAA;gBAClD,IAAI,CAAC5H,qBAAqBwH,OAAU,CAAA,EAAA;AAChC,oBAAA;AACJ;AAEA,gBAAA,IAAI1I,KAAM+I,CAAAA,MAAM,CAACC,WAAW,EAAE;AAC1B,oBAAA,IAAI7B,cAAkB,EAAA,EAAA;AAClBE,wBAAAA,SAAAA,EAAAA,CACKW,KAAK,CAAC,CAAC,cAAc,EAAEhI,MAAMiJ,UAAU,CAACnI,IAAI,CAAC,IAAI,EAAE2G,OAAAA,CAAQjE,GAAG,CAAC,wBAAwB,CAAC,CAAA;AACjG;AAEA,oBAAA;AACJ;AAEA,gBAAA,IAAI2D,cAAkB,EAAA,EAAA;AAClBE,oBAAAA,SAAAA,EAAAA,CACKW,KAAK,CAAC,CAAC,wBAAwB,EAAEhI,KAAMiJ,CAAAA,UAAU,CAACnI,IAAI,CAAC,IAAI,EAAE2G,OAAAA,CAAQjE,GAAG,CAAE,CAAA,CAAA;AACnF;gBAEA,IAAI0F,OAAAA;AAEJ,gBAAA,IACI,OAAOlJ,KAAAA,CAAMiJ,UAAU,CAACnI,IAAI,KAAK,QAAA,IACjCuH,QAAQ,CAACrI,KAAMiJ,CAAAA,UAAU,CAACnI,IAAI,CAAC,EACjC;AACEoI,oBAAAA,OAAAA,GAAUb,QAAQ,CAACrI,KAAAA,CAAMiJ,UAAU,CAACnI,IAAI,CAAC;iBACtC,MAAA;AACHoI,oBAAAA,OAAAA,GAAUb,SAASI,IAAI;AAC3B;gBAEA,IAAI,OAAOS,YAAY,UAAY,EAAA;AAC/B,oBAAA,IAAI/B,cAAkB,EAAA,EAAA;AAClBE,wBAAAA,SAAAA,EAAAA,CACKW,KAAK,CAAC,CAAC,oCAAoC,EAAEhI,KAAMiJ,CAAAA,UAAU,CAACnI,IAAI,CAAC,IAAI,EAAE2G,OAAAA,CAAQjE,GAAG,CAAE,CAAA,CAAA;AAC/F;AAEA,oBAAA;AACJ;AAEA,gBAAA,MAAM0F,OAAQR,CAAAA,OAAAA,CAAAA;AAClB;AACJ,SAAA,CAAA;AACJ;;AA/FA3I,IAAAA,WAAAA,CAAY2H,MAAc,CAAE;AAJ5B,QAAA,gBAAA,CAAA,IAAA,EAAUA,UAAV,MAAA,CAAA;QAKI,IAAI,CAACA,MAAM,GAAGA,MAAAA;AAClB;AA8FJ;;AC5GA,MAAMvG,WAAWC,WAAmB,CAAA;IAChCC,IAAM,EAAA,aAAA;IACNE,OAAS,EAAA,IAAA;AACL,QAAA,MAAM4H,IAAOvH,GAAAA,aAAAA,EAAAA;AAEb,QAAA,OAAO,IAAI0F,WAAY6B,CAAAA,IAAAA,CAAAA;AAC3B;AACJ,CAAA,CAAA;AAEO,SAASC,mBAAAA,GAAAA;IACZ,OAAOjI,QAAAA,CAASO,GAAG,EAAMD,IAAAA,kBAAAA,EAAAA;AAC7B;AAEO,SAAS4H,cAAAA,GAAAA;AACZ,IAAA,OAAOlI,SAASU,GAAG,EAAA;AACvB;;AChBO,SAASyH,yBAA4BtJ,KAAQ,EAAA;AAChD,IAAA,IAAIK,aAASL,KAAQ,CAAA,EAAA;QACjB,MAAM8D,IAAAA,GAAOyF,MAAOzF,CAAAA,IAAI,CAAC9D,KAAAA,CAAAA;AACzB,QAAA,IAAK,IAAI+D,CAAI,GAAA,CAAA,EAAGA,IAAID,IAAKE,CAAAA,MAAM,EAAED,CAAK,EAAA,CAAA;AAClC,YAAA,MAAMN,QAAQzD,KAAK,CAAC8D,IAAI,CAACC,EAAE,CAAC;AAC5B,YAAA,IAAIN,iBAAiBzC,IAAM,EAAA;AACvBhB,gBAAAA,KAAK,CAAC8D,IAAI,CAACC,EAAE,CAAC,GAAGN,MAAM+F,WAAW,EAAA;AACtC;AACJ;AACJ;IAEA,OAAOxJ,KAAAA;AACX;AAEO,SAASyJ,2BAAAA,CACZzJ,KAA6B,EAC7BY,EAAoB,EAAA;IAEpB,IAAI,OAAOZ,UAAU,QAAU,EAAA;QAC3B,OAAOA,KAAAA;AACX;AAEA,IAAA,OAAOA,KAAMY,CAAAA,EAAAA,CAAAA;AACjB;;ACpBO,eAAe8I,uBAClB9E,CAAAA,MAAc,EACd+E,OAAsB,EACtBC,YAAqC,EAAA;AAErCD,IAAAA,OAAAA,GAAUL,wBAAyBK,CAAAA,OAAAA,CAAAA;IAEnC,MAAME,IAAAA,GAAOlB,IAAKmB,CAAAA,SAAS,CAACH,OAAAA,CAAAA;IAE5B,MAAM7E,QAAAA,GAAWF,OAAOE,QAAQ,EAAA;AAChC,IAAA,IAAK,IAAIf,CAAI,GAAA,CAAA,EAAGA,IAAI6F,YAAa5F,CAAAA,MAAM,EAAED,CAAK,EAAA,CAAA;AAC1C,QAAA,MAAM,EAAE+D,SAAS,EAAE,GAAG8B,YAAY,CAAC7F,CAAE,CAAA;AACrC,QAAA,MAAMgG,YAAajC,SAAY,GAAA,CAAA,EAAGA,SAAU,CAAA,CAAC,CAAC,GAAG,EAAA;AAEjD,QAAA,IAAItE,MAAMuG,SAAYN,GAAAA,2BAAAA,CAA4BG,YAAY,CAAC7F,CAAAA,CAAE,CAACiG,OAAO,CAAA;QACzElF,QAASyC,CAAAA,OAAO,CAAC/D,GAAKqG,EAAAA,IAAAA,CAAAA;AAEtB,QAAA,IACIF,OAAQM,CAAAA,KAAK,KAAKC,uBAAAA,CAAgBC,OAAO,IACzC,OAAOP,YAAY,CAAC7F,CAAAA,CAAE,CAACiG,OAAO,KAAK,UACrC,EAAA;YACExG,GAAMuG,GAAAA,SAAAA,GAAYN,2BAA4BG,CAAAA,YAAY,CAAC7F,CAAAA,CAAE,CAACiG,OAAO,EAAEL,OAAAA,CAAQnJ,IAAI,CAACI,EAAE,CAAA;YACtFkE,QAASyC,CAAAA,OAAO,CAAC/D,GAAKqG,EAAAA,IAAAA,CAAAA;AAC1B;AACJ;AAEA,IAAA,OAAO/E,SAASE,IAAI,EAAA;AACxB;;AC1BO,SAASoF,wBACZxF,CAAAA,MAAc,EACd+E,OAAsB,EACtBC,YAAqC,EAAA;AAErCD,IAAAA,OAAAA,GAAUL,wBAAyBK,CAAAA,OAAAA,CAAAA;AAEnC,IAAA,IAAK,IAAI5F,CAAI,GAAA,CAAA,EAAGA,IAAI6F,YAAa5F,CAAAA,MAAM,EAAED,CAAK,EAAA,CAAA;QAC1C,IAAIsG,OAAAA,GAAU,IAAIC,oBAAQ1F,CAAAA,MAAAA,CAAAA;AAC1B,QAAA,IAAIgF,YAAY,CAAC7F,CAAE,CAAA,CAAC+D,SAAS,EAAE;AAC3BuC,YAAAA,OAAAA,GAAUA,QAAQ1C,EAAE,CAACiC,YAAY,CAAC7F,CAAAA,CAAE,CAAC+D,SAAS,CAAA;AAClD;AAEA,QAAA,IAAIyC,WAAWd,2BAA4BG,CAAAA,YAAY,CAAC7F,CAAAA,CAAE,CAACiG,OAAO,CAAA;AAElE,QAAA,MAAMQ,gBAAgBC,gCAClBd,CAAAA,OAAAA,CAAQ7I,IAAI,EACZ6I,QAAQM,KAAK,CAAA;AAGjBI,QAAAA,OAAAA,CACKK,EAAE,CAACH,QACHI,CAAAA,CAAAA,IAAI,CAACH,aAAe,EAAA;AACjB,YAAA,GAAGb,OAAO;YACViB,IAAM,EAAA;AACFL,gBAAAA;AACJ;AACJ,SAAA,CAAA;AAEJ,QAAA,IACIZ,OAAQM,CAAAA,KAAK,KAAKC,uBAAAA,CAAgBC,OAAO,IACzC,OAAOP,YAAY,CAAC7F,CAAAA,CAAE,CAACiG,OAAO,KAAK,UACrC,EAAA;YACEO,QAAWd,GAAAA,2BAAAA,CAA4BG,YAAY,CAAC7F,CAAE,CAAA,CAACiG,OAAO,EAAEL,OAAAA,CAAQnJ,IAAI,CAACI,EAAE,CAAA;AAC/EyJ,YAAAA,OAAAA,CACKK,EAAE,CAACH,QACHI,CAAAA,CAAAA,IAAI,CAACH,aAAe,EAAA;AACjB,gBAAA,GAAGb,OAAO;gBACViB,IAAM,EAAA;AACFL,oBAAAA,QAAAA;oBACAM,MAAQlB,EAAAA,OAAAA,CAAQnJ,IAAI,CAACI;AACzB;AACJ,aAAA,CAAA;AACR;AACJ;AACJ;;AC9CO,eAAekK,kBAClBlG,CAAAA,MAAc,EACd+E,OAAsB,EACtBC,YAAqC,EAAA;IAErC,MAAMF,uBAAAA,CAAwB9E,QAAQ+E,OAASC,EAAAA,YAAAA,CAAAA;AAC/CQ,IAAAA,wBAAAA,CAAyBxF,QAAQ+E,OAASC,EAAAA,YAAAA,CAAAA;AAC9C;;ACpBA;;;;;AAKC,IAEM,SAASrJ,cACZwK,CAAAA,GAAM,EACNC,IAAO,EAAA;AAEP,IAAA,OAAOzB,OAAO0B,SAAS,CAAC1K,cAAc,CAAC2K,IAAI,CAACH,GAAKC,EAAAA,IAAAA,CAAAA;AACrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/dist/index.mjs CHANGED
@@ -1,77 +1,25 @@
1
- import TTLCache from '@isaacs/ttlcache';
2
- import { singa } from 'singa';
3
1
  import { isObject, hasOwnProperty as hasOwnProperty$1, createNanoID } from '@privateaim/kit';
4
2
  import { ExchangeType } from 'amqp-extension';
3
+ import { singa } from 'singa';
5
4
  export { VaultClient, createClient as createVaultClient } from '@hapic/vault';
6
5
  import { Client, mountClientResponseErrorTokenHook } from '@authup/core-http-kit';
7
6
  export { mountClientResponseErrorTokenHook as mountAuthupClientResponseErrorTokenHook } from '@authup/core-http-kit';
7
+ import { JsonAdapter, buildKeyPath } from 'redis-extension';
8
+ export { Client as RedisClient, ClientOptions as RedisClientOptions, buildKeyPath as buildRedisKeyPath, createClient as createRedisClient } from 'redis-extension';
9
+ import TTLCache from '@isaacs/ttlcache';
8
10
  import { read } from 'envix';
9
11
  import path from 'node:path';
10
12
  import { EnvironmentName } from 'typeorm-extension';
11
13
  import { transports, createLogger as createLogger$1, format } from 'winston';
12
- export { Client as RedisClient, ClientOptions as RedisClientOptions, buildKeyPath as buildRedisKeyPath, createClient as createRedisClient } from 'redis-extension';
13
14
  import { DomainEventName, buildDomainEventFullName } from '@privateaim/core-kit';
14
15
  import { Emitter } from '@socket.io/redis-emitter';
15
16
 
16
- /*
17
- * Copyright (c) 2024.
18
- * Author Peter Placzek (tada5hi)
19
- * For the full copyright and license information,
20
- * view the LICENSE file that was distributed with this source code.
21
- */ function _define_property$2(obj, key, value) {
22
- if (key in obj) {
23
- Object.defineProperty(obj, key, {
24
- value: value,
25
- enumerable: true,
26
- configurable: true,
27
- writable: true
28
- });
29
- } else {
30
- obj[key] = value;
31
- }
32
- return obj;
33
- }
34
- class MemoryCache {
35
- set(id, value, options) {
36
- this.cache.set(id, value, {
37
- ttl: options.ttl
38
- });
39
- }
40
- get(id) {
41
- return this.cache.get(id);
42
- }
43
- del(id) {
44
- this.cache.delete(id);
45
- }
46
- has(id) {
47
- return this.cache.has(id);
48
- }
49
- constructor(options = {}){
50
- _define_property$2(this, "options", void 0);
51
- _define_property$2(this, "cache", void 0);
52
- this.options = {
53
- // 60 seconds
54
- ttl: 1000 * 60,
55
- ...options
56
- };
57
- this.cache = new TTLCache();
58
- }
59
- }
60
-
61
- const instance$8 = singa({
62
- name: 'queueRouter',
63
- factory: ()=>new MemoryCache()
64
- });
65
- function useMemoryCache() {
66
- return instance$8.use();
67
- }
68
-
69
17
  /*
70
18
  * Copyright (c) 2023-2024.
71
19
  * Author Peter Placzek (tada5hi)
72
20
  * For the full copyright and license information,
73
21
  * view the LICENSE file that was distributed with this source code.
74
- */ function _define_property$1(obj, key, value) {
22
+ */ function _define_property$4(obj, key, value) {
75
23
  if (key in obj) {
76
24
  Object.defineProperty(obj, key, {
77
25
  value: value,
@@ -88,7 +36,7 @@ class ComponentError extends Error {
88
36
  constructor(input){
89
37
  super(input.message, {
90
38
  cause: input.cause
91
- }), _define_property$1(this, "code", void 0);
39
+ }), _define_property$4(this, "code", void 0);
92
40
  this.code = input.code;
93
41
  }
94
42
  }
@@ -136,30 +84,30 @@ function isQueueRouterPayload(input) {
136
84
  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);
137
85
  }
138
86
 
139
- const instance$7 = singa({
87
+ const instance$8 = singa({
140
88
  name: 'amqp'
141
89
  });
142
90
  function setAmqpClientFactory(factory) {
143
- instance$7.setFactory(factory);
91
+ instance$8.setFactory(factory);
144
92
  }
145
93
  function isAmqpClientUsable() {
146
- return instance$7.has() || instance$7.hasFactory();
94
+ return instance$8.has() || instance$8.hasFactory();
147
95
  }
148
96
  function useAmqpClient() {
149
- return instance$7.use();
97
+ return instance$8.use();
150
98
  }
151
99
 
152
- const instance$6 = singa({
100
+ const instance$7 = singa({
153
101
  name: 'vault'
154
102
  });
155
103
  function setVaultFactory(factory) {
156
- instance$6.setFactory(factory);
104
+ instance$7.setFactory(factory);
157
105
  }
158
106
  function isVaultClientUsable() {
159
- return instance$6.has() || instance$6.hasFactory();
107
+ return instance$7.has() || instance$7.hasFactory();
160
108
  }
161
109
  function useVaultClient() {
162
- return instance$6.use();
110
+ return instance$7.use();
163
111
  }
164
112
 
165
113
  function guessAuthupTokenCreatorOptions() {
@@ -198,18 +146,243 @@ class AuthupClient extends Client {
198
146
  }
199
147
  }
200
148
 
201
- const instance$5 = singa({
149
+ const instance$6 = singa({
202
150
  name: 'authup'
203
151
  });
204
152
  function useAuthupClient() {
205
- return instance$5.use();
153
+ return instance$6.use();
206
154
  }
207
155
  function isAuthupClientUsable() {
208
- return instance$5.has() || instance$5.hasFactory();
156
+ return instance$6.has() || instance$6.hasFactory();
209
157
  }
210
158
  function setAuthupClientFactory(factory) {
159
+ instance$6.setFactory(factory);
160
+ }
161
+
162
+ const instance$5 = singa({
163
+ name: 'redis'
164
+ });
165
+ function setRedisFactory(factory) {
211
166
  instance$5.setFactory(factory);
212
167
  }
168
+ function isRedisClientUsable() {
169
+ return instance$5.has() || instance$5.hasFactory();
170
+ }
171
+ function setRedisClient(input) {
172
+ instance$5.set(input);
173
+ }
174
+ function useRedisClient() {
175
+ return instance$5.use();
176
+ }
177
+
178
+ const instance$4 = singa({
179
+ name: 'redisPublish',
180
+ factory: ()=>useRedisClient().duplicate()
181
+ });
182
+ function useRedisPublishClient() {
183
+ return instance$4.use();
184
+ }
185
+
186
+ const instance$3 = singa({
187
+ name: 'redisSubscribe',
188
+ factory: ()=>useRedisClient().duplicate()
189
+ });
190
+ function useRedisSubscribeClient() {
191
+ return instance$3.use();
192
+ }
193
+
194
+ /*
195
+ * Copyright (c) 2024-2024.
196
+ * Author Peter Placzek (tada5hi)
197
+ * For the full copyright and license information,
198
+ * view the LICENSE file that was distributed with this source code.
199
+ */ function _define_property$3(obj, key, value) {
200
+ if (key in obj) {
201
+ Object.defineProperty(obj, key, {
202
+ value: value,
203
+ enumerable: true,
204
+ configurable: true,
205
+ writable: true
206
+ });
207
+ } else {
208
+ obj[key] = value;
209
+ }
210
+ return obj;
211
+ }
212
+ class MemoryCacheAdapter {
213
+ async get(key) {
214
+ return this.instance.get(key);
215
+ }
216
+ async has(key) {
217
+ return this.instance.has(key);
218
+ }
219
+ async set(key, value, options) {
220
+ this.instance.set(key, value, {
221
+ ttl: options.ttl
222
+ });
223
+ }
224
+ async drop(key) {
225
+ this.instance.delete(key);
226
+ }
227
+ async dropMany(keys) {
228
+ for(let i = 0; i < keys.length; i++){
229
+ this.instance.delete(keys[i]);
230
+ }
231
+ }
232
+ async clear(options = {}) {
233
+ if (options.prefix) {
234
+ const keys = this.instance.keys();
235
+ let iterator = keys.next();
236
+ while(!iterator.done){
237
+ if (iterator.value.startsWith(options.prefix)) {
238
+ this.instance.delete(iterator.value);
239
+ }
240
+ iterator = keys.next();
241
+ }
242
+ return;
243
+ }
244
+ this.instance.clear();
245
+ }
246
+ constructor(options = {}){
247
+ _define_property$3(this, "instance", void 0);
248
+ this.instance = new TTLCache({
249
+ checkAgeOnGet: true,
250
+ ttl: Infinity,
251
+ ...options || {}
252
+ });
253
+ }
254
+ }
255
+
256
+ /*
257
+ * Copyright (c) 2024-2024.
258
+ * Author Peter Placzek (tada5hi)
259
+ * For the full copyright and license information,
260
+ * view the LICENSE file that was distributed with this source code.
261
+ */ function _define_property$2(obj, key, value) {
262
+ if (key in obj) {
263
+ Object.defineProperty(obj, key, {
264
+ value: value,
265
+ enumerable: true,
266
+ configurable: true,
267
+ writable: true
268
+ });
269
+ } else {
270
+ obj[key] = value;
271
+ }
272
+ return obj;
273
+ }
274
+ class RedisCacheAdapter {
275
+ async get(key) {
276
+ return this.instance.get(key);
277
+ }
278
+ async has(key) {
279
+ const exists = await this.client.exists(key);
280
+ return !!exists;
281
+ }
282
+ async set(key, value, options) {
283
+ await this.instance.set(key, value, {
284
+ milliseconds: options.ttl
285
+ });
286
+ }
287
+ async drop(key) {
288
+ await this.instance.drop(key);
289
+ }
290
+ async dropMany(keys) {
291
+ const pipeline = this.client.pipeline();
292
+ for(let i = 0; i < keys.length; i++){
293
+ pipeline.del(keys[i]);
294
+ }
295
+ await pipeline.exec();
296
+ }
297
+ async clear(options = {}) {
298
+ if (options.prefix) {
299
+ const pipeline = this.client.pipeline();
300
+ const keys = await this.client.keys(`${options.prefix}*`);
301
+ for(let i = 0; i < keys.length; i++){
302
+ pipeline.del(keys[i]);
303
+ }
304
+ await pipeline.exec();
305
+ return;
306
+ }
307
+ await this.client.flushdb();
308
+ }
309
+ constructor(){
310
+ _define_property$2(this, "client", void 0);
311
+ _define_property$2(this, "instance", void 0);
312
+ this.client = useRedisClient();
313
+ this.instance = new JsonAdapter(this.client);
314
+ }
315
+ }
316
+
317
+ function createCacheAdapter() {
318
+ if (isRedisClientUsable()) {
319
+ return new RedisCacheAdapter();
320
+ }
321
+ return new MemoryCacheAdapter();
322
+ }
323
+
324
+ function buildCacheKey(options) {
325
+ return buildKeyPath(options);
326
+ }
327
+
328
+ /*
329
+ * Copyright (c) 2024.
330
+ * Author Peter Placzek (tada5hi)
331
+ * For the full copyright and license information,
332
+ * view the LICENSE file that was distributed with this source code.
333
+ */ function _define_property$1(obj, key, value) {
334
+ if (key in obj) {
335
+ Object.defineProperty(obj, key, {
336
+ value: value,
337
+ enumerable: true,
338
+ configurable: true,
339
+ writable: true
340
+ });
341
+ } else {
342
+ obj[key] = value;
343
+ }
344
+ return obj;
345
+ }
346
+ class Cache {
347
+ async set(key, value, options = {}) {
348
+ await this.adapter.set(key, value, options);
349
+ }
350
+ async get(key) {
351
+ return this.adapter.get(key);
352
+ }
353
+ async has(key) {
354
+ return this.adapter.has(key);
355
+ }
356
+ async drop(key) {
357
+ return this.adapter.drop(key);
358
+ }
359
+ async dropMany(keys) {
360
+ return this.adapter.dropMany(keys);
361
+ }
362
+ async clear(options = {}) {
363
+ return this.adapter.clear(options);
364
+ }
365
+ constructor(adapter){
366
+ _define_property$1(this, "adapter", void 0);
367
+ this.adapter = adapter;
368
+ }
369
+ }
370
+
371
+ const instance$2 = singa({
372
+ name: 'cache',
373
+ factory: ()=>{
374
+ let adapter;
375
+ if (isRedisClientUsable()) {
376
+ adapter = new RedisCacheAdapter();
377
+ } else {
378
+ adapter = new MemoryCacheAdapter();
379
+ }
380
+ return new Cache(adapter);
381
+ }
382
+ });
383
+ function useCache() {
384
+ return instance$2.use();
385
+ }
213
386
 
214
387
  function createLogger(ctx = {}) {
215
388
  const { directory, options = {} } = ctx;
@@ -250,51 +423,19 @@ function createLogger(ctx = {}) {
250
423
  });
251
424
  }
252
425
 
253
- const instance$4 = singa({
426
+ const instance$1 = singa({
254
427
  name: 'logger'
255
428
  });
256
429
  function setLoggerFactory(factory) {
257
- instance$4.setFactory(factory);
430
+ instance$1.setFactory(factory);
258
431
  }
259
432
  function isLoggerUsable() {
260
- return instance$4.has() || instance$4.hasFactory();
433
+ return instance$1.has() || instance$1.hasFactory();
261
434
  }
262
435
  function setLogger(input) {
263
- instance$4.set(input);
436
+ instance$1.set(input);
264
437
  }
265
438
  function useLogger() {
266
- return instance$4.use();
267
- }
268
-
269
- const instance$3 = singa({
270
- name: 'redis'
271
- });
272
- function setRedisFactory(factory) {
273
- instance$3.setFactory(factory);
274
- }
275
- function isRedisClientUsable() {
276
- return instance$3.has() || instance$3.hasFactory();
277
- }
278
- function setRedisClient(input) {
279
- instance$3.set(input);
280
- }
281
- function useRedisClient() {
282
- return instance$3.use();
283
- }
284
-
285
- const instance$2 = singa({
286
- name: 'redisPublish',
287
- factory: ()=>useRedisClient().duplicate()
288
- });
289
- function useRedisPublishClient() {
290
- return instance$2.use();
291
- }
292
-
293
- const instance$1 = singa({
294
- name: 'redisSubscribe',
295
- factory: ()=>useRedisClient().duplicate()
296
- });
297
- function useRedisSubscribeClient() {
298
439
  return instance$1.use();
299
440
  }
300
441
 
@@ -487,5 +628,5 @@ async function publishDomainEvent(client, context, destinations) {
487
628
  return Object.prototype.hasOwnProperty.call(obj, prop);
488
629
  }
489
630
 
490
- export { AuthupClient, ComponentError, MemoryCache, QueueRouter, QueueRouterRoutingType, buildQueueRouterPublishPayload, createLogger, guessAuthupTokenCreatorOptions, hasOwnProperty, isAmqpClientUsable, isAuthupClientUsable, isComponentError, isLoggerUsable, isQueuePayload, isQueueRouterPayload, isQueueRouterUsable, isRedisClientUsable, isVaultClientUsable, publishDomainEvent, publishDomainRedisEvent, publishDomainSocketEvent, setAmqpClientFactory, setAuthupClientFactory, setLogger, setLoggerFactory, setRedisClient, setRedisFactory, setVaultFactory, useAmqpClient, useAuthupClient, useLogger, useMemoryCache, useQueueRouter, useRedisClient, useRedisPublishClient, useRedisSubscribeClient, useVaultClient };
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 };
491
632
  //# sourceMappingURL=index.mjs.map