@navios/core 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/e2e/endpoints/get.spec.mts +97 -0
- package/e2e/endpoints/post.spec.mts +113 -0
- package/examples/simple-test/api/index.mts +1 -1
- package/examples/simple-test/src/acl/public.attribute.mts +1 -1
- package/lib/_tsup-dts-rollup.d.mts +17 -49
- package/lib/_tsup-dts-rollup.d.ts +17 -49
- package/lib/index.js +19 -15
- package/lib/index.js.map +1 -1
- package/lib/index.mjs +12 -8
- package/lib/index.mjs.map +1 -1
- package/package.json +13 -11
- package/project.json +8 -3
- package/src/__tests__/config.service.spec.mts +1 -1
- package/src/__tests__/controller.spec.mts +1 -1
- package/src/adapters/multipart-adapter.service.mts +11 -7
- package/src/attribute.factory.mts +1 -1
- package/src/config/config.provider.mts +2 -2
- package/src/config/config.service.mts +2 -2
- package/src/decorators/endpoint.decorator.mts +8 -9
- package/src/decorators/multipart.decorator.mts +4 -4
- package/src/decorators/stream.decorator.mts +3 -3
- package/src/logger/logger.factory.mts +1 -1
- package/tsconfig.json +6 -1
- package/tsconfig.lib.json +8 -0
- package/tsconfig.spec.json +12 -0
- package/tsup.config.mts +1 -0
package/lib/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/adapters/stream-adapter.service.mts","../src/adapters/endpoint-adapter.service.mts","../src/adapters/multipart-adapter.service.mts","../src/config/utils/helpers.mts","../src/logger/utils/cli-colors.util.mts","../src/logger/log-levels.mts","../src/logger/utils/is-log-level.util.mts","../src/logger/utils/filter-log-levelts.util.mts","../src/logger/utils/is-log-level-enabled.mts","../src/logger/utils/shared.utils.mts","../src/tokens/application.token.mts","../src/metadata/handler.metadata.mts","../src/metadata/controller.metadata.mts","../src/metadata/module.metadata.mts","../src/services/execution-context.mts","../src/exceptions/http.exception.mts","../src/exceptions/bad-request.exception.mts","../src/exceptions/forbidden.exception.mts","../src/exceptions/internal-server-error.exception.mts","../src/exceptions/not-found.exception.mts","../src/exceptions/unauthorized.exception.mts","../src/exceptions/conflict.exception.mts","../src/services/guard-runner.service.mts","../src/services/controller-adapter.service.mts","../src/services/module-loader.service.mts","../src/tokens/execution-context.token.mts","../src/tokens/reply.token.mts","../src/tokens/request.token.mts","../src/logger/console-logger.service.mts","../src/logger/logger.service.mts","../src/logger/logger.factory.mts","../src/logger/pino-wrapper.mts","../src/config/config.service.mts","../src/config/config.provider.mts","../src/decorators/controller.decorator.mts","../src/decorators/endpoint.decorator.mts","../src/decorators/header.decorator.mts","../src/decorators/http-code.decorator.mts","../src/decorators/module.decorator.mts","../src/decorators/multipart.decorator.mts","../src/decorators/stream.decorator.mts","../src/decorators/use-guards.decorator.mts","../src/attribute.factory.mts","../src/navios.application.mts","../src/navios.factory.mts"],"names":["InjectionToken","_init","Injectable","inject","_a","isObject","syncInject","getGlobalServiceLocator","dateTimeFormatter","z","env","InjectableScope"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { BaseStreamConfig } from '@navios/builder'\nimport type { ClassType } from '@navios/di'\nimport type { FastifyReply, FastifyRequest } from 'fastify'\n\nimport { inject, Injectable, InjectionToken } from '@navios/di'\n\nimport type { HandlerMetadata } from '../metadata/index.mjs'\nimport type { ExecutionContext } from '../services/index.mjs'\nimport type { HandlerAdapterInterface } from './handler-adapter.interface.mjs'\n\nexport const StreamAdapterToken = InjectionToken.create<StreamAdapterService>(\n Symbol.for('StreamAdapterService'),\n)\n\n@Injectable({\n token: StreamAdapterToken,\n})\nexport class StreamAdapterService implements HandlerAdapterInterface {\n hasSchema(handlerMetadata: HandlerMetadata<BaseStreamConfig>): boolean {\n const config = handlerMetadata.config\n return !!config.requestSchema || !!config.querySchema\n }\n\n prepareArguments(handlerMetadata: HandlerMetadata<BaseStreamConfig>) {\n const config = handlerMetadata.config\n const getters: ((\n target: Record<string, any>,\n request: FastifyRequest,\n ) => void | Promise<void>)[] = []\n if (config.querySchema) {\n getters.push((target, request) => {\n target.params = request.query\n })\n }\n if (config.requestSchema) {\n getters.push((target, request) => {\n target.data = request.body\n })\n }\n if (config.url.includes('$')) {\n getters.push((target, request) => {\n target.urlParams = request.params\n })\n }\n\n return getters\n }\n\n provideHandler(\n controller: ClassType,\n executionContext: ExecutionContext,\n handlerMetadata: HandlerMetadata<BaseStreamConfig>,\n ): (request: FastifyRequest, reply: FastifyReply) => Promise<any> {\n const getters = this.prepareArguments(handlerMetadata)\n const formatArguments = async (request: FastifyRequest) => {\n const argument: Record<string, any> = {}\n const promises: Promise<void>[] = []\n for (const getter of getters) {\n const res = getter(argument, request)\n if (res instanceof Promise) {\n promises.push(res)\n }\n }\n await Promise.all(promises)\n return argument\n }\n\n return async function (request: FastifyRequest, reply: FastifyReply) {\n const controllerInstance = await inject(controller)\n const argument = await formatArguments(request)\n\n await controllerInstance[handlerMetadata.classMethod](argument, reply)\n }\n }\n\n provideSchema(\n handlerMetadata: HandlerMetadata<BaseStreamConfig>,\n ): Record<string, any> {\n const schema: Record<string, any> = {}\n const { querySchema, requestSchema } = handlerMetadata.config\n\n if (querySchema) {\n schema.querystring = querySchema\n }\n if (requestSchema) {\n schema.body = requestSchema\n }\n\n return schema\n }\n}\n","import type { BaseEndpointConfig } from '@navios/builder'\nimport type { ClassType } from '@navios/di'\nimport type { FastifyReply, FastifyRequest } from 'fastify'\n\nimport { inject, Injectable, InjectionToken } from '@navios/di'\n\nimport type { HandlerMetadata } from '../metadata/index.mjs'\nimport type { ExecutionContext } from '../services/index.mjs'\n\nimport { StreamAdapterService } from './stream-adapter.service.mjs'\n\nexport const EndpointAdapterToken =\n InjectionToken.create<EndpointAdapterService>(\n Symbol.for('EndpointAdapterService'),\n )\n\n@Injectable({\n token: EndpointAdapterToken,\n})\nexport class EndpointAdapterService extends StreamAdapterService {\n override hasSchema(\n handlerMetadata: HandlerMetadata<BaseEndpointConfig>,\n ): boolean {\n const config = handlerMetadata.config\n return super.hasSchema(handlerMetadata) || !!config.responseSchema\n }\n\n override provideSchema(\n handlerMetadata: HandlerMetadata<BaseEndpointConfig>,\n ): Record<string, any> {\n const config = handlerMetadata.config\n const schema = super.provideSchema(handlerMetadata)\n if (config.responseSchema) {\n schema.response = {\n 200: config.responseSchema,\n }\n }\n\n return schema\n }\n\n override provideHandler(\n controller: ClassType,\n executionContext: ExecutionContext,\n handlerMetadata: HandlerMetadata<BaseEndpointConfig>,\n ): (request: FastifyRequest, reply: FastifyReply) => Promise<any> {\n const getters = this.prepareArguments(handlerMetadata)\n const formatArguments = async (request: FastifyRequest) => {\n const argument: Record<string, any> = {}\n const promises: Promise<void>[] = []\n for (const getter of getters) {\n const res = getter(argument, request)\n if (res instanceof Promise) {\n promises.push(res)\n }\n }\n await Promise.all(promises)\n return argument\n }\n\n return async function (request, reply) {\n const controllerInstance = await inject(controller)\n const argument = await formatArguments(request)\n const result =\n await controllerInstance[handlerMetadata.classMethod](argument)\n reply\n .status(handlerMetadata.successStatusCode)\n .headers(handlerMetadata.headers)\n .send(result)\n }\n }\n}\n","import type { MultipartFile, MultipartValue } from '@fastify/multipart'\nimport type { BaseEndpointConfig } from '@navios/builder'\nimport type { FastifyRequest } from 'fastify'\nimport type { AnyZodObject, ZodRawShape } from 'zod'\n\nimport { Injectable, InjectionToken } from '@navios/di'\n\nimport { ZodArray, ZodObject, ZodOptional } from 'zod'\n\nimport type { HandlerMetadata } from '../metadata/index.mjs'\n\nimport { EndpointAdapterService } from './endpoint-adapter.service.mjs'\n\nexport const MultipartAdapterToken =\n InjectionToken.create<MultipartAdapterService>(\n Symbol.for('MultipartAdapterService'),\n )\n\n@Injectable({\n token: MultipartAdapterToken,\n})\nexport class MultipartAdapterService extends EndpointAdapterService {\n prepareArguments(\n handlerMetadata: HandlerMetadata<BaseEndpointConfig>,\n ): ((target: Record<string, any>, request: FastifyRequest) => void)[] {\n const config = handlerMetadata.config\n const getters: ((\n target: Record<string, any>,\n request: FastifyRequest,\n ) => void | Promise<void>)[] = []\n if (config.querySchema) {\n getters.push((target, request) => {\n target.params = request.query\n })\n }\n if (config.url.includes('$')) {\n getters.push((target, request) => {\n target.urlParams = request.params\n })\n }\n const requestSchema = config.requestSchema as unknown as AnyZodObject\n const shape = requestSchema._def.shape()\n const structure = this.analyzeSchema(shape)\n getters.push(async (target, request) => {\n const req: Record<string, any> = {}\n for await (const part of request.parts()) {\n await this.populateRequest(structure, part, req)\n }\n target.data = requestSchema.parse(req)\n })\n\n return getters\n }\n\n private async populateRequest(\n structure: {\n [p: string]: { isArray: boolean; isOptional: boolean; isObject: boolean }\n },\n part: MultipartFile | MultipartValue<unknown>,\n req: Record<string, any>,\n ) {\n const { isArray, isObject } = structure[part.fieldname] ?? {}\n if (isArray && !req[part.fieldname]) {\n req[part.fieldname] = []\n }\n let value\n if (part.type === 'file') {\n value = new File([await part.toBuffer()], part.filename, {\n type: part.mimetype,\n })\n } else {\n value = part.value\n if (isObject && typeof value === 'string') {\n value = JSON.parse(value)\n }\n }\n\n if (isArray) {\n req[part.fieldname].push(value)\n } else {\n req[part.fieldname] = value\n }\n }\n\n private analyzeSchema(shape: ZodRawShape) {\n return Object.keys(shape).reduce(\n (target, key) => {\n let schema = shape[key]\n const isOptional = schema instanceof ZodOptional\n if (isOptional) {\n schema = (schema as ZodOptional<any>).unwrap()\n }\n const isArray = schema instanceof ZodArray\n if (isArray) {\n schema = (schema as ZodArray<any>).element\n }\n const isObject = schema instanceof ZodObject\n return {\n ...target,\n [key]: {\n isArray,\n isOptional,\n isObject,\n },\n }\n },\n {} as Record<\n string,\n { isArray: boolean; isOptional: boolean; isObject: boolean }\n >,\n )\n }\n\n override provideSchema(\n handlerMetadata: HandlerMetadata<BaseEndpointConfig>,\n ): Record<string, any> {\n const schema: Record<string, any> = {}\n const { querySchema, responseSchema } = handlerMetadata.config\n\n if (querySchema) {\n schema.querystring = querySchema\n }\n if (responseSchema) {\n schema.response = {\n 200: responseSchema,\n }\n }\n\n return schema\n }\n}\n","import { env } from 'node:process'\n\nexport function envInt(\n key: keyof NodeJS.ProcessEnv,\n defaultValue: number,\n): number {\n const envKey = env[key] || process.env[key]\n\n return envKey ? parseInt(envKey as string, 10) : defaultValue\n}\n\nexport function envString<\n DefaultValue extends string | undefined,\n Ensured = DefaultValue extends string ? true : false,\n>(\n key: keyof NodeJS.ProcessEnv,\n defaultValue?: DefaultValue,\n): Ensured extends true ? string : string | undefined {\n return (env[key] ||\n process.env[key] ||\n defaultValue ||\n undefined) as Ensured extends true ? string : string | undefined\n}\n","type ColorTextFn = (text: string) => string\n\nconst isColorAllowed = () => !process.env.NO_COLOR\nconst colorIfAllowed = (colorFn: ColorTextFn) => (text: string) =>\n isColorAllowed() ? colorFn(text) : text\n\nexport const clc = {\n bold: colorIfAllowed((text: string) => `\\x1B[1m${text}\\x1B[0m`),\n green: colorIfAllowed((text: string) => `\\x1B[32m${text}\\x1B[39m`),\n yellow: colorIfAllowed((text: string) => `\\x1B[33m${text}\\x1B[39m`),\n red: colorIfAllowed((text: string) => `\\x1B[31m${text}\\x1B[39m`),\n magentaBright: colorIfAllowed((text: string) => `\\x1B[95m${text}\\x1B[39m`),\n cyanBright: colorIfAllowed((text: string) => `\\x1B[96m${text}\\x1B[39m`),\n}\nexport const yellow = colorIfAllowed(\n (text: string) => `\\x1B[38;5;3m${text}\\x1B[39m`,\n)\n","export const LOG_LEVELS = [\n 'verbose',\n 'debug',\n 'log',\n 'warn',\n 'error',\n 'fatal',\n] as const satisfies string[]\n/**\n * @publicApi\n */\nexport type LogLevel = (typeof LOG_LEVELS)[number]\n","import type { LogLevel } from '../log-levels.mjs'\n\nimport { LOG_LEVELS } from '../log-levels.mjs'\n\n/**\n * @publicApi\n */\nexport function isLogLevel(maybeLogLevel: any): maybeLogLevel is LogLevel {\n return LOG_LEVELS.includes(maybeLogLevel)\n}\n","import type { LogLevel } from '../log-levels.mjs'\n\nimport { LOG_LEVELS } from '../log-levels.mjs'\nimport { isLogLevel } from './is-log-level.util.mjs'\n\n/**\n * @publicApi\n */\nexport function filterLogLevels(parseableString = ''): LogLevel[] {\n const sanitizedString = parseableString.replaceAll(' ', '').toLowerCase()\n\n if (sanitizedString[0] === '>') {\n const orEqual = sanitizedString[1] === '='\n\n const logLevelIndex = (LOG_LEVELS as string[]).indexOf(\n sanitizedString.substring(orEqual ? 2 : 1),\n )\n\n if (logLevelIndex === -1) {\n throw new Error(`parse error (unknown log level): ${sanitizedString}`)\n }\n\n return LOG_LEVELS.slice(orEqual ? logLevelIndex : logLevelIndex + 1)\n } else if (sanitizedString.includes(',')) {\n return sanitizedString.split(',').filter(isLogLevel)\n }\n\n return isLogLevel(sanitizedString) ? [sanitizedString] : LOG_LEVELS\n}\n","import type { LogLevel } from '../log-levels.mjs'\n\nconst LOG_LEVEL_VALUES: Record<LogLevel, number> = {\n verbose: 0,\n debug: 1,\n log: 2,\n warn: 3,\n error: 4,\n fatal: 5,\n}\n\n/**\n * Checks if target level is enabled.\n * @param targetLevel target level\n * @param logLevels array of enabled log levels\n */\nexport function isLogLevelEnabled(\n targetLevel: LogLevel,\n logLevels: LogLevel[] | undefined,\n): boolean {\n if (!logLevels || (Array.isArray(logLevels) && logLevels?.length === 0)) {\n return false\n }\n if (logLevels.includes(targetLevel)) {\n return true\n }\n const highestLogLevelValue = logLevels\n .map((level) => LOG_LEVEL_VALUES[level])\n .sort((a, b) => b - a)?.[0]\n\n const targetLevelValue = LOG_LEVEL_VALUES[targetLevel]\n return targetLevelValue >= highestLogLevelValue\n}\n","export const isUndefined = (obj: any): obj is undefined =>\n typeof obj === 'undefined'\n\nexport const isObject = (fn: any): fn is object =>\n !isNil(fn) && typeof fn === 'object'\n\nexport const isPlainObject = (fn: any): fn is object => {\n if (!isObject(fn)) {\n return false\n }\n const proto = Object.getPrototypeOf(fn)\n if (proto === null) {\n return true\n }\n const ctor =\n Object.prototype.hasOwnProperty.call(proto, 'constructor') &&\n proto.constructor\n return (\n typeof ctor === 'function' &&\n ctor instanceof ctor &&\n Function.prototype.toString.call(ctor) ===\n Function.prototype.toString.call(Object)\n )\n}\n\nexport const addLeadingSlash = (path?: string): string =>\n path && typeof path === 'string'\n ? path.charAt(0) !== '/' && path.substring(0, 2) !== '{/'\n ? '/' + path\n : path\n : ''\n\nexport const normalizePath = (path?: string): string =>\n path\n ? path.startsWith('/')\n ? ('/' + path.replace(/\\/+$/, '')).replace(/\\/+/g, '/')\n : '/' + path.replace(/\\/+$/, '')\n : '/'\n\nexport const stripEndSlash = (path: string) =>\n path[path.length - 1] === '/' ? path.slice(0, path.length - 1) : path\n\nexport const isFunction = (val: any): val is Function =>\n typeof val === 'function'\nexport const isString = (val: any): val is string => typeof val === 'string'\nexport const isNumber = (val: any): val is number => typeof val === 'number'\nexport const isConstructor = (val: any): boolean => val === 'constructor'\nexport const isNil = (val: any): val is null | undefined =>\n isUndefined(val) || val === null\nexport const isEmpty = (array: any): boolean => !(array && array.length > 0)\nexport const isSymbol = (val: any): val is symbol => typeof val === 'symbol'\n","import type { FastifyInstance } from 'fastify'\n\nimport { InjectionToken } from '@navios/di'\n\nconst ApplicationInjectionToken = 'ApplicationInjectionToken'\n\nexport const Application = InjectionToken.create<FastifyInstance>(\n ApplicationInjectionToken,\n)\n","import type { HttpMethod } from '@navios/builder'\nimport type { ClassTypeWithInstance, InjectionToken } from '@navios/di'\nimport type { HttpHeader } from 'fastify/types/utils.js'\n\nimport type { HandlerAdapterInterface } from '../adapters/index.mjs'\nimport type { CanActivate } from '../interfaces/index.mjs'\n\nexport const EndpointMetadataKey = Symbol('EndpointMetadataKey')\n\nexport interface HandlerMetadata<Config = null> {\n classMethod: string\n url: string\n successStatusCode: number\n adapterToken:\n | InjectionToken<HandlerAdapterInterface, undefined>\n | ClassTypeWithInstance<HandlerAdapterInterface>\n | null\n headers: Partial<Record<HttpHeader, number | string | string[] | undefined>>\n httpMethod: HttpMethod\n config: Config\n guards: Set<\n ClassTypeWithInstance<CanActivate> | InjectionToken<CanActivate, undefined>\n >\n customAttributes: Map<string | symbol, any>\n}\n\nexport function getAllEndpointMetadata(\n context: ClassMethodDecoratorContext | ClassDecoratorContext,\n): Set<HandlerMetadata<any>> {\n if (context.metadata) {\n const metadata = context.metadata[EndpointMetadataKey] as\n | Set<HandlerMetadata>\n | undefined\n if (metadata) {\n return metadata\n } else {\n context.metadata[EndpointMetadataKey] = new Set<HandlerMetadata<any>>()\n return context.metadata[EndpointMetadataKey] as Set<HandlerMetadata<any>>\n }\n }\n throw new Error('[Navios] Wrong environment.')\n}\n\nexport function getEndpointMetadata<Config = any>(\n target: Function,\n context: ClassMethodDecoratorContext,\n): HandlerMetadata<Config> {\n if (context.metadata) {\n const metadata = getAllEndpointMetadata(context)\n if (metadata) {\n const endpointMetadata = Array.from(metadata).find(\n (item) => item.classMethod === target.name,\n )\n if (endpointMetadata) {\n return endpointMetadata\n } else {\n const newMetadata: HandlerMetadata<Config> = {\n classMethod: target.name,\n url: '',\n successStatusCode: 200,\n adapterToken: null,\n headers: {},\n httpMethod: 'GET',\n // @ts-expect-error We are using a generic type here\n config: null,\n guards: new Set<\n | ClassTypeWithInstance<CanActivate>\n | InjectionToken<CanActivate, undefined>\n >(),\n customAttributes: new Map<string | symbol, any>(),\n }\n metadata.add(newMetadata)\n return newMetadata\n }\n }\n }\n throw new Error('[Navios] Wrong environment.')\n}\n","import type {\n ClassType,\n ClassTypeWithInstance,\n InjectionToken,\n} from '@navios/di'\n\nimport type { CanActivate } from '../interfaces/index.mjs'\nimport type { HandlerMetadata } from './handler.metadata.mjs'\n\nimport { getAllEndpointMetadata } from './handler.metadata.mjs'\n\nexport const ControllerMetadataKey = Symbol('ControllerMetadataKey')\n\nexport interface ControllerMetadata {\n endpoints: Set<HandlerMetadata>\n guards: Set<\n ClassTypeWithInstance<CanActivate> | InjectionToken<CanActivate, undefined>\n >\n customAttributes: Map<string | symbol, any>\n}\n\nexport function getControllerMetadata(\n target: ClassType,\n context: ClassDecoratorContext,\n): ControllerMetadata {\n if (context.metadata) {\n const metadata = context.metadata[ControllerMetadataKey] as\n | ControllerMetadata\n | undefined\n if (metadata) {\n return metadata\n } else {\n const endpointsMetadata = getAllEndpointMetadata(context)\n const newMetadata: ControllerMetadata = {\n endpoints: endpointsMetadata,\n guards: new Set<\n | ClassTypeWithInstance<CanActivate>\n | InjectionToken<CanActivate, undefined>\n >(),\n customAttributes: new Map<string | symbol, any>(),\n }\n context.metadata[ControllerMetadataKey] = newMetadata\n // @ts-expect-error We add a custom metadata key to the target\n target[ControllerMetadataKey] = newMetadata\n return newMetadata\n }\n }\n throw new Error('[Navios] Wrong environment.')\n}\n\nexport function extractControllerMetadata(\n target: ClassType,\n): ControllerMetadata {\n // @ts-expect-error We add a custom metadata key to the target\n const metadata = target[ControllerMetadataKey] as\n | ControllerMetadata\n | undefined\n if (!metadata) {\n throw new Error(\n '[Navios] Controller metadata not found. Make sure to use @Controller decorator.',\n )\n }\n return metadata\n}\n\nexport function hasControllerMetadata(target: ClassType): boolean {\n // @ts-expect-error We add a custom metadata key to the target\n const metadata = target[ControllerMetadataKey] as\n | ControllerMetadata\n | undefined\n return !!metadata\n}\n","import type {\n ClassType,\n ClassTypeWithInstance,\n InjectionToken,\n} from '@navios/di'\n\nimport type { CanActivate } from '../index.mjs'\n\nexport const ModuleMetadataKey = Symbol('ControllerMetadataKey')\n\nexport interface ModuleMetadata {\n controllers: Set<ClassType>\n imports: Set<ClassType>\n guards: Set<\n ClassTypeWithInstance<CanActivate> | InjectionToken<CanActivate, undefined>\n >\n customAttributes: Map<string | symbol, any>\n}\n\nexport function getModuleMetadata(\n target: ClassType,\n context: ClassDecoratorContext,\n): ModuleMetadata {\n if (context.metadata) {\n const metadata = context.metadata[ModuleMetadataKey] as\n | ModuleMetadata\n | undefined\n if (metadata) {\n return metadata\n } else {\n const newMetadata: ModuleMetadata = {\n controllers: new Set<ClassType>(),\n imports: new Set<ClassType>(),\n guards: new Set<\n | ClassTypeWithInstance<CanActivate>\n | InjectionToken<CanActivate, undefined>\n >(),\n customAttributes: new Map<string | symbol, any>(),\n }\n context.metadata[ModuleMetadataKey] = newMetadata\n // @ts-expect-error We add a custom metadata key to the target\n target[ModuleMetadataKey] = newMetadata\n return newMetadata\n }\n }\n throw new Error('[Navios] Wrong environment.')\n}\n\nexport function extractModuleMetadata(target: ClassType): ModuleMetadata {\n // @ts-expect-error We add a custom metadata key to the target\n const metadata = target[ModuleMetadataKey] as ModuleMetadata | undefined\n if (!metadata) {\n throw new Error(\n `[Navios] Module metadata not found for ${target.name}. Make sure to use @Module decorator.`,\n )\n }\n return metadata\n}\n\nexport function hasModuleMetadata(target: ClassType): boolean {\n // @ts-expect-error We add a custom metadata key to the target\n return !!target[ModuleMetadataKey]\n}\n","import type { FastifyReply, FastifyRequest } from 'fastify'\n\nimport type {\n ControllerMetadata,\n HandlerMetadata,\n ModuleMetadata,\n} from '../metadata/index.mjs'\n\nexport class ExecutionContext {\n private request: FastifyRequest | undefined\n private reply: FastifyReply | undefined\n constructor(\n private readonly module: ModuleMetadata,\n private readonly controller: ControllerMetadata,\n private readonly handler: HandlerMetadata,\n ) {}\n getModule(): ModuleMetadata {\n return this.module\n }\n\n getController(): ControllerMetadata {\n return this.controller\n }\n\n getHandler(): HandlerMetadata {\n return this.handler\n }\n\n getRequest(): FastifyRequest {\n if (!this.request) {\n throw new Error(\n '[Navios] Request is not set. Make sure to set it before using it.',\n )\n }\n return this.request\n }\n\n getReply(): FastifyReply {\n if (!this.reply) {\n throw new Error(\n '[Navios] Reply is not set. Make sure to set it before using it.',\n )\n }\n return this.reply\n }\n\n provideRequest(request: FastifyRequest): void {\n this.request = request\n }\n\n provideReply(reply: FastifyReply): void {\n this.reply = reply\n }\n}\n","export class HttpException {\n constructor(\n public readonly statusCode: number,\n public readonly response: string | object,\n public readonly error?: Error,\n ) {}\n}\n","import { HttpException } from './http.exception.mjs'\n\nexport class BadRequestException extends HttpException {\n constructor(message: string | object) {\n super(400, message)\n }\n}\n","import { HttpException } from './http.exception.mjs'\n\nexport class ForbiddenException extends HttpException {\n constructor(message: string) {\n super(403, message)\n }\n}\n","import { HttpException } from './http.exception.mjs'\n\nexport class InternalServerErrorException extends HttpException {\n constructor(message: string | object, error?: Error) {\n super(500, message, error)\n }\n}\n","import { HttpException } from './http.exception.mjs'\n\nexport class NotFoundException extends HttpException {\n constructor(\n public readonly response: string | object,\n public readonly error?: Error,\n ) {\n super(404, response, error)\n }\n}\n","import { HttpException } from './http.exception.mjs'\n\nexport class UnauthorizedException extends HttpException {\n constructor(message: string | object, error?: Error) {\n super(401, message, error)\n }\n}\n","import { HttpException } from './http.exception.mjs'\n\nexport class ConflictException extends HttpException {\n constructor(message: string | object, error?: Error) {\n super(409, message, error)\n }\n}\n","import type { ClassTypeWithInstance } from '@navios/di'\n\nimport { inject, Injectable, InjectionToken } from '@navios/di'\n\nimport type { CanActivate } from '../interfaces/index.mjs'\nimport type { ExecutionContext } from './execution-context.mjs'\n\nimport { HttpException } from '../exceptions/index.mjs'\n\n@Injectable()\nexport class GuardRunnerService {\n async runGuards(\n allGuards: Set<\n | ClassTypeWithInstance<CanActivate>\n | InjectionToken<CanActivate, undefined>\n >,\n executionContext: ExecutionContext,\n ) {\n let canActivate = true\n for (const guard of Array.from(allGuards).reverse()) {\n const guardInstance = await inject(\n guard as InjectionToken<CanActivate, undefined>,\n )\n if (!guardInstance.canActivate) {\n throw new Error(\n `[Navios] Guard ${guard.name as string} does not implement canActivate()`,\n )\n }\n try {\n canActivate = await guardInstance.canActivate(executionContext)\n if (!canActivate) {\n break\n }\n } catch (error) {\n if (error instanceof HttpException) {\n executionContext\n .getReply()\n .status(error.statusCode)\n .send(error.response)\n return false\n } else {\n executionContext\n .getReply()\n .status(500)\n .send({\n message: 'Internal server error',\n error: (error as Error).message,\n })\n return false\n }\n }\n }\n if (!canActivate) {\n executionContext.getReply().status(403).send({\n message: 'Forbidden',\n })\n return false\n }\n return canActivate\n }\n\n makeContext(\n executionContext: ExecutionContext,\n ): Set<\n ClassTypeWithInstance<CanActivate> | InjectionToken<CanActivate, undefined>\n > {\n const guards = new Set<\n | ClassTypeWithInstance<CanActivate>\n | InjectionToken<CanActivate, undefined>\n >()\n const endpointGuards = executionContext.getHandler().guards\n const controllerGuards = executionContext.getController().guards\n const moduleGuards = executionContext.getModule().guards\n if (endpointGuards.size > 0) {\n for (const guard of endpointGuards) {\n guards.add(guard)\n }\n }\n if (controllerGuards.size > 0) {\n for (const guard of controllerGuards) {\n guards.add(guard)\n }\n }\n if (moduleGuards.size > 0) {\n for (const guard of moduleGuards) {\n guards.add(guard)\n }\n }\n return guards\n }\n}\n","import type { ClassType } from '@navios/di'\nimport type { FastifyInstance, FastifyReply, FastifyRequest } from 'fastify'\nimport type { ZodTypeProvider } from 'fastify-type-provider-zod'\n\nimport {\n getGlobalServiceLocator,\n inject,\n Injectable,\n InjectionToken,\n syncInject,\n} from '@navios/di'\n\nimport type { HandlerAdapterInterface } from '../adapters/index.mjs'\nimport type { ModuleMetadata } from '../metadata/index.mjs'\n\nimport { Logger } from '../logger/index.mjs'\nimport { extractControllerMetadata } from '../metadata/index.mjs'\nimport { ExecutionContextToken, Reply, Request } from '../tokens/index.mjs'\nimport { ExecutionContext } from './execution-context.mjs'\nimport { GuardRunnerService } from './guard-runner.service.mjs'\n\n@Injectable()\nexport class ControllerAdapterService {\n guardRunner = syncInject(GuardRunnerService)\n private logger = syncInject(Logger, {\n context: ControllerAdapterService.name,\n })\n\n async setupController(\n controller: ClassType,\n instance: FastifyInstance,\n moduleMetadata: ModuleMetadata,\n ) {\n const controllerMetadata = extractControllerMetadata(controller)\n for (const endpoint of controllerMetadata.endpoints) {\n const { classMethod, url, httpMethod, adapterToken } = endpoint\n\n if (!url || !adapterToken) {\n throw new Error(\n `[Navios] Malformed Endpoint ${controller.name}:${classMethod}`,\n )\n }\n const adapter = await inject(\n adapterToken as InjectionToken<HandlerAdapterInterface>,\n )\n const executionContext = new ExecutionContext(\n moduleMetadata,\n controllerMetadata,\n endpoint,\n )\n const hasSchema = adapter.hasSchema?.(endpoint) ?? false\n if (hasSchema) {\n instance.withTypeProvider<ZodTypeProvider>().route({\n method: httpMethod,\n url: url.replaceAll('$', ':'),\n schema: adapter.provideSchema?.(endpoint) ?? {},\n preHandler: this.providePreHandler(executionContext),\n handler: this.wrapHandler(\n executionContext,\n adapter.provideHandler(controller, executionContext, endpoint),\n ),\n })\n } else {\n instance.route({\n method: httpMethod,\n url: url.replaceAll('$', ':'),\n preHandler: this.providePreHandler(executionContext),\n handler: this.wrapHandler(\n executionContext,\n adapter.provideHandler(controller, executionContext, endpoint),\n ),\n })\n }\n\n this.logger.debug(\n `Registered ${httpMethod} ${url} for ${controller.name}:${classMethod}`,\n )\n }\n }\n\n providePreHandler(executionContext: ExecutionContext) {\n const guards = this.guardRunner.makeContext(executionContext)\n return guards.size > 0\n ? this.wrapHandler(\n executionContext,\n async (request: FastifyRequest, reply: FastifyReply) => {\n let canActivate = true\n canActivate = await this.guardRunner.runGuards(\n guards,\n executionContext,\n )\n if (!canActivate) {\n return reply\n }\n },\n )\n : undefined\n }\n\n private wrapHandler(\n executionContext: ExecutionContext,\n handler: (request: FastifyRequest, reply: FastifyReply) => Promise<void>,\n ) {\n const locator = getGlobalServiceLocator()\n return async (request: FastifyRequest, reply: FastifyReply) => {\n locator.storeInstance(request, Request)\n locator.storeInstance(reply, Reply)\n locator.storeInstance(executionContext, ExecutionContextToken)\n executionContext.provideRequest(request)\n executionContext.provideReply(reply)\n try {\n return await handler(request, reply)\n } finally {\n Promise.all([\n locator.removeInstance(Request),\n locator.removeInstance(Reply),\n locator.removeInstance(ExecutionContextToken),\n ]).catch((err) => {\n this.logger.warn(`Error removing instances: ${err}`)\n })\n }\n }\n }\n}\n","import type { ClassTypeWithInstance } from '@navios/di'\n\nimport { inject, Injectable, syncInject } from '@navios/di'\n\nimport type { NaviosModule } from '../interfaces/index.mjs'\nimport type { ModuleMetadata } from '../metadata/index.mjs'\n\nimport { Logger } from '../logger/index.mjs'\nimport { extractModuleMetadata } from '../metadata/index.mjs'\n\n@Injectable()\nexport class ModuleLoaderService {\n private logger = syncInject(Logger, {\n context: ModuleLoaderService.name,\n })\n private modulesMetadata: Map<string, ModuleMetadata> = new Map()\n private loadedModules: Map<string, any> = new Map()\n private initialized = false\n\n async loadModules(appModule: ClassTypeWithInstance<NaviosModule>) {\n if (this.initialized) {\n return\n }\n await this.traverseModules(appModule)\n this.initialized = true\n }\n\n private async traverseModules(\n module: ClassTypeWithInstance<NaviosModule>,\n parentMetadata?: ModuleMetadata,\n ) {\n const metadata = extractModuleMetadata(module)\n if (parentMetadata) {\n this.mergeMetadata(metadata, parentMetadata)\n }\n const moduleName = module.name\n if (this.modulesMetadata.has(moduleName)) {\n return\n }\n this.modulesMetadata.set(moduleName, metadata)\n const imports = metadata.imports ?? new Set()\n const loadingPromises = Array.from(imports).map(async (importedModule) =>\n this.traverseModules(importedModule, metadata),\n )\n await Promise.all(loadingPromises)\n const instance = await inject(module)\n if (instance.onModuleInit) {\n await instance.onModuleInit()\n }\n this.logger.debug(`Module ${moduleName} loaded`)\n this.loadedModules.set(moduleName, instance)\n }\n\n private mergeMetadata(\n metadata: ModuleMetadata,\n parentMetadata: ModuleMetadata,\n ): void {\n if (parentMetadata.guards) {\n for (const guard of parentMetadata.guards) {\n metadata.guards.add(guard)\n }\n }\n if (parentMetadata.customAttributes) {\n for (const [key, value] of parentMetadata.customAttributes) {\n if (metadata.customAttributes.has(key)) {\n continue\n }\n metadata.customAttributes.set(key, value)\n }\n }\n }\n getAllModules(): Map<string, ModuleMetadata> {\n return this.modulesMetadata\n }\n dispose() {\n this.modulesMetadata.clear()\n this.loadedModules.clear()\n this.initialized = false\n }\n}\n","import { InjectionToken } from '@navios/di'\n\nimport { ExecutionContext } from '../services/index.mjs'\n\nexport const ExecutionContextInjectionToken = 'ExecutionContextInjectionToken'\n\nexport const ExecutionContextToken = InjectionToken.create<ExecutionContext>(\n ExecutionContextInjectionToken,\n)\n","import type { FastifyReply } from 'fastify'\n\nimport { InjectionToken } from '@navios/di'\n\nconst ReplyInjectionToken = 'ReplyInjectionToken'\n\nexport const Reply = InjectionToken.create<FastifyReply>(ReplyInjectionToken)\n","import type { FastifyRequest } from 'fastify'\n\nimport { InjectionToken } from '@navios/di'\n\nconst RequestInjectionToken = 'RequestInjectionToken'\n\nexport const Request = InjectionToken.create<FastifyRequest>(\n RequestInjectionToken,\n)\n","import type { InspectOptions } from 'util'\n\nimport { inspect } from 'util'\n\nimport { getGlobalServiceLocator, Injectable } from '@navios/di'\n\nimport type { LogLevel } from './log-levels.mjs'\nimport type { LoggerService } from './logger-service.interface.mjs'\n\nimport { Request } from '../tokens/index.mjs'\nimport {\n clc,\n isFunction,\n isLogLevelEnabled,\n isPlainObject,\n isString,\n isUndefined,\n yellow,\n} from './utils/index.mjs'\n\nconst DEFAULT_DEPTH = 5\n\n/**\n * @publicApi\n */\nexport interface ConsoleLoggerOptions {\n /**\n * Enabled log levels.\n */\n logLevels?: LogLevel[]\n /**\n * If enabled, will print timestamp (time difference) between current and previous log message.\n * Note: This option is not used when `json` is enabled.\n */\n timestamp?: boolean\n /**\n * A prefix to be used for each log message.\n * Note: This option is not used when `json` is enabled.\n */\n prefix?: string\n /**\n * If enabled, will add a request ID to the log message.\n */\n requestId?: boolean\n /**\n * If enabled, will print the log message in JSON format.\n */\n json?: boolean\n /**\n * If enabled, will print the log message in color.\n * Default true if json is disabled, false otherwise\n */\n colors?: boolean\n /**\n * The context of the logger.\n */\n context?: string\n /**\n * If enabled, will print the log message in a single line, even if it is an object with multiple properties.\n * If set to a number, the most n inner elements are united on a single line as long as all properties fit into breakLength. Short array elements are also grouped together.\n * Default true when `json` is enabled, false otherwise.\n */\n compact?: boolean | number\n /**\n * Specifies the maximum number of Array, TypedArray, Map, Set, WeakMap, and WeakSet elements to include when formatting.\n * Set to null or Infinity to show all elements. Set to 0 or negative to show no elements.\n * Ignored when `json` is enabled, colors are disabled, and `compact` is set to true as it produces a parseable JSON output.\n * @default 100\n */\n maxArrayLength?: number\n /**\n * Specifies the maximum number of characters to include when formatting.\n * Set to null or Infinity to show all elements. Set to 0 or negative to show no characters.\n * Ignored when `json` is enabled, colors are disabled, and `compact` is set to true as it produces a parseable JSON output.\n * @default 10000.\n */\n maxStringLength?: number\n /**\n * If enabled, will sort keys while formatting objects.\n * Can also be a custom sorting function.\n * Ignored when `json` is enabled, colors are disabled, and `compact` is set to true as it produces a parseable JSON output.\n * @default false\n */\n sorted?: boolean | ((a: string, b: string) => number)\n /**\n * Specifies the number of times to recurse while formatting object. T\n * This is useful for inspecting large objects. To recurse up to the maximum call stack size pass Infinity or null.\n * Ignored when `json` is enabled, colors are disabled, and `compact` is set to true as it produces a parseable JSON output.\n * @default 5\n */\n depth?: number\n /**\n * If true, object's non-enumerable symbols and properties are included in the formatted result.\n * WeakMap and WeakSet entries are also included as well as user defined prototype properties\n * @default false\n */\n showHidden?: boolean\n /**\n * The length at which input values are split across multiple lines. Set to Infinity to format the input as a single line (in combination with \"compact\" set to true).\n * Default Infinity when \"compact\" is true, 80 otherwise.\n * Ignored when `json` is enabled, colors are disabled, and `compact` is set to true as it produces a parseable JSON output.\n */\n breakLength?: number\n}\n\nconst DEFAULT_LOG_LEVELS: LogLevel[] = [\n 'log',\n 'error',\n 'warn',\n 'debug',\n 'verbose',\n 'fatal',\n]\n\nconst dateTimeFormatter = new Intl.DateTimeFormat(undefined, {\n year: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n day: '2-digit',\n month: '2-digit',\n})\n\n/**\n * @publicApi\n */\n@Injectable()\nexport class ConsoleLogger implements LoggerService {\n /**\n * The options of the logger.\n */\n protected options: ConsoleLoggerOptions\n /**\n * The context of the logger (can be set manually or automatically inferred).\n */\n protected context?: string\n /**\n * Request ID (if enabled).\n */\n protected requestId: string | null = null\n /**\n * The original context of the logger (set in the constructor).\n */\n protected originalContext?: string\n /**\n * The options used for the \"inspect\" method.\n */\n protected inspectOptions: InspectOptions\n /**\n * The last timestamp at which the log message was printed.\n */\n protected static lastTimestampAt?: number\n\n constructor()\n constructor(context: string)\n constructor(options: ConsoleLoggerOptions)\n constructor(context: string, options: ConsoleLoggerOptions)\n constructor(\n contextOrOptions?: string | ConsoleLoggerOptions,\n options?: ConsoleLoggerOptions,\n ) {\n // eslint-disable-next-line prefer-const\n let [context, opts] = isString(contextOrOptions)\n ? [contextOrOptions, options]\n : options\n ? [undefined, options]\n : [contextOrOptions?.context, contextOrOptions]\n\n opts = opts ?? {}\n opts.logLevels ??= DEFAULT_LOG_LEVELS\n opts.colors ??= opts.colors ?? (opts.json ? false : true)\n opts.prefix ??= 'Navios'\n\n this.options = opts\n this.inspectOptions = this.getInspectOptions()\n\n if (context) {\n this.context = context\n this.originalContext = context\n }\n if (opts?.requestId) {\n const locator = getGlobalServiceLocator()\n locator\n .getEventBus()\n .on(locator.getInstanceIdentifier(Request, undefined), 'create', () => {\n const request = locator.getSyncInstance(Request, undefined)\n this.requestId = request?.id ?? null\n })\n locator\n .getEventBus()\n .on(\n locator.getInstanceIdentifier(Request, undefined),\n 'destroy',\n () => {\n this.requestId = null\n },\n )\n }\n }\n\n /**\n * Write a 'log' level log, if the configured level allows for it.\n * Prints to `stdout` with newline.\n */\n log(message: any, context?: string): void\n log(message: any, ...optionalParams: [...any, string?]): void\n log(message: any, ...optionalParams: any[]) {\n if (!this.isLevelEnabled('log')) {\n return\n }\n const { messages, context } = this.getContextAndMessagesToPrint([\n message,\n ...optionalParams,\n ])\n this.printMessages(messages, context, 'log')\n }\n\n /**\n * Write an 'error' level log, if the configured level allows for it.\n * Prints to `stderr` with newline.\n */\n error(message: any, stackOrContext?: string): void\n error(message: any, stack?: string, context?: string): void\n error(message: any, ...optionalParams: [...any, string?, string?]): void\n error(message: any, ...optionalParams: any[]) {\n if (!this.isLevelEnabled('error')) {\n return\n }\n const { messages, context, stack } =\n this.getContextAndStackAndMessagesToPrint([message, ...optionalParams])\n\n this.printMessages(messages, context, 'error', 'stderr', stack)\n this.printStackTrace(stack!)\n }\n\n /**\n * Write a 'warn' level log, if the configured level allows for it.\n * Prints to `stdout` with newline.\n */\n warn(message: any, context?: string): void\n warn(message: any, ...optionalParams: [...any, string?]): void\n warn(message: any, ...optionalParams: any[]) {\n if (!this.isLevelEnabled('warn')) {\n return\n }\n const { messages, context } = this.getContextAndMessagesToPrint([\n message,\n ...optionalParams,\n ])\n this.printMessages(messages, context, 'warn')\n }\n\n /**\n * Write a 'debug' level log, if the configured level allows for it.\n * Prints to `stdout` with newline.\n */\n debug(message: any, context?: string): void\n debug(message: any, ...optionalParams: [...any, string?]): void\n debug(message: any, ...optionalParams: any[]) {\n if (!this.isLevelEnabled('debug')) {\n return\n }\n const { messages, context } = this.getContextAndMessagesToPrint([\n message,\n ...optionalParams,\n ])\n this.printMessages(messages, context, 'debug')\n }\n\n /**\n * Write a 'verbose' level log, if the configured level allows for it.\n * Prints to `stdout` with newline.\n */\n verbose(message: any, context?: string): void\n verbose(message: any, ...optionalParams: [...any, string?]): void\n verbose(message: any, ...optionalParams: any[]) {\n if (!this.isLevelEnabled('verbose')) {\n return\n }\n const { messages, context } = this.getContextAndMessagesToPrint([\n message,\n ...optionalParams,\n ])\n this.printMessages(messages, context, 'verbose')\n }\n\n /**\n * Write a 'fatal' level log, if the configured level allows for it.\n * Prints to `stdout` with newline.\n */\n fatal(message: any, context?: string): void\n fatal(message: any, ...optionalParams: [...any, string?]): void\n fatal(message: any, ...optionalParams: any[]) {\n if (!this.isLevelEnabled('fatal')) {\n return\n }\n const { messages, context } = this.getContextAndMessagesToPrint([\n message,\n ...optionalParams,\n ])\n this.printMessages(messages, context, 'fatal')\n }\n\n /**\n * Set log levels\n * @param levels log levels\n */\n setLogLevels(levels: LogLevel[]) {\n if (!this.options) {\n this.options = {}\n }\n this.options.logLevels = levels\n }\n\n /**\n * Set logger context\n * @param context context\n */\n setContext(context: string) {\n this.context = context\n }\n\n /**\n * Resets the logger context to the value that was passed in the constructor.\n */\n resetContext() {\n this.context = this.originalContext\n }\n\n isLevelEnabled(level: LogLevel): boolean {\n const logLevels = this.options?.logLevels\n return isLogLevelEnabled(level, logLevels)\n }\n\n protected getTimestamp(): string {\n return dateTimeFormatter.format(Date.now())\n }\n\n protected printMessages(\n messages: unknown[],\n context = '',\n logLevel: LogLevel = 'log',\n writeStreamType?: 'stdout' | 'stderr',\n errorStack?: unknown,\n ) {\n messages.forEach((message) => {\n if (this.options.json) {\n this.printAsJson(message, {\n context,\n logLevel,\n writeStreamType,\n errorStack,\n })\n return\n }\n const pidMessage = this.formatPid(process.pid)\n const contextMessage = this.formatContext(context)\n const timestampDiff = this.updateAndGetTimestampDiff()\n const formattedLogLevel = logLevel.toUpperCase().padStart(7, ' ')\n const formattedMessage = this.formatMessage(\n logLevel,\n message,\n pidMessage,\n formattedLogLevel,\n contextMessage,\n timestampDiff,\n )\n\n process[writeStreamType ?? 'stdout'].write(formattedMessage)\n })\n }\n\n protected printAsJson(\n message: unknown,\n options: {\n context: string\n logLevel: LogLevel\n writeStreamType?: 'stdout' | 'stderr'\n errorStack?: unknown\n },\n ) {\n type JsonLogObject = {\n level: LogLevel\n pid: number\n timestamp: number\n message: unknown\n context?: string\n stack?: unknown\n requestId?: string\n }\n\n const logObject: JsonLogObject = {\n level: options.logLevel,\n pid: process.pid,\n timestamp: Date.now(),\n message,\n }\n\n if (options.context) {\n logObject.context = options.context\n }\n\n if (options.errorStack) {\n logObject.stack = options.errorStack\n }\n if (this.options.requestId && this.requestId) {\n logObject.requestId = this.requestId\n }\n\n const formattedMessage =\n !this.options.colors && this.inspectOptions.compact === true\n ? JSON.stringify(logObject, this.stringifyReplacer)\n : inspect(logObject, this.inspectOptions)\n process[options.writeStreamType ?? 'stdout'].write(`${formattedMessage}\\n`)\n }\n\n protected formatPid(pid: number) {\n return `[${this.options.prefix}] ${pid} - `\n }\n\n protected formatContext(context: string): string {\n if (!context) {\n return ''\n }\n\n context = `[${context}] `\n return this.options.colors ? yellow(context) : context\n }\n\n protected formatMessage(\n logLevel: LogLevel,\n message: unknown,\n pidMessage: string,\n formattedLogLevel: string,\n contextMessage: string,\n timestampDiff: string,\n ) {\n const output = this.stringifyMessage(message, logLevel)\n pidMessage = this.colorize(pidMessage, logLevel)\n formattedLogLevel = this.colorize(formattedLogLevel, logLevel)\n return `${pidMessage}${this.getRequestId()}${this.getTimestamp()} ${formattedLogLevel} ${contextMessage}${output}${timestampDiff}\\n`\n }\n\n protected getRequestId() {\n if (this.options.requestId && this.requestId) {\n return `(${this.colorize(this.requestId, 'log')}) `\n }\n return ''\n }\n\n protected stringifyMessage(message: unknown, logLevel: LogLevel): string {\n if (isFunction(message)) {\n const messageAsStr = Function.prototype.toString.call(message)\n const isClass = messageAsStr.startsWith('class ')\n if (isClass) {\n // If the message is a class, we will display the class name.\n return this.stringifyMessage(message.name, logLevel)\n }\n // If the message is a non-class function, call it and re-resolve its value.\n return this.stringifyMessage(message(), logLevel)\n }\n\n if (typeof message === 'string') {\n return this.colorize(message, logLevel)\n }\n\n const outputText = inspect(message, this.inspectOptions)\n if (isPlainObject(message)) {\n return `Object(${Object.keys(message).length}) ${outputText}`\n }\n if (Array.isArray(message)) {\n return `Array(${message.length}) ${outputText}`\n }\n return outputText\n }\n\n protected colorize(message: string, logLevel: LogLevel) {\n if (!this.options.colors || this.options.json) {\n return message\n }\n const color = this.getColorByLogLevel(logLevel)\n return color(message)\n }\n\n protected printStackTrace(stack: string) {\n if (!stack || this.options.json) {\n return\n }\n process.stderr.write(`${stack}\\n`)\n }\n\n protected updateAndGetTimestampDiff(): string {\n const includeTimestamp =\n ConsoleLogger.lastTimestampAt && this.options?.timestamp\n const result = includeTimestamp\n ? this.formatTimestampDiff(Date.now() - ConsoleLogger.lastTimestampAt!)\n : ''\n ConsoleLogger.lastTimestampAt = Date.now()\n return result\n }\n\n protected formatTimestampDiff(timestampDiff: number) {\n const formattedDiff = ` +${timestampDiff}ms`\n return this.options.colors ? yellow(formattedDiff) : formattedDiff\n }\n\n protected getInspectOptions() {\n let breakLength = this.options.breakLength\n if (typeof breakLength === 'undefined') {\n breakLength = this.options.colors\n ? this.options.compact\n ? Infinity\n : undefined\n : this.options.compact === false\n ? undefined\n : Infinity // default breakLength to Infinity if inline is not set and colors is false\n }\n\n const inspectOptions: InspectOptions = {\n depth: this.options.depth ?? DEFAULT_DEPTH,\n sorted: this.options.sorted,\n showHidden: this.options.showHidden,\n compact: this.options.compact ?? (this.options.json ? true : false),\n colors: this.options.colors,\n breakLength,\n }\n\n if (this.options.maxArrayLength) {\n inspectOptions.maxArrayLength = this.options.maxArrayLength\n }\n if (this.options.maxStringLength) {\n inspectOptions.maxStringLength = this.options.maxStringLength\n }\n\n return inspectOptions\n }\n\n protected stringifyReplacer(key: string, value: unknown) {\n // Mimic util.inspect behavior for JSON logger with compact on and colors off\n if (typeof value === 'bigint') {\n return value.toString()\n }\n if (typeof value === 'symbol') {\n return value.toString()\n }\n\n if (\n value instanceof Map ||\n value instanceof Set ||\n value instanceof Error\n ) {\n return `${inspect(value, this.inspectOptions)}`\n }\n return value\n }\n\n private getContextAndMessagesToPrint(args: unknown[]) {\n if (args?.length <= 1) {\n return { messages: args, context: this.context }\n }\n const lastElement = args[args.length - 1]\n const isContext = isString(lastElement)\n if (!isContext) {\n return { messages: args, context: this.context }\n }\n return {\n context: lastElement,\n messages: args.slice(0, args.length - 1),\n }\n }\n\n private getContextAndStackAndMessagesToPrint(args: unknown[]) {\n if (args.length === 2) {\n return this.isStackFormat(args[1])\n ? {\n messages: [args[0]],\n stack: args[1] as string,\n context: this.context,\n }\n : {\n messages: [args[0]],\n context: args[1] as string,\n }\n }\n\n const { messages, context } = this.getContextAndMessagesToPrint(args)\n if (messages?.length <= 1) {\n return { messages, context }\n }\n const lastElement = messages[messages.length - 1]\n const isStack = isString(lastElement)\n // https://github.com/nestjs/nest/issues/11074#issuecomment-1421680060\n if (!isStack && !isUndefined(lastElement)) {\n return { messages, context }\n }\n return {\n stack: lastElement,\n messages: messages.slice(0, messages.length - 1),\n context,\n }\n }\n\n private isStackFormat(stack: unknown) {\n if (!isString(stack) && !isUndefined(stack)) {\n return false\n }\n\n return /^(.)+\\n\\s+at .+:\\d+:\\d+/.test(stack!)\n }\n\n private getColorByLogLevel(level: LogLevel) {\n switch (level) {\n case 'debug':\n return clc.magentaBright\n case 'warn':\n return clc.yellow\n case 'error':\n return clc.red\n case 'verbose':\n return clc.cyanBright\n case 'fatal':\n return clc.bold\n default:\n return clc.green\n }\n }\n}\n","import { Injectable } from '@navios/di'\n\nimport type { LogLevel } from './log-levels.mjs'\nimport type { LoggerService } from './logger-service.interface.mjs'\n\nimport { ConsoleLogger } from './console-logger.service.mjs'\nimport { isLogLevelEnabled, isObject } from './utils/index.mjs'\n\nconst DEFAULT_LOGGER = new ConsoleLogger()\n\nconst dateTimeFormatter = new Intl.DateTimeFormat(undefined, {\n year: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n day: '2-digit',\n month: '2-digit',\n})\n\n@Injectable()\nexport class LoggerInstance implements LoggerService {\n protected static staticInstanceRef?: LoggerService = DEFAULT_LOGGER\n protected static logLevels?: LogLevel[]\n\n protected localInstanceRef?: LoggerService\n\n constructor()\n constructor(context: string)\n constructor(context: string, options?: { timestamp?: boolean })\n constructor(\n protected context?: string,\n protected options: { timestamp?: boolean } = {},\n ) {}\n\n get localInstance(): LoggerService {\n if (LoggerInstance.staticInstanceRef === DEFAULT_LOGGER) {\n return this.registerLocalInstanceRef()\n } else if (LoggerInstance.staticInstanceRef instanceof LoggerInstance) {\n const prototype = Object.getPrototypeOf(LoggerInstance.staticInstanceRef)\n if (prototype.constructor === LoggerInstance) {\n return this.registerLocalInstanceRef()\n }\n }\n return LoggerInstance.staticInstanceRef!\n }\n\n /**\n * Write an 'error' level log.\n */\n error(message: any, stack?: string, context?: string): void\n error(message: any, ...optionalParams: [...any, string?, string?]): void\n error(message: any, ...optionalParams: any[]) {\n optionalParams = this.context\n ? (optionalParams.length ? optionalParams : [undefined]).concat(\n this.context,\n )\n : optionalParams\n\n this.localInstance?.error(message, ...optionalParams)\n }\n\n /**\n * Write a 'log' level log.\n */\n log(message: any, context?: string): void\n log(message: any, ...optionalParams: [...any, string?]): void\n log(message: any, ...optionalParams: any[]) {\n optionalParams = this.context\n ? optionalParams.concat(this.context)\n : optionalParams\n this.localInstance?.log(message, ...optionalParams)\n }\n\n /**\n * Write a 'warn' level log.\n */\n warn(message: any, context?: string): void\n warn(message: any, ...optionalParams: [...any, string?]): void\n warn(message: any, ...optionalParams: any[]) {\n optionalParams = this.context\n ? optionalParams.concat(this.context)\n : optionalParams\n this.localInstance?.warn(message, ...optionalParams)\n }\n\n /**\n * Write a 'debug' level log.\n */\n debug(message: any, context?: string): void\n debug(message: any, ...optionalParams: [...any, string?]): void\n debug(message: any, ...optionalParams: any[]) {\n optionalParams = this.context\n ? optionalParams.concat(this.context)\n : optionalParams\n this.localInstance?.debug?.(message, ...optionalParams)\n }\n\n /**\n * Write a 'verbose' level log.\n */\n verbose(message: any, context?: string): void\n verbose(message: any, ...optionalParams: [...any, string?]): void\n verbose(message: any, ...optionalParams: any[]) {\n optionalParams = this.context\n ? optionalParams.concat(this.context)\n : optionalParams\n this.localInstance?.verbose?.(message, ...optionalParams)\n }\n\n /**\n * Write a 'fatal' level log.\n */\n fatal(message: any, context?: string): void\n fatal(message: any, ...optionalParams: [...any, string?]): void\n fatal(message: any, ...optionalParams: any[]) {\n optionalParams = this.context\n ? optionalParams.concat(this.context)\n : optionalParams\n this.localInstance?.fatal?.(message, ...optionalParams)\n }\n\n /**\n * Write an 'error' level log.\n */\n static error(message: any, stackOrContext?: string): void\n static error(message: any, context?: string): void\n static error(message: any, stack?: string, context?: string): void\n static error(\n message: any,\n ...optionalParams: [...any, string?, string?]\n ): void\n static error(message: any, ...optionalParams: any[]) {\n this.staticInstanceRef?.error(message, ...optionalParams)\n }\n\n /**\n * Write a 'log' level log.\n */\n static log(message: any, context?: string): void\n static log(message: any, ...optionalParams: [...any, string?]): void\n static log(message: any, ...optionalParams: any[]) {\n this.staticInstanceRef?.log(message, ...optionalParams)\n }\n\n /**\n * Write a 'warn' level log.\n */\n static warn(message: any, context?: string): void\n static warn(message: any, ...optionalParams: [...any, string?]): void\n static warn(message: any, ...optionalParams: any[]) {\n this.staticInstanceRef?.warn(message, ...optionalParams)\n }\n\n /**\n * Write a 'debug' level log, if the configured level allows for it.\n * Prints to `stdout` with newline.\n */\n static debug(message: any, context?: string): void\n static debug(message: any, ...optionalParams: [...any, string?]): void\n static debug(message: any, ...optionalParams: any[]) {\n this.staticInstanceRef?.debug?.(message, ...optionalParams)\n }\n\n /**\n * Write a 'verbose' level log.\n */\n static verbose(message: any, context?: string): void\n static verbose(message: any, ...optionalParams: [...any, string?]): void\n static verbose(message: any, ...optionalParams: any[]) {\n this.staticInstanceRef?.verbose?.(message, ...optionalParams)\n }\n\n /**\n * Write a 'fatal' level log.\n */\n static fatal(message: any, context?: string): void\n static fatal(message: any, ...optionalParams: [...any, string?]): void\n static fatal(message: any, ...optionalParams: any[]) {\n this.staticInstanceRef?.fatal?.(message, ...optionalParams)\n }\n\n static getTimestamp() {\n return dateTimeFormatter.format(Date.now())\n }\n\n static overrideLogger(logger: LoggerService | LogLevel[] | boolean) {\n if (Array.isArray(logger)) {\n LoggerInstance.logLevels = logger\n return this.staticInstanceRef?.setLogLevels?.(logger)\n }\n if (isObject(logger)) {\n this.staticInstanceRef = logger as LoggerService\n } else {\n this.staticInstanceRef = undefined\n }\n }\n\n static isLevelEnabled(level: LogLevel): boolean {\n const logLevels = LoggerInstance.logLevels\n return isLogLevelEnabled(level, logLevels)\n }\n\n private registerLocalInstanceRef() {\n if (this.localInstanceRef) {\n return this.localInstanceRef\n }\n this.localInstanceRef = new ConsoleLogger(this.context!, {\n timestamp: this.options?.timestamp,\n logLevels: LoggerInstance.logLevels,\n })\n return this.localInstanceRef\n }\n}\n","import { Injectable, InjectableType, InjectionToken } from '@navios/di'\n\nimport { z } from 'zod'\n\nimport type { LoggerService } from './logger-service.interface.mjs'\n\nimport { LoggerInstance } from './logger.service.mjs'\n\nexport const LoggerInjectionToken = 'LoggerInjectionToken'\n\nexport const LoggerOptions = z\n .object({\n context: z.string().optional(),\n options: z\n .object({\n timestamp: z.boolean().optional(),\n })\n .optional(),\n })\n .optional()\n\nexport const Logger = InjectionToken.create<\n LoggerInstance,\n typeof LoggerOptions\n>(LoggerInjectionToken, LoggerOptions)\n\n@Injectable({\n type: InjectableType.Factory,\n token: Logger,\n})\nexport class LoggerFactory {\n create(ctx: any, args: z.infer<typeof LoggerOptions>) {\n // @ts-expect-error We don't need to support this in the current version\n return new LoggerInstance(args?.context, args?.options)\n }\n}\n","import type { LoggerService } from './logger-service.interface.mjs'\n\nimport { LoggerInstance } from './logger.service.mjs'\n\nexport class PinoWrapper {\n constructor(protected readonly logger: LoggerService) {}\n\n fatal(message: any, ...optionalParams: any[]) {\n if (this.logger.fatal === undefined) {\n return this.error(message, ...optionalParams)\n }\n this.logger.fatal(message, ...optionalParams)\n }\n\n error(message: any, ...optionalParams: any[]) {\n this.logger.error(message, ...optionalParams)\n }\n\n warn(message: any, ...optionalParams: any[]) {\n this.logger.warn(message, ...optionalParams)\n }\n\n info() {\n // We don't want to populate the logs with the original fastify logs\n // this.logger.debug?.('INFO', message, ...optionalParams)\n }\n\n debug(message: any, ...optionalParams: any[]) {\n this.logger.debug?.(message, ...optionalParams)\n }\n\n trace(message: any, ...optionalParams: any[]) {\n this.logger.verbose?.(message, ...optionalParams)\n }\n\n silent() {\n // noop\n }\n\n child(options: any) {\n const keys = Object.keys(options)\n // @ts-expect-error We don't need to support this in the current version\n let newContext = this.logger['context'] ?? ''\n if (keys.length > 1) {\n // @ts-expect-error We don't need to support this in the current version\n newContext = `${this.logger['context'] ?? ''}:${JSON.stringify(options)}`\n }\n return new PinoWrapper(\n // @ts-expect-error We don't need to support this in the current version\n new LoggerInstance(newContext, this.logger['options']),\n )\n }\n\n get level(): any {\n if ('level' in this.logger && this.logger.level) {\n return this.logger.level\n }\n const levels = LoggerInstance['logLevels']\n if (levels) {\n return levels.find((level) => level !== 'verbose')\n }\n return 'warn'\n }\n}\n","import { NaviosException } from '@navios/builder'\nimport { Injectable, InjectionToken, syncInject } from '@navios/di'\n\nimport { z } from 'zod'\n\nimport type { ConfigServiceInterface as IConfigService } from './config-service.interface.mjs'\nimport type { Path, PathValue } from './types.mjs'\n\nimport { Logger } from '../logger/index.mjs'\n\nexport const ConfigServiceOptionsSchema = z.record(z.unknown())\nexport type ConfigServiceOptions = z.infer<typeof ConfigServiceOptionsSchema>\n\nexport const ConfigServiceToken = InjectionToken.create<\n IConfigService,\n typeof ConfigServiceOptionsSchema\n>(Symbol.for('ConfigService'), ConfigServiceOptionsSchema)\n\n@Injectable({\n token: ConfigServiceToken,\n})\nexport class ConfigService<\n Config extends ConfigServiceOptions = Record<string, unknown>,\n> implements IConfigService<Config>\n{\n private readonly logger = syncInject(Logger, {\n context: ConfigService.name,\n })\n\n constructor(private config: Config = {} as Config) {}\n\n getConfig(): Config {\n return this.config\n }\n\n get<Key extends Path<Config>>(key: Key): PathValue<Config, Key> | null {\n try {\n const parts = String(key).split('.')\n let value: any = this.config\n\n for (const part of parts) {\n if (\n value === null ||\n value === undefined ||\n typeof value !== 'object'\n ) {\n return null\n }\n value = value[part]\n }\n\n return (value as PathValue<Config, Key>) ?? null\n } catch (error) {\n this.logger.debug?.(\n `Failed to get config value for key ${String(key)}`,\n error,\n )\n return null\n }\n }\n\n getOrDefault<Key extends Path<Config>>(\n key: Key,\n defaultValue: PathValue<Config, Key>,\n ): PathValue<Config, Key> {\n const value = this.get(key)\n return value !== null ? value : defaultValue\n }\n\n getOrThrow<Key extends Path<Config>>(\n key: Key,\n errorMessage?: string,\n ): PathValue<Config, Key> {\n const value = this.get(key)\n\n if (value === null) {\n const message =\n errorMessage ||\n `Configuration value for key \"${String(key)}\" is not defined`\n this.logger.error(message)\n throw new NaviosException(message)\n }\n\n return value\n }\n}\n","import { env } from 'node:process'\n\nimport { FactoryInjectionToken, InjectionToken } from '@navios/di'\n\nimport { z } from 'zod'\n\nimport type { ConfigServiceOptions } from './config.service.mjs'\n\nimport {\n ConfigService,\n ConfigServiceOptionsSchema,\n ConfigServiceToken,\n} from './config.service.mjs'\n\nexport const ConfigProviderOptions = z.object({\n load: z.function().returns(ConfigServiceOptionsSchema),\n})\n\nexport function provideConfig<ConfigMap extends ConfigServiceOptions>(\n options: z.input<typeof ConfigProviderOptions>,\n): FactoryInjectionToken<\n ConfigService<ConfigMap>,\n typeof ConfigServiceOptionsSchema\n> {\n return InjectionToken.factory(ConfigServiceToken, async () => options.load())\n}\n\nexport const EnvConfigProvider = InjectionToken.bound<\n ConfigService<Record<string, string>>,\n typeof ConfigServiceOptionsSchema\n>(ConfigServiceToken, {\n ...env,\n})\n","import type { ClassType } from '@navios/di'\n\nimport { Injectable, InjectableScope, InjectionToken } from '@navios/di'\n\nimport { getControllerMetadata } from '../metadata/index.mjs'\n\nexport interface ControllerOptions {\n guards?: ClassType[] | Set<ClassType>\n}\nexport function Controller({ guards }: ControllerOptions = {}) {\n return function (target: ClassType, context: ClassDecoratorContext) {\n if (context.kind !== 'class') {\n throw new Error(\n '[Navios] @Controller decorator can only be used on classes.',\n )\n }\n const token = InjectionToken.create(target)\n if (context.metadata) {\n const controllerMetadata = getControllerMetadata(target, context)\n if (guards) {\n for (const guard of Array.from(guards).reverse()) {\n controllerMetadata.guards.add(guard)\n }\n }\n }\n return Injectable({\n token,\n scope: InjectableScope.Instance,\n })(target, context)\n }\n}\n","import type {\n BaseEndpointConfig,\n EndpointFunctionArgs,\n HttpMethod,\n Util_FlatObject,\n} from '@navios/builder'\nimport type { AnyZodObject, z, ZodType } from 'zod'\n\nimport { ZodDiscriminatedUnion } from 'zod'\n\nimport { EndpointAdapterToken } from '../adapters/index.mjs'\nimport { getEndpointMetadata } from '../metadata/index.mjs'\n\nexport type EndpointParams<\n EndpointDeclaration extends {\n config: BaseEndpointConfig<any, any, any, any, any>\n },\n Url extends string = EndpointDeclaration['config']['url'],\n QuerySchema = EndpointDeclaration['config']['querySchema'],\n> = QuerySchema extends AnyZodObject\n ? EndpointDeclaration['config']['requestSchema'] extends ZodType\n ? Util_FlatObject<\n EndpointFunctionArgs<\n Url,\n QuerySchema,\n EndpointDeclaration['config']['requestSchema'],\n true\n >\n >\n : Util_FlatObject<EndpointFunctionArgs<Url, QuerySchema, undefined, true>>\n : EndpointDeclaration['config']['requestSchema'] extends ZodType\n ? Util_FlatObject<\n EndpointFunctionArgs<\n Url,\n undefined,\n EndpointDeclaration['config']['requestSchema'],\n true\n >\n >\n : Util_FlatObject<EndpointFunctionArgs<Url, undefined, undefined, true>>\n\nexport type EndpointResult<\n EndpointDeclaration extends {\n config: BaseEndpointConfig<any, any, any, any, any>\n },\n> =\n EndpointDeclaration['config']['responseSchema'] extends ZodDiscriminatedUnion<\n any,\n infer Options\n >\n ? Promise<z.input<Options[number]>>\n : Promise<z.input<EndpointDeclaration['config']['responseSchema']>>\n\nexport function Endpoint<\n Method extends HttpMethod = HttpMethod,\n Url extends string = string,\n QuerySchema = undefined,\n ResponseSchema extends ZodType = ZodType,\n RequestSchema = ZodType,\n>(endpoint: {\n config: BaseEndpointConfig<\n Method,\n Url,\n QuerySchema,\n ResponseSchema,\n RequestSchema\n >\n}) {\n return (\n target: (\n params: QuerySchema extends AnyZodObject\n ? RequestSchema extends ZodType\n ? EndpointFunctionArgs<Url, QuerySchema, RequestSchema>\n : EndpointFunctionArgs<Url, QuerySchema, undefined>\n : RequestSchema extends ZodType\n ? EndpointFunctionArgs<Url, undefined, RequestSchema>\n : EndpointFunctionArgs<Url, undefined, undefined>,\n ) => Promise<z.input<ResponseSchema>>,\n context: ClassMethodDecoratorContext,\n ) => {\n if (context.kind !== 'method') {\n throw new Error(\n '[Navios] Endpoint decorator can only be used on methods.',\n )\n }\n const config = endpoint.config\n if (context.metadata) {\n let endpointMetadata = getEndpointMetadata<BaseEndpointConfig>(\n target,\n context,\n )\n if (endpointMetadata.config && endpointMetadata.config.url) {\n throw new Error(\n `[Navios] Endpoint ${config.method} ${config.url} already exists. Please use a different method or url.`,\n )\n }\n // @ts-expect-error We don't need to set correctly in the metadata\n endpointMetadata.config = config\n endpointMetadata.adapterToken = EndpointAdapterToken\n endpointMetadata.classMethod = target.name\n endpointMetadata.httpMethod = config.method\n endpointMetadata.url = config.url\n }\n return target\n }\n}\n","import type { HttpHeader } from 'fastify/types/utils.js'\n\nimport { getEndpointMetadata } from '../metadata/index.mjs'\n\nexport function Header(name: HttpHeader, value: string | number | string[]) {\n return <T extends Function>(\n target: T,\n context: ClassMethodDecoratorContext,\n ) => {\n if (context.kind !== 'method') {\n throw new Error('[Navios] Header decorator can only be used on methods.')\n }\n const metadata = getEndpointMetadata(target, context)\n\n metadata.headers[name] = value\n\n return target\n }\n}\n","import { getEndpointMetadata } from '../metadata/index.mjs'\n\nexport function HttpCode(code: number) {\n return <T extends Function>(\n target: T,\n context: ClassMethodDecoratorContext,\n ) => {\n if (context.kind !== 'method') {\n throw new Error(\n '[Navios] HttpCode decorator can only be used on methods.',\n )\n }\n const metadata = getEndpointMetadata(target, context)\n metadata.successStatusCode = code\n\n return target\n }\n}\n","import type { ClassType } from '@navios/di'\n\nimport { Injectable, InjectableScope, InjectionToken } from '@navios/di'\n\nimport { getModuleMetadata } from '../metadata/index.mjs'\n\nexport interface ModuleOptions {\n controllers?: ClassType[] | Set<ClassType>\n imports?: ClassType[] | Set<ClassType>\n guards?: ClassType[] | Set<ClassType>\n}\n\nexport function Module(\n { controllers = [], imports = [], guards = [] }: ModuleOptions = {\n controllers: [],\n imports: [],\n guards: [],\n },\n) {\n return (target: ClassType, context: ClassDecoratorContext) => {\n if (context.kind !== 'class') {\n throw new Error('[Navios] @Module decorator can only be used on classes.')\n }\n // Register the module in the service locator\n const token = InjectionToken.create(target)\n const moduleMetadata = getModuleMetadata(target, context)\n for (const controller of controllers) {\n moduleMetadata.controllers.add(controller)\n }\n for (const importedModule of imports) {\n moduleMetadata.imports.add(importedModule)\n }\n for (const guard of Array.from(guards).reverse()) {\n moduleMetadata.guards.add(guard)\n }\n\n return Injectable({\n token,\n scope: InjectableScope.Singleton,\n })(target, context)\n }\n}\n","import type {\n BaseEndpointConfig,\n EndpointFunctionArgs,\n HttpMethod,\n Util_FlatObject,\n} from '@navios/builder'\nimport type { AnyZodObject, z, ZodType } from 'zod'\n\nimport { ZodDiscriminatedUnion } from 'zod'\n\nimport { MultipartAdapterToken } from '../adapters/index.mjs'\nimport { getEndpointMetadata } from '../metadata/index.mjs'\n\nexport type MultipartParams<\n EndpointDeclaration extends {\n config: BaseEndpointConfig<any, any, any, any, any>\n },\n Url extends string = EndpointDeclaration['config']['url'],\n QuerySchema = EndpointDeclaration['config']['querySchema'],\n> = QuerySchema extends AnyZodObject\n ? EndpointDeclaration['config']['requestSchema'] extends ZodType\n ? Util_FlatObject<\n EndpointFunctionArgs<\n Url,\n QuerySchema,\n EndpointDeclaration['config']['requestSchema'],\n true\n >\n >\n : Util_FlatObject<EndpointFunctionArgs<Url, QuerySchema, undefined, true>>\n : EndpointDeclaration['config']['requestSchema'] extends ZodType\n ? Util_FlatObject<\n EndpointFunctionArgs<\n Url,\n undefined,\n EndpointDeclaration['config']['requestSchema'],\n true\n >\n >\n : Util_FlatObject<EndpointFunctionArgs<Url, undefined, undefined, true>>\n\nexport type MultipartResult<\n EndpointDeclaration extends {\n config: BaseEndpointConfig<any, any, any, any, any>\n },\n> =\n EndpointDeclaration['config']['responseSchema'] extends ZodDiscriminatedUnion<\n any,\n infer Options\n >\n ? Promise<z.input<Options[number]>>\n : Promise<z.input<EndpointDeclaration['config']['responseSchema']>>\n\nexport function Multipart<\n Method extends HttpMethod = HttpMethod,\n Url extends string = string,\n QuerySchema = undefined,\n ResponseSchema extends ZodType = ZodType,\n RequestSchema = ZodType,\n>(endpoint: {\n config: BaseEndpointConfig<\n Method,\n Url,\n QuerySchema,\n ResponseSchema,\n RequestSchema\n >\n}) {\n return (\n target: (\n params: QuerySchema extends AnyZodObject\n ? RequestSchema extends ZodType\n ? EndpointFunctionArgs<Url, QuerySchema, RequestSchema>\n : EndpointFunctionArgs<Url, QuerySchema, undefined>\n : RequestSchema extends ZodType\n ? EndpointFunctionArgs<Url, undefined, RequestSchema>\n : EndpointFunctionArgs<Url, undefined, undefined>,\n ) => Promise<z.input<ResponseSchema>>,\n context: ClassMethodDecoratorContext,\n ) => {\n if (typeof target !== 'function') {\n throw new Error(\n '[Navios] Endpoint decorator can only be used on functions.',\n )\n }\n if (context.kind !== 'method') {\n throw new Error(\n '[Navios] Endpoint decorator can only be used on methods.',\n )\n }\n const config = endpoint.config\n if (context.metadata) {\n let endpointMetadata = getEndpointMetadata<BaseEndpointConfig>(\n target,\n context,\n )\n if (endpointMetadata.config && endpointMetadata.config.url) {\n throw new Error(\n `[Navios] Endpoint ${config.method} ${config.url} already exists. Please use a different method or url.`,\n )\n }\n // @ts-expect-error We don't need to set correctly in the metadata\n endpointMetadata.config = config\n endpointMetadata.adapterToken = MultipartAdapterToken\n endpointMetadata.classMethod = target.name\n endpointMetadata.httpMethod = config.method\n endpointMetadata.url = config.url\n }\n return target\n }\n}\n","import type {\n BaseStreamConfig,\n EndpointFunctionArgs,\n HttpMethod,\n Util_FlatObject,\n} from '@navios/builder'\nimport type { FastifyReply } from 'fastify'\nimport type { AnyZodObject, ZodType } from 'zod'\n\nimport { StreamAdapterToken } from '../adapters/index.mjs'\nimport { getEndpointMetadata } from '../metadata/index.mjs'\n\nexport type StreamParams<\n EndpointDeclaration extends {\n config: BaseStreamConfig<any, any, any, any>\n },\n Url extends string = EndpointDeclaration['config']['url'],\n QuerySchema = EndpointDeclaration['config']['querySchema'],\n> = QuerySchema extends AnyZodObject\n ? EndpointDeclaration['config']['requestSchema'] extends ZodType\n ? Util_FlatObject<\n EndpointFunctionArgs<\n Url,\n QuerySchema,\n EndpointDeclaration['config']['requestSchema'],\n true\n >\n >\n : Util_FlatObject<EndpointFunctionArgs<Url, QuerySchema, undefined, true>>\n : EndpointDeclaration['config']['requestSchema'] extends ZodType\n ? Util_FlatObject<\n EndpointFunctionArgs<\n Url,\n undefined,\n EndpointDeclaration['config']['requestSchema'],\n true\n >\n >\n : Util_FlatObject<EndpointFunctionArgs<Url, undefined, undefined, true>>\n\nexport function Stream<\n Method extends HttpMethod = HttpMethod,\n Url extends string = string,\n QuerySchema = undefined,\n RequestSchema = ZodType,\n>(endpoint: {\n config: BaseStreamConfig<Method, Url, QuerySchema, RequestSchema>\n}) {\n return (\n target: (\n params: QuerySchema extends AnyZodObject\n ? RequestSchema extends ZodType\n ? EndpointFunctionArgs<Url, QuerySchema, RequestSchema>\n : EndpointFunctionArgs<Url, QuerySchema, undefined>\n : RequestSchema extends ZodType\n ? EndpointFunctionArgs<Url, undefined, RequestSchema>\n : EndpointFunctionArgs<Url, undefined, undefined>,\n reply: FastifyReply,\n ) => Promise<void>,\n context: ClassMethodDecoratorContext,\n ) => {\n if (typeof target !== 'function') {\n throw new Error(\n '[Navios] Endpoint decorator can only be used on functions.',\n )\n }\n if (context.kind !== 'method') {\n throw new Error(\n '[Navios] Endpoint decorator can only be used on methods.',\n )\n }\n const config = endpoint.config\n if (context.metadata) {\n let endpointMetadata = getEndpointMetadata<BaseStreamConfig>(\n target,\n context,\n )\n if (endpointMetadata.config && endpointMetadata.config.url) {\n throw new Error(\n `[Navios] Endpoint ${config.method} ${config.url} already exists. Please use a different method or url.`,\n )\n }\n // @ts-expect-error We don't need to set correctly in the metadata\n endpointMetadata.config = config\n endpointMetadata.adapterToken = StreamAdapterToken\n endpointMetadata.classMethod = target.name\n endpointMetadata.httpMethod = config.method\n endpointMetadata.url = config.url\n }\n return target\n }\n}\n","import type {\n ClassType,\n ClassTypeWithInstance,\n InjectionToken,\n} from '@navios/di'\n\nimport type { CanActivate } from '../interfaces/index.mjs'\n\nimport {\n getControllerMetadata,\n getEndpointMetadata,\n} from '../metadata/index.mjs'\n\nexport function UseGuards(\n ...guards: (\n | ClassTypeWithInstance<CanActivate>\n | InjectionToken<CanActivate, undefined>\n )[]\n) {\n return function <T extends Function>(\n target: T,\n context: ClassMethodDecoratorContext | ClassDecoratorContext,\n ): T {\n if (context.kind === 'class') {\n const controllerMetadata = getControllerMetadata(\n target as unknown as ClassType,\n context,\n )\n for (const guard of guards.reverse()) {\n controllerMetadata.guards.add(guard)\n }\n } else if (context.kind === 'method') {\n const endpointMetadata = getEndpointMetadata(target, context)\n for (const guard of guards.reverse()) {\n endpointMetadata.guards.add(guard)\n }\n } else {\n throw new Error(\n '[Navios] @UseGuards decorator can only be used on classes or methods.',\n )\n }\n return target\n }\n}\n","import type { ClassType } from '@navios/di'\nimport type { z, ZodType } from 'zod'\n\nimport type {\n ControllerMetadata,\n HandlerMetadata,\n ModuleMetadata,\n} from './metadata/index.mjs'\n\nimport {\n getControllerMetadata,\n getEndpointMetadata,\n getModuleMetadata,\n hasControllerMetadata,\n hasModuleMetadata,\n} from './metadata/index.mjs'\n\nexport type ClassAttribute = (() => <T>(\n target: T,\n context: ClassDecoratorContext | ClassMethodDecoratorContext,\n) => T) & {\n token: symbol\n}\nexport type ClassSchemaAttribute<T extends ZodType> = ((\n value: z.input<T>,\n) => <T>(\n target: T,\n context: ClassDecoratorContext | ClassMethodDecoratorContext,\n) => T) & {\n token: symbol\n schema: ZodType\n}\n\nexport class AttributeFactory {\n static createAttribute(token: symbol): ClassAttribute\n static createAttribute<T extends ZodType>(\n token: symbol,\n schema: T,\n ): ClassSchemaAttribute<T>\n static createAttribute(token: symbol, schema?: ZodType) {\n const res =\n (value?: unknown) =>\n (\n target: any,\n context: ClassDecoratorContext | ClassMethodDecoratorContext,\n ) => {\n if (context.kind !== 'class' && context.kind !== 'method') {\n throw new Error(\n '[Navios] Attribute can only be applied to classes or methods',\n )\n }\n const isController =\n context.kind === 'class' && hasControllerMetadata(target as ClassType)\n const isModule =\n context.kind === 'class' && hasModuleMetadata(target as ClassType)\n if (context.kind === 'class' && !isController && !isModule) {\n throw new Error(\n '[Navios] Attribute can only be applied to classes with @Controller or @Module decorators',\n )\n }\n let metadata =\n context.kind === 'class'\n ? isController\n ? getControllerMetadata(target as any, context)\n : getModuleMetadata(target as any, context)\n : getEndpointMetadata(target, context)\n if (schema) {\n const validatedValue = schema.safeParse(value)\n if (!validatedValue.success) {\n throw new Error(\n `[Navios] Invalid value for attribute ${token.toString()}: ${validatedValue.error}`,\n )\n }\n metadata.customAttributes.set(token, validatedValue.data)\n } else {\n metadata.customAttributes.set(token, true)\n }\n return target\n }\n res.token = token\n if (schema) {\n res.schema = schema\n }\n return res\n }\n\n static get(\n attribute: ClassAttribute,\n target: ModuleMetadata | ControllerMetadata | HandlerMetadata<any>,\n ): true | null\n static get<T extends ZodType>(\n attribute: ClassSchemaAttribute<T>,\n target: ModuleMetadata | ControllerMetadata | HandlerMetadata<any>,\n ): z.output<T> | null\n static get(\n attribute: ClassAttribute | ClassSchemaAttribute<any>,\n target: ModuleMetadata | ControllerMetadata | HandlerMetadata<any>,\n ) {\n return target.customAttributes.get(attribute.token) ?? null\n }\n\n static getAll(\n attribute: ClassAttribute,\n target: ModuleMetadata | ControllerMetadata | HandlerMetadata<any>,\n ): Array<true> | null\n static getAll<T extends ZodType>(\n attribute: ClassSchemaAttribute<T>,\n target: ModuleMetadata | ControllerMetadata | HandlerMetadata<any>,\n ): Array<z.output<T>> | null\n static getAll(\n attribute: ClassAttribute | ClassSchemaAttribute<any>,\n target: ModuleMetadata | ControllerMetadata | HandlerMetadata<any>,\n ) {\n const values = Array.from(target.customAttributes.entries())\n .filter(([key]) => key === attribute.token)\n .map(([, value]) => value)\n return values.length > 0 ? values : null\n }\n\n static getLast(\n attribute: ClassAttribute,\n target: (ModuleMetadata | ControllerMetadata | HandlerMetadata<any>)[],\n ): true | null\n static getLast<T extends ZodType>(\n attribute: ClassSchemaAttribute<T>,\n target: (ModuleMetadata | ControllerMetadata | HandlerMetadata<any>)[],\n ): z.output<T> | null\n static getLast(\n attribute: ClassAttribute | ClassSchemaAttribute<any>,\n target: (ModuleMetadata | ControllerMetadata | HandlerMetadata<any>)[],\n ) {\n for (let i = target.length - 1; i >= 0; i--) {\n const value = target[i].customAttributes.get(attribute.token)\n if (value) {\n return value\n }\n }\n return null\n }\n\n static has(\n attribute: ClassAttribute,\n target: ModuleMetadata | ControllerMetadata | HandlerMetadata<any>,\n ): boolean\n static has<T extends ZodType>(\n attribute: ClassSchemaAttribute<T>,\n target: ModuleMetadata | ControllerMetadata | HandlerMetadata<any>,\n ): boolean\n static has(\n attribute: ClassAttribute | ClassSchemaAttribute<any>,\n target: ModuleMetadata | ControllerMetadata | HandlerMetadata<any>,\n ) {\n return target.customAttributes.has(attribute.token)\n }\n}\n","import type { FastifyCorsOptions } from '@fastify/cors'\nimport type { FastifyMultipartOptions } from '@fastify/multipart'\nimport type { ClassTypeWithInstance } from '@navios/di'\nimport type {\n FastifyInstance,\n FastifyListenOptions,\n FastifyServerOptions,\n} from 'fastify'\n\nimport {\n getGlobalServiceLocator,\n inject,\n Injectable,\n syncInject,\n} from '@navios/di'\n\nimport cors from '@fastify/cors'\nimport multipart from '@fastify/multipart'\nimport { fastify } from 'fastify'\nimport {\n serializerCompiler,\n validatorCompiler,\n} from 'fastify-type-provider-zod'\n\nimport type { NaviosModule } from './interfaces/index.mjs'\nimport type { LoggerService, LogLevel } from './logger/index.mjs'\n\nimport { HttpException } from './exceptions/index.mjs'\nimport { Logger, PinoWrapper } from './logger/index.mjs'\nimport {\n ControllerAdapterService,\n ModuleLoaderService,\n} from './services/index.mjs'\nimport { Application } from './tokens/index.mjs'\n\nexport interface NaviosApplicationContextOptions {\n /**\n * Specifies the logger to use. Pass `false` to turn off logging.\n */\n logger?: LoggerService | LogLevel[] | false\n}\n\nexport interface NaviosApplicationOptions\n extends Omit<FastifyServerOptions, 'logger'>,\n NaviosApplicationContextOptions {}\n\n@Injectable()\nexport class NaviosApplication {\n private moduleLoader = syncInject(ModuleLoaderService)\n private controllerAdapter = syncInject(ControllerAdapterService)\n private logger = syncInject(Logger, {\n context: NaviosApplication.name,\n })\n private server: FastifyInstance | null = null\n private corsOptions: FastifyCorsOptions | null = null\n private multipartOptions: FastifyMultipartOptions | true | null = null\n private globalPrefix: string | null = null\n\n private appModule: ClassTypeWithInstance<NaviosModule> | null = null\n private options: NaviosApplicationOptions = {}\n\n isInitialized = false\n\n setup(\n appModule: ClassTypeWithInstance<NaviosModule>,\n options: NaviosApplicationOptions = {},\n ) {\n this.appModule = appModule\n this.options = options\n }\n\n async init() {\n if (!this.appModule) {\n throw new Error('App module is not set. Call setAppModule() first.')\n }\n await this.moduleLoader.loadModules(this.appModule)\n this.server = await this.getFastifyInstance(this.options)\n this.configureFastifyInstance(this.server)\n getGlobalServiceLocator().storeInstance(this.server, Application)\n // Add schema validator and serializer\n this.server.setValidatorCompiler(validatorCompiler)\n this.server.setSerializerCompiler(serializerCompiler)\n\n if (this.corsOptions) {\n await this.server.register(cors, this.corsOptions)\n }\n\n if (this.multipartOptions) {\n await this.configureMultipart(this.server, this.multipartOptions)\n }\n\n await this.initModules()\n await this.server.ready()\n\n this.isInitialized = true\n this.logger.debug('Navios application initialized')\n }\n\n private async getFastifyInstance(rawOptions: NaviosApplicationOptions) {\n const { logger, ...options } = rawOptions\n if (logger) {\n const fastifyOptions = options as FastifyServerOptions\n if (typeof logger === 'boolean') {\n if (!logger) {\n fastifyOptions.logger = false\n }\n } else {\n fastifyOptions.loggerInstance = new PinoWrapper(\n await inject(Logger, {\n context: 'FastifyAdapter',\n }),\n )\n }\n return fastify(fastifyOptions)\n } else {\n return fastify({\n ...options,\n loggerInstance: new PinoWrapper(\n await inject(Logger, {\n context: 'FastifyAdapter',\n }),\n ),\n } as FastifyServerOptions)\n }\n }\n\n private configureFastifyInstance(fastifyInstance: FastifyInstance) {\n fastifyInstance.setErrorHandler((error, request, reply) => {\n if (error instanceof HttpException) {\n return reply.status(error.statusCode).send(error.response)\n } else {\n const statusCode = error.statusCode || 500\n const message = error.message || 'Internal Server Error'\n const response = {\n statusCode,\n message,\n error: error.name || 'InternalServerError',\n }\n this.logger.error(\n `Error occurred: ${error.message} on ${request.url}`,\n error,\n )\n return reply.status(statusCode).send(response)\n }\n })\n\n fastifyInstance.setNotFoundHandler((req, reply) => {\n const response = {\n statusCode: 404,\n message: 'Not Found',\n error: 'NotFound',\n }\n this.logger.error(`Route not found: [${req.method}] ${req.url}`)\n return reply.status(404).send(response)\n })\n }\n\n async configureMultipart(\n server: FastifyInstance,\n options: FastifyMultipartOptions | true,\n ): Promise<void> {\n if (options) {\n await server.register(\n multipart,\n typeof options === 'object' ? options : {},\n )\n }\n }\n\n private async initModules() {\n const modules = this.moduleLoader.getAllModules()\n const promises: PromiseLike<any>[] = []\n for (const [moduleName, moduleMetadata] of modules) {\n if (\n !moduleMetadata.controllers ||\n moduleMetadata.controllers.size === 0\n ) {\n continue\n }\n promises.push(\n this.server!.register(\n async (instance, opts) => {\n for (const controller of moduleMetadata.controllers) {\n await this.controllerAdapter.setupController(\n controller,\n instance,\n moduleMetadata,\n )\n }\n },\n {\n prefix: this.globalPrefix ?? '',\n },\n ),\n )\n }\n\n await Promise.all(promises)\n }\n\n enableCors(options: FastifyCorsOptions) {\n this.corsOptions = options\n }\n\n enableMultipart(options: FastifyMultipartOptions) {\n this.multipartOptions = options\n }\n\n setGlobalPrefix(prefix: string) {\n this.globalPrefix = prefix\n }\n\n getServer(): FastifyInstance {\n if (!this.server) {\n throw new Error('Server is not initialized. Call init() first.')\n }\n return this.server\n }\n\n async listen(options: FastifyListenOptions) {\n if (!this.server) {\n throw new Error('Server is not initialized. Call init() first.')\n }\n const res = await this.server.listen(options)\n this.logger.debug(`Navios is listening on ${res}`)\n }\n\n async dispose() {\n if (this.server) {\n await this.server.close()\n this.server = null\n }\n if (this.moduleLoader) {\n this.moduleLoader.dispose()\n }\n }\n\n async close() {\n await this.dispose()\n }\n}\n","import type { ClassTypeWithInstance } from '@navios/di'\n\nimport { inject } from '@navios/di'\n\nimport type { NaviosModule } from './interfaces/index.mjs'\nimport type {\n NaviosApplicationContextOptions,\n NaviosApplicationOptions,\n} from './navios.application.mjs'\n\nimport { isNil, LoggerInstance } from './logger/index.mjs'\nimport { NaviosApplication } from './navios.application.mjs'\n\nexport class NaviosFactory {\n static async create(\n appModule: ClassTypeWithInstance<NaviosModule>,\n options: NaviosApplicationOptions = {},\n ) {\n const app = await inject(NaviosApplication)\n this.registerLoggerConfiguration(options)\n app.setup(appModule, options)\n return app\n }\n\n private static registerLoggerConfiguration(\n options: NaviosApplicationContextOptions,\n ) {\n if (!options) {\n return\n }\n const { logger } = options\n if ((logger as boolean) !== true && !isNil(logger)) {\n LoggerInstance.overrideLogger(logger)\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/adapters/stream-adapter.service.mts","../src/adapters/endpoint-adapter.service.mts","../src/adapters/multipart-adapter.service.mts","../src/config/utils/helpers.mts","../src/logger/utils/cli-colors.util.mts","../src/logger/log-levels.mts","../src/logger/utils/is-log-level.util.mts","../src/logger/utils/filter-log-levelts.util.mts","../src/logger/utils/is-log-level-enabled.mts","../src/logger/utils/shared.utils.mts","../src/tokens/application.token.mts","../src/metadata/handler.metadata.mts","../src/metadata/controller.metadata.mts","../src/metadata/module.metadata.mts","../src/services/execution-context.mts","../src/exceptions/http.exception.mts","../src/exceptions/bad-request.exception.mts","../src/exceptions/forbidden.exception.mts","../src/exceptions/internal-server-error.exception.mts","../src/exceptions/not-found.exception.mts","../src/exceptions/unauthorized.exception.mts","../src/exceptions/conflict.exception.mts","../src/services/guard-runner.service.mts","../src/services/controller-adapter.service.mts","../src/services/module-loader.service.mts","../src/tokens/execution-context.token.mts","../src/tokens/reply.token.mts","../src/tokens/request.token.mts","../src/logger/console-logger.service.mts","../src/logger/logger.service.mts","../src/logger/logger.factory.mts","../src/logger/pino-wrapper.mts","../src/config/config.service.mts","../src/config/config.provider.mts","../src/decorators/controller.decorator.mts","../src/decorators/endpoint.decorator.mts","../src/decorators/header.decorator.mts","../src/decorators/http-code.decorator.mts","../src/decorators/module.decorator.mts","../src/decorators/multipart.decorator.mts","../src/decorators/stream.decorator.mts","../src/decorators/use-guards.decorator.mts","../src/attribute.factory.mts","../src/navios.application.mts","../src/navios.factory.mts"],"names":["InjectionToken","_init","Injectable","inject","_a","isObject","syncInject","getGlobalServiceLocator","dateTimeFormatter","z","env","InjectableScope"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { BaseStreamConfig } from '@navios/builder'\nimport type { ClassType } from '@navios/di'\nimport type { FastifyReply, FastifyRequest } from 'fastify'\n\nimport { inject, Injectable, InjectionToken } from '@navios/di'\n\nimport type { HandlerMetadata } from '../metadata/index.mjs'\nimport type { ExecutionContext } from '../services/index.mjs'\nimport type { HandlerAdapterInterface } from './handler-adapter.interface.mjs'\n\nexport const StreamAdapterToken = InjectionToken.create<StreamAdapterService>(\n Symbol.for('StreamAdapterService'),\n)\n\n@Injectable({\n token: StreamAdapterToken,\n})\nexport class StreamAdapterService implements HandlerAdapterInterface {\n hasSchema(handlerMetadata: HandlerMetadata<BaseStreamConfig>): boolean {\n const config = handlerMetadata.config\n return !!config.requestSchema || !!config.querySchema\n }\n\n prepareArguments(handlerMetadata: HandlerMetadata<BaseStreamConfig>) {\n const config = handlerMetadata.config\n const getters: ((\n target: Record<string, any>,\n request: FastifyRequest,\n ) => void | Promise<void>)[] = []\n if (config.querySchema) {\n getters.push((target, request) => {\n target.params = request.query\n })\n }\n if (config.requestSchema) {\n getters.push((target, request) => {\n target.data = request.body\n })\n }\n if (config.url.includes('$')) {\n getters.push((target, request) => {\n target.urlParams = request.params\n })\n }\n\n return getters\n }\n\n provideHandler(\n controller: ClassType,\n executionContext: ExecutionContext,\n handlerMetadata: HandlerMetadata<BaseStreamConfig>,\n ): (request: FastifyRequest, reply: FastifyReply) => Promise<any> {\n const getters = this.prepareArguments(handlerMetadata)\n const formatArguments = async (request: FastifyRequest) => {\n const argument: Record<string, any> = {}\n const promises: Promise<void>[] = []\n for (const getter of getters) {\n const res = getter(argument, request)\n if (res instanceof Promise) {\n promises.push(res)\n }\n }\n await Promise.all(promises)\n return argument\n }\n\n return async function (request: FastifyRequest, reply: FastifyReply) {\n const controllerInstance = await inject(controller)\n const argument = await formatArguments(request)\n\n await controllerInstance[handlerMetadata.classMethod](argument, reply)\n }\n }\n\n provideSchema(\n handlerMetadata: HandlerMetadata<BaseStreamConfig>,\n ): Record<string, any> {\n const schema: Record<string, any> = {}\n const { querySchema, requestSchema } = handlerMetadata.config\n\n if (querySchema) {\n schema.querystring = querySchema\n }\n if (requestSchema) {\n schema.body = requestSchema\n }\n\n return schema\n }\n}\n","import type { BaseEndpointConfig } from '@navios/builder'\nimport type { ClassType } from '@navios/di'\nimport type { FastifyReply, FastifyRequest } from 'fastify'\n\nimport { inject, Injectable, InjectionToken } from '@navios/di'\n\nimport type { HandlerMetadata } from '../metadata/index.mjs'\nimport type { ExecutionContext } from '../services/index.mjs'\n\nimport { StreamAdapterService } from './stream-adapter.service.mjs'\n\nexport const EndpointAdapterToken =\n InjectionToken.create<EndpointAdapterService>(\n Symbol.for('EndpointAdapterService'),\n )\n\n@Injectable({\n token: EndpointAdapterToken,\n})\nexport class EndpointAdapterService extends StreamAdapterService {\n override hasSchema(\n handlerMetadata: HandlerMetadata<BaseEndpointConfig>,\n ): boolean {\n const config = handlerMetadata.config\n return super.hasSchema(handlerMetadata) || !!config.responseSchema\n }\n\n override provideSchema(\n handlerMetadata: HandlerMetadata<BaseEndpointConfig>,\n ): Record<string, any> {\n const config = handlerMetadata.config\n const schema = super.provideSchema(handlerMetadata)\n if (config.responseSchema) {\n schema.response = {\n 200: config.responseSchema,\n }\n }\n\n return schema\n }\n\n override provideHandler(\n controller: ClassType,\n executionContext: ExecutionContext,\n handlerMetadata: HandlerMetadata<BaseEndpointConfig>,\n ): (request: FastifyRequest, reply: FastifyReply) => Promise<any> {\n const getters = this.prepareArguments(handlerMetadata)\n const formatArguments = async (request: FastifyRequest) => {\n const argument: Record<string, any> = {}\n const promises: Promise<void>[] = []\n for (const getter of getters) {\n const res = getter(argument, request)\n if (res instanceof Promise) {\n promises.push(res)\n }\n }\n await Promise.all(promises)\n return argument\n }\n\n return async function (request, reply) {\n const controllerInstance = await inject(controller)\n const argument = await formatArguments(request)\n const result =\n await controllerInstance[handlerMetadata.classMethod](argument)\n reply\n .status(handlerMetadata.successStatusCode)\n .headers(handlerMetadata.headers)\n .send(result)\n }\n }\n}\n","import type { MultipartFile, MultipartValue } from '@fastify/multipart'\nimport type { BaseEndpointConfig } from '@navios/builder'\nimport type { FastifyRequest } from 'fastify'\nimport type { ZodRawShape } from 'zod/v4'\n\nimport { Injectable, InjectionToken } from '@navios/di'\n\nimport { ZodArray, ZodObject, ZodOptional } from 'zod/v4'\n\nimport type { HandlerMetadata } from '../metadata/index.mjs'\n\nimport { EndpointAdapterService } from './endpoint-adapter.service.mjs'\n\nexport const MultipartAdapterToken =\n InjectionToken.create<MultipartAdapterService>(\n Symbol.for('MultipartAdapterService'),\n )\n\n@Injectable({\n token: MultipartAdapterToken,\n})\nexport class MultipartAdapterService extends EndpointAdapterService {\n prepareArguments(\n handlerMetadata: HandlerMetadata<BaseEndpointConfig>,\n ): ((target: Record<string, any>, request: FastifyRequest) => void)[] {\n const config = handlerMetadata.config\n const getters: ((\n target: Record<string, any>,\n request: FastifyRequest,\n ) => void | Promise<void>)[] = []\n if (config.querySchema) {\n getters.push((target, request) => {\n target.params = request.query\n })\n }\n if (config.url.includes('$')) {\n getters.push((target, request) => {\n target.urlParams = request.params\n })\n }\n const requestSchema = config.requestSchema as unknown as ZodObject\n const shape = requestSchema._zod.def.shape\n const structure = this.analyzeSchema(shape)\n getters.push(async (target, request) => {\n const req: Record<string, any> = {}\n for await (const part of request.parts()) {\n await this.populateRequest(structure, part, req)\n }\n target.data = requestSchema.parse(req)\n })\n\n return getters\n }\n\n private async populateRequest(\n structure: {\n [p: string]: { isArray: boolean; isOptional: boolean; isObject: boolean }\n },\n part: MultipartFile | MultipartValue<unknown>,\n req: Record<string, any>,\n ) {\n const { isArray, isObject } = structure[part.fieldname] ?? {}\n if (isArray && !req[part.fieldname]) {\n req[part.fieldname] = []\n }\n let value\n if (part.type === 'file') {\n value = new File(\n [(await part.toBuffer()) as unknown as ArrayBuffer],\n part.filename,\n {\n type: part.mimetype,\n },\n )\n } else {\n value = part.value\n if (isObject && typeof value === 'string') {\n value = JSON.parse(value)\n }\n }\n\n if (isArray) {\n req[part.fieldname].push(value)\n } else {\n req[part.fieldname] = value\n }\n }\n\n private analyzeSchema(shape: ZodRawShape) {\n return Object.keys(shape).reduce(\n (target, key) => {\n let schema = shape[key]\n const isOptional = schema instanceof ZodOptional\n if (isOptional) {\n schema = (schema as ZodOptional<any>).unwrap()\n }\n const isArray = schema instanceof ZodArray\n if (isArray) {\n schema = (schema as ZodArray<any>).element\n }\n const isObject = schema instanceof ZodObject\n return {\n ...target,\n [key]: {\n isArray,\n isOptional,\n isObject,\n },\n }\n },\n {} as Record<\n string,\n { isArray: boolean; isOptional: boolean; isObject: boolean }\n >,\n )\n }\n\n override provideSchema(\n handlerMetadata: HandlerMetadata<BaseEndpointConfig>,\n ): Record<string, any> {\n const schema: Record<string, any> = {}\n const { querySchema, responseSchema } = handlerMetadata.config\n\n if (querySchema) {\n schema.querystring = querySchema\n }\n if (responseSchema) {\n schema.response = {\n 200: responseSchema,\n }\n }\n\n return schema\n }\n}\n","import { env } from 'node:process'\n\nexport function envInt(\n key: keyof NodeJS.ProcessEnv,\n defaultValue: number,\n): number {\n const envKey = env[key] || process.env[key]\n\n return envKey ? parseInt(envKey as string, 10) : defaultValue\n}\n\nexport function envString<\n DefaultValue extends string | undefined,\n Ensured = DefaultValue extends string ? true : false,\n>(\n key: keyof NodeJS.ProcessEnv,\n defaultValue?: DefaultValue,\n): Ensured extends true ? string : string | undefined {\n return (env[key] ||\n process.env[key] ||\n defaultValue ||\n undefined) as Ensured extends true ? string : string | undefined\n}\n","type ColorTextFn = (text: string) => string\n\nconst isColorAllowed = () => !process.env.NO_COLOR\nconst colorIfAllowed = (colorFn: ColorTextFn) => (text: string) =>\n isColorAllowed() ? colorFn(text) : text\n\nexport const clc = {\n bold: colorIfAllowed((text: string) => `\\x1B[1m${text}\\x1B[0m`),\n green: colorIfAllowed((text: string) => `\\x1B[32m${text}\\x1B[39m`),\n yellow: colorIfAllowed((text: string) => `\\x1B[33m${text}\\x1B[39m`),\n red: colorIfAllowed((text: string) => `\\x1B[31m${text}\\x1B[39m`),\n magentaBright: colorIfAllowed((text: string) => `\\x1B[95m${text}\\x1B[39m`),\n cyanBright: colorIfAllowed((text: string) => `\\x1B[96m${text}\\x1B[39m`),\n}\nexport const yellow = colorIfAllowed(\n (text: string) => `\\x1B[38;5;3m${text}\\x1B[39m`,\n)\n","export const LOG_LEVELS = [\n 'verbose',\n 'debug',\n 'log',\n 'warn',\n 'error',\n 'fatal',\n] as const satisfies string[]\n/**\n * @publicApi\n */\nexport type LogLevel = (typeof LOG_LEVELS)[number]\n","import type { LogLevel } from '../log-levels.mjs'\n\nimport { LOG_LEVELS } from '../log-levels.mjs'\n\n/**\n * @publicApi\n */\nexport function isLogLevel(maybeLogLevel: any): maybeLogLevel is LogLevel {\n return LOG_LEVELS.includes(maybeLogLevel)\n}\n","import type { LogLevel } from '../log-levels.mjs'\n\nimport { LOG_LEVELS } from '../log-levels.mjs'\nimport { isLogLevel } from './is-log-level.util.mjs'\n\n/**\n * @publicApi\n */\nexport function filterLogLevels(parseableString = ''): LogLevel[] {\n const sanitizedString = parseableString.replaceAll(' ', '').toLowerCase()\n\n if (sanitizedString[0] === '>') {\n const orEqual = sanitizedString[1] === '='\n\n const logLevelIndex = (LOG_LEVELS as string[]).indexOf(\n sanitizedString.substring(orEqual ? 2 : 1),\n )\n\n if (logLevelIndex === -1) {\n throw new Error(`parse error (unknown log level): ${sanitizedString}`)\n }\n\n return LOG_LEVELS.slice(orEqual ? logLevelIndex : logLevelIndex + 1)\n } else if (sanitizedString.includes(',')) {\n return sanitizedString.split(',').filter(isLogLevel)\n }\n\n return isLogLevel(sanitizedString) ? [sanitizedString] : LOG_LEVELS\n}\n","import type { LogLevel } from '../log-levels.mjs'\n\nconst LOG_LEVEL_VALUES: Record<LogLevel, number> = {\n verbose: 0,\n debug: 1,\n log: 2,\n warn: 3,\n error: 4,\n fatal: 5,\n}\n\n/**\n * Checks if target level is enabled.\n * @param targetLevel target level\n * @param logLevels array of enabled log levels\n */\nexport function isLogLevelEnabled(\n targetLevel: LogLevel,\n logLevels: LogLevel[] | undefined,\n): boolean {\n if (!logLevels || (Array.isArray(logLevels) && logLevels?.length === 0)) {\n return false\n }\n if (logLevels.includes(targetLevel)) {\n return true\n }\n const highestLogLevelValue = logLevels\n .map((level) => LOG_LEVEL_VALUES[level])\n .sort((a, b) => b - a)?.[0]\n\n const targetLevelValue = LOG_LEVEL_VALUES[targetLevel]\n return targetLevelValue >= highestLogLevelValue\n}\n","export const isUndefined = (obj: any): obj is undefined =>\n typeof obj === 'undefined'\n\nexport const isObject = (fn: any): fn is object =>\n !isNil(fn) && typeof fn === 'object'\n\nexport const isPlainObject = (fn: any): fn is object => {\n if (!isObject(fn)) {\n return false\n }\n const proto = Object.getPrototypeOf(fn)\n if (proto === null) {\n return true\n }\n const ctor =\n Object.prototype.hasOwnProperty.call(proto, 'constructor') &&\n proto.constructor\n return (\n typeof ctor === 'function' &&\n ctor instanceof ctor &&\n Function.prototype.toString.call(ctor) ===\n Function.prototype.toString.call(Object)\n )\n}\n\nexport const addLeadingSlash = (path?: string): string =>\n path && typeof path === 'string'\n ? path.charAt(0) !== '/' && path.substring(0, 2) !== '{/'\n ? '/' + path\n : path\n : ''\n\nexport const normalizePath = (path?: string): string =>\n path\n ? path.startsWith('/')\n ? ('/' + path.replace(/\\/+$/, '')).replace(/\\/+/g, '/')\n : '/' + path.replace(/\\/+$/, '')\n : '/'\n\nexport const stripEndSlash = (path: string) =>\n path[path.length - 1] === '/' ? path.slice(0, path.length - 1) : path\n\nexport const isFunction = (val: any): val is Function =>\n typeof val === 'function'\nexport const isString = (val: any): val is string => typeof val === 'string'\nexport const isNumber = (val: any): val is number => typeof val === 'number'\nexport const isConstructor = (val: any): boolean => val === 'constructor'\nexport const isNil = (val: any): val is null | undefined =>\n isUndefined(val) || val === null\nexport const isEmpty = (array: any): boolean => !(array && array.length > 0)\nexport const isSymbol = (val: any): val is symbol => typeof val === 'symbol'\n","import type { FastifyInstance } from 'fastify'\n\nimport { InjectionToken } from '@navios/di'\n\nconst ApplicationInjectionToken = 'ApplicationInjectionToken'\n\nexport const Application = InjectionToken.create<FastifyInstance>(\n ApplicationInjectionToken,\n)\n","import type { HttpMethod } from '@navios/builder'\nimport type { ClassTypeWithInstance, InjectionToken } from '@navios/di'\nimport type { HttpHeader } from 'fastify/types/utils.js'\n\nimport type { HandlerAdapterInterface } from '../adapters/index.mjs'\nimport type { CanActivate } from '../interfaces/index.mjs'\n\nexport const EndpointMetadataKey = Symbol('EndpointMetadataKey')\n\nexport interface HandlerMetadata<Config = null> {\n classMethod: string\n url: string\n successStatusCode: number\n adapterToken:\n | InjectionToken<HandlerAdapterInterface, undefined>\n | ClassTypeWithInstance<HandlerAdapterInterface>\n | null\n headers: Partial<Record<HttpHeader, number | string | string[] | undefined>>\n httpMethod: HttpMethod\n config: Config\n guards: Set<\n ClassTypeWithInstance<CanActivate> | InjectionToken<CanActivate, undefined>\n >\n customAttributes: Map<string | symbol, any>\n}\n\nexport function getAllEndpointMetadata(\n context: ClassMethodDecoratorContext | ClassDecoratorContext,\n): Set<HandlerMetadata<any>> {\n if (context.metadata) {\n const metadata = context.metadata[EndpointMetadataKey] as\n | Set<HandlerMetadata>\n | undefined\n if (metadata) {\n return metadata\n } else {\n context.metadata[EndpointMetadataKey] = new Set<HandlerMetadata<any>>()\n return context.metadata[EndpointMetadataKey] as Set<HandlerMetadata<any>>\n }\n }\n throw new Error('[Navios] Wrong environment.')\n}\n\nexport function getEndpointMetadata<Config = any>(\n target: Function,\n context: ClassMethodDecoratorContext,\n): HandlerMetadata<Config> {\n if (context.metadata) {\n const metadata = getAllEndpointMetadata(context)\n if (metadata) {\n const endpointMetadata = Array.from(metadata).find(\n (item) => item.classMethod === target.name,\n )\n if (endpointMetadata) {\n return endpointMetadata\n } else {\n const newMetadata: HandlerMetadata<Config> = {\n classMethod: target.name,\n url: '',\n successStatusCode: 200,\n adapterToken: null,\n headers: {},\n httpMethod: 'GET',\n // @ts-expect-error We are using a generic type here\n config: null,\n guards: new Set<\n | ClassTypeWithInstance<CanActivate>\n | InjectionToken<CanActivate, undefined>\n >(),\n customAttributes: new Map<string | symbol, any>(),\n }\n metadata.add(newMetadata)\n return newMetadata\n }\n }\n }\n throw new Error('[Navios] Wrong environment.')\n}\n","import type {\n ClassType,\n ClassTypeWithInstance,\n InjectionToken,\n} from '@navios/di'\n\nimport type { CanActivate } from '../interfaces/index.mjs'\nimport type { HandlerMetadata } from './handler.metadata.mjs'\n\nimport { getAllEndpointMetadata } from './handler.metadata.mjs'\n\nexport const ControllerMetadataKey = Symbol('ControllerMetadataKey')\n\nexport interface ControllerMetadata {\n endpoints: Set<HandlerMetadata>\n guards: Set<\n ClassTypeWithInstance<CanActivate> | InjectionToken<CanActivate, undefined>\n >\n customAttributes: Map<string | symbol, any>\n}\n\nexport function getControllerMetadata(\n target: ClassType,\n context: ClassDecoratorContext,\n): ControllerMetadata {\n if (context.metadata) {\n const metadata = context.metadata[ControllerMetadataKey] as\n | ControllerMetadata\n | undefined\n if (metadata) {\n return metadata\n } else {\n const endpointsMetadata = getAllEndpointMetadata(context)\n const newMetadata: ControllerMetadata = {\n endpoints: endpointsMetadata,\n guards: new Set<\n | ClassTypeWithInstance<CanActivate>\n | InjectionToken<CanActivate, undefined>\n >(),\n customAttributes: new Map<string | symbol, any>(),\n }\n context.metadata[ControllerMetadataKey] = newMetadata\n // @ts-expect-error We add a custom metadata key to the target\n target[ControllerMetadataKey] = newMetadata\n return newMetadata\n }\n }\n throw new Error('[Navios] Wrong environment.')\n}\n\nexport function extractControllerMetadata(\n target: ClassType,\n): ControllerMetadata {\n // @ts-expect-error We add a custom metadata key to the target\n const metadata = target[ControllerMetadataKey] as\n | ControllerMetadata\n | undefined\n if (!metadata) {\n throw new Error(\n '[Navios] Controller metadata not found. Make sure to use @Controller decorator.',\n )\n }\n return metadata\n}\n\nexport function hasControllerMetadata(target: ClassType): boolean {\n // @ts-expect-error We add a custom metadata key to the target\n const metadata = target[ControllerMetadataKey] as\n | ControllerMetadata\n | undefined\n return !!metadata\n}\n","import type {\n ClassType,\n ClassTypeWithInstance,\n InjectionToken,\n} from '@navios/di'\n\nimport type { CanActivate } from '../index.mjs'\n\nexport const ModuleMetadataKey = Symbol('ControllerMetadataKey')\n\nexport interface ModuleMetadata {\n controllers: Set<ClassType>\n imports: Set<ClassType>\n guards: Set<\n ClassTypeWithInstance<CanActivate> | InjectionToken<CanActivate, undefined>\n >\n customAttributes: Map<string | symbol, any>\n}\n\nexport function getModuleMetadata(\n target: ClassType,\n context: ClassDecoratorContext,\n): ModuleMetadata {\n if (context.metadata) {\n const metadata = context.metadata[ModuleMetadataKey] as\n | ModuleMetadata\n | undefined\n if (metadata) {\n return metadata\n } else {\n const newMetadata: ModuleMetadata = {\n controllers: new Set<ClassType>(),\n imports: new Set<ClassType>(),\n guards: new Set<\n | ClassTypeWithInstance<CanActivate>\n | InjectionToken<CanActivate, undefined>\n >(),\n customAttributes: new Map<string | symbol, any>(),\n }\n context.metadata[ModuleMetadataKey] = newMetadata\n // @ts-expect-error We add a custom metadata key to the target\n target[ModuleMetadataKey] = newMetadata\n return newMetadata\n }\n }\n throw new Error('[Navios] Wrong environment.')\n}\n\nexport function extractModuleMetadata(target: ClassType): ModuleMetadata {\n // @ts-expect-error We add a custom metadata key to the target\n const metadata = target[ModuleMetadataKey] as ModuleMetadata | undefined\n if (!metadata) {\n throw new Error(\n `[Navios] Module metadata not found for ${target.name}. Make sure to use @Module decorator.`,\n )\n }\n return metadata\n}\n\nexport function hasModuleMetadata(target: ClassType): boolean {\n // @ts-expect-error We add a custom metadata key to the target\n return !!target[ModuleMetadataKey]\n}\n","import type { FastifyReply, FastifyRequest } from 'fastify'\n\nimport type {\n ControllerMetadata,\n HandlerMetadata,\n ModuleMetadata,\n} from '../metadata/index.mjs'\n\nexport class ExecutionContext {\n private request: FastifyRequest | undefined\n private reply: FastifyReply | undefined\n constructor(\n private readonly module: ModuleMetadata,\n private readonly controller: ControllerMetadata,\n private readonly handler: HandlerMetadata,\n ) {}\n getModule(): ModuleMetadata {\n return this.module\n }\n\n getController(): ControllerMetadata {\n return this.controller\n }\n\n getHandler(): HandlerMetadata {\n return this.handler\n }\n\n getRequest(): FastifyRequest {\n if (!this.request) {\n throw new Error(\n '[Navios] Request is not set. Make sure to set it before using it.',\n )\n }\n return this.request\n }\n\n getReply(): FastifyReply {\n if (!this.reply) {\n throw new Error(\n '[Navios] Reply is not set. Make sure to set it before using it.',\n )\n }\n return this.reply\n }\n\n provideRequest(request: FastifyRequest): void {\n this.request = request\n }\n\n provideReply(reply: FastifyReply): void {\n this.reply = reply\n }\n}\n","export class HttpException {\n constructor(\n public readonly statusCode: number,\n public readonly response: string | object,\n public readonly error?: Error,\n ) {}\n}\n","import { HttpException } from './http.exception.mjs'\n\nexport class BadRequestException extends HttpException {\n constructor(message: string | object) {\n super(400, message)\n }\n}\n","import { HttpException } from './http.exception.mjs'\n\nexport class ForbiddenException extends HttpException {\n constructor(message: string) {\n super(403, message)\n }\n}\n","import { HttpException } from './http.exception.mjs'\n\nexport class InternalServerErrorException extends HttpException {\n constructor(message: string | object, error?: Error) {\n super(500, message, error)\n }\n}\n","import { HttpException } from './http.exception.mjs'\n\nexport class NotFoundException extends HttpException {\n constructor(\n public readonly response: string | object,\n public readonly error?: Error,\n ) {\n super(404, response, error)\n }\n}\n","import { HttpException } from './http.exception.mjs'\n\nexport class UnauthorizedException extends HttpException {\n constructor(message: string | object, error?: Error) {\n super(401, message, error)\n }\n}\n","import { HttpException } from './http.exception.mjs'\n\nexport class ConflictException extends HttpException {\n constructor(message: string | object, error?: Error) {\n super(409, message, error)\n }\n}\n","import type { ClassTypeWithInstance } from '@navios/di'\n\nimport { inject, Injectable, InjectionToken } from '@navios/di'\n\nimport type { CanActivate } from '../interfaces/index.mjs'\nimport type { ExecutionContext } from './execution-context.mjs'\n\nimport { HttpException } from '../exceptions/index.mjs'\n\n@Injectable()\nexport class GuardRunnerService {\n async runGuards(\n allGuards: Set<\n | ClassTypeWithInstance<CanActivate>\n | InjectionToken<CanActivate, undefined>\n >,\n executionContext: ExecutionContext,\n ) {\n let canActivate = true\n for (const guard of Array.from(allGuards).reverse()) {\n const guardInstance = await inject(\n guard as InjectionToken<CanActivate, undefined>,\n )\n if (!guardInstance.canActivate) {\n throw new Error(\n `[Navios] Guard ${guard.name as string} does not implement canActivate()`,\n )\n }\n try {\n canActivate = await guardInstance.canActivate(executionContext)\n if (!canActivate) {\n break\n }\n } catch (error) {\n if (error instanceof HttpException) {\n executionContext\n .getReply()\n .status(error.statusCode)\n .send(error.response)\n return false\n } else {\n executionContext\n .getReply()\n .status(500)\n .send({\n message: 'Internal server error',\n error: (error as Error).message,\n })\n return false\n }\n }\n }\n if (!canActivate) {\n executionContext.getReply().status(403).send({\n message: 'Forbidden',\n })\n return false\n }\n return canActivate\n }\n\n makeContext(\n executionContext: ExecutionContext,\n ): Set<\n ClassTypeWithInstance<CanActivate> | InjectionToken<CanActivate, undefined>\n > {\n const guards = new Set<\n | ClassTypeWithInstance<CanActivate>\n | InjectionToken<CanActivate, undefined>\n >()\n const endpointGuards = executionContext.getHandler().guards\n const controllerGuards = executionContext.getController().guards\n const moduleGuards = executionContext.getModule().guards\n if (endpointGuards.size > 0) {\n for (const guard of endpointGuards) {\n guards.add(guard)\n }\n }\n if (controllerGuards.size > 0) {\n for (const guard of controllerGuards) {\n guards.add(guard)\n }\n }\n if (moduleGuards.size > 0) {\n for (const guard of moduleGuards) {\n guards.add(guard)\n }\n }\n return guards\n }\n}\n","import type { ClassType } from '@navios/di'\nimport type { FastifyInstance, FastifyReply, FastifyRequest } from 'fastify'\nimport type { ZodTypeProvider } from 'fastify-type-provider-zod'\n\nimport {\n getGlobalServiceLocator,\n inject,\n Injectable,\n InjectionToken,\n syncInject,\n} from '@navios/di'\n\nimport type { HandlerAdapterInterface } from '../adapters/index.mjs'\nimport type { ModuleMetadata } from '../metadata/index.mjs'\n\nimport { Logger } from '../logger/index.mjs'\nimport { extractControllerMetadata } from '../metadata/index.mjs'\nimport { ExecutionContextToken, Reply, Request } from '../tokens/index.mjs'\nimport { ExecutionContext } from './execution-context.mjs'\nimport { GuardRunnerService } from './guard-runner.service.mjs'\n\n@Injectable()\nexport class ControllerAdapterService {\n guardRunner = syncInject(GuardRunnerService)\n private logger = syncInject(Logger, {\n context: ControllerAdapterService.name,\n })\n\n async setupController(\n controller: ClassType,\n instance: FastifyInstance,\n moduleMetadata: ModuleMetadata,\n ) {\n const controllerMetadata = extractControllerMetadata(controller)\n for (const endpoint of controllerMetadata.endpoints) {\n const { classMethod, url, httpMethod, adapterToken } = endpoint\n\n if (!url || !adapterToken) {\n throw new Error(\n `[Navios] Malformed Endpoint ${controller.name}:${classMethod}`,\n )\n }\n const adapter = await inject(\n adapterToken as InjectionToken<HandlerAdapterInterface>,\n )\n const executionContext = new ExecutionContext(\n moduleMetadata,\n controllerMetadata,\n endpoint,\n )\n const hasSchema = adapter.hasSchema?.(endpoint) ?? false\n if (hasSchema) {\n instance.withTypeProvider<ZodTypeProvider>().route({\n method: httpMethod,\n url: url.replaceAll('$', ':'),\n schema: adapter.provideSchema?.(endpoint) ?? {},\n preHandler: this.providePreHandler(executionContext),\n handler: this.wrapHandler(\n executionContext,\n adapter.provideHandler(controller, executionContext, endpoint),\n ),\n })\n } else {\n instance.route({\n method: httpMethod,\n url: url.replaceAll('$', ':'),\n preHandler: this.providePreHandler(executionContext),\n handler: this.wrapHandler(\n executionContext,\n adapter.provideHandler(controller, executionContext, endpoint),\n ),\n })\n }\n\n this.logger.debug(\n `Registered ${httpMethod} ${url} for ${controller.name}:${classMethod}`,\n )\n }\n }\n\n providePreHandler(executionContext: ExecutionContext) {\n const guards = this.guardRunner.makeContext(executionContext)\n return guards.size > 0\n ? this.wrapHandler(\n executionContext,\n async (request: FastifyRequest, reply: FastifyReply) => {\n let canActivate = true\n canActivate = await this.guardRunner.runGuards(\n guards,\n executionContext,\n )\n if (!canActivate) {\n return reply\n }\n },\n )\n : undefined\n }\n\n private wrapHandler(\n executionContext: ExecutionContext,\n handler: (request: FastifyRequest, reply: FastifyReply) => Promise<void>,\n ) {\n const locator = getGlobalServiceLocator()\n return async (request: FastifyRequest, reply: FastifyReply) => {\n locator.storeInstance(request, Request)\n locator.storeInstance(reply, Reply)\n locator.storeInstance(executionContext, ExecutionContextToken)\n executionContext.provideRequest(request)\n executionContext.provideReply(reply)\n try {\n return await handler(request, reply)\n } finally {\n Promise.all([\n locator.removeInstance(Request),\n locator.removeInstance(Reply),\n locator.removeInstance(ExecutionContextToken),\n ]).catch((err) => {\n this.logger.warn(`Error removing instances: ${err}`)\n })\n }\n }\n }\n}\n","import type { ClassTypeWithInstance } from '@navios/di'\n\nimport { inject, Injectable, syncInject } from '@navios/di'\n\nimport type { NaviosModule } from '../interfaces/index.mjs'\nimport type { ModuleMetadata } from '../metadata/index.mjs'\n\nimport { Logger } from '../logger/index.mjs'\nimport { extractModuleMetadata } from '../metadata/index.mjs'\n\n@Injectable()\nexport class ModuleLoaderService {\n private logger = syncInject(Logger, {\n context: ModuleLoaderService.name,\n })\n private modulesMetadata: Map<string, ModuleMetadata> = new Map()\n private loadedModules: Map<string, any> = new Map()\n private initialized = false\n\n async loadModules(appModule: ClassTypeWithInstance<NaviosModule>) {\n if (this.initialized) {\n return\n }\n await this.traverseModules(appModule)\n this.initialized = true\n }\n\n private async traverseModules(\n module: ClassTypeWithInstance<NaviosModule>,\n parentMetadata?: ModuleMetadata,\n ) {\n const metadata = extractModuleMetadata(module)\n if (parentMetadata) {\n this.mergeMetadata(metadata, parentMetadata)\n }\n const moduleName = module.name\n if (this.modulesMetadata.has(moduleName)) {\n return\n }\n this.modulesMetadata.set(moduleName, metadata)\n const imports = metadata.imports ?? new Set()\n const loadingPromises = Array.from(imports).map(async (importedModule) =>\n this.traverseModules(importedModule, metadata),\n )\n await Promise.all(loadingPromises)\n const instance = await inject(module)\n if (instance.onModuleInit) {\n await instance.onModuleInit()\n }\n this.logger.debug(`Module ${moduleName} loaded`)\n this.loadedModules.set(moduleName, instance)\n }\n\n private mergeMetadata(\n metadata: ModuleMetadata,\n parentMetadata: ModuleMetadata,\n ): void {\n if (parentMetadata.guards) {\n for (const guard of parentMetadata.guards) {\n metadata.guards.add(guard)\n }\n }\n if (parentMetadata.customAttributes) {\n for (const [key, value] of parentMetadata.customAttributes) {\n if (metadata.customAttributes.has(key)) {\n continue\n }\n metadata.customAttributes.set(key, value)\n }\n }\n }\n getAllModules(): Map<string, ModuleMetadata> {\n return this.modulesMetadata\n }\n dispose() {\n this.modulesMetadata.clear()\n this.loadedModules.clear()\n this.initialized = false\n }\n}\n","import { InjectionToken } from '@navios/di'\n\nimport { ExecutionContext } from '../services/index.mjs'\n\nexport const ExecutionContextInjectionToken = 'ExecutionContextInjectionToken'\n\nexport const ExecutionContextToken = InjectionToken.create<ExecutionContext>(\n ExecutionContextInjectionToken,\n)\n","import type { FastifyReply } from 'fastify'\n\nimport { InjectionToken } from '@navios/di'\n\nconst ReplyInjectionToken = 'ReplyInjectionToken'\n\nexport const Reply = InjectionToken.create<FastifyReply>(ReplyInjectionToken)\n","import type { FastifyRequest } from 'fastify'\n\nimport { InjectionToken } from '@navios/di'\n\nconst RequestInjectionToken = 'RequestInjectionToken'\n\nexport const Request = InjectionToken.create<FastifyRequest>(\n RequestInjectionToken,\n)\n","import type { InspectOptions } from 'util'\n\nimport { inspect } from 'util'\n\nimport { getGlobalServiceLocator, Injectable } from '@navios/di'\n\nimport type { LogLevel } from './log-levels.mjs'\nimport type { LoggerService } from './logger-service.interface.mjs'\n\nimport { Request } from '../tokens/index.mjs'\nimport {\n clc,\n isFunction,\n isLogLevelEnabled,\n isPlainObject,\n isString,\n isUndefined,\n yellow,\n} from './utils/index.mjs'\n\nconst DEFAULT_DEPTH = 5\n\n/**\n * @publicApi\n */\nexport interface ConsoleLoggerOptions {\n /**\n * Enabled log levels.\n */\n logLevels?: LogLevel[]\n /**\n * If enabled, will print timestamp (time difference) between current and previous log message.\n * Note: This option is not used when `json` is enabled.\n */\n timestamp?: boolean\n /**\n * A prefix to be used for each log message.\n * Note: This option is not used when `json` is enabled.\n */\n prefix?: string\n /**\n * If enabled, will add a request ID to the log message.\n */\n requestId?: boolean\n /**\n * If enabled, will print the log message in JSON format.\n */\n json?: boolean\n /**\n * If enabled, will print the log message in color.\n * Default true if json is disabled, false otherwise\n */\n colors?: boolean\n /**\n * The context of the logger.\n */\n context?: string\n /**\n * If enabled, will print the log message in a single line, even if it is an object with multiple properties.\n * If set to a number, the most n inner elements are united on a single line as long as all properties fit into breakLength. Short array elements are also grouped together.\n * Default true when `json` is enabled, false otherwise.\n */\n compact?: boolean | number\n /**\n * Specifies the maximum number of Array, TypedArray, Map, Set, WeakMap, and WeakSet elements to include when formatting.\n * Set to null or Infinity to show all elements. Set to 0 or negative to show no elements.\n * Ignored when `json` is enabled, colors are disabled, and `compact` is set to true as it produces a parseable JSON output.\n * @default 100\n */\n maxArrayLength?: number\n /**\n * Specifies the maximum number of characters to include when formatting.\n * Set to null or Infinity to show all elements. Set to 0 or negative to show no characters.\n * Ignored when `json` is enabled, colors are disabled, and `compact` is set to true as it produces a parseable JSON output.\n * @default 10000.\n */\n maxStringLength?: number\n /**\n * If enabled, will sort keys while formatting objects.\n * Can also be a custom sorting function.\n * Ignored when `json` is enabled, colors are disabled, and `compact` is set to true as it produces a parseable JSON output.\n * @default false\n */\n sorted?: boolean | ((a: string, b: string) => number)\n /**\n * Specifies the number of times to recurse while formatting object. T\n * This is useful for inspecting large objects. To recurse up to the maximum call stack size pass Infinity or null.\n * Ignored when `json` is enabled, colors are disabled, and `compact` is set to true as it produces a parseable JSON output.\n * @default 5\n */\n depth?: number\n /**\n * If true, object's non-enumerable symbols and properties are included in the formatted result.\n * WeakMap and WeakSet entries are also included as well as user defined prototype properties\n * @default false\n */\n showHidden?: boolean\n /**\n * The length at which input values are split across multiple lines. Set to Infinity to format the input as a single line (in combination with \"compact\" set to true).\n * Default Infinity when \"compact\" is true, 80 otherwise.\n * Ignored when `json` is enabled, colors are disabled, and `compact` is set to true as it produces a parseable JSON output.\n */\n breakLength?: number\n}\n\nconst DEFAULT_LOG_LEVELS: LogLevel[] = [\n 'log',\n 'error',\n 'warn',\n 'debug',\n 'verbose',\n 'fatal',\n]\n\nconst dateTimeFormatter = new Intl.DateTimeFormat(undefined, {\n year: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n day: '2-digit',\n month: '2-digit',\n})\n\n/**\n * @publicApi\n */\n@Injectable()\nexport class ConsoleLogger implements LoggerService {\n /**\n * The options of the logger.\n */\n protected options: ConsoleLoggerOptions\n /**\n * The context of the logger (can be set manually or automatically inferred).\n */\n protected context?: string\n /**\n * Request ID (if enabled).\n */\n protected requestId: string | null = null\n /**\n * The original context of the logger (set in the constructor).\n */\n protected originalContext?: string\n /**\n * The options used for the \"inspect\" method.\n */\n protected inspectOptions: InspectOptions\n /**\n * The last timestamp at which the log message was printed.\n */\n protected static lastTimestampAt?: number\n\n constructor()\n constructor(context: string)\n constructor(options: ConsoleLoggerOptions)\n constructor(context: string, options: ConsoleLoggerOptions)\n constructor(\n contextOrOptions?: string | ConsoleLoggerOptions,\n options?: ConsoleLoggerOptions,\n ) {\n // eslint-disable-next-line prefer-const\n let [context, opts] = isString(contextOrOptions)\n ? [contextOrOptions, options]\n : options\n ? [undefined, options]\n : [contextOrOptions?.context, contextOrOptions]\n\n opts = opts ?? {}\n opts.logLevels ??= DEFAULT_LOG_LEVELS\n opts.colors ??= opts.colors ?? (opts.json ? false : true)\n opts.prefix ??= 'Navios'\n\n this.options = opts\n this.inspectOptions = this.getInspectOptions()\n\n if (context) {\n this.context = context\n this.originalContext = context\n }\n if (opts?.requestId) {\n const locator = getGlobalServiceLocator()\n locator\n .getEventBus()\n .on(locator.getInstanceIdentifier(Request, undefined), 'create', () => {\n const request = locator.getSyncInstance(Request, undefined)\n this.requestId = request?.id ?? null\n })\n locator\n .getEventBus()\n .on(\n locator.getInstanceIdentifier(Request, undefined),\n 'destroy',\n () => {\n this.requestId = null\n },\n )\n }\n }\n\n /**\n * Write a 'log' level log, if the configured level allows for it.\n * Prints to `stdout` with newline.\n */\n log(message: any, context?: string): void\n log(message: any, ...optionalParams: [...any, string?]): void\n log(message: any, ...optionalParams: any[]) {\n if (!this.isLevelEnabled('log')) {\n return\n }\n const { messages, context } = this.getContextAndMessagesToPrint([\n message,\n ...optionalParams,\n ])\n this.printMessages(messages, context, 'log')\n }\n\n /**\n * Write an 'error' level log, if the configured level allows for it.\n * Prints to `stderr` with newline.\n */\n error(message: any, stackOrContext?: string): void\n error(message: any, stack?: string, context?: string): void\n error(message: any, ...optionalParams: [...any, string?, string?]): void\n error(message: any, ...optionalParams: any[]) {\n if (!this.isLevelEnabled('error')) {\n return\n }\n const { messages, context, stack } =\n this.getContextAndStackAndMessagesToPrint([message, ...optionalParams])\n\n this.printMessages(messages, context, 'error', 'stderr', stack)\n this.printStackTrace(stack!)\n }\n\n /**\n * Write a 'warn' level log, if the configured level allows for it.\n * Prints to `stdout` with newline.\n */\n warn(message: any, context?: string): void\n warn(message: any, ...optionalParams: [...any, string?]): void\n warn(message: any, ...optionalParams: any[]) {\n if (!this.isLevelEnabled('warn')) {\n return\n }\n const { messages, context } = this.getContextAndMessagesToPrint([\n message,\n ...optionalParams,\n ])\n this.printMessages(messages, context, 'warn')\n }\n\n /**\n * Write a 'debug' level log, if the configured level allows for it.\n * Prints to `stdout` with newline.\n */\n debug(message: any, context?: string): void\n debug(message: any, ...optionalParams: [...any, string?]): void\n debug(message: any, ...optionalParams: any[]) {\n if (!this.isLevelEnabled('debug')) {\n return\n }\n const { messages, context } = this.getContextAndMessagesToPrint([\n message,\n ...optionalParams,\n ])\n this.printMessages(messages, context, 'debug')\n }\n\n /**\n * Write a 'verbose' level log, if the configured level allows for it.\n * Prints to `stdout` with newline.\n */\n verbose(message: any, context?: string): void\n verbose(message: any, ...optionalParams: [...any, string?]): void\n verbose(message: any, ...optionalParams: any[]) {\n if (!this.isLevelEnabled('verbose')) {\n return\n }\n const { messages, context } = this.getContextAndMessagesToPrint([\n message,\n ...optionalParams,\n ])\n this.printMessages(messages, context, 'verbose')\n }\n\n /**\n * Write a 'fatal' level log, if the configured level allows for it.\n * Prints to `stdout` with newline.\n */\n fatal(message: any, context?: string): void\n fatal(message: any, ...optionalParams: [...any, string?]): void\n fatal(message: any, ...optionalParams: any[]) {\n if (!this.isLevelEnabled('fatal')) {\n return\n }\n const { messages, context } = this.getContextAndMessagesToPrint([\n message,\n ...optionalParams,\n ])\n this.printMessages(messages, context, 'fatal')\n }\n\n /**\n * Set log levels\n * @param levels log levels\n */\n setLogLevels(levels: LogLevel[]) {\n if (!this.options) {\n this.options = {}\n }\n this.options.logLevels = levels\n }\n\n /**\n * Set logger context\n * @param context context\n */\n setContext(context: string) {\n this.context = context\n }\n\n /**\n * Resets the logger context to the value that was passed in the constructor.\n */\n resetContext() {\n this.context = this.originalContext\n }\n\n isLevelEnabled(level: LogLevel): boolean {\n const logLevels = this.options?.logLevels\n return isLogLevelEnabled(level, logLevels)\n }\n\n protected getTimestamp(): string {\n return dateTimeFormatter.format(Date.now())\n }\n\n protected printMessages(\n messages: unknown[],\n context = '',\n logLevel: LogLevel = 'log',\n writeStreamType?: 'stdout' | 'stderr',\n errorStack?: unknown,\n ) {\n messages.forEach((message) => {\n if (this.options.json) {\n this.printAsJson(message, {\n context,\n logLevel,\n writeStreamType,\n errorStack,\n })\n return\n }\n const pidMessage = this.formatPid(process.pid)\n const contextMessage = this.formatContext(context)\n const timestampDiff = this.updateAndGetTimestampDiff()\n const formattedLogLevel = logLevel.toUpperCase().padStart(7, ' ')\n const formattedMessage = this.formatMessage(\n logLevel,\n message,\n pidMessage,\n formattedLogLevel,\n contextMessage,\n timestampDiff,\n )\n\n process[writeStreamType ?? 'stdout'].write(formattedMessage)\n })\n }\n\n protected printAsJson(\n message: unknown,\n options: {\n context: string\n logLevel: LogLevel\n writeStreamType?: 'stdout' | 'stderr'\n errorStack?: unknown\n },\n ) {\n type JsonLogObject = {\n level: LogLevel\n pid: number\n timestamp: number\n message: unknown\n context?: string\n stack?: unknown\n requestId?: string\n }\n\n const logObject: JsonLogObject = {\n level: options.logLevel,\n pid: process.pid,\n timestamp: Date.now(),\n message,\n }\n\n if (options.context) {\n logObject.context = options.context\n }\n\n if (options.errorStack) {\n logObject.stack = options.errorStack\n }\n if (this.options.requestId && this.requestId) {\n logObject.requestId = this.requestId\n }\n\n const formattedMessage =\n !this.options.colors && this.inspectOptions.compact === true\n ? JSON.stringify(logObject, this.stringifyReplacer)\n : inspect(logObject, this.inspectOptions)\n process[options.writeStreamType ?? 'stdout'].write(`${formattedMessage}\\n`)\n }\n\n protected formatPid(pid: number) {\n return `[${this.options.prefix}] ${pid} - `\n }\n\n protected formatContext(context: string): string {\n if (!context) {\n return ''\n }\n\n context = `[${context}] `\n return this.options.colors ? yellow(context) : context\n }\n\n protected formatMessage(\n logLevel: LogLevel,\n message: unknown,\n pidMessage: string,\n formattedLogLevel: string,\n contextMessage: string,\n timestampDiff: string,\n ) {\n const output = this.stringifyMessage(message, logLevel)\n pidMessage = this.colorize(pidMessage, logLevel)\n formattedLogLevel = this.colorize(formattedLogLevel, logLevel)\n return `${pidMessage}${this.getRequestId()}${this.getTimestamp()} ${formattedLogLevel} ${contextMessage}${output}${timestampDiff}\\n`\n }\n\n protected getRequestId() {\n if (this.options.requestId && this.requestId) {\n return `(${this.colorize(this.requestId, 'log')}) `\n }\n return ''\n }\n\n protected stringifyMessage(message: unknown, logLevel: LogLevel): string {\n if (isFunction(message)) {\n const messageAsStr = Function.prototype.toString.call(message)\n const isClass = messageAsStr.startsWith('class ')\n if (isClass) {\n // If the message is a class, we will display the class name.\n return this.stringifyMessage(message.name, logLevel)\n }\n // If the message is a non-class function, call it and re-resolve its value.\n return this.stringifyMessage(message(), logLevel)\n }\n\n if (typeof message === 'string') {\n return this.colorize(message, logLevel)\n }\n\n const outputText = inspect(message, this.inspectOptions)\n if (isPlainObject(message)) {\n return `Object(${Object.keys(message).length}) ${outputText}`\n }\n if (Array.isArray(message)) {\n return `Array(${message.length}) ${outputText}`\n }\n return outputText\n }\n\n protected colorize(message: string, logLevel: LogLevel) {\n if (!this.options.colors || this.options.json) {\n return message\n }\n const color = this.getColorByLogLevel(logLevel)\n return color(message)\n }\n\n protected printStackTrace(stack: string) {\n if (!stack || this.options.json) {\n return\n }\n process.stderr.write(`${stack}\\n`)\n }\n\n protected updateAndGetTimestampDiff(): string {\n const includeTimestamp =\n ConsoleLogger.lastTimestampAt && this.options?.timestamp\n const result = includeTimestamp\n ? this.formatTimestampDiff(Date.now() - ConsoleLogger.lastTimestampAt!)\n : ''\n ConsoleLogger.lastTimestampAt = Date.now()\n return result\n }\n\n protected formatTimestampDiff(timestampDiff: number) {\n const formattedDiff = ` +${timestampDiff}ms`\n return this.options.colors ? yellow(formattedDiff) : formattedDiff\n }\n\n protected getInspectOptions() {\n let breakLength = this.options.breakLength\n if (typeof breakLength === 'undefined') {\n breakLength = this.options.colors\n ? this.options.compact\n ? Infinity\n : undefined\n : this.options.compact === false\n ? undefined\n : Infinity // default breakLength to Infinity if inline is not set and colors is false\n }\n\n const inspectOptions: InspectOptions = {\n depth: this.options.depth ?? DEFAULT_DEPTH,\n sorted: this.options.sorted,\n showHidden: this.options.showHidden,\n compact: this.options.compact ?? (this.options.json ? true : false),\n colors: this.options.colors,\n breakLength,\n }\n\n if (this.options.maxArrayLength) {\n inspectOptions.maxArrayLength = this.options.maxArrayLength\n }\n if (this.options.maxStringLength) {\n inspectOptions.maxStringLength = this.options.maxStringLength\n }\n\n return inspectOptions\n }\n\n protected stringifyReplacer(key: string, value: unknown) {\n // Mimic util.inspect behavior for JSON logger with compact on and colors off\n if (typeof value === 'bigint') {\n return value.toString()\n }\n if (typeof value === 'symbol') {\n return value.toString()\n }\n\n if (\n value instanceof Map ||\n value instanceof Set ||\n value instanceof Error\n ) {\n return `${inspect(value, this.inspectOptions)}`\n }\n return value\n }\n\n private getContextAndMessagesToPrint(args: unknown[]) {\n if (args?.length <= 1) {\n return { messages: args, context: this.context }\n }\n const lastElement = args[args.length - 1]\n const isContext = isString(lastElement)\n if (!isContext) {\n return { messages: args, context: this.context }\n }\n return {\n context: lastElement,\n messages: args.slice(0, args.length - 1),\n }\n }\n\n private getContextAndStackAndMessagesToPrint(args: unknown[]) {\n if (args.length === 2) {\n return this.isStackFormat(args[1])\n ? {\n messages: [args[0]],\n stack: args[1] as string,\n context: this.context,\n }\n : {\n messages: [args[0]],\n context: args[1] as string,\n }\n }\n\n const { messages, context } = this.getContextAndMessagesToPrint(args)\n if (messages?.length <= 1) {\n return { messages, context }\n }\n const lastElement = messages[messages.length - 1]\n const isStack = isString(lastElement)\n // https://github.com/nestjs/nest/issues/11074#issuecomment-1421680060\n if (!isStack && !isUndefined(lastElement)) {\n return { messages, context }\n }\n return {\n stack: lastElement,\n messages: messages.slice(0, messages.length - 1),\n context,\n }\n }\n\n private isStackFormat(stack: unknown) {\n if (!isString(stack) && !isUndefined(stack)) {\n return false\n }\n\n return /^(.)+\\n\\s+at .+:\\d+:\\d+/.test(stack!)\n }\n\n private getColorByLogLevel(level: LogLevel) {\n switch (level) {\n case 'debug':\n return clc.magentaBright\n case 'warn':\n return clc.yellow\n case 'error':\n return clc.red\n case 'verbose':\n return clc.cyanBright\n case 'fatal':\n return clc.bold\n default:\n return clc.green\n }\n }\n}\n","import { Injectable } from '@navios/di'\n\nimport type { LogLevel } from './log-levels.mjs'\nimport type { LoggerService } from './logger-service.interface.mjs'\n\nimport { ConsoleLogger } from './console-logger.service.mjs'\nimport { isLogLevelEnabled, isObject } from './utils/index.mjs'\n\nconst DEFAULT_LOGGER = new ConsoleLogger()\n\nconst dateTimeFormatter = new Intl.DateTimeFormat(undefined, {\n year: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n day: '2-digit',\n month: '2-digit',\n})\n\n@Injectable()\nexport class LoggerInstance implements LoggerService {\n protected static staticInstanceRef?: LoggerService = DEFAULT_LOGGER\n protected static logLevels?: LogLevel[]\n\n protected localInstanceRef?: LoggerService\n\n constructor()\n constructor(context: string)\n constructor(context: string, options?: { timestamp?: boolean })\n constructor(\n protected context?: string,\n protected options: { timestamp?: boolean } = {},\n ) {}\n\n get localInstance(): LoggerService {\n if (LoggerInstance.staticInstanceRef === DEFAULT_LOGGER) {\n return this.registerLocalInstanceRef()\n } else if (LoggerInstance.staticInstanceRef instanceof LoggerInstance) {\n const prototype = Object.getPrototypeOf(LoggerInstance.staticInstanceRef)\n if (prototype.constructor === LoggerInstance) {\n return this.registerLocalInstanceRef()\n }\n }\n return LoggerInstance.staticInstanceRef!\n }\n\n /**\n * Write an 'error' level log.\n */\n error(message: any, stack?: string, context?: string): void\n error(message: any, ...optionalParams: [...any, string?, string?]): void\n error(message: any, ...optionalParams: any[]) {\n optionalParams = this.context\n ? (optionalParams.length ? optionalParams : [undefined]).concat(\n this.context,\n )\n : optionalParams\n\n this.localInstance?.error(message, ...optionalParams)\n }\n\n /**\n * Write a 'log' level log.\n */\n log(message: any, context?: string): void\n log(message: any, ...optionalParams: [...any, string?]): void\n log(message: any, ...optionalParams: any[]) {\n optionalParams = this.context\n ? optionalParams.concat(this.context)\n : optionalParams\n this.localInstance?.log(message, ...optionalParams)\n }\n\n /**\n * Write a 'warn' level log.\n */\n warn(message: any, context?: string): void\n warn(message: any, ...optionalParams: [...any, string?]): void\n warn(message: any, ...optionalParams: any[]) {\n optionalParams = this.context\n ? optionalParams.concat(this.context)\n : optionalParams\n this.localInstance?.warn(message, ...optionalParams)\n }\n\n /**\n * Write a 'debug' level log.\n */\n debug(message: any, context?: string): void\n debug(message: any, ...optionalParams: [...any, string?]): void\n debug(message: any, ...optionalParams: any[]) {\n optionalParams = this.context\n ? optionalParams.concat(this.context)\n : optionalParams\n this.localInstance?.debug?.(message, ...optionalParams)\n }\n\n /**\n * Write a 'verbose' level log.\n */\n verbose(message: any, context?: string): void\n verbose(message: any, ...optionalParams: [...any, string?]): void\n verbose(message: any, ...optionalParams: any[]) {\n optionalParams = this.context\n ? optionalParams.concat(this.context)\n : optionalParams\n this.localInstance?.verbose?.(message, ...optionalParams)\n }\n\n /**\n * Write a 'fatal' level log.\n */\n fatal(message: any, context?: string): void\n fatal(message: any, ...optionalParams: [...any, string?]): void\n fatal(message: any, ...optionalParams: any[]) {\n optionalParams = this.context\n ? optionalParams.concat(this.context)\n : optionalParams\n this.localInstance?.fatal?.(message, ...optionalParams)\n }\n\n /**\n * Write an 'error' level log.\n */\n static error(message: any, stackOrContext?: string): void\n static error(message: any, context?: string): void\n static error(message: any, stack?: string, context?: string): void\n static error(\n message: any,\n ...optionalParams: [...any, string?, string?]\n ): void\n static error(message: any, ...optionalParams: any[]) {\n this.staticInstanceRef?.error(message, ...optionalParams)\n }\n\n /**\n * Write a 'log' level log.\n */\n static log(message: any, context?: string): void\n static log(message: any, ...optionalParams: [...any, string?]): void\n static log(message: any, ...optionalParams: any[]) {\n this.staticInstanceRef?.log(message, ...optionalParams)\n }\n\n /**\n * Write a 'warn' level log.\n */\n static warn(message: any, context?: string): void\n static warn(message: any, ...optionalParams: [...any, string?]): void\n static warn(message: any, ...optionalParams: any[]) {\n this.staticInstanceRef?.warn(message, ...optionalParams)\n }\n\n /**\n * Write a 'debug' level log, if the configured level allows for it.\n * Prints to `stdout` with newline.\n */\n static debug(message: any, context?: string): void\n static debug(message: any, ...optionalParams: [...any, string?]): void\n static debug(message: any, ...optionalParams: any[]) {\n this.staticInstanceRef?.debug?.(message, ...optionalParams)\n }\n\n /**\n * Write a 'verbose' level log.\n */\n static verbose(message: any, context?: string): void\n static verbose(message: any, ...optionalParams: [...any, string?]): void\n static verbose(message: any, ...optionalParams: any[]) {\n this.staticInstanceRef?.verbose?.(message, ...optionalParams)\n }\n\n /**\n * Write a 'fatal' level log.\n */\n static fatal(message: any, context?: string): void\n static fatal(message: any, ...optionalParams: [...any, string?]): void\n static fatal(message: any, ...optionalParams: any[]) {\n this.staticInstanceRef?.fatal?.(message, ...optionalParams)\n }\n\n static getTimestamp() {\n return dateTimeFormatter.format(Date.now())\n }\n\n static overrideLogger(logger: LoggerService | LogLevel[] | boolean) {\n if (Array.isArray(logger)) {\n LoggerInstance.logLevels = logger\n return this.staticInstanceRef?.setLogLevels?.(logger)\n }\n if (isObject(logger)) {\n this.staticInstanceRef = logger as LoggerService\n } else {\n this.staticInstanceRef = undefined\n }\n }\n\n static isLevelEnabled(level: LogLevel): boolean {\n const logLevels = LoggerInstance.logLevels\n return isLogLevelEnabled(level, logLevels)\n }\n\n private registerLocalInstanceRef() {\n if (this.localInstanceRef) {\n return this.localInstanceRef\n }\n this.localInstanceRef = new ConsoleLogger(this.context!, {\n timestamp: this.options?.timestamp,\n logLevels: LoggerInstance.logLevels,\n })\n return this.localInstanceRef\n }\n}\n","import { Injectable, InjectableType, InjectionToken } from '@navios/di'\n\nimport { z } from 'zod/v4'\n\nimport type { LoggerService } from './logger-service.interface.mjs'\n\nimport { LoggerInstance } from './logger.service.mjs'\n\nexport const LoggerInjectionToken = 'LoggerInjectionToken'\n\nexport const LoggerOptions = z\n .object({\n context: z.string().optional(),\n options: z\n .object({\n timestamp: z.boolean().optional(),\n })\n .optional(),\n })\n .optional()\n\nexport const Logger = InjectionToken.create<\n LoggerInstance,\n typeof LoggerOptions\n>(LoggerInjectionToken, LoggerOptions)\n\n@Injectable({\n type: InjectableType.Factory,\n token: Logger,\n})\nexport class LoggerFactory {\n create(ctx: any, args: z.infer<typeof LoggerOptions>) {\n // @ts-expect-error We don't need to support this in the current version\n return new LoggerInstance(args?.context, args?.options)\n }\n}\n","import type { LoggerService } from './logger-service.interface.mjs'\n\nimport { LoggerInstance } from './logger.service.mjs'\n\nexport class PinoWrapper {\n constructor(protected readonly logger: LoggerService) {}\n\n fatal(message: any, ...optionalParams: any[]) {\n if (this.logger.fatal === undefined) {\n return this.error(message, ...optionalParams)\n }\n this.logger.fatal(message, ...optionalParams)\n }\n\n error(message: any, ...optionalParams: any[]) {\n this.logger.error(message, ...optionalParams)\n }\n\n warn(message: any, ...optionalParams: any[]) {\n this.logger.warn(message, ...optionalParams)\n }\n\n info() {\n // We don't want to populate the logs with the original fastify logs\n // this.logger.debug?.('INFO', message, ...optionalParams)\n }\n\n debug(message: any, ...optionalParams: any[]) {\n this.logger.debug?.(message, ...optionalParams)\n }\n\n trace(message: any, ...optionalParams: any[]) {\n this.logger.verbose?.(message, ...optionalParams)\n }\n\n silent() {\n // noop\n }\n\n child(options: any) {\n const keys = Object.keys(options)\n // @ts-expect-error We don't need to support this in the current version\n let newContext = this.logger['context'] ?? ''\n if (keys.length > 1) {\n // @ts-expect-error We don't need to support this in the current version\n newContext = `${this.logger['context'] ?? ''}:${JSON.stringify(options)}`\n }\n return new PinoWrapper(\n // @ts-expect-error We don't need to support this in the current version\n new LoggerInstance(newContext, this.logger['options']),\n )\n }\n\n get level(): any {\n if ('level' in this.logger && this.logger.level) {\n return this.logger.level\n }\n const levels = LoggerInstance['logLevels']\n if (levels) {\n return levels.find((level) => level !== 'verbose')\n }\n return 'warn'\n }\n}\n","import { NaviosException } from '@navios/builder'\nimport { Injectable, InjectionToken, syncInject } from '@navios/di'\n\nimport { z } from 'zod/v4'\n\nimport type { ConfigServiceInterface as IConfigService } from './config-service.interface.mjs'\nimport type { Path, PathValue } from './types.mjs'\n\nimport { Logger } from '../logger/index.mjs'\n\nexport const ConfigServiceOptionsSchema = z.record(z.string(), z.unknown())\nexport type ConfigServiceOptions = z.infer<typeof ConfigServiceOptionsSchema>\n\nexport const ConfigServiceToken = InjectionToken.create<\n IConfigService,\n typeof ConfigServiceOptionsSchema\n>(Symbol.for('ConfigService'), ConfigServiceOptionsSchema)\n\n@Injectable({\n token: ConfigServiceToken,\n})\nexport class ConfigService<\n Config extends ConfigServiceOptions = Record<string, unknown>,\n> implements IConfigService<Config>\n{\n private readonly logger = syncInject(Logger, {\n context: ConfigService.name,\n })\n\n constructor(private config: Config = {} as Config) {}\n\n getConfig(): Config {\n return this.config\n }\n\n get<Key extends Path<Config>>(key: Key): PathValue<Config, Key> | null {\n try {\n const parts = String(key).split('.')\n let value: any = this.config\n\n for (const part of parts) {\n if (\n value === null ||\n value === undefined ||\n typeof value !== 'object'\n ) {\n return null\n }\n value = value[part]\n }\n\n return (value as PathValue<Config, Key>) ?? null\n } catch (error) {\n this.logger.debug?.(\n `Failed to get config value for key ${String(key)}`,\n error,\n )\n return null\n }\n }\n\n getOrDefault<Key extends Path<Config>>(\n key: Key,\n defaultValue: PathValue<Config, Key>,\n ): PathValue<Config, Key> {\n const value = this.get(key)\n return value !== null ? value : defaultValue\n }\n\n getOrThrow<Key extends Path<Config>>(\n key: Key,\n errorMessage?: string,\n ): PathValue<Config, Key> {\n const value = this.get(key)\n\n if (value === null) {\n const message =\n errorMessage ||\n `Configuration value for key \"${String(key)}\" is not defined`\n this.logger.error(message)\n throw new NaviosException(message)\n }\n\n return value\n }\n}\n","import { env } from 'node:process'\n\nimport { FactoryInjectionToken, InjectionToken } from '@navios/di'\n\nimport { z } from 'zod/v4'\n\nimport type { ConfigServiceOptions } from './config.service.mjs'\n\nimport {\n ConfigService,\n ConfigServiceOptionsSchema,\n ConfigServiceToken,\n} from './config.service.mjs'\n\nexport const ConfigProviderOptions = z.object({\n load: z.function({ output: ConfigServiceOptionsSchema }),\n})\n\nexport function provideConfig<ConfigMap extends ConfigServiceOptions>(\n options: z.input<typeof ConfigProviderOptions>,\n): FactoryInjectionToken<\n ConfigService<ConfigMap>,\n typeof ConfigServiceOptionsSchema\n> {\n return InjectionToken.factory(ConfigServiceToken, async () => options.load())\n}\n\nexport const EnvConfigProvider = InjectionToken.bound<\n ConfigService<Record<string, string>>,\n typeof ConfigServiceOptionsSchema\n>(ConfigServiceToken, {\n ...env,\n})\n","import type { ClassType } from '@navios/di'\n\nimport { Injectable, InjectableScope, InjectionToken } from '@navios/di'\n\nimport { getControllerMetadata } from '../metadata/index.mjs'\n\nexport interface ControllerOptions {\n guards?: ClassType[] | Set<ClassType>\n}\nexport function Controller({ guards }: ControllerOptions = {}) {\n return function (target: ClassType, context: ClassDecoratorContext) {\n if (context.kind !== 'class') {\n throw new Error(\n '[Navios] @Controller decorator can only be used on classes.',\n )\n }\n const token = InjectionToken.create(target)\n if (context.metadata) {\n const controllerMetadata = getControllerMetadata(target, context)\n if (guards) {\n for (const guard of Array.from(guards).reverse()) {\n controllerMetadata.guards.add(guard)\n }\n }\n }\n return Injectable({\n token,\n scope: InjectableScope.Instance,\n })(target, context)\n }\n}\n","import type {\n BaseEndpointConfig,\n EndpointFunctionArgs,\n HttpMethod,\n Util_FlatObject,\n} from '@navios/builder'\nimport type { z, ZodObject, ZodType } from 'zod/v4'\n\nimport { ZodDiscriminatedUnion } from 'zod/v4'\n\nimport { EndpointAdapterToken } from '../adapters/index.mjs'\nimport { getEndpointMetadata } from '../metadata/index.mjs'\n\nexport type EndpointParams<\n EndpointDeclaration extends {\n config: BaseEndpointConfig<any, any, any, any, any>\n },\n Url extends string = EndpointDeclaration['config']['url'],\n QuerySchema = EndpointDeclaration['config']['querySchema'],\n> = QuerySchema extends ZodType\n ? EndpointDeclaration['config']['requestSchema'] extends ZodType\n ? Util_FlatObject<\n EndpointFunctionArgs<\n Url,\n QuerySchema,\n EndpointDeclaration['config']['requestSchema'],\n true\n >\n >\n : Util_FlatObject<EndpointFunctionArgs<Url, QuerySchema, undefined, true>>\n : EndpointDeclaration['config']['requestSchema'] extends ZodType\n ? Util_FlatObject<\n EndpointFunctionArgs<\n Url,\n undefined,\n EndpointDeclaration['config']['requestSchema'],\n true\n >\n >\n : Util_FlatObject<EndpointFunctionArgs<Url, undefined, undefined, true>>\n\nexport type EndpointResult<\n EndpointDeclaration extends {\n config: BaseEndpointConfig<any, any, any, any, any>\n },\n> =\n EndpointDeclaration['config']['responseSchema'] extends ZodDiscriminatedUnion<\n infer Options\n >\n ? Promise<z.input<Options[number]>>\n : Promise<z.input<EndpointDeclaration['config']['responseSchema']>>\n\nexport function Endpoint<\n Method extends HttpMethod = HttpMethod,\n Url extends string = string,\n QuerySchema = undefined,\n ResponseSchema extends ZodType = ZodType,\n RequestSchema = ZodType,\n>(endpoint: {\n config: BaseEndpointConfig<\n Method,\n Url,\n QuerySchema,\n ResponseSchema,\n RequestSchema\n >\n}) {\n return (\n target: (\n params: QuerySchema extends ZodType\n ? RequestSchema extends ZodType\n ? EndpointFunctionArgs<Url, QuerySchema, RequestSchema, true>\n : EndpointFunctionArgs<Url, QuerySchema, undefined, true>\n : RequestSchema extends ZodType\n ? EndpointFunctionArgs<Url, undefined, RequestSchema, true>\n : EndpointFunctionArgs<Url, undefined, undefined, true>,\n ) => Promise<z.input<ResponseSchema>>,\n context: ClassMethodDecoratorContext,\n ) => {\n if (context.kind !== 'method') {\n throw new Error(\n '[Navios] Endpoint decorator can only be used on methods.',\n )\n }\n const config = endpoint.config\n if (context.metadata) {\n let endpointMetadata = getEndpointMetadata<BaseEndpointConfig>(\n target,\n context,\n )\n if (endpointMetadata.config && endpointMetadata.config.url) {\n throw new Error(\n `[Navios] Endpoint ${config.method} ${config.url} already exists. Please use a different method or url.`,\n )\n }\n // @ts-expect-error We don't need to set correctly in the metadata\n endpointMetadata.config = config\n endpointMetadata.adapterToken = EndpointAdapterToken\n endpointMetadata.classMethod = target.name\n endpointMetadata.httpMethod = config.method\n endpointMetadata.url = config.url\n }\n return target\n }\n}\n","import type { HttpHeader } from 'fastify/types/utils.js'\n\nimport { getEndpointMetadata } from '../metadata/index.mjs'\n\nexport function Header(name: HttpHeader, value: string | number | string[]) {\n return <T extends Function>(\n target: T,\n context: ClassMethodDecoratorContext,\n ) => {\n if (context.kind !== 'method') {\n throw new Error('[Navios] Header decorator can only be used on methods.')\n }\n const metadata = getEndpointMetadata(target, context)\n\n metadata.headers[name] = value\n\n return target\n }\n}\n","import { getEndpointMetadata } from '../metadata/index.mjs'\n\nexport function HttpCode(code: number) {\n return <T extends Function>(\n target: T,\n context: ClassMethodDecoratorContext,\n ) => {\n if (context.kind !== 'method') {\n throw new Error(\n '[Navios] HttpCode decorator can only be used on methods.',\n )\n }\n const metadata = getEndpointMetadata(target, context)\n metadata.successStatusCode = code\n\n return target\n }\n}\n","import type { ClassType } from '@navios/di'\n\nimport { Injectable, InjectableScope, InjectionToken } from '@navios/di'\n\nimport { getModuleMetadata } from '../metadata/index.mjs'\n\nexport interface ModuleOptions {\n controllers?: ClassType[] | Set<ClassType>\n imports?: ClassType[] | Set<ClassType>\n guards?: ClassType[] | Set<ClassType>\n}\n\nexport function Module(\n { controllers = [], imports = [], guards = [] }: ModuleOptions = {\n controllers: [],\n imports: [],\n guards: [],\n },\n) {\n return (target: ClassType, context: ClassDecoratorContext) => {\n if (context.kind !== 'class') {\n throw new Error('[Navios] @Module decorator can only be used on classes.')\n }\n // Register the module in the service locator\n const token = InjectionToken.create(target)\n const moduleMetadata = getModuleMetadata(target, context)\n for (const controller of controllers) {\n moduleMetadata.controllers.add(controller)\n }\n for (const importedModule of imports) {\n moduleMetadata.imports.add(importedModule)\n }\n for (const guard of Array.from(guards).reverse()) {\n moduleMetadata.guards.add(guard)\n }\n\n return Injectable({\n token,\n scope: InjectableScope.Singleton,\n })(target, context)\n }\n}\n","import type {\n BaseEndpointConfig,\n EndpointFunctionArgs,\n HttpMethod,\n Util_FlatObject,\n} from '@navios/builder'\nimport type { z, ZodObject, ZodType } from 'zod/v4'\n\nimport { ZodDiscriminatedUnion } from 'zod/v4'\n\nimport { MultipartAdapterToken } from '../adapters/index.mjs'\nimport { getEndpointMetadata } from '../metadata/index.mjs'\n\nexport type MultipartParams<\n EndpointDeclaration extends {\n config: BaseEndpointConfig<any, any, any, any, any>\n },\n Url extends string = EndpointDeclaration['config']['url'],\n QuerySchema = EndpointDeclaration['config']['querySchema'],\n> = QuerySchema extends ZodObject\n ? EndpointDeclaration['config']['requestSchema'] extends ZodType\n ? Util_FlatObject<\n EndpointFunctionArgs<\n Url,\n QuerySchema,\n EndpointDeclaration['config']['requestSchema'],\n true\n >\n >\n : Util_FlatObject<EndpointFunctionArgs<Url, QuerySchema, undefined, true>>\n : EndpointDeclaration['config']['requestSchema'] extends ZodType\n ? Util_FlatObject<\n EndpointFunctionArgs<\n Url,\n undefined,\n EndpointDeclaration['config']['requestSchema'],\n true\n >\n >\n : Util_FlatObject<EndpointFunctionArgs<Url, undefined, undefined, true>>\n\nexport type MultipartResult<\n EndpointDeclaration extends {\n config: BaseEndpointConfig<any, any, any, any, any>\n },\n> =\n EndpointDeclaration['config']['responseSchema'] extends ZodDiscriminatedUnion<\n any,\n infer Options\n >\n ? Promise<z.input<Options[number]>>\n : Promise<z.input<EndpointDeclaration['config']['responseSchema']>>\n\nexport function Multipart<\n Method extends HttpMethod = HttpMethod,\n Url extends string = string,\n QuerySchema = undefined,\n ResponseSchema extends ZodType = ZodType,\n RequestSchema = ZodType,\n>(endpoint: {\n config: BaseEndpointConfig<\n Method,\n Url,\n QuerySchema,\n ResponseSchema,\n RequestSchema\n >\n}) {\n return (\n target: (\n params: QuerySchema extends ZodObject\n ? RequestSchema extends ZodType\n ? EndpointFunctionArgs<Url, QuerySchema, RequestSchema>\n : EndpointFunctionArgs<Url, QuerySchema, undefined>\n : RequestSchema extends ZodType\n ? EndpointFunctionArgs<Url, undefined, RequestSchema>\n : EndpointFunctionArgs<Url, undefined, undefined>,\n ) => Promise<z.input<ResponseSchema>>,\n context: ClassMethodDecoratorContext,\n ) => {\n if (typeof target !== 'function') {\n throw new Error(\n '[Navios] Endpoint decorator can only be used on functions.',\n )\n }\n if (context.kind !== 'method') {\n throw new Error(\n '[Navios] Endpoint decorator can only be used on methods.',\n )\n }\n const config = endpoint.config\n if (context.metadata) {\n let endpointMetadata = getEndpointMetadata<BaseEndpointConfig>(\n target,\n context,\n )\n if (endpointMetadata.config && endpointMetadata.config.url) {\n throw new Error(\n `[Navios] Endpoint ${config.method} ${config.url} already exists. Please use a different method or url.`,\n )\n }\n // @ts-expect-error We don't need to set correctly in the metadata\n endpointMetadata.config = config\n endpointMetadata.adapterToken = MultipartAdapterToken\n endpointMetadata.classMethod = target.name\n endpointMetadata.httpMethod = config.method\n endpointMetadata.url = config.url\n }\n return target\n }\n}\n","import type {\n BaseStreamConfig,\n EndpointFunctionArgs,\n HttpMethod,\n Util_FlatObject,\n} from '@navios/builder'\nimport type { FastifyReply } from 'fastify'\nimport type { ZodObject, ZodType } from 'zod/v4'\n\nimport { StreamAdapterToken } from '../adapters/index.mjs'\nimport { getEndpointMetadata } from '../metadata/index.mjs'\n\nexport type StreamParams<\n EndpointDeclaration extends {\n config: BaseStreamConfig<any, any, any, any>\n },\n Url extends string = EndpointDeclaration['config']['url'],\n QuerySchema = EndpointDeclaration['config']['querySchema'],\n> = QuerySchema extends ZodObject\n ? EndpointDeclaration['config']['requestSchema'] extends ZodType\n ? Util_FlatObject<\n EndpointFunctionArgs<\n Url,\n QuerySchema,\n EndpointDeclaration['config']['requestSchema'],\n true\n >\n >\n : Util_FlatObject<EndpointFunctionArgs<Url, QuerySchema, undefined, true>>\n : EndpointDeclaration['config']['requestSchema'] extends ZodType\n ? Util_FlatObject<\n EndpointFunctionArgs<\n Url,\n undefined,\n EndpointDeclaration['config']['requestSchema'],\n true\n >\n >\n : Util_FlatObject<EndpointFunctionArgs<Url, undefined, undefined, true>>\n\nexport function Stream<\n Method extends HttpMethod = HttpMethod,\n Url extends string = string,\n QuerySchema = undefined,\n RequestSchema = ZodType,\n>(endpoint: {\n config: BaseStreamConfig<Method, Url, QuerySchema, RequestSchema>\n}) {\n return (\n target: (\n params: QuerySchema extends ZodObject\n ? RequestSchema extends ZodType\n ? EndpointFunctionArgs<Url, QuerySchema, RequestSchema>\n : EndpointFunctionArgs<Url, QuerySchema, undefined>\n : RequestSchema extends ZodType\n ? EndpointFunctionArgs<Url, undefined, RequestSchema>\n : EndpointFunctionArgs<Url, undefined, undefined>,\n reply: FastifyReply,\n ) => Promise<void>,\n context: ClassMethodDecoratorContext,\n ) => {\n if (typeof target !== 'function') {\n throw new Error(\n '[Navios] Endpoint decorator can only be used on functions.',\n )\n }\n if (context.kind !== 'method') {\n throw new Error(\n '[Navios] Endpoint decorator can only be used on methods.',\n )\n }\n const config = endpoint.config\n if (context.metadata) {\n let endpointMetadata = getEndpointMetadata<BaseStreamConfig>(\n target,\n context,\n )\n if (endpointMetadata.config && endpointMetadata.config.url) {\n throw new Error(\n `[Navios] Endpoint ${config.method} ${config.url} already exists. Please use a different method or url.`,\n )\n }\n // @ts-expect-error We don't need to set correctly in the metadata\n endpointMetadata.config = config\n endpointMetadata.adapterToken = StreamAdapterToken\n endpointMetadata.classMethod = target.name\n endpointMetadata.httpMethod = config.method\n endpointMetadata.url = config.url\n }\n return target\n }\n}\n","import type {\n ClassType,\n ClassTypeWithInstance,\n InjectionToken,\n} from '@navios/di'\n\nimport type { CanActivate } from '../interfaces/index.mjs'\n\nimport {\n getControllerMetadata,\n getEndpointMetadata,\n} from '../metadata/index.mjs'\n\nexport function UseGuards(\n ...guards: (\n | ClassTypeWithInstance<CanActivate>\n | InjectionToken<CanActivate, undefined>\n )[]\n) {\n return function <T extends Function>(\n target: T,\n context: ClassMethodDecoratorContext | ClassDecoratorContext,\n ): T {\n if (context.kind === 'class') {\n const controllerMetadata = getControllerMetadata(\n target as unknown as ClassType,\n context,\n )\n for (const guard of guards.reverse()) {\n controllerMetadata.guards.add(guard)\n }\n } else if (context.kind === 'method') {\n const endpointMetadata = getEndpointMetadata(target, context)\n for (const guard of guards.reverse()) {\n endpointMetadata.guards.add(guard)\n }\n } else {\n throw new Error(\n '[Navios] @UseGuards decorator can only be used on classes or methods.',\n )\n }\n return target\n }\n}\n","import type { ClassType } from '@navios/di'\nimport type { z, ZodType } from 'zod/v4'\n\nimport type {\n ControllerMetadata,\n HandlerMetadata,\n ModuleMetadata,\n} from './metadata/index.mjs'\n\nimport {\n getControllerMetadata,\n getEndpointMetadata,\n getModuleMetadata,\n hasControllerMetadata,\n hasModuleMetadata,\n} from './metadata/index.mjs'\n\nexport type ClassAttribute = (() => <T>(\n target: T,\n context: ClassDecoratorContext | ClassMethodDecoratorContext,\n) => T) & {\n token: symbol\n}\nexport type ClassSchemaAttribute<T extends ZodType> = ((\n value: z.input<T>,\n) => <T>(\n target: T,\n context: ClassDecoratorContext | ClassMethodDecoratorContext,\n) => T) & {\n token: symbol\n schema: ZodType\n}\n\nexport class AttributeFactory {\n static createAttribute(token: symbol): ClassAttribute\n static createAttribute<T extends ZodType>(\n token: symbol,\n schema: T,\n ): ClassSchemaAttribute<T>\n static createAttribute(token: symbol, schema?: ZodType) {\n const res =\n (value?: unknown) =>\n (\n target: any,\n context: ClassDecoratorContext | ClassMethodDecoratorContext,\n ) => {\n if (context.kind !== 'class' && context.kind !== 'method') {\n throw new Error(\n '[Navios] Attribute can only be applied to classes or methods',\n )\n }\n const isController =\n context.kind === 'class' && hasControllerMetadata(target as ClassType)\n const isModule =\n context.kind === 'class' && hasModuleMetadata(target as ClassType)\n if (context.kind === 'class' && !isController && !isModule) {\n throw new Error(\n '[Navios] Attribute can only be applied to classes with @Controller or @Module decorators',\n )\n }\n let metadata =\n context.kind === 'class'\n ? isController\n ? getControllerMetadata(target as any, context)\n : getModuleMetadata(target as any, context)\n : getEndpointMetadata(target, context)\n if (schema) {\n const validatedValue = schema.safeParse(value)\n if (!validatedValue.success) {\n throw new Error(\n `[Navios] Invalid value for attribute ${token.toString()}: ${validatedValue.error}`,\n )\n }\n metadata.customAttributes.set(token, validatedValue.data)\n } else {\n metadata.customAttributes.set(token, true)\n }\n return target\n }\n res.token = token\n if (schema) {\n res.schema = schema\n }\n return res\n }\n\n static get(\n attribute: ClassAttribute,\n target: ModuleMetadata | ControllerMetadata | HandlerMetadata<any>,\n ): true | null\n static get<T extends ZodType>(\n attribute: ClassSchemaAttribute<T>,\n target: ModuleMetadata | ControllerMetadata | HandlerMetadata<any>,\n ): z.output<T> | null\n static get(\n attribute: ClassAttribute | ClassSchemaAttribute<any>,\n target: ModuleMetadata | ControllerMetadata | HandlerMetadata<any>,\n ) {\n return target.customAttributes.get(attribute.token) ?? null\n }\n\n static getAll(\n attribute: ClassAttribute,\n target: ModuleMetadata | ControllerMetadata | HandlerMetadata<any>,\n ): Array<true> | null\n static getAll<T extends ZodType>(\n attribute: ClassSchemaAttribute<T>,\n target: ModuleMetadata | ControllerMetadata | HandlerMetadata<any>,\n ): Array<z.output<T>> | null\n static getAll(\n attribute: ClassAttribute | ClassSchemaAttribute<any>,\n target: ModuleMetadata | ControllerMetadata | HandlerMetadata<any>,\n ) {\n const values = Array.from(target.customAttributes.entries())\n .filter(([key]) => key === attribute.token)\n .map(([, value]) => value)\n return values.length > 0 ? values : null\n }\n\n static getLast(\n attribute: ClassAttribute,\n target: (ModuleMetadata | ControllerMetadata | HandlerMetadata<any>)[],\n ): true | null\n static getLast<T extends ZodType>(\n attribute: ClassSchemaAttribute<T>,\n target: (ModuleMetadata | ControllerMetadata | HandlerMetadata<any>)[],\n ): z.output<T> | null\n static getLast(\n attribute: ClassAttribute | ClassSchemaAttribute<any>,\n target: (ModuleMetadata | ControllerMetadata | HandlerMetadata<any>)[],\n ) {\n for (let i = target.length - 1; i >= 0; i--) {\n const value = target[i].customAttributes.get(attribute.token)\n if (value) {\n return value\n }\n }\n return null\n }\n\n static has(\n attribute: ClassAttribute,\n target: ModuleMetadata | ControllerMetadata | HandlerMetadata<any>,\n ): boolean\n static has<T extends ZodType>(\n attribute: ClassSchemaAttribute<T>,\n target: ModuleMetadata | ControllerMetadata | HandlerMetadata<any>,\n ): boolean\n static has(\n attribute: ClassAttribute | ClassSchemaAttribute<any>,\n target: ModuleMetadata | ControllerMetadata | HandlerMetadata<any>,\n ) {\n return target.customAttributes.has(attribute.token)\n }\n}\n","import type { FastifyCorsOptions } from '@fastify/cors'\nimport type { FastifyMultipartOptions } from '@fastify/multipart'\nimport type { ClassTypeWithInstance } from '@navios/di'\nimport type {\n FastifyInstance,\n FastifyListenOptions,\n FastifyServerOptions,\n} from 'fastify'\n\nimport {\n getGlobalServiceLocator,\n inject,\n Injectable,\n syncInject,\n} from '@navios/di'\n\nimport cors from '@fastify/cors'\nimport multipart from '@fastify/multipart'\nimport { fastify } from 'fastify'\nimport {\n serializerCompiler,\n validatorCompiler,\n} from 'fastify-type-provider-zod'\n\nimport type { NaviosModule } from './interfaces/index.mjs'\nimport type { LoggerService, LogLevel } from './logger/index.mjs'\n\nimport { HttpException } from './exceptions/index.mjs'\nimport { Logger, PinoWrapper } from './logger/index.mjs'\nimport {\n ControllerAdapterService,\n ModuleLoaderService,\n} from './services/index.mjs'\nimport { Application } from './tokens/index.mjs'\n\nexport interface NaviosApplicationContextOptions {\n /**\n * Specifies the logger to use. Pass `false` to turn off logging.\n */\n logger?: LoggerService | LogLevel[] | false\n}\n\nexport interface NaviosApplicationOptions\n extends Omit<FastifyServerOptions, 'logger'>,\n NaviosApplicationContextOptions {}\n\n@Injectable()\nexport class NaviosApplication {\n private moduleLoader = syncInject(ModuleLoaderService)\n private controllerAdapter = syncInject(ControllerAdapterService)\n private logger = syncInject(Logger, {\n context: NaviosApplication.name,\n })\n private server: FastifyInstance | null = null\n private corsOptions: FastifyCorsOptions | null = null\n private multipartOptions: FastifyMultipartOptions | true | null = null\n private globalPrefix: string | null = null\n\n private appModule: ClassTypeWithInstance<NaviosModule> | null = null\n private options: NaviosApplicationOptions = {}\n\n isInitialized = false\n\n setup(\n appModule: ClassTypeWithInstance<NaviosModule>,\n options: NaviosApplicationOptions = {},\n ) {\n this.appModule = appModule\n this.options = options\n }\n\n async init() {\n if (!this.appModule) {\n throw new Error('App module is not set. Call setAppModule() first.')\n }\n await this.moduleLoader.loadModules(this.appModule)\n this.server = await this.getFastifyInstance(this.options)\n this.configureFastifyInstance(this.server)\n getGlobalServiceLocator().storeInstance(this.server, Application)\n // Add schema validator and serializer\n this.server.setValidatorCompiler(validatorCompiler)\n this.server.setSerializerCompiler(serializerCompiler)\n\n if (this.corsOptions) {\n await this.server.register(cors, this.corsOptions)\n }\n\n if (this.multipartOptions) {\n await this.configureMultipart(this.server, this.multipartOptions)\n }\n\n await this.initModules()\n await this.server.ready()\n\n this.isInitialized = true\n this.logger.debug('Navios application initialized')\n }\n\n private async getFastifyInstance(rawOptions: NaviosApplicationOptions) {\n const { logger, ...options } = rawOptions\n if (logger) {\n const fastifyOptions = options as FastifyServerOptions\n if (typeof logger === 'boolean') {\n if (!logger) {\n fastifyOptions.logger = false\n }\n } else {\n fastifyOptions.loggerInstance = new PinoWrapper(\n await inject(Logger, {\n context: 'FastifyAdapter',\n }),\n )\n }\n return fastify(fastifyOptions)\n } else {\n return fastify({\n ...options,\n loggerInstance: new PinoWrapper(\n await inject(Logger, {\n context: 'FastifyAdapter',\n }),\n ),\n } as FastifyServerOptions)\n }\n }\n\n private configureFastifyInstance(fastifyInstance: FastifyInstance) {\n fastifyInstance.setErrorHandler((error, request, reply) => {\n if (error instanceof HttpException) {\n return reply.status(error.statusCode).send(error.response)\n } else {\n const statusCode = error.statusCode || 500\n const message = error.message || 'Internal Server Error'\n const response = {\n statusCode,\n message,\n error: error.name || 'InternalServerError',\n }\n this.logger.error(\n `Error occurred: ${error.message} on ${request.url}`,\n error,\n )\n return reply.status(statusCode).send(response)\n }\n })\n\n fastifyInstance.setNotFoundHandler((req, reply) => {\n const response = {\n statusCode: 404,\n message: 'Not Found',\n error: 'NotFound',\n }\n this.logger.error(`Route not found: [${req.method}] ${req.url}`)\n return reply.status(404).send(response)\n })\n }\n\n async configureMultipart(\n server: FastifyInstance,\n options: FastifyMultipartOptions | true,\n ): Promise<void> {\n if (options) {\n await server.register(\n multipart,\n typeof options === 'object' ? options : {},\n )\n }\n }\n\n private async initModules() {\n const modules = this.moduleLoader.getAllModules()\n const promises: PromiseLike<any>[] = []\n for (const [moduleName, moduleMetadata] of modules) {\n if (\n !moduleMetadata.controllers ||\n moduleMetadata.controllers.size === 0\n ) {\n continue\n }\n promises.push(\n this.server!.register(\n async (instance, opts) => {\n for (const controller of moduleMetadata.controllers) {\n await this.controllerAdapter.setupController(\n controller,\n instance,\n moduleMetadata,\n )\n }\n },\n {\n prefix: this.globalPrefix ?? '',\n },\n ),\n )\n }\n\n await Promise.all(promises)\n }\n\n enableCors(options: FastifyCorsOptions) {\n this.corsOptions = options\n }\n\n enableMultipart(options: FastifyMultipartOptions) {\n this.multipartOptions = options\n }\n\n setGlobalPrefix(prefix: string) {\n this.globalPrefix = prefix\n }\n\n getServer(): FastifyInstance {\n if (!this.server) {\n throw new Error('Server is not initialized. Call init() first.')\n }\n return this.server\n }\n\n async listen(options: FastifyListenOptions) {\n if (!this.server) {\n throw new Error('Server is not initialized. Call init() first.')\n }\n const res = await this.server.listen(options)\n this.logger.debug(`Navios is listening on ${res}`)\n }\n\n async dispose() {\n if (this.server) {\n await this.server.close()\n this.server = null\n }\n if (this.moduleLoader) {\n this.moduleLoader.dispose()\n }\n }\n\n async close() {\n await this.dispose()\n }\n}\n","import type { ClassTypeWithInstance } from '@navios/di'\n\nimport { inject } from '@navios/di'\n\nimport type { NaviosModule } from './interfaces/index.mjs'\nimport type {\n NaviosApplicationContextOptions,\n NaviosApplicationOptions,\n} from './navios.application.mjs'\n\nimport { isNil, LoggerInstance } from './logger/index.mjs'\nimport { NaviosApplication } from './navios.application.mjs'\n\nexport class NaviosFactory {\n static async create(\n appModule: ClassTypeWithInstance<NaviosModule>,\n options: NaviosApplicationOptions = {},\n ) {\n const app = await inject(NaviosApplication)\n this.registerLoggerConfiguration(options)\n app.setup(appModule, options)\n return app\n }\n\n private static registerLoggerConfiguration(\n options: NaviosApplicationContextOptions,\n ) {\n if (!options) {\n return\n }\n const { logger } = options\n if ((logger as boolean) !== true && !isNil(logger)) {\n LoggerInstance.overrideLogger(logger)\n }\n }\n}\n"]}
|