@navios/core 0.5.0 → 0.5.1
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/docs/modules.md +126 -0
- package/docs/services.md +2 -3
- package/lib/_tsup-dts-rollup.d.mts +15 -9
- package/lib/_tsup-dts-rollup.d.ts +15 -9
- package/lib/index.d.mts +6 -4
- package/lib/index.d.ts +6 -4
- package/lib/index.js.map +1 -1
- package/lib/index.mjs.map +1 -1
- package/package.json +5 -6
- package/src/decorators/multipart.decorator.mts +0 -1
package/lib/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../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/logger/logger.tokens.mts","../src/logger/console-logger.service.mts","../src/logger/logger.service.mts","../src/config/config.service.mts","../src/config/config.provider.mts","../src/metadata/handler.metadata.mts","../src/metadata/controller.metadata.mts","../src/metadata/module.metadata.mts","../src/decorators/controller.decorator.mts","../src/tokens/endpoint-adapter.token.mts","../src/tokens/execution-context.token.mts","../src/tokens/http-adapter.token.mts","../src/tokens/multipart-adapter.token.mts","../src/tokens/reply.token.mts","../src/tokens/request.token.mts","../src/tokens/stream-adapter.token.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/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/module-loader.service.mts","../src/attribute.factory.mts","../src/navios.environment.mts","../src/factories/endpoint-adapter.factory.mts","../src/factories/http-adapter.factory.mts","../src/factories/multipart-adapter.factory.mts","../src/factories/request.factory.mts","../src/factories/reply.factory.mts","../src/factories/stream-adapter.factory.mts","../src/navios.application.mts","../src/navios.factory.mts"],"names":["_init","Injectable","z","InjectionToken","inject","env","InjectableScope","Container","Factory"],"mappings":"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","file":"index.mjs","sourcesContent":["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 { InjectionToken } from '@navios/di'\n\nimport z from 'zod/v4'\n\nimport type { LoggerService } from './logger-service.interface.mjs'\nimport type { LoggerInstance } from './logger.service.mjs'\n\nexport const LoggerOutput = InjectionToken.create<LoggerService>('LoggerOutput')\n\nexport const loggerOptionsSchema = z\n .object({\n context: z.string().optional(),\n })\n .optional()\n\nexport type LoggerOptions = z.infer<typeof loggerOptionsSchema>\n\nexport const Logger = InjectionToken.create<\n LoggerInstance,\n typeof loggerOptionsSchema\n>('Logger', loggerOptionsSchema)\n","import type { InspectOptions } from 'util'\n\nimport { inspect } from 'util'\n\nimport { Injectable } from '@navios/di'\n\nimport type { LogLevel } from './log-levels.mjs'\nimport type { LoggerService } from './logger-service.interface.mjs'\n\nimport { LoggerOutput } from './logger.tokens.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({\n token: LoggerOutput,\n})\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 * 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 = this.getInspectOptions()\n /**\n * The last timestamp at which the log message was printed.\n */\n protected lastTimestampAt?: number\n\n setup(): void\n setup(context: string): void\n setup(options: ConsoleLoggerOptions): void\n setup(context: string, options: ConsoleLoggerOptions): void\n setup(\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 }\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', undefined, '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 requestId?: string,\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 requestId,\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 requestId,\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 requestId?: string\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 && options.requestId) {\n logObject.requestId = options.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 requestId?: 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(requestId)}${this.getTimestamp()} ${formattedLogLevel} ${contextMessage}${output}${timestampDiff}\\n`\n }\n\n protected getRequestId(requestId?: string) {\n if (this.options.requestId && requestId) {\n return `(${this.colorize(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 = this.lastTimestampAt && this.options?.timestamp\n const result = includeTimestamp\n ? this.formatTimestampDiff(Date.now() - this.lastTimestampAt!)\n : ''\n this.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 { inject, Injectable } from '@navios/di'\n\nimport type { LoggerService } from './logger-service.interface.mjs'\nimport type { LoggerOptions } from './logger.tokens.mjs'\n\nimport { Logger, LoggerOutput } from './logger.tokens.mjs'\n\n@Injectable({\n token: Logger,\n})\nexport class LoggerInstance implements LoggerService {\n protected localInstance = inject(LoggerOutput)\n\n protected context?: string\n\n constructor(config: LoggerOptions = {}) {\n this.context = config.context\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","import { NaviosException } from '@navios/builder'\nimport { inject, Injectable, InjectionToken } 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 = inject(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 { HttpMethod } from '@navios/builder'\nimport type { ClassTypeWithInstance, InjectionToken } from '@navios/di'\n\nimport type {\n AbstractHttpHandlerAdapterInterface,\n CanActivate,\n HttpHeader,\n} 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<AbstractHttpHandlerAdapterInterface, undefined>\n | ClassTypeWithInstance<AbstractHttpHandlerAdapterInterface>\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 { 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.Request,\n })(target, context)\n }\n}\n","import { InjectionToken } from '@navios/di'\n\nimport type { AbstractHttpHandlerAdapterInterface } from '../interfaces/index.mjs'\n\nexport const EndpointAdapterToken =\n InjectionToken.create<AbstractHttpHandlerAdapterInterface>(\n 'EndpointAdapterToken',\n )\n","import { InjectionToken } from '@navios/di'\n\nimport type { AbstractExecutionContext } from '../interfaces/index.mjs'\n\nexport const ExecutionContextInjectionToken = 'ExecutionContextInjectionToken'\n\nexport const ExecutionContext = InjectionToken.create<AbstractExecutionContext>(\n ExecutionContextInjectionToken,\n)\n","import { InjectionToken } from '@navios/di'\n\nimport type { AbstractHttpAdapterInterface } from '../interfaces/index.mjs'\n\nexport const HttpAdapterToken =\n InjectionToken.create<AbstractHttpAdapterInterface<any, any, any, any>>(\n 'HttpAdapterToken',\n )\n","import { InjectionToken } from '@navios/di'\n\nimport type { AbstractHttpHandlerAdapterInterface } from '../interfaces/index.mjs'\n\nexport const MultipartAdapterToken =\n InjectionToken.create<AbstractHttpHandlerAdapterInterface>(\n 'MultipartAdapterToken',\n )\n","import { InjectionToken } from '@navios/di'\n\nexport const Reply = InjectionToken.create<any>('ReplyToken')\n","import { InjectionToken } from '@navios/di'\n\nexport const Request = InjectionToken.create<any>('RequestToken')\n","import { InjectionToken } from '@navios/di'\n\nimport type { AbstractHttpHandlerAdapterInterface } from '../interfaces/index.mjs'\n\nexport const StreamAdapterToken =\n InjectionToken.create<AbstractHttpHandlerAdapterInterface>(\n 'StreamAdapterToken',\n )\n","import type {\n BaseEndpointConfig,\n EndpointFunctionArgs,\n HttpMethod,\n Util_FlatObject,\n} from '@navios/builder'\nimport type { z, ZodType } from 'zod/v4'\n\nimport { ZodDiscriminatedUnion } from 'zod/v4'\n\nimport { getEndpointMetadata } from '../metadata/index.mjs'\nimport { EndpointAdapterToken } from '../tokens/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 '../interfaces/index.mjs'\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 { getEndpointMetadata } from '../metadata/index.mjs'\nimport { MultipartAdapterToken } from '../tokens/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 { ZodObject, ZodType } from 'zod/v4'\n\nimport { getEndpointMetadata } from '../metadata/index.mjs'\nimport { StreamAdapterToken } from '../tokens/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: any,\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","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 { Container, inject, Injectable, InjectionToken } from '@navios/di'\n\nimport type {\n AbstractExecutionContext,\n CanActivate,\n} from '../interfaces/index.mjs'\nimport type {\n ControllerMetadata,\n HandlerMetadata,\n ModuleMetadata,\n} from '../metadata/index.mjs'\n\nimport { HttpException } from '../exceptions/index.mjs'\n\n@Injectable()\nexport class GuardRunnerService {\n protected container = inject(Container)\n async runGuards(\n allGuards: Set<\n | ClassTypeWithInstance<CanActivate>\n | InjectionToken<CanActivate, undefined>\n >,\n executionContext: AbstractExecutionContext,\n ) {\n let canActivate = true\n for (const guard of Array.from(allGuards).reverse()) {\n const guardInstance = await this.container.get(\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 moduleMetadata: ModuleMetadata,\n controllerMetadata: ControllerMetadata,\n endpoint: HandlerMetadata,\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 = endpoint.guards\n const controllerGuards = controllerMetadata.guards\n const moduleGuards = moduleMetadata.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 { ClassTypeWithInstance } from '@navios/di'\n\nimport { Container, inject, Injectable } 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 = inject(Logger, {\n context: ModuleLoaderService.name,\n })\n protected container = inject(Container)\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 this.container.get(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 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 { AnyInjectableType, InjectionToken } from '@navios/di'\n\nimport { Injectable } from '@navios/di'\n\nexport interface NaviosEnvironmentOptions {\n // Future options can be added here\n httpTokens?: Map<InjectionToken<any, undefined>, AnyInjectableType>\n}\n\n@Injectable()\nexport class NaviosEnvironment {\n private httpTokens = new Map<\n InjectionToken<any, undefined>,\n AnyInjectableType\n >()\n\n setupHttpEnvironment(\n tokens: Map<InjectionToken<any, undefined>, AnyInjectableType>,\n ) {\n this.httpTokens = tokens\n }\n\n getHttpToken(token: InjectionToken<any, undefined>) {\n return this.httpTokens.get(token)\n }\n\n hasHttpSetup() {\n return this.httpTokens.size > 0\n }\n}\n","import type { FactoryContext, InjectionToken } from '@navios/di'\n\nimport { Factory, inject } from '@navios/di'\n\nimport { NaviosEnvironment } from '../navios.environment.mjs'\nimport { EndpointAdapterToken } from '../tokens/index.mjs'\n\n@Factory({\n token: EndpointAdapterToken,\n})\nexport class EndpointAdapterFactory {\n private readonly environment = inject(NaviosEnvironment)\n\n create(ctx: FactoryContext) {\n const service = this.environment.getHttpToken(EndpointAdapterToken)\n if (!service) {\n throw new Error('EndpointAdapterToken service not found in environment')\n }\n return ctx.inject(service as InjectionToken<any, undefined>)\n }\n}\n","import type { FactoryContext } from '@navios/di'\n\nimport { Factory, inject, InjectionToken } from '@navios/di'\n\nimport { NaviosEnvironment } from '../navios.environment.mjs'\nimport { HttpAdapterToken } from '../tokens/index.mjs'\n\n@Factory({\n token: HttpAdapterToken,\n})\nexport class HttpAdapterFactory {\n private readonly environment = inject(NaviosEnvironment)\n create(ctx: FactoryContext) {\n const service = this.environment.getHttpToken(HttpAdapterToken)\n if (!service) {\n throw new Error('HttpAdapterToken service not found in environment')\n }\n return ctx.inject(service as InjectionToken<any, undefined>)\n }\n}\n","import type { FactoryContext, InjectionToken } from '@navios/di'\n\nimport { Factory, inject } from '@navios/di'\n\nimport { NaviosEnvironment } from '../navios.environment.mjs'\nimport { MultipartAdapterToken } from '../tokens/index.mjs'\n\n@Factory({\n token: MultipartAdapterToken,\n})\nexport class MultipartAdapterFactory {\n private readonly environment = inject(NaviosEnvironment)\n\n create(ctx: FactoryContext) {\n const service = this.environment.getHttpToken(MultipartAdapterToken)\n if (!service) {\n throw new Error('MultipartAdapterToken service not found in environment')\n }\n return ctx.inject(service as InjectionToken<any, undefined>)\n }\n}\n","import type { FactoryContext, InjectionToken } from '@navios/di'\n\nimport { Factory, inject, InjectableScope } from '@navios/di'\n\nimport { NaviosEnvironment } from '../navios.environment.mjs'\nimport { Request } from '../tokens/index.mjs'\n\n@Factory({\n token: Request,\n scope: InjectableScope.Request,\n})\nexport class RequestFactory {\n private readonly environment = inject(NaviosEnvironment)\n create(ctx: FactoryContext) {\n const service = this.environment.getHttpToken(Request)\n if (!service) {\n throw new Error('RequestToken service not found in environment')\n }\n return ctx.inject(service as InjectionToken<any, undefined>)\n }\n}\n","import type { FactoryContext, InjectionToken } from '@navios/di'\n\nimport { Factory, inject, InjectableScope } from '@navios/di'\n\nimport { NaviosEnvironment } from '../navios.environment.mjs'\nimport { Reply } from '../tokens/index.mjs'\n\n@Factory({\n token: Reply,\n scope: InjectableScope.Request,\n})\nexport class ReplyFactory {\n private readonly environment = inject(NaviosEnvironment)\n create(ctx: FactoryContext) {\n const service = this.environment.getHttpToken(Reply)\n if (!service) {\n throw new Error('ReplyToken service not found in environment')\n }\n return ctx.inject(service as InjectionToken<any, undefined>)\n }\n}\n","import type { FactoryContext, InjectionToken } from '@navios/di'\n\nimport { Factory, inject } from '@navios/di'\n\nimport { NaviosEnvironment } from '../navios.environment.mjs'\nimport { StreamAdapterToken } from '../tokens/index.mjs'\n\n@Factory({\n token: StreamAdapterToken,\n})\nexport class StreamAdapterFactory {\n private readonly environment = inject(NaviosEnvironment)\n create(ctx: FactoryContext) {\n const service = this.environment.getHttpToken(StreamAdapterToken)\n if (!service) {\n throw new Error('StreamAdapterToken service not found in environment')\n }\n return ctx.inject(service as InjectionToken<any, undefined>)\n }\n}\n","import type { ClassTypeWithInstance } from '@navios/di'\n\nimport { Container, inject, Injectable } from '@navios/di'\n\nimport type {\n AbstractHttpAdapterInterface,\n AbstractHttpListenOptions,\n NaviosModule,\n} from './interfaces/index.mjs'\nimport type { LoggerService, LogLevel } from './logger/index.mjs'\nimport type { NaviosEnvironmentOptions } from './navios.environment.mjs'\n\nimport { HttpAdapterToken } from './index.mjs'\nimport { Logger } from './logger/index.mjs'\nimport { NaviosEnvironment } from './navios.environment.mjs'\nimport { ModuleLoaderService } from './services/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 NaviosApplicationContextOptions {\n // Fastify server options will be handled by FastifyApplicationService\n adapter: NaviosEnvironmentOptions | NaviosEnvironmentOptions[]\n}\n\n@Injectable()\nexport class NaviosApplication {\n private environment = inject(NaviosEnvironment)\n private moduleLoader = inject(ModuleLoaderService)\n private httpApplication: AbstractHttpAdapterInterface<any> | null = null\n private logger = inject(Logger, {\n context: NaviosApplication.name,\n })\n protected container = inject(Container)\n\n private appModule: ClassTypeWithInstance<NaviosModule> | null = null\n private options: NaviosApplicationOptions = {\n adapter: [],\n }\n\n isInitialized = false\n\n async setup(\n appModule: ClassTypeWithInstance<NaviosModule>,\n options: NaviosApplicationOptions = {\n adapter: [],\n },\n ) {\n this.appModule = appModule\n this.options = options\n if (this.environment.hasHttpSetup()) {\n this.httpApplication = await this.container.get(HttpAdapterToken)\n }\n }\n\n getContainer() {\n return this.container\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 if (this.environment.hasHttpSetup()) {\n await this.httpApplication?.setupHttpServer(this.options)\n }\n await this.initModules()\n if (this.environment.hasHttpSetup()) {\n await this.httpApplication?.ready()\n }\n\n this.isInitialized = true\n this.logger.debug('Navios application initialized')\n }\n\n private async initModules() {\n const modules = this.moduleLoader.getAllModules()\n await this.httpApplication?.onModulesInit(modules)\n }\n\n enableCors(options: any) {\n if (!this.httpApplication) {\n throw new Error('HTTP application is not set')\n }\n this.httpApplication.enableCors(options)\n }\n\n enableMultipart(options: any) {\n if (!this.httpApplication) {\n throw new Error('HTTP application is not set')\n }\n this.httpApplication.enableMultipart(options)\n }\n\n setGlobalPrefix(prefix: string) {\n if (!this.httpApplication) {\n throw new Error('HTTP application is not set')\n }\n this.httpApplication.setGlobalPrefix(prefix)\n }\n\n getServer() {\n if (!this.httpApplication) {\n throw new Error('HTTP application is not set')\n }\n return this.httpApplication.getServer()\n }\n\n async listen(options: AbstractHttpListenOptions) {\n if (!this.httpApplication) {\n throw new Error('HTTP application is not set')\n }\n await this.httpApplication.listen(options)\n }\n\n async dispose() {\n if (this.httpApplication) {\n await this.httpApplication.dispose()\n }\n if (this.moduleLoader) {\n this.moduleLoader.dispose()\n }\n }\n\n async close() {\n await this.dispose()\n }\n}\n","import type {\n AnyInjectableType,\n ClassTypeWithInstance,\n InjectionToken,\n} from '@navios/di'\n\nimport { Container, InjectableScope, InjectableType } from '@navios/di'\n\nimport type { NaviosModule } from './interfaces/index.mjs'\nimport type {\n NaviosApplicationContextOptions,\n NaviosApplicationOptions,\n} from './navios.application.mjs'\n\nimport { ConsoleLogger, isNil, LoggerOutput } from './logger/index.mjs'\nimport { NaviosApplication } from './navios.application.mjs'\nimport { NaviosEnvironment } from './navios.environment.mjs'\n\nexport class NaviosFactory {\n static async create(\n appModule: ClassTypeWithInstance<NaviosModule>,\n options: NaviosApplicationOptions = {\n adapter: [],\n },\n ) {\n const container = new Container()\n await this.registerLoggerConfiguration(container, options)\n const adapters = Array.isArray(options.adapter)\n ? options.adapter\n : [options.adapter]\n for (const adapter of adapters) {\n await this.registerEnvironment(container, adapter)\n }\n const app = await container.get(NaviosApplication)\n await app.setup(appModule, options)\n return app\n }\n\n private static async registerEnvironment(\n container: Container,\n environment: {\n httpTokens?: Map<InjectionToken<any, undefined>, AnyInjectableType>\n } = {},\n ) {\n const naviosEnvironment = await container.get(NaviosEnvironment)\n const { httpTokens } = environment\n if (httpTokens) {\n naviosEnvironment.setupHttpEnvironment(httpTokens)\n }\n }\n\n private static async registerLoggerConfiguration(\n container: Container,\n options: NaviosApplicationContextOptions,\n ) {\n const { logger } = options\n if (Array.isArray(logger) || isNil(logger)) {\n const loggerInstance = (await container.get(\n LoggerOutput,\n )) as ConsoleLogger\n loggerInstance?.setup({\n logLevels: logger,\n })\n }\n if ((logger as boolean) !== true && !isNil(logger)) {\n container\n .getServiceLocator()\n .getManager()\n .storeCreatedHolder(\n LoggerOutput.toString(),\n logger,\n InjectableType.Class,\n InjectableScope.Singleton,\n )\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../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/logger/logger.tokens.mts","../src/logger/console-logger.service.mts","../src/logger/logger.service.mts","../src/config/config.service.mts","../src/config/config.provider.mts","../src/metadata/handler.metadata.mts","../src/metadata/controller.metadata.mts","../src/metadata/module.metadata.mts","../src/decorators/controller.decorator.mts","../src/tokens/endpoint-adapter.token.mts","../src/tokens/execution-context.token.mts","../src/tokens/http-adapter.token.mts","../src/tokens/multipart-adapter.token.mts","../src/tokens/reply.token.mts","../src/tokens/request.token.mts","../src/tokens/stream-adapter.token.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/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/module-loader.service.mts","../src/attribute.factory.mts","../src/navios.environment.mts","../src/factories/endpoint-adapter.factory.mts","../src/factories/http-adapter.factory.mts","../src/factories/multipart-adapter.factory.mts","../src/factories/request.factory.mts","../src/factories/reply.factory.mts","../src/factories/stream-adapter.factory.mts","../src/navios.application.mts","../src/navios.factory.mts"],"names":["_init","Injectable","z","InjectionToken","inject","env","InjectableScope","Container","Factory"],"mappings":"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","file":"index.mjs","sourcesContent":["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 { InjectionToken } from '@navios/di'\n\nimport z from 'zod/v4'\n\nimport type { LoggerService } from './logger-service.interface.mjs'\nimport type { LoggerInstance } from './logger.service.mjs'\n\nexport const LoggerOutput = InjectionToken.create<LoggerService>('LoggerOutput')\n\nexport const loggerOptionsSchema = z\n .object({\n context: z.string().optional(),\n })\n .optional()\n\nexport type LoggerOptions = z.infer<typeof loggerOptionsSchema>\n\nexport const Logger = InjectionToken.create<\n LoggerInstance,\n typeof loggerOptionsSchema\n>('Logger', loggerOptionsSchema)\n","import type { InspectOptions } from 'util'\n\nimport { inspect } from 'util'\n\nimport { Injectable } from '@navios/di'\n\nimport type { LogLevel } from './log-levels.mjs'\nimport type { LoggerService } from './logger-service.interface.mjs'\n\nimport { LoggerOutput } from './logger.tokens.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({\n token: LoggerOutput,\n})\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 * 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 = this.getInspectOptions()\n /**\n * The last timestamp at which the log message was printed.\n */\n protected lastTimestampAt?: number\n\n setup(): void\n setup(context: string): void\n setup(options: ConsoleLoggerOptions): void\n setup(context: string, options: ConsoleLoggerOptions): void\n setup(\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 }\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', undefined, '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 requestId?: string,\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 requestId,\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 requestId,\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 requestId?: string\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 && options.requestId) {\n logObject.requestId = options.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 requestId?: 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(requestId)}${this.getTimestamp()} ${formattedLogLevel} ${contextMessage}${output}${timestampDiff}\\n`\n }\n\n protected getRequestId(requestId?: string) {\n if (this.options.requestId && requestId) {\n return `(${this.colorize(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 = this.lastTimestampAt && this.options?.timestamp\n const result = includeTimestamp\n ? this.formatTimestampDiff(Date.now() - this.lastTimestampAt!)\n : ''\n this.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 { inject, Injectable } from '@navios/di'\n\nimport type { LoggerService } from './logger-service.interface.mjs'\nimport type { LoggerOptions } from './logger.tokens.mjs'\n\nimport { Logger, LoggerOutput } from './logger.tokens.mjs'\n\n@Injectable({\n token: Logger,\n})\nexport class LoggerInstance implements LoggerService {\n protected localInstance = inject(LoggerOutput)\n\n protected context?: string\n\n constructor(config: LoggerOptions = {}) {\n this.context = config.context\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","import { NaviosException } from '@navios/builder'\nimport { inject, Injectable, InjectionToken } 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 = inject(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 { HttpMethod } from '@navios/builder'\nimport type { ClassTypeWithInstance, InjectionToken } from '@navios/di'\n\nimport type {\n AbstractHttpHandlerAdapterInterface,\n CanActivate,\n HttpHeader,\n} 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<AbstractHttpHandlerAdapterInterface, undefined>\n | ClassTypeWithInstance<AbstractHttpHandlerAdapterInterface>\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 { 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.Request,\n })(target, context)\n }\n}\n","import { InjectionToken } from '@navios/di'\n\nimport type { AbstractHttpHandlerAdapterInterface } from '../interfaces/index.mjs'\n\nexport const EndpointAdapterToken =\n InjectionToken.create<AbstractHttpHandlerAdapterInterface>(\n 'EndpointAdapterToken',\n )\n","import { InjectionToken } from '@navios/di'\n\nimport type { AbstractExecutionContext } from '../interfaces/index.mjs'\n\nexport const ExecutionContextInjectionToken = 'ExecutionContextInjectionToken'\n\nexport const ExecutionContext = InjectionToken.create<AbstractExecutionContext>(\n ExecutionContextInjectionToken,\n)\n","import { InjectionToken } from '@navios/di'\n\nimport type { AbstractHttpAdapterInterface } from '../interfaces/index.mjs'\n\nexport const HttpAdapterToken =\n InjectionToken.create<AbstractHttpAdapterInterface<any, any, any, any>>(\n 'HttpAdapterToken',\n )\n","import { InjectionToken } from '@navios/di'\n\nimport type { AbstractHttpHandlerAdapterInterface } from '../interfaces/index.mjs'\n\nexport const MultipartAdapterToken =\n InjectionToken.create<AbstractHttpHandlerAdapterInterface>(\n 'MultipartAdapterToken',\n )\n","import { InjectionToken } from '@navios/di'\n\nexport const Reply = InjectionToken.create<any>('ReplyToken')\n","import { InjectionToken } from '@navios/di'\n\nexport const Request = InjectionToken.create<any>('RequestToken')\n","import { InjectionToken } from '@navios/di'\n\nimport type { AbstractHttpHandlerAdapterInterface } from '../interfaces/index.mjs'\n\nexport const StreamAdapterToken =\n InjectionToken.create<AbstractHttpHandlerAdapterInterface>(\n 'StreamAdapterToken',\n )\n","import type {\n BaseEndpointConfig,\n EndpointFunctionArgs,\n HttpMethod,\n Util_FlatObject,\n} from '@navios/builder'\nimport type { z, ZodType } from 'zod/v4'\n\nimport { ZodDiscriminatedUnion } from 'zod/v4'\n\nimport { getEndpointMetadata } from '../metadata/index.mjs'\nimport { EndpointAdapterToken } from '../tokens/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 '../interfaces/index.mjs'\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 { getEndpointMetadata } from '../metadata/index.mjs'\nimport { MultipartAdapterToken } from '../tokens/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 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 { ZodObject, ZodType } from 'zod/v4'\n\nimport { getEndpointMetadata } from '../metadata/index.mjs'\nimport { StreamAdapterToken } from '../tokens/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: any,\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","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 { Container, inject, Injectable, InjectionToken } from '@navios/di'\n\nimport type {\n AbstractExecutionContext,\n CanActivate,\n} from '../interfaces/index.mjs'\nimport type {\n ControllerMetadata,\n HandlerMetadata,\n ModuleMetadata,\n} from '../metadata/index.mjs'\n\nimport { HttpException } from '../exceptions/index.mjs'\n\n@Injectable()\nexport class GuardRunnerService {\n protected container = inject(Container)\n async runGuards(\n allGuards: Set<\n | ClassTypeWithInstance<CanActivate>\n | InjectionToken<CanActivate, undefined>\n >,\n executionContext: AbstractExecutionContext,\n ) {\n let canActivate = true\n for (const guard of Array.from(allGuards).reverse()) {\n const guardInstance = await this.container.get(\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 moduleMetadata: ModuleMetadata,\n controllerMetadata: ControllerMetadata,\n endpoint: HandlerMetadata,\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 = endpoint.guards\n const controllerGuards = controllerMetadata.guards\n const moduleGuards = moduleMetadata.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 { ClassTypeWithInstance } from '@navios/di'\n\nimport { Container, inject, Injectable } 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 = inject(Logger, {\n context: ModuleLoaderService.name,\n })\n protected container = inject(Container)\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 this.container.get(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 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 { AnyInjectableType, InjectionToken } from '@navios/di'\n\nimport { Injectable } from '@navios/di'\n\nexport interface NaviosEnvironmentOptions {\n // Future options can be added here\n httpTokens?: Map<InjectionToken<any, undefined>, AnyInjectableType>\n}\n\n@Injectable()\nexport class NaviosEnvironment {\n private httpTokens = new Map<\n InjectionToken<any, undefined>,\n AnyInjectableType\n >()\n\n setupHttpEnvironment(\n tokens: Map<InjectionToken<any, undefined>, AnyInjectableType>,\n ) {\n this.httpTokens = tokens\n }\n\n getHttpToken(token: InjectionToken<any, undefined>) {\n return this.httpTokens.get(token)\n }\n\n hasHttpSetup() {\n return this.httpTokens.size > 0\n }\n}\n","import type { FactoryContext, InjectionToken } from '@navios/di'\n\nimport { Factory, inject } from '@navios/di'\n\nimport { NaviosEnvironment } from '../navios.environment.mjs'\nimport { EndpointAdapterToken } from '../tokens/index.mjs'\n\n@Factory({\n token: EndpointAdapterToken,\n})\nexport class EndpointAdapterFactory {\n private readonly environment = inject(NaviosEnvironment)\n\n create(ctx: FactoryContext) {\n const service = this.environment.getHttpToken(EndpointAdapterToken)\n if (!service) {\n throw new Error('EndpointAdapterToken service not found in environment')\n }\n return ctx.inject(service as InjectionToken<any, undefined>)\n }\n}\n","import type { FactoryContext } from '@navios/di'\n\nimport { Factory, inject, InjectionToken } from '@navios/di'\n\nimport { NaviosEnvironment } from '../navios.environment.mjs'\nimport { HttpAdapterToken } from '../tokens/index.mjs'\n\n@Factory({\n token: HttpAdapterToken,\n})\nexport class HttpAdapterFactory {\n private readonly environment = inject(NaviosEnvironment)\n create(ctx: FactoryContext) {\n const service = this.environment.getHttpToken(HttpAdapterToken)\n if (!service) {\n throw new Error('HttpAdapterToken service not found in environment')\n }\n return ctx.inject(service as InjectionToken<any, undefined>)\n }\n}\n","import type { FactoryContext, InjectionToken } from '@navios/di'\n\nimport { Factory, inject } from '@navios/di'\n\nimport { NaviosEnvironment } from '../navios.environment.mjs'\nimport { MultipartAdapterToken } from '../tokens/index.mjs'\n\n@Factory({\n token: MultipartAdapterToken,\n})\nexport class MultipartAdapterFactory {\n private readonly environment = inject(NaviosEnvironment)\n\n create(ctx: FactoryContext) {\n const service = this.environment.getHttpToken(MultipartAdapterToken)\n if (!service) {\n throw new Error('MultipartAdapterToken service not found in environment')\n }\n return ctx.inject(service as InjectionToken<any, undefined>)\n }\n}\n","import type { FactoryContext, InjectionToken } from '@navios/di'\n\nimport { Factory, inject, InjectableScope } from '@navios/di'\n\nimport { NaviosEnvironment } from '../navios.environment.mjs'\nimport { Request } from '../tokens/index.mjs'\n\n@Factory({\n token: Request,\n scope: InjectableScope.Request,\n})\nexport class RequestFactory {\n private readonly environment = inject(NaviosEnvironment)\n create(ctx: FactoryContext) {\n const service = this.environment.getHttpToken(Request)\n if (!service) {\n throw new Error('RequestToken service not found in environment')\n }\n return ctx.inject(service as InjectionToken<any, undefined>)\n }\n}\n","import type { FactoryContext, InjectionToken } from '@navios/di'\n\nimport { Factory, inject, InjectableScope } from '@navios/di'\n\nimport { NaviosEnvironment } from '../navios.environment.mjs'\nimport { Reply } from '../tokens/index.mjs'\n\n@Factory({\n token: Reply,\n scope: InjectableScope.Request,\n})\nexport class ReplyFactory {\n private readonly environment = inject(NaviosEnvironment)\n create(ctx: FactoryContext) {\n const service = this.environment.getHttpToken(Reply)\n if (!service) {\n throw new Error('ReplyToken service not found in environment')\n }\n return ctx.inject(service as InjectionToken<any, undefined>)\n }\n}\n","import type { FactoryContext, InjectionToken } from '@navios/di'\n\nimport { Factory, inject } from '@navios/di'\n\nimport { NaviosEnvironment } from '../navios.environment.mjs'\nimport { StreamAdapterToken } from '../tokens/index.mjs'\n\n@Factory({\n token: StreamAdapterToken,\n})\nexport class StreamAdapterFactory {\n private readonly environment = inject(NaviosEnvironment)\n create(ctx: FactoryContext) {\n const service = this.environment.getHttpToken(StreamAdapterToken)\n if (!service) {\n throw new Error('StreamAdapterToken service not found in environment')\n }\n return ctx.inject(service as InjectionToken<any, undefined>)\n }\n}\n","import type { ClassTypeWithInstance } from '@navios/di'\n\nimport { Container, inject, Injectable } from '@navios/di'\n\nimport type {\n AbstractHttpAdapterInterface,\n AbstractHttpListenOptions,\n NaviosModule,\n} from './interfaces/index.mjs'\nimport type { LoggerService, LogLevel } from './logger/index.mjs'\nimport type { NaviosEnvironmentOptions } from './navios.environment.mjs'\n\nimport { HttpAdapterToken } from './index.mjs'\nimport { Logger } from './logger/index.mjs'\nimport { NaviosEnvironment } from './navios.environment.mjs'\nimport { ModuleLoaderService } from './services/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 NaviosApplicationContextOptions {\n // Fastify server options will be handled by FastifyApplicationService\n adapter: NaviosEnvironmentOptions | NaviosEnvironmentOptions[]\n}\n\n@Injectable()\nexport class NaviosApplication {\n private environment = inject(NaviosEnvironment)\n private moduleLoader = inject(ModuleLoaderService)\n private httpApplication: AbstractHttpAdapterInterface<any> | null = null\n private logger = inject(Logger, {\n context: NaviosApplication.name,\n })\n protected container = inject(Container)\n\n private appModule: ClassTypeWithInstance<NaviosModule> | null = null\n private options: NaviosApplicationOptions = {\n adapter: [],\n }\n\n isInitialized = false\n\n async setup(\n appModule: ClassTypeWithInstance<NaviosModule>,\n options: NaviosApplicationOptions = {\n adapter: [],\n },\n ) {\n this.appModule = appModule\n this.options = options\n if (this.environment.hasHttpSetup()) {\n this.httpApplication = await this.container.get(HttpAdapterToken)\n }\n }\n\n getContainer() {\n return this.container\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 if (this.environment.hasHttpSetup()) {\n await this.httpApplication?.setupHttpServer(this.options)\n }\n await this.initModules()\n if (this.environment.hasHttpSetup()) {\n await this.httpApplication?.ready()\n }\n\n this.isInitialized = true\n this.logger.debug('Navios application initialized')\n }\n\n private async initModules() {\n const modules = this.moduleLoader.getAllModules()\n await this.httpApplication?.onModulesInit(modules)\n }\n\n enableCors(options: any) {\n if (!this.httpApplication) {\n throw new Error('HTTP application is not set')\n }\n this.httpApplication.enableCors(options)\n }\n\n enableMultipart(options: any) {\n if (!this.httpApplication) {\n throw new Error('HTTP application is not set')\n }\n this.httpApplication.enableMultipart(options)\n }\n\n setGlobalPrefix(prefix: string) {\n if (!this.httpApplication) {\n throw new Error('HTTP application is not set')\n }\n this.httpApplication.setGlobalPrefix(prefix)\n }\n\n getServer() {\n if (!this.httpApplication) {\n throw new Error('HTTP application is not set')\n }\n return this.httpApplication.getServer()\n }\n\n async listen(options: AbstractHttpListenOptions) {\n if (!this.httpApplication) {\n throw new Error('HTTP application is not set')\n }\n await this.httpApplication.listen(options)\n }\n\n async dispose() {\n if (this.httpApplication) {\n await this.httpApplication.dispose()\n }\n if (this.moduleLoader) {\n this.moduleLoader.dispose()\n }\n }\n\n async close() {\n await this.dispose()\n }\n}\n","import type {\n AnyInjectableType,\n ClassTypeWithInstance,\n InjectionToken,\n} from '@navios/di'\n\nimport { Container, InjectableScope, InjectableType } from '@navios/di'\n\nimport type { NaviosModule } from './interfaces/index.mjs'\nimport type {\n NaviosApplicationContextOptions,\n NaviosApplicationOptions,\n} from './navios.application.mjs'\n\nimport { ConsoleLogger, isNil, LoggerOutput } from './logger/index.mjs'\nimport { NaviosApplication } from './navios.application.mjs'\nimport { NaviosEnvironment } from './navios.environment.mjs'\n\nexport class NaviosFactory {\n static async create(\n appModule: ClassTypeWithInstance<NaviosModule>,\n options: NaviosApplicationOptions = {\n adapter: [],\n },\n ) {\n const container = new Container()\n await this.registerLoggerConfiguration(container, options)\n const adapters = Array.isArray(options.adapter)\n ? options.adapter\n : [options.adapter]\n for (const adapter of adapters) {\n await this.registerEnvironment(container, adapter)\n }\n const app = await container.get(NaviosApplication)\n await app.setup(appModule, options)\n return app\n }\n\n private static async registerEnvironment(\n container: Container,\n environment: {\n httpTokens?: Map<InjectionToken<any, undefined>, AnyInjectableType>\n } = {},\n ) {\n const naviosEnvironment = await container.get(NaviosEnvironment)\n const { httpTokens } = environment\n if (httpTokens) {\n naviosEnvironment.setupHttpEnvironment(httpTokens)\n }\n }\n\n private static async registerLoggerConfiguration(\n container: Container,\n options: NaviosApplicationContextOptions,\n ) {\n const { logger } = options\n if (Array.isArray(logger) || isNil(logger)) {\n const loggerInstance = (await container.get(\n LoggerOutput,\n )) as ConsoleLogger\n loggerInstance?.setup({\n logLevels: logger,\n })\n }\n if ((logger as boolean) !== true && !isNil(logger)) {\n container\n .getServiceLocator()\n .getManager()\n .storeCreatedHolder(\n LoggerOutput.toString(),\n logger,\n InjectableType.Class,\n InjectableScope.Singleton,\n )\n }\n }\n}\n"]}
|