@adaas/a-server 0.0.20 → 0.0.21
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/dist/index.d.mts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +9 -10
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +12 -11
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
- package/src/components/A-ServerProxy/A-ServerProxy.component.ts +8 -7
- package/src/components/A-StaticLoader/A-StaticLoader.component.types.ts +5 -107
- package/src/containers/A-Service/A-Service.container.ts +11 -7
- package/src/entities/A-Request/A-Request.entity.ts +1 -1
- package/src/entities/A-Request/A-Request.entity.types.ts +1 -1
- package/src/entities/A-Response/A-Response.entity.ts +1 -1
- package/src/entities/A-Response/A-Response.entity.types.ts +1 -1
- package/tsconfig.build.json +0 -28
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/containers/A-Service/A-Service.container.types.ts","../src/context/A-HttpChannel/A-HttpChannel.context.ts","../src/channels/A-Http/A-Http.channel.constants.ts","../src/components/A-ServerError/A-ServerError.class.ts","../src/channels/A-Http/A-Http.channel.error.ts","../src/channels/A-Http/A-Http.channel.ts","../src/constants/env.constants.ts","../src/context/A-Server/A_Server.context.ts","../src/entities/A-Request/A-Request.entity.types.ts","../src/entities/A-Route/A-Route.entity.ts","../src/entities/A-Request/A-Request.entity.ts","../src/entities/A-Response/A-Response.entity.types.ts","../src/entities/A-Response/A-Response.entity.ts","../src/containers/A-Service/A-Service.container.ts","../src/context/A-ProxyConfig/A_ProxyConfig.constants.ts","../src/context/A-ProxyConfig/A_ProxyConfig.context.ts","../src/context/A-StaticConfig/A-StaticConfig.context.ts","../src/context/A-ListQueryFilter/A_ListQueryFilter.context.ts","../src/context/A-EntityFactory/A-EntityFactory.context.ts","../src/entities/A_EntityList/A_EntityList.entity.ts","../src/components/A-ServerLogger/A_ServerLogger.component.ts","../src/components/A-Router/A-Router.component.types.ts","../src/components/A-Router/A-Router.component.ts","../src/components/A-EntityController/A-EntityController.component.ts","../src/components/A-ServerHealthMonitor/A-ServerHealthMonitor.component.ts","../src/components/A-ServerProxy/A-ServerProxy.component.ts","../src/components/A-ServerCORS/A_ServerCORS.component.defaults.ts","../src/components/A-ServerCORS/A_ServerCORS.component.ts","../src/components/A-StaticLoader/A-StaticLoader.component.ts","../src/components/A-Controller/A-Controller.component.ts","../src/components/A-ListingController/A-ListingController.component.ts","../src/components/A-CommandController/A-CommandController.component.ts","../src/components/A-EntityRepository/A-EntityRepository.component.ts"],"names":["A_SERVER_TYPES__ServerFeature","A_SERVER_TYPES__ServerMethod","A_SERVER_CONSTANTS__A_HttpChannel_Lifecycle","A_Error","path","A_Fragment","A_SERVER_TYPES__RequestEvent","A_Context","A_SERVER_TYPES__ResponseEvent","A_Entity","ASEID","config","A_Scope","A_Logger","A_IdentityHelper","A_Feature","A_SERVER_TYPES__RouterMethod","A_SERVER_TYPES__ARouterComponentMetaKey","A_Concept","A_Inject","A_Config","A_Component","URL","A_Container","A_Manifest"],"mappings":"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","file":"index.mjs","sourcesContent":["import { A_Component, A_Fragment } from \"@adaas/a-concept\";\n\n\nexport type A_SERVER_TYPES__ServerFeatures = [\n A_SERVER_TYPES__ServerFeature.beforeStart,\n A_SERVER_TYPES__ServerFeature.afterStart,\n A_SERVER_TYPES__ServerFeature.beforeStop,\n A_SERVER_TYPES__ServerFeature.afterStop,\n A_SERVER_TYPES__ServerFeature.onRequest\n]\n\nexport enum A_SERVER_TYPES__ServerFeature {\n beforeStart = 'beforeStart',\n afterStart = 'afterStart',\n beforeStop = 'beforeStop',\n afterStop = 'afterStop',\n beforeRequest = 'beforeRequest',\n onRequest = 'onRequest',\n afterRequest = 'afterRequest',\n}\n\n\nexport type A_SERVER_TYPES__ServerConstructor = {\n name: string,\n version: string,\n controllers: Array<A_Component>,\n entities: Array<A_Fragment>,\n extensions: Array<A_Component>\n}\n\n\n\nexport enum A_SERVER_TYPES__ServerMethod {\n GET = 'GET',\n POST = 'POST',\n PUT = 'PUT',\n DELETE = 'DELETE',\n PATCH = 'PATCH',\n OPTIONS = 'OPTIONS',\n HEAD = 'HEAD',\n CONNECT = 'CONNECT',\n TRACE = 'TRACE',\n DEFAULT = 'DEFAULT'\n}\n\n\n","import { A_Fragment } from \"@adaas/a-concept\";\nimport { A_SERVER_TYPES__ServerMethod } from \"@adaas/a-server/containers/A-Service/A-Service.container.types\";\nimport { A_SERVER_TYPES__HttpChannelRequestParams } from \"@adaas/a-server/channels/A-Http/A-Http.channel.types\";\n\n\n\n\n\nexport class A_HTTPChannel_RequestContext<\n T extends any = any\n> extends A_Fragment {\n url: string;\n method: A_SERVER_TYPES__ServerMethod;\n data?: any;\n config?: Partial<A_SERVER_TYPES__HttpChannelRequestParams['config']>;\n\n constructor(params: A_SERVER_TYPES__HttpChannelRequestParams) {\n super();\n\n const {\n method,\n url,\n data,\n config,\n } = params;\n\n this.url = url;\n this.method = method;\n this.data = data;\n this.config = config;\n }\n\n result?: T;\n error?: any;\n\n}\n","\n\n\nexport enum A_SERVER_CONSTANTS__A_HttpChannel_Lifecycle {\n onAfterRequest = 'onAfterHttpChannelRequest',\n onError = 'onHttpChannelError',\n onBeforeRequest = 'onBeforeHttpChannelRequest',\n}","import { A_Error } from '@adaas/a-concept';\nimport { A_SERVER_TYPES__ServerError_Init, A_SERVER_TYPES__ServerError_Serialized } from './A-ServerError.types';\n\n\nexport class A_ServerError extends A_Error<A_SERVER_TYPES__ServerError_Init, A_SERVER_TYPES__ServerError_Serialized> {\n\n status: number = 500;\n\n\n // constructor(\n // /**\n // * A_Error Constructor params\n // */\n // params: A_SERVER_TYPES__ServerError_Init\n // )\n // constructor(\n // /**\n // * HTTP Status Code of the error\n // */\n // status: number,\n // /**\n // * Error message\n // */\n // message: string\n // )\n // constructor(\n // /**\n // * Original JS Error\n // */\n // error: Error\n // )\n // constructor(\n // /**\n // * HTTP Status Code of the error\n // */\n // status: number,\n // /**\n // * Error message\n // */\n // title: string,\n // /**\n // * Detailed description of the error\n // */\n // description: string\n // )\n // constructor(\n // param1: A_SERVER_TYPES__ServerError_Init | Error | string | A_Error | number,\n // param2?: string | A_Error,\n // param3?: string\n // ) {\n // switch (true) {\n // case typeof param1 === 'number':\n // if (typeof param2 === 'string' && param3) {\n // super({\n // title: param2,\n // description: param3\n // });\n // }\n // else if (param2 instanceof A_Error) {\n // super(param2);\n // }\n // else {\n // super();\n // }\n // this.status = param1;\n // break;\n\n // case param1 instanceof A_Error:\n // super (param1);\n // break;\n // case param1 instanceof Error:\n // super (param1);\n // break;\n \n // default:\n // break;\n // }\n\n // }\n\n\n protected fromConstructor(params: A_SERVER_TYPES__ServerError_Init): void {\n super.fromConstructor(params);\n if (params.status) {\n this.status = params.status;\n }\n }\n\n\n toJSON(): A_SERVER_TYPES__ServerError_Serialized {\n return {\n ...super.toJSON(),\n status: this.status\n }\n }\n}\n\n\n","import { A_Error } from \"@adaas/a-concept\";\n\n\nexport class A_HTTPChannelError extends A_Error {\n\n static readonly HttpRequestError = 'HTTP Channel Request Error';\n\n}","import { A_Context, A_Scope } from \"@adaas/a-concept\";\nimport { A_SERVER_TYPES__ServerMethod } from \"../../containers/A-Service/A-Service.container.types\";\nimport { A_HTTPChannel_RequestContext } from \"../../context/A-HttpChannel/A-HttpChannel.context\";\nimport { A_SERVER_CONSTANTS__A_HttpChannel_Lifecycle } from \"./A-Http.channel.constants\";\nimport { A_ServerError } from \"@adaas/a-server/components/A-ServerError/A-ServerError.class\";\nimport { A_Channel } from \"@adaas/a-utils\";\nimport { A_HTTPChannelError } from \"./A-Http.channel.error\";\nimport { A_SERVER_TYPES__HttpChannelRequestConfig, A_SERVER_TYPES__HttpChannelRequestParams, A_SERVER_TYPES__HttpChannelSendParams } from \"./A-Http.channel.types\";\n\n\n\nexport class A_HTTPChannel extends A_Channel {\n\n protected baseUrl?: string;\n\n\n async connect(): Promise<void> {\n // keep it empty since HTTP channel does not require persistent connection\n return;\n }\n\n /**\n * Allows to send an HTTP request without expecting a response\n * \n * @param params \n */\n async send(params: A_SERVER_TYPES__HttpChannelSendParams): Promise<void> {\n this.request(params);\n }\n\n /**\n * Makes an HTTP request\n * \n * @param params \n * @returns \n */\n async request<T = any, M extends Record<string, any> = any>(\n /**\n * Provide request parameters\n */\n params: A_SERVER_TYPES__HttpChannelRequestParams<M>\n ): Promise<A_HTTPChannel_RequestContext<T>> {\n const { method, url, data, config } = params;\n\n await this.initialize;\n\n this._processing = true;\n\n const fullUrl = this.buildURL(url, config?.params);\n\n const requestScope = new A_Scope({ name: `a-http-channel-request-scope-${method}-${url}-${Date.now()}` });\n const context = new A_HTTPChannel_RequestContext({\n method,\n url,\n data,\n config\n });\n\n requestScope.inherit(A_Context.scope(this));\n requestScope.register(context);\n\n try {\n await this.call(A_SERVER_CONSTANTS__A_HttpChannel_Lifecycle.onBeforeRequest, requestScope);\n\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n ...config?.headers,\n };\n\n const options: RequestInit = {\n method,\n headers,\n };\n\n if (data && method !== A_SERVER_TYPES__ServerMethod.GET) {\n options.body = JSON.stringify(data);\n }\n\n const response = await fetch(fullUrl, options);\n\n if (!response.ok) {\n throw new A_ServerError({\n status: response.status,\n title: response.statusText,\n description: `HTTP request to ${fullUrl} failed with status ${response.status}`,\n });\n }\n\n context.result =\n config?.params?.responseType === \"text\"\n ? await response.text()\n : config?.params?.responseType === \"blob\"\n ? await response.blob()\n : await response.json();\n\n await this.call(A_SERVER_CONSTANTS__A_HttpChannel_Lifecycle.onAfterRequest, requestScope);\n\n this._processing = false;\n\n return context as A_HTTPChannel_RequestContext<T>;\n\n } catch (error) {\n\n this._processing = false;\n\n context.error = error;\n\n await this.call(A_SERVER_CONSTANTS__A_HttpChannel_Lifecycle.onError, requestScope);\n\n if (config?.throwOnError === false)\n return context as A_HTTPChannel_RequestContext<T>;\n else\n throw error;\n }\n }\n\n async post<T, M extends Record<string, any> = any>(\n url: string,\n body?: any,\n config?: Partial<A_SERVER_TYPES__HttpChannelRequestConfig>,\n ): Promise<A_HTTPChannel_RequestContext<T>> {\n return this.request<T, M>(\n {\n method: A_SERVER_TYPES__ServerMethod.POST,\n url,\n data: body,\n config,\n }\n );\n }\n\n async get<T, M extends Record<string, any> = any>(\n url: string,\n params?: any,\n config?: Partial<A_SERVER_TYPES__HttpChannelRequestConfig>,\n ): Promise<A_HTTPChannel_RequestContext<T>> {\n return this.request<T, M>(\n {\n method: A_SERVER_TYPES__ServerMethod.GET,\n url,\n config: {\n ...config,\n params,\n }\n }\n );\n }\n\n async put<T, M extends Record<string, any> = any>(\n url: string,\n body?: any,\n config?: Partial<A_SERVER_TYPES__HttpChannelRequestConfig>,\n ): Promise<A_HTTPChannel_RequestContext<T>> {\n return this.request<T, M>({\n method: A_SERVER_TYPES__ServerMethod.PUT,\n url,\n data: body,\n config,\n });\n }\n\n async delete<T, M extends Record<string, any> = any>(\n url: string,\n params?: any,\n config?: Partial<A_SERVER_TYPES__HttpChannelRequestConfig>,\n ): Promise<A_HTTPChannel_RequestContext<T>> {\n return this.request<T, M>({\n method: A_SERVER_TYPES__ServerMethod.DELETE,\n url,\n data: params,\n config,\n });\n }\n\n\n protected buildURL(path: string = '', params: Record<string, any> = {}): string {\n\n if (!this.baseUrl)\n throw new A_HTTPChannelError(\n A_HTTPChannelError.HttpRequestError,\n \"Base URL is not set for HTTP Channel\"\n );\n\n const url = new URL(`${this.baseUrl}${path.startsWith('/') ? path : `/${path}`}`);\n\n Object.keys(params).forEach(key => {\n if (params[key] !== undefined && params[key] !== null) {\n url.searchParams.append(key, params[key]);\n }\n });\n\n return url.toString()\n }\n}\n","export const A_SERVER_CONSTANTS__DEFAULT_ENV_VARIABLES = {\n // ----------------------------------------------------------\n // A-Server Environment Variables\n // ----------------------------------------------------------\n // These environment variables are used by A-Server to configure the application\n // ----------------------------------------------------------\n /**\n * Port for the server to listen on\n * [!] Default is 3000\n * @default 3000\n */\n A_SERVER_PORT: 'A_SERVER_PORT',\n\n} as const;\n\nexport type A_TYPES__ServerENVVariables = (typeof A_SERVER_CONSTANTS__DEFAULT_ENV_VARIABLES)[keyof typeof A_SERVER_CONSTANTS__DEFAULT_ENV_VARIABLES][];\n\n\n\nexport const A_SERVER_CONSTANTS__DEFAULT_ENV_VARIABLES_ARRAY = [\n A_SERVER_CONSTANTS__DEFAULT_ENV_VARIABLES.A_SERVER_PORT,\n] as const;\n\n\n\n\n","import { A_Fragment } from \"@adaas/a-concept\";\nimport { A_SERVER_TYPES__ServerConstructor } from \"./A_Server.context.types\";\nimport { A_Route } from \"@adaas/a-server/entities/A-Route/A-Route.entity\";\nimport { A_TYPES__Required } from \"@adaas/a-concept/dist/src/types/A_Common.types\";\n\n\nexport class A_Server extends A_Fragment {\n\n public port: number;\n public version: string;\n protected _routes: A_Route[] = [];\n\n constructor(\n params: A_TYPES__Required<Partial<A_SERVER_TYPES__ServerConstructor>, [\n 'port',\n 'name'\n ]>\n ) {\n super(params);\n\n this.port = params.port;\n this.name = params.name;\n this.version = params.version || 'v1';\n\n this._routes = params.routes || this._routes;\n }\n\n\n /**\n * A list of routes that the server will listen to\n */\n get routes(): A_Route[] {\n return this._routes\n }\n\n}\n\n\n","import { IncomingMessage } from \"http\";\nimport { A_Request } from \"./A-Request.entity\";\nimport { A_TYPES__Entity_Serialized } from \"@adaas/a-concept\";\n\n\nexport type A_SERVER_TYPES__RequestConstructor = {\n /**\n * Should correspond to Response id\n */\n id: string,\n request: IncomingMessage,\n scope: string,\n};\n\nexport type A_SERVER_TYPES__RequestSerialized = {\n} & A_TYPES__Entity_Serialized;\n\n\n\nexport type A_SERVER_TYPES__RequestMethods = 'GET'\n | 'POST'\n | 'PUT'\n | 'DELETE'\n | 'PATCH'\n | 'OPTIONS'\n | 'HEAD'\n | 'CONNECT'\n | 'TRACE'\n | 'DEFAULT'; // Default is used for routes that do not have a method specified\n\n\nexport enum A_SERVER_TYPES__RequestEvent {\n Error = 'error',\n Finish = 'finish',\n Data = 'data',\n End = 'end',\n Close = 'close',\n}\n\n\nexport type A_SERVER_TYPES__RequestEventCallback = (request: A_Request) => void;","import { A_SERVER_TYPES__RequestMethods } from '../A-Request/A-Request.entity.types';\n\n\n\nexport class A_Route {\n\n public url!: string;\n public method!: A_SERVER_TYPES__RequestMethods;\n\n\n constructor(\n url: string | RegExp,\n method: A_SERVER_TYPES__RequestMethods\n )\n constructor(\n url: string | RegExp,\n )\n constructor(\n param1: string | RegExp,\n param2?: A_SERVER_TYPES__RequestMethods\n ) {\n\n this.url = param1 instanceof RegExp ? param1.source : param1;\n this.method = param2 || 'GET';\n\n }\n\n\n /**\n * returns path only without query and hash\n */\n get path(): string {\n const p = this.url.split('?')[0].split('#')[0];\n\n // ensure that last char is not /\n return p.endsWith('/') ? p.slice(0, -1) : p;\n }\n\n\n get params(): string[] {\n return this.path\n .match(/:([^\\/]+)/g)\n ?.map((param) => param.slice(1))\n || [];\n }\n\n\n \n\n\n extractParams(url: string): Record<string, string> {\n // Remove query string (anything after ?)\n const cleanUrl = url.split('?')[0];\n\n const urlSegments = cleanUrl.split('/').filter(Boolean);\n const maskSegments = this.path.split('/').filter(Boolean);\n\n const params: Record<string, string> = {};\n\n for (let i = 0; i < maskSegments.length; i++) {\n const maskSegment = maskSegments[i];\n const urlSegment = urlSegments[i];\n\n if (maskSegment.startsWith(':')) {\n const paramName = maskSegment.slice(1); // Remove ':' from mask\n params[paramName] = urlSegment;\n } else if (maskSegment !== urlSegment) {\n // If static segments don’t match → fail\n return {};\n }\n }\n\n return params;\n }\n\n extractQuery(url: string): Record<string, string> {\n const query: Record<string, string> = {};\n\n // Take only the part after \"?\"\n const queryString = url.split('?')[1];\n if (!queryString) return query;\n\n // Remove fragment (#...) if present\n const cleanQuery = queryString.split('#')[0];\n\n // Split into key=value pairs\n for (const pair of cleanQuery.split('&')) {\n if (!pair) continue;\n const [key, value = ''] = pair.split('=');\n query[decodeURIComponent(key)] = decodeURIComponent(value);\n }\n\n return query;\n }\n\n\n\n toString(): string {\n // path can be like /api/v1/users/:id\n // and because of that :id we need to replace it with regex that matches chars and numbers only \n return `${this.method}::${this.path }`;\n\n // .replace(/\\/:([^\\/]+)/g, '\\\\/([^\\/]+)')\n }\n\n toRegExp(): RegExp {\n return new RegExp(`^${this.method}::${this.path.replace(/\\/:([^\\/]+)/g, '/([^/]+)')}$`);\n }\n\n toAFeatureExtension(extensionScope: Array<string> = []): RegExp {\n return new RegExp(`^${extensionScope.length\n ? `(${extensionScope.join('|')})`\n : '.*'\n }\\\\.${this.method}::${this.path.replace(/\\/:([^\\/]+)/g, '/([^/]+)')}$`);\n }\n}\n\n","import { IncomingHttpHeaders, IncomingMessage } from \"http\";\nimport { A_Context, A_Entity, A_IdentityHelper, ASEID, } from '@adaas/a-concept';\nimport {\n A_SERVER_TYPES__RequestConstructor,\n A_SERVER_TYPES__RequestEvent,\n A_SERVER_TYPES__RequestMethods,\n A_SERVER_TYPES__RequestSerialized\n} from \"./A-Request.entity.types\";\nimport { A_Route } from '../A-Route/A-Route.entity';\nimport { A_ServerError } from \"@adaas/a-server/components/A-ServerError/A-ServerError.class\";\n\n\nexport class A_Request<\n _ReqBodyType = any,\n _ResponseType = any,\n _ParamsType extends Record<string, string> = any,\n _QueryType = any,\n>\n extends A_Entity<\n A_SERVER_TYPES__RequestConstructor,\n A_SERVER_TYPES__RequestSerialized\n > {\n\n static get namespace(): string {\n return 'a-server';\n }\n\n req!: IncomingMessage;\n\n body: _ReqBodyType = {} as _ReqBodyType;\n params: _ParamsType = {} as _ParamsType;\n query: _QueryType = {} as _QueryType;\n response?: _ResponseType;\n\n error?: A_ServerError;\n\n /**\n * Duration of the request in milliseconds\n */\n duration: number = 0;\n\n fromNew(newEntity: A_SERVER_TYPES__RequestConstructor): void {\n this.req = newEntity.request;\n\n this.aseid = new ASEID({\n concept: A_Context.root.name,\n scope: newEntity.scope,\n entity: (this.constructor as typeof A_Request).entity,\n id: newEntity.id\n });\n }\n\n get startedAt(): Date | undefined {\n const timeId = A_IdentityHelper.parseTimeId(this.aseid.id.split('-')[0]);\n\n return timeId ? new Date(timeId.timestamp) : undefined;\n }\n\n\n\n // Getter for request URL\n public get url(): string {\n return this.req.url!;\n }\n\n // Getter for request method\n public get method(): A_SERVER_TYPES__RequestMethods {\n return (String(this.req.method).toUpperCase() as A_SERVER_TYPES__RequestMethods) || 'DEFAULT';\n }\n\n get headers(): IncomingHttpHeaders {\n return this.req.headers;\n }\n\n\n get route(): A_Route {\n return new A_Route(this.url, this.method);\n }\n\n\n pipe(\n destination: NodeJS.WritableStream,\n options?: { end?: boolean | undefined; }\n ): NodeJS.WritableStream {\n return this.req.pipe(destination, options);\n }\n\n\n\n async init(): Promise<void> {\n this.req.on('error', async (err) => {\n this.error = new A_ServerError(err);\n await this.call(A_SERVER_TYPES__RequestEvent.Error);\n });\n\n this.params = this.extractParams(this.url) as _ParamsType;\n this.query = this.extractQuery(this.url) as _QueryType;\n }\n\n\n extractParams(url: string): Record<string, string> {\n // Remove query string (anything after ?)\n const cleanUrl = url.split('?')[0];\n\n const urlSegments = cleanUrl.split('/').filter(Boolean);\n const maskSegments = this.url.split('/').filter(Boolean);\n\n const params: Record<string, string> = {};\n\n for (let i = 0; i < maskSegments.length; i++) {\n const maskSegment = maskSegments[i];\n const urlSegment = urlSegments[i];\n\n if (maskSegment.startsWith(':')) {\n const paramName = maskSegment.slice(1); // Remove ':' from mask\n params[paramName] = urlSegment;\n } else if (maskSegment !== urlSegment) {\n // If static segments don’t match → fail\n return {};\n }\n }\n\n return params;\n }\n\n extractQuery(url: string): Record<string, string> {\n const query: Record<string, string> = {};\n\n // Take only the part after \"?\"\n const queryString = url.split('?')[1];\n if (!queryString) return query;\n\n // Remove fragment (#...) if present\n const cleanQuery = queryString.split('#')[0];\n\n // Split into key=value pairs\n for (const pair of cleanQuery.split('&')) {\n if (!pair) continue;\n const [key, value = ''] = pair.split('=');\n query[decodeURIComponent(key)] = decodeURIComponent(value);\n }\n\n return query;\n }\n\n\n\n parseBody(): Promise<any> {\n return new Promise((resolve, reject) => {\n let body = '';\n this.req.on('data', chunk => body += chunk);\n this.req.on('end', () => {\n try {\n resolve(JSON.parse(body));\n } catch (err) {\n reject(err);\n }\n });\n this.req.on('error', reject);\n });\n }\n\n} ","import { A_TYPES__Entity_Serialized } from \"@adaas/a-concept\";\nimport { ServerResponse } from \"http\";\n\n\nexport type A_SERVER_TYPES__ResponseConstructor = {\n /**\n * Should correspond to Request id\n */\n id: string,\n scope: string,\n response: ServerResponse,\n}\n\nexport enum A_SERVER_TYPES__ResponseEvent {\n Error = 'error',\n Finish = 'finish',\n Data = 'data',\n End = 'end',\n Close = 'close',\n}\n\nexport type A_SERVER_TYPES__ResponseSerialized = A_TYPES__Entity_Serialized;\n\n\nexport type A_SERVER_TYPES__SendResponseObject<_ResponseType = any> = \nRecord<string, _ResponseType> ;","import {\n A_Context,\n A_Entity,\n A_Error,\n A_Scope,\n ASEID,\n} from \"@adaas/a-concept\";\nimport {\n IncomingHttpHeaders,\n ServerResponse\n} from \"http\";\nimport {\n A_SERVER_TYPES__ResponseConstructor,\n A_SERVER_TYPES__ResponseEvent,\n A_SERVER_TYPES__ResponseSerialized,\n A_SERVER_TYPES__SendResponseObject\n} from \"./A-Response.entity.types\";\nimport { A_ServerError } from \"@adaas/a-server/components/A-ServerError/A-ServerError.class\";\nimport { A_Logger } from \"@adaas/a-utils\";\n\n\n\n\nexport class A_Response<\n _ResponseType = any\n> extends A_Entity<\n A_SERVER_TYPES__ResponseConstructor,\n A_SERVER_TYPES__ResponseSerialized\n> {\n\n\n\n /**\n * Duration of the request in milliseconds\n */\n duration: number = 0;\n\n private res!: ServerResponse;\n private data: Map<string, _ResponseType> = new Map();\n error?: A_ServerError;\n\n\n fromNew(newEntity: A_SERVER_TYPES__ResponseConstructor): void {\n this.res = newEntity.response;\n\n this.aseid = new ASEID({\n concept: A_Context.root.name,\n scope: newEntity.scope,\n entity: (this.constructor as typeof A_Response).entity,\n id: newEntity.id\n });\n }\n\n get headersSent(): boolean {\n return this.res.headersSent;\n }\n\n get original() {\n return this.res;\n }\n\n get statusCode(): number {\n return this.res.statusCode;\n }\n\n async init(): Promise<void> {\n const startTime = process.hrtime();\n\n this.res.on('finish', async () => {\n const elapsedTime = process.hrtime(startTime);\n const elapsedMilliseconds = elapsedTime[0] * 1000 + elapsedTime[1] / 1e6;\n\n this.duration = elapsedMilliseconds;\n await this.call(A_SERVER_TYPES__ResponseEvent.Finish);\n });\n\n this.res.on('close', async () => {\n await this.call(A_SERVER_TYPES__ResponseEvent.Close)\n });\n\n }\n\n\n\n public failed(error: A_ServerError | A_Error | Error | any): void {\n switch (true) {\n case error instanceof A_ServerError:\n this.error = error;\n\n break;\n\n case error instanceof A_Error:\n this.error = new A_ServerError(error);\n\n break;\n\n default:\n this.error = new A_ServerError(error)\n\n break;\n }\n\n return this.status(this.error.status).json(this.error);\n }\n\n // Send a plain text or JSON response\n public send(\n data: string | object = this.toResponse()\n ): void {\n const logger = A_Context.scope(this).resolve(A_Logger);\n if (this.headersSent) {\n logger.warning('Response headers already sent, cannot send response again.');\n return;\n }\n\n try {\n switch (true) {\n case !!data && typeof data === 'object':\n return this.json(data);\n\n case !!data && typeof data === 'string':\n this.res.setHeader('Content-Type', 'text/plain');\n this.res.writeHead(this.statusCode);\n this.res.end(data);\n\n return;\n\n default:\n this.res.writeHead(this.statusCode);\n this.res.end(data);\n\n return;\n }\n } catch (error) {\n logger.warning('Response send error:', error);\n }\n }\n\n destroy(error: Error | unknown, scope?: A_Scope): Promise<any> {\n this.res.end();\n return super.destroy(scope);\n }\n\n // Explicit JSON response\n public json(\n data: object = this.toResponse()\n ): void {\n const logger = A_Context.scope(this).resolve(A_Logger);\n\n if (this.headersSent) {\n logger.warning('Response headers already sent, cannot send response again.');\n return;\n }\n this.res.setHeader('Content-Type', 'application/json');\n this.res.writeHead(this.statusCode);\n this.res.end(JSON.stringify(data));\n }\n\n // Set HTTP status code\n public status(code: number): this {\n this.res.statusCode = code;\n return this;\n }\n\n writeHead(statusCode: number, headers?: Record<string, string> | IncomingHttpHeaders | any) {\n this.res.writeHead(statusCode, headers);\n }\n\n\n setHeader(key: string, value: string) {\n this.res.setHeader(key, value);\n }\n\n getHeader(key: string): string | number | string[] | undefined {\n return this.res.getHeader(key) as string | number | string[] | undefined;\n }\n\n\n add(key: string, data: _ResponseType) {\n this.data.set(key, data);\n }\n\n\n toResponse(): A_SERVER_TYPES__SendResponseObject<_ResponseType> {\n return Array.from(this.data.entries()).reduce((acc, [key, value]) => {\n if (value instanceof A_Entity)\n acc[key] = value.toJSON();\n else\n\n acc[key] = value;\n return acc;\n }, {});\n }\n}","import { createServer, IncomingMessage, Server, ServerResponse } from \"http\";\nimport { A_SERVER_TYPES__ServerFeature, A_SERVER_TYPES__ServerFeatures } from \"./A-Service.container.types\";\nimport { A_Server } from \"@adaas/a-server/context/A-Server/A_Server.context\";\nimport { A_Request } from \"@adaas/a-server/entities/A-Request/A-Request.entity\";\nimport { A_Response } from \"@adaas/a-server/entities/A-Response/A-Response.entity\";\nimport crypto from 'crypto';\nimport { A_SERVER_CONSTANTS__DEFAULT_ENV_VARIABLES_ARRAY, A_TYPES__ServerENVVariables } from \"@adaas/a-server/constants/env.constants\";\nimport { A_Concept, A_Container, A_Feature, A_IdentityHelper, A_Scope } from \"@adaas/a-concept\";\nimport { A_Config, A_Logger } from \"@adaas/a-utils\";\n\n\n\n\n/**\n * A-Service is a container that can run different types of services, such as HTTP servers, workers, etc.\n * Depending on the provided config and configuration, it will load the necessary components and start the service.\n * \n */\nexport class A_Service extends A_Container {\n\n private server!: Server;\n port!: number;\n\n @A_Concept.Load()\n async load() {\n\n let config: A_Config<A_TYPES__ServerENVVariables>;\n let aServer: A_Server;\n\n if (!this.scope.has(A_Config<A_TYPES__ServerENVVariables>)) {\n const config = new A_Config<A_TYPES__ServerENVVariables>({\n variables: [...Array.from(A_SERVER_CONSTANTS__DEFAULT_ENV_VARIABLES_ARRAY)],\n defaults: {\n A_SERVER_PORT: 3000\n }\n });\n\n this.scope.register(config);\n }\n\n config = this.scope.resolve(A_Config) as A_Config<A_TYPES__ServerENVVariables>;\n\n\n if (!this.scope.has(A_Server)) {\n aServer = new A_Server({\n port: config.get('A_SERVER_PORT'),\n name: this.name,\n version: 'v1'\n });\n }\n\n // Set the server to listen on port 3000\n this.port = config.get('A_SERVER_PORT');\n\n // Create the HTTP server\n this.server = createServer(this.onRequest.bind(this));\n\n }\n\n protected listen(): Promise<void> {\n return new Promise((resolve, reject) => {\n this.server.listen(this.port, () => {\n resolve();\n });\n });\n }\n\n protected close(): Promise<void> {\n return new Promise((resolve, reject) => {\n this.server.close(() => {\n resolve();\n });\n });\n }\n\n\n @A_Concept.Start()\n /**\n * Start the server\n */\n async start() {\n await this.beforeStart();\n\n await this.listen();\n\n await this.afterStart();\n }\n\n\n @A_Feature.Define({ invoke: true })\n async beforeStart() { }\n\n @A_Feature.Define({ invoke: true })\n async afterStart() { }\n\n\n\n @A_Concept.Stop()\n /**\n * Stop service \n */\n async stop() {\n await this.call(A_SERVER_TYPES__ServerFeature.beforeStop);\n\n await this.server.close();\n\n await this.call(A_SERVER_TYPES__ServerFeature.afterStop)\n }\n\n @A_Feature.Define({\n name: A_SERVER_TYPES__ServerFeature.beforeRequest,\n invoke: true\n })\n async beforeRequest(scope: A_Scope) { }\n\n @A_Feature.Define({\n name: A_SERVER_TYPES__ServerFeature.beforeRequest,\n invoke: true\n })\n async afterRequest(scope: A_Scope) { }\n\n @A_Feature.Define({\n name: A_SERVER_TYPES__ServerFeature.onRequest,\n invoke: false\n })\n async onRequest(\n request: IncomingMessage,\n response: ServerResponse\n ) {\n const scope = new A_Scope({\n name: `a-server-request::${Date.now()}`,\n });\n\n // We need it to stop feature execution in case request ends\n const { req, res } = await this.convertToAServer(request, response);\n\n try {\n scope.register(req);\n scope.register(res);\n\n scope.inherit(this.scope);\n\n await this.beforeRequest(scope);\n await this.call(A_SERVER_TYPES__ServerFeature.onRequest, scope);\n await this.afterRequest(scope);\n\n await res.status(200).send();\n\n } catch (error) {\n \n const logger = this.scope.resolve(A_Logger);\n\n logger.error(error);\n\n return res.failed(error);\n }\n }\n\n\n\n protected async convertToAServer(\n request: IncomingMessage,\n response: ServerResponse\n ): Promise<{ req: A_Request, res: A_Response }> {\n\n if (!request.method || !request.url)\n throw new Error('Request method or url is missing');\n\n const id = this.generateRequestId(request.method, request.url);\n\n const req = new A_Request({ id, request, scope: this.scope.name });\n const res = new A_Response({ id, response, scope: this.scope.name });\n\n await req.init();\n await res.init();\n\n return { req, res };\n }\n\n protected generateRequestId(\n method: string,\n url: string\n ): string {\n // Use the current time, request URL, and a few other details to create a unique ID\n const hash = crypto.createHash('sha256');\n const timeId = A_IdentityHelper.generateTimeId();\n const randomValue = Math.random().toString(); // Adds extra randomness\n\n hash.update(`${timeId}-${method}-${url}-${randomValue}`);\n return `${timeId}-${hash.digest('hex')}`;\n }\n\n @A_Feature.Define({ invoke: true })\n async beforeStop() { }\n\n @A_Feature.Define({ invoke: true })\n async afterStop() { }\n}","import { A_SERVER_TYPES__ProxyConfigConstructorConfig } from \"./A_ProxyConfig.types\";\n\nexport const PROXY_CONFIG_DEFAULTS: A_SERVER_TYPES__ProxyConfigConstructorConfig = {\n path: '/',\n hostname: 'localhost',\n port: 80,\n method: 'GET',\n headers: {},\n protocol: 'http'\n};\n","import { A_Fragment } from \"@adaas/a-concept\";\nimport { A_SERVER_TYPES__ProxyConfigConstructor, A_SERVER_TYPES__ProxyConfigConstructorConfig, A_SERVER_TYPES__RoutesConfig } from \"./A_ProxyConfig.types\";\nimport { PROXY_CONFIG_DEFAULTS } from \"./A_ProxyConfig.constants\";\nimport { A_Route } from \"@adaas/a-server/entities/A-Route/A-Route.entity\";\n\n\n\nexport class A_ProxyConfig extends A_Fragment {\n\n protected readonly _configs: Array<A_SERVER_TYPES__RoutesConfig>\n\n constructor(\n /**\n * Setup proxy configs, where key is the path to match, and value is either a full URL or a partial config object\n */\n configs: A_SERVER_TYPES__ProxyConfigConstructor = {}\n ) {\n super();\n\n this._configs = Object.entries(configs).map(([path, config]) => {\n\n const targetUrl = new URL(typeof config === 'string' ? config : config.hostname || ''); // parse hostname, may include scheme\n\n const port =\n targetUrl.port ||\n (targetUrl.protocol === \"https:\" ? '443' : '80');\n\n\n const prepared = {\n ...PROXY_CONFIG_DEFAULTS,\n ...(typeof config === 'string' ? {\n path,\n port: parseInt(port),\n protocol: targetUrl.protocol,\n hostname: targetUrl.hostname\n } : config)\n }\n\n return {\n route: new A_Route(prepared.path, prepared.method),\n hostname: prepared.hostname,\n port: prepared.port,\n headers: prepared.headers,\n protocol: prepared.protocol\n }\n });\n }\n\n /**\n * Returns all configured proxy configs\n * \n */\n get configs(): Array<A_SERVER_TYPES__RoutesConfig> {\n return this._configs;\n }\n\n\n /**\n * Checks if a given path is configured in the proxy\n * \n * @param path \n * @returns \n */\n has(path: string): boolean {\n return this._configs.some(route => route.route.toRegExp().test(path));\n }\n\n /**\n * Returns the proxy configuration for a given path, if exists\n *\n * @param path \n * @returns \n */\n config(path: string): A_SERVER_TYPES__RoutesConfig | undefined {\n \n\n return this._configs.find(route => route.route.toRegExp().test(path));\n }\n}","import { A_Fragment } from \"@adaas/a-concept\";\nimport { A_Route } from \"@adaas/a-server/entities/A-Route/A-Route.entity\";\n\n\n\nexport class A_StaticConfig extends A_Fragment {\n\n readonly directories: Array<string>\n\n constructor(\n /**\n * Setup directories to serve static files from, comma separated\n */\n directories: string[] = []\n ) {\n super();\n\n this.directories = directories;\n }\n\n\n\n /**\n * Checks if a given path is configured in the proxy\n * \n * @param path \n * @returns \n */\n has(path: string): false | string {\n\n const found = this.directories.find(dir => {\n return new RegExp(`^\\/${dir.startsWith('/') ? dir.slice(1) : dir}/?.*`).test(path)\n });\n return !!found && found;\n }\n}","import { A_Fragment } from \"@adaas/a-concept\";\n\n\n\nexport class A_ListQueryFilter<FilterFields extends string[]> extends A_Fragment {\n\n protected parsedQuery!: Record<FilterFields[number], string>;\n\n constructor(\n protected _query: string | Partial<Record<FilterFields[number], string>> = {},\n protected defaults: Partial<Record<FilterFields[number], string>> = {}\n ) {\n super();\n this.parsedQuery = this.parseQueryString(_query);\n }\n\n\n get query() {\n return this._query;\n }\n\n\n get(property: FilterFields[number], defaultValue: string = '') {\n return this.parsedQuery[property] || this.defaults[property] || defaultValue;\n }\n\n protected parseQueryString(value: string | Partial<Record<FilterFields[number], string>> = {}): Record<FilterFields[number], string> {\n if (typeof value === 'string') {\n return value.split('&').reduce((acc, part) => {\n const [key, val] = part.split('=');\n acc[decodeURIComponent(key)] = decodeURIComponent(val || '');\n return acc;\n }, {}) as Record<FilterFields[number], string>;\n }\n return value as Record<FilterFields[number], string>;\n }\n}","import { A_Entity, A_Fragment, ASEID } from \"@adaas/a-concept\"\nimport { A_SERVER_TYPES__AEntityFactoryConstructor1, A_SERVER_TYPES__AEntityFactoryConstructor2 } from \"./A-EntityFactory.context.types\";\n\n\nexport class A_EntityFactory extends A_Fragment {\n\n\n private _entities: Map<string, { new(...args: any[]): any }> = new Map();\n\n\n constructor(\n map: A_SERVER_TYPES__AEntityFactoryConstructor1\n )\n constructor(\n entities: A_SERVER_TYPES__AEntityFactoryConstructor2\n )\n constructor(\n map: A_SERVER_TYPES__AEntityFactoryConstructor1,\n entities: A_SERVER_TYPES__AEntityFactoryConstructor2\n )\n constructor(\n param1: A_SERVER_TYPES__AEntityFactoryConstructor1 | A_SERVER_TYPES__AEntityFactoryConstructor2,\n param2?: A_SERVER_TYPES__AEntityFactoryConstructor2\n ) {\n super();\n\n this._setEntities(param1);\n this._setEntities(param2);\n }\n\n\n protected _setEntities(\n entities: A_SERVER_TYPES__AEntityFactoryConstructor2 | A_SERVER_TYPES__AEntityFactoryConstructor1 = []\n ) {\n if (Array.isArray(entities)) {\n entities.forEach((entity) => {\n this._entities.set(entity.entity, entity);\n });\n } else {\n Object.keys(entities).forEach((key) => {\n this._entities.set(key, entities[key]);\n });\n }\n }\n\n\n add(\n key: string,\n entity: typeof A_Entity\n ): void\n add(\n entity: typeof A_Entity\n ): void\n add(\n param1: string | typeof A_Entity,\n param2?: typeof A_Entity\n ): void {\n switch (true) {\n case typeof param1 === 'string' && !!param2:\n this._entities.set(param1, param2);\n\n break;\n\n case typeof param1 !== 'string':\n this._entities.set(param1.entity, param1);\n\n break;\n }\n }\n \n\n\n has(\n aseid: ASEID\n ): boolean\n has(\n /**\n * The name of the entity\n */\n entity: string\n ): boolean\n has(\n /**\n * The ASEID of the entity\n */\n aseid: string\n ): boolean\n has(\n param1: string | ASEID\n ): boolean {\n let name: string;\n\n switch (true) {\n case param1 instanceof ASEID:\n name = param1.entity;\n\n break;\n\n case !(param1 instanceof ASEID) && ASEID.isASEID(param1):\n name = new ASEID(param1).entity;\n\n break;\n\n default:\n name = param1;\n\n break;\n }\n\n return this._entities.has(name);\n }\n\n\n /**\n * Resolves the entity constructor by the entity name\n * \n * @param entity \n */\n resolve(\n entity: string\n ): { new(...args: any[]): A_Entity } | undefined\n resolve(\n aseid: string\n ): { new(...args: any[]): A_Entity } | undefined\n resolve(\n aseid: ASEID\n ): { new(...args: any[]): A_Entity } | undefined\n resolve(\n param1: string | ASEID\n ): { new(...args: any[]): A_Entity } | undefined {\n\n let name: string;\n\n switch (true) {\n case param1 instanceof ASEID:\n name = param1.entity;\n\n break;\n\n case typeof param1 === 'string' && ASEID.isASEID(param1):\n\n name = new ASEID(param1).entity;\n\n break;\n\n default:\n name = param1;\n\n break;\n }\n\n return this._entities.get(name);\n }\n\n\n\n resolveByName(\n name: string\n ): { new(...args: any[]): A_Entity } | undefined {\n return this._entities.get(name);\n }\n\n}","import {\n A_Context, A_Entity,\n ASEID,\n} from \"@adaas/a-concept\";\nimport {\n A_SERVER_TYPES__A_EntityListConstructor,\n A_SERVER_TYPES__A_EntityListPagination,\n A_SERVER_TYPES__A_EntityListSerialized\n} from \"./A_EntityList.entity.types\";\n\n\n\n/**\n * A-EntityList\n * \n * Entity that represents a list of entities with pagination of particular type\n */\nexport class A_EntityList<\n EntityType extends A_Entity = A_Entity,\n> extends A_Entity<\n A_SERVER_TYPES__A_EntityListConstructor,\n A_SERVER_TYPES__A_EntityListSerialized\n> {\n\n static get scope(): string {\n return 'a-server';\n }\n\n protected _entityConstructor!: new (...args: ConstructorParameters<typeof A_Entity>) => EntityType;\n protected _items: Array<EntityType> = [];\n protected _pagination: A_SERVER_TYPES__A_EntityListPagination = {\n total: 0,\n page: 1,\n pageSize: 10\n };\n\n\n /**\n * Returns the entity constructor used for the list\n */\n get entityConstructor(): new (...args: ConstructorParameters<typeof A_Entity>) => EntityType {\n return this._entityConstructor;\n }\n\n /**\n * Returns the list of items contained in the entity list\n */\n get items(): Array<EntityType> {\n return this._items;\n }\n\n /**\n * Returns pagination information about the entity list\n */\n get pagination(): A_SERVER_TYPES__A_EntityListPagination {\n return this._pagination;\n }\n\n\n\n\n /**\n * Creates a new instance of A_EntityList\n * \n * @param newEntity \n */\n fromNew(newEntity: A_SERVER_TYPES__A_EntityListConstructor): void {\n this.aseid = new ASEID({\n concept: A_Context.root.name,\n scope: 'default',\n entity: 'a-list' + (newEntity.name ? `.${newEntity.name}` : ''),\n id: (new Date()).getTime().toString(),\n });\n\n this._entityConstructor = newEntity.constructor as new (...args: any[]) => EntityType;\n }\n\n\n\n /**\n * Allows to convert Repository Response data to EntityList instance\n * \n * [!] This method does not load the data from the repository, it only converts the data to the EntityList instance\n * \n * @param items \n * @param pagination \n */\n fromList(\n items: Array<EntityType> | Array<ReturnType<EntityType['toJSON']>>,\n pagination?: A_SERVER_TYPES__A_EntityListPagination\n ) {\n this._items = items.map(item => {\n if (item instanceof A_Entity) {\n return item as EntityType;\n } else {\n const entity = new this._entityConstructor(item);\n return entity;\n }\n });\n\n if (pagination) {\n this._pagination = {\n total: pagination.total,\n page: pagination.page,\n pageSize: pagination.pageSize\n }\n }\n }\n\n\n\n /**\n * Serializes the EntityList to a JSON object\n * \n * @returns \n */\n toJSON(): A_SERVER_TYPES__A_EntityListSerialized<EntityType> {\n return {\n ...super.toJSON(),\n items: this._items.map(i => i.toJSON()) as ReturnType<EntityType['toJSON']>[],\n pagination: this._pagination\n }\n }\n}\n","import { A_Container, A_Feature, A_Inject, } from \"@adaas/a-concept\";\nimport { A_SERVER_TYPES__ServerFeature } from \"@adaas/a-server/containers/A-Service/A-Service.container.types\";\nimport { A_Server } from \"@adaas/a-server/context/A-Server/A_Server.context\";\nimport { A_SERVER_TYPES__ServerLoggerEnvVariables, A_SERVER_TYPES__ServerLoggerRouteParams } from \"./A_ServerLogger.component.types\";\nimport { A_Service } from \"@adaas/a-server/containers/A-Service/A-Service.container\";\nimport { A_Request } from \"@adaas/a-server/entities/A-Request/A-Request.entity\";\nimport { A_Response } from \"@adaas/a-server/entities/A-Response/A-Response.entity\";\nimport { A_SERVER_TYPES__ResponseEvent } from \"@adaas/a-server/entities/A-Response/A-Response.entity.types\";\nimport { A_Route } from \"@adaas/a-server/entities/A-Route/A-Route.entity\";\nimport { A_SERVER_TYPES__RequestEvent } from \"@adaas/a-server/entities/A-Request/A-Request.entity.types\";\nimport { A_Config, A_Logger } from \"@adaas/a-utils\";\n\n\nexport class A_ServerLogger extends A_Logger {\n\n protected declare config: A_Config<A_SERVER_TYPES__ServerLoggerEnvVariables>\n\n\n @A_Feature.Extend({\n name: A_SERVER_TYPES__ResponseEvent.Finish,\n scope: [A_Response]\n })\n async onRequestEnd(\n @A_Inject(A_Request) request: A_Request,\n @A_Inject(A_Response) response: A_Response\n ) {\n\n this.route({\n method: request.method,\n url: request.url,\n status: response.statusCode,\n responseTime: response.duration\n });\n }\n\n\n @A_Feature.Extend({\n name: A_SERVER_TYPES__RequestEvent.Error,\n })\n async onRequestError(\n @A_Inject(A_Request) request: A_Request\n ) {\n }\n\n\n @A_Feature.Extend({\n name: A_SERVER_TYPES__ServerFeature.afterStart,\n scope: [A_Service]\n })\n logStart(\n @A_Inject(A_Service) container: A_Service,\n ): void {\n this.serverReady({\n port: container.port,\n app: {\n name: container.name,\n }\n })\n }\n\n\n\n\n @A_Feature.Extend({\n name: A_SERVER_TYPES__ServerFeature.afterStop,\n scope: [A_Service]\n })\n logStop(\n @A_Inject(A_Server) server: A_Server,\n ) {\n this.log('red', `Server ${server.name} stopped`);\n }\n\n\n\n\n metrics() {\n\n }\n\n\n\n routes(routes: Array<A_Route>) {\n const time = this.getTime();\n\n console.log(`\\x1b[36m[${this.scope.name}] |${time}| Exposed Routes:\n${' '.repeat(this.scopeLength + 3)}|-------------------------------\n${routes.map(route => `${' '.repeat(this.scopeLength + 3)}| [${route.method.toUpperCase()}]${' '.repeat(7 - route.method.length)} ${route.path}`).join('\\n')\n }\n${' '.repeat(this.scopeLength + 3)}|-------------------------------\\x1b[0m`);\n\n }\n\n /**\n * Logs the route information based on status code\n * \n * @param route \n */\n route(route: A_SERVER_TYPES__ServerLoggerRouteParams) {\n\n switch (route.status) {\n case 200:\n this.log200(route);\n break;\n case 404:\n this.log404(route);\n break;\n case 500:\n this.log500(route);\n break;\n case 400:\n this.log400(route);\n break;\n default:\n this.logDefault(route);\n break;\n }\n }\n\n\n log200(route: A_SERVER_TYPES__ServerLoggerRouteParams) {\n if (this.config.get('SERVER_IGNORE_LOG_200'))\n return\n console.log(`\\x1b[32m[${this.scope.name}] |${this.getTime()}| ${route.status} | [${route.method.toUpperCase()}]${' '.repeat(7 - route.method.length)} ${route.url} | ${route.responseTime}ms\\x1b[0m`);\n }\n\n log404(route: A_SERVER_TYPES__ServerLoggerRouteParams) {\n if (this.config.get('SERVER_IGNORE_LOG_404'))\n return;\n\n console.log(`\\x1b[33m[${this.scope.name}] |${this.getTime()}| ${route.status} | [${route.method.toUpperCase()}]${' '.repeat(7 - route.method.length)} ${route.url} | ${route.responseTime}ms\\x1b[0m`);\n }\n\n log500(route: A_SERVER_TYPES__ServerLoggerRouteParams) {\n if (this.config.get('SERVER_IGNORE_LOG_500'))\n return;\n\n console.log(`\\x1b[31m[${this.scope.name}] |${this.getTime()}| ${route.status} | [${route.method.toUpperCase()}]${' '.repeat(7 - route.method.length)} ${route.url} | ${route.responseTime}ms\\x1b[0m`);\n }\n\n log400(route: A_SERVER_TYPES__ServerLoggerRouteParams) {\n if (this.config.get('SERVER_IGNORE_LOG_400'))\n return;\n console.log(`\\x1b[33m[${this.scope.name}] |${this.getTime()}| ${route.status} | [${route.method.toUpperCase()}]${' '.repeat(7 - route.method.length)} ${route.url} | ${route.responseTime}ms\\x1b[0m`);\n }\n\n logDefault(route: A_SERVER_TYPES__ServerLoggerRouteParams) {\n if (this.config.get('SERVER_IGNORE_LOG_DEFAULT'))\n return\n console.log(`\\x1b[36m[${this.scope.name}] |${this.getTime()}| ${route.status} | [${route.method.toUpperCase()}]${' '.repeat(7 - route.method.length)} ${route.url} | ${route.responseTime}ms\\x1b[0m`);\n }\n\n\n serverReady(\n params: {\n port: number,\n\n app: {\n name: string,\n version?: string\n }\n }\n ) {\n const processId = process.pid;\n\n console.log(`\\x1b[36m[${this.scope.name}] |${this.getTime()}| Server Ready:\n${' '.repeat(this.scopeLength + 3)}|-------------------------------\n${' '.repeat(this.scopeLength + 3)}| ${params.app.name} v${params.app.version || '0.0.1'} is running on port ${params.port}\n${' '.repeat(this.scopeLength + 3)}| Process ID: ${processId}\n${' '.repeat(this.scopeLength + 3)}|-------------------------------\n${' '.repeat(this.scopeLength + 3)}| ==============================\n${' '.repeat(this.scopeLength + 3)}| LISTENING... \n${' '.repeat(this.scopeLength + 3)}| ==============================\n\\x1b[0m`);\n }\n\n\n /**\n * Displays a proxy routes \n * \n * @param params \n */\n proxy(\n params: {\n original: string,\n destination: string,\n }\n ) {\n console.log(`\\x1b[35m[${this.scope.name}] |${this.getTime()}| Proxy:\n${' '.repeat(this.scopeLength + 3)}| ${params.original} -> ${params.destination}\n${' '.repeat(this.scopeLength + 3)}|-------------------------------\\x1b[0m`);\n }\n\n}","import { A_Component, A_TYPES__ComponentMeta } from \"@adaas/a-concept\";\nimport { A_Route } from \"@adaas/a-server/entities/A-Route/A-Route.entity\";\n\n\nexport enum A_SERVER_TYPES__RouterMethod {\n POST = 'POST',\n GET = 'GET',\n PUT = 'PUT',\n DELETE = 'DELETE',\n PATCH = 'PATCH',\n DEFAULT = 'DEFAULT'\n}\n\n\nexport type A_TYPES__ARouterComponentMeta = {\n [A_SERVER_TYPES__ARouterComponentMetaKey.ROUTES]: Map<string, A_TYPES__ARouterDefineRoute>\n} & A_TYPES__ComponentMeta\n\n\nexport type A_TYPES__ARouterDefineRoute = {\n component: A_Component,\n handler: string,\n route: A_Route\n}\n\n\nexport enum A_SERVER_TYPES__ARouterComponentMetaKey {\n ROUTES = 'ROUTES'\n\n}\n\n\n\nexport type A_SERVER_TYPES__ARouterRouteConfig = {\n path: string | RegExp;\n version: string;\n prefix: string;\n} ","import {\n A_Component,\n A_Concept,\n A_Context,\n A_Feature,\n A_Feature_Define,\n A_Feature_Extend,\n A_IdentityHelper,\n A_Inject,\n A_Meta,\n A_Scope,\n A_TypeGuards\n} from \"@adaas/a-concept\";\nimport { A_Service } from \"@adaas/a-server/containers/A-Service/A-Service.container\";\nimport { A_SERVER_TYPES__ServerFeature } from \"@adaas/a-server/containers/A-Service/A-Service.container.types\";\nimport { A_Request } from \"@adaas/a-server/entities/A-Request/A-Request.entity\";\nimport {\n A_SERVER_TYPES__ARouterComponentMetaKey,\n A_SERVER_TYPES__ARouterRouteConfig,\n A_SERVER_TYPES__RouterMethod,\n A_TYPES__ARouterComponentMeta,\n A_TYPES__ARouterDefineRoute\n} from \"./A-Router.component.types\";\nimport { A_Route } from \"@adaas/a-server/entities/A-Route/A-Route.entity\";\nimport { A_Response } from \"@adaas/a-server/entities/A-Response/A-Response.entity\";\nimport { A_ServerLogger } from \"../A-ServerLogger/A_ServerLogger.component\";\nimport { A_TYPES__Required } from \"@adaas/a-concept/dist/src/types/A_Common.types\";\nimport { A_Config, A_Logger } from \"@adaas/a-utils\";\n\n\n\nexport class A_Router extends A_Component {\n\n // =======================================================\n // ================ Method Definition=====================\n // =======================================================\n\n /**\n * Allows to define a custom route for POST requests\n * \n * @param path \n * @returns \n */\n static Post(path: string | A_Route | RegExp | A_TYPES__Required<Partial<A_SERVER_TYPES__ARouterRouteConfig>, ['path']>) {\n\n\n return this.defineRoute({\n method: A_SERVER_TYPES__RouterMethod.POST,\n path: typeof path === 'object' && 'path' in path ? path.path : path,\n version: typeof path === 'object' && 'version' in path && path.version ? path.version : 'v1',\n prefix: typeof path === 'object' && 'prefix' in path && path.prefix ? path.prefix : 'api',\n });\n }\n\n /**\n * Allows to define a custom route for GET requests\n * \n * @param path \n * @returns \n */\n static Get(path: string | A_Route | RegExp | A_TYPES__Required<Partial<A_SERVER_TYPES__ARouterRouteConfig>, ['path']>) {\n return this.defineRoute({\n method: A_SERVER_TYPES__RouterMethod.GET,\n path: typeof path === 'object' && 'path' in path ? path.path : path,\n version: typeof path === 'object' && 'version' in path && path.version ? path.version : 'v1',\n prefix: typeof path === 'object' && 'prefix' in path && path.prefix ? path.prefix : 'api',\n });\n }\n\n /**\n * Allows to define a custom route for PUT requests\n * \n * @param path \n * @returns \n */\n static Put(path: string | A_Route | RegExp | A_TYPES__Required<Partial<A_SERVER_TYPES__ARouterRouteConfig>, ['path']>) {\n return this.defineRoute({\n method: A_SERVER_TYPES__RouterMethod.PUT,\n path: typeof path === 'object' && 'path' in path ? path.path : path,\n version: typeof path === 'object' && 'version' in path && path.version ? path.version : 'v1',\n prefix: typeof path === 'object' && 'prefix' in path && path.prefix ? path.prefix : 'api',\n });\n }\n\n /**\n * Allows to define a custom route for DELETE requests\n * \n * @param path \n * @returns \n */\n static Delete(path: string | A_Route | RegExp | A_TYPES__Required<Partial<A_SERVER_TYPES__ARouterRouteConfig>, ['path']>) {\n return this.defineRoute({\n method: A_SERVER_TYPES__RouterMethod.DELETE,\n path: typeof path === 'object' && 'path' in path ? path.path : path,\n version: typeof path === 'object' && 'version' in path && path.version ? path.version : 'v1',\n prefix: typeof path === 'object' && 'prefix' in path && path.prefix ? path.prefix : 'api',\n });\n }\n\n /**\n * Allows to define a custom route for PATCH requests\n * \n * @param path \n * @returns \n */\n static Patch(path: string | A_Route | RegExp | A_TYPES__Required<Partial<A_SERVER_TYPES__ARouterRouteConfig>, ['path']>) {\n return this.defineRoute({\n method: A_SERVER_TYPES__RouterMethod.PATCH,\n path: typeof path === 'object' && 'path' in path ? path.path : path,\n version: typeof path === 'object' && 'version' in path && path.version ? path.version : 'v1',\n prefix: typeof path === 'object' && 'prefix' in path && path.prefix ? path.prefix : 'api',\n });\n }\n\n /**\n * Allows to define a custom route for DEFAULT requests\n * \n * @param path \n * @returns \n */\n static Default(path: string | A_Route | RegExp | A_TYPES__Required<Partial<A_SERVER_TYPES__ARouterRouteConfig>, ['path']>) {\n return this.defineRoute({\n method: A_SERVER_TYPES__RouterMethod.DEFAULT,\n path: typeof path === 'object' && 'path' in path ? path.path : path,\n version: typeof path === 'object' && 'version' in path && path.version ? path.version : 'v1',\n prefix: typeof path === 'object' && 'prefix' in path && path.prefix ? path.prefix : 'api',\n });\n }\n\n\n static routes: Array<A_Route> = [];\n\n /**\n * Private method to have the same signature for all route methods\n * \n * @param method \n * @param path \n * @returns \n */\n private static defineRoute(\n config: A_SERVER_TYPES__ARouterRouteConfig & { method: A_SERVER_TYPES__RouterMethod }\n ) {\n const route = typeof config.path === 'string' || config.path instanceof RegExp\n ? new A_Route(\n `/${config.prefix}/${config.version}${config.path instanceof RegExp ? config.path.source : config.path.startsWith('/') ? config.path : `/${config.path}`}`,\n config.method)\n : config.path;\n\n this.routes.push(route);\n\n return function decorator(\n target: A_Component,\n propertyKey: string,\n descriptor: PropertyDescriptor\n ) {\n\n const meta: A_Meta<A_TYPES__ARouterComponentMeta> = A_Context.meta<A_TYPES__ARouterComponentMeta>(target as any);\n\n const routes = meta.get(A_SERVER_TYPES__ARouterComponentMetaKey.ROUTES) || new Map<string, A_TYPES__ARouterDefineRoute>();\n\n const searchKey = route.toAFeatureExtension(['A_Router', 'A_Service']);\n\n routes.set(searchKey.source, {\n component: target,\n handler: propertyKey,\n route\n });\n\n meta.set(A_SERVER_TYPES__ARouterComponentMetaKey.ROUTES, routes);\n\n A_Feature_Define({\n name: searchKey.source,\n invoke: false\n })(target, propertyKey, descriptor)\n\n return A_Feature_Extend(searchKey)(target, propertyKey, descriptor);\n }\n }\n\n\n // =====================================================\n // ================ Concept Lifecycle ========================\n // =====================================================\n\n @A_Concept.Load()\n protected async load(\n @A_Inject(A_ServerLogger) logger: A_ServerLogger\n ): Promise<void> {\n logger.routes(A_Router.routes);\n }\n\n\n\n // =======================================================\n // ================ Feature Definition=====================\n // =======================================================\n // @A_Feature.Define({\n // invoke: false\n // })\n @A_Feature.Extend({\n name: A_SERVER_TYPES__ServerFeature.onRequest,\n scope: [A_Service],\n })\n async identifyRoute(\n @A_Inject(A_Request) request: A_Request,\n @A_Inject(A_Response) response: A_Response,\n @A_Inject(A_Scope) scope: A_Scope,\n @A_Inject(A_Config) config: A_Config,\n @A_Inject(A_Logger) logger: A_Logger\n ) {\n\n const route = request.route;\n\n if (config.get('A_CONCEPT_ENVIRONMENT') === 'development') {\n logger.log(`Incoming request: ${request.method} ${request.url}`);\n logger.log(`Identified route: ${route.toString()}`);\n }\n\n\n /**\n * just execute all listeners on the Route\n * url example: /api/v1/users/123\n * OR\n * url example: /api/v1/users\n * => Then The feature will be \"GET::/api/v1/users\"\n * And it will return all stages that are similar to the feature name \n */\n\n const feature = new A_Feature({\n name: route.toString(),\n component: this,\n })\n\n\n for (const stage of feature) {\n if (A_TypeGuards.isComponentConstructor(stage.definition.component)) {\n\n const meta: A_Meta<A_TYPES__ARouterComponentMeta> = A_Context.meta<A_TYPES__ARouterComponentMeta>(stage.definition.component);\n\n const routes = meta.get(A_SERVER_TYPES__ARouterComponentMetaKey.ROUTES);\n\n if (routes) {\n const currentRoute = routes.get(stage.definition.name || '');\n\n if (currentRoute) {\n request.params = {\n ...request.params,\n ...currentRoute.route.extractParams(request.url)\n };\n }\n }\n }\n\n const stageScope = new A_Scope({\n name: `a-route--${A_IdentityHelper.generateTimeId()}`,\n entities: [request],\n }, {\n parent: scope\n });\n\n\n await stage.process(stageScope);\n }\n\n\n console.log('Finished processing route for request:', request.method, request.url);\n }\n}","import { A_Component, A_Context, A_Feature, A_Inject, A_Scope, A_TYPES__Entity_Constructor, ASEID } from \"@adaas/a-concept\";\nimport { A_Request } from \"@adaas/a-server/entities/A-Request/A-Request.entity\";\nimport { A_Router } from \"../A-Router/A-Router.component\";\nimport { A_EntityFactory } from \"@adaas/a-server/context/A-EntityFactory/A-EntityFactory.context\";\nimport { A_Response } from \"@adaas/a-server/entities/A-Response/A-Response.entity\";\nimport { A_ServerError } from \"../A-ServerError/A-ServerError.class\";\nimport { A_Config, A_Manifest } from \"@adaas/a-utils\";\nimport { A_ListQueryFilter } from \"@adaas/a-server/context/A-ListQueryFilter/A_ListQueryFilter.context\";\nimport { A_EntityList } from \"@adaas/a-server/entities/A_EntityList/A_EntityList.entity\";\n\n\n\nexport class A_EntityController extends A_Component {\n\n // =======================================================\n // ================ Method Definition=====================\n // =======================================================\n @A_Router.Get({\n path: '/:type',\n version: 'v1',\n prefix: 'a-list'\n })\n async list(\n @A_Inject(A_Request) request: A_Request<any, any, { type: string }>,\n @A_Inject(A_Response) response: A_Response,\n @A_Inject(A_EntityFactory) factory: A_EntityFactory,\n @A_Inject(A_Scope) scope: A_Scope,\n @A_Inject(A_Config) config: A_Config<['A_LIST_ITEMS_PER_PAGE', 'A_LIST_PAGE']>\n ) {\n\n const constructor = factory.resolveByName(request.params.type);\n\n if (constructor) {\n\n const entityList = new A_EntityList({\n name: request.params.type,\n scope: scope.name,\n constructor\n });\n\n scope.register(entityList);\n\n const queryFilter = new A_ListQueryFilter(request.query, {\n itemsPerPage: String(config.get('A_LIST_ITEMS_PER_PAGE') || '10'),\n page: String(config.get('A_LIST_PAGE') || '1')\n });\n\n const queryScope = new A_Scope({\n fragments: [queryFilter]\n }).inherit(scope);\n\n await entityList.load(queryScope);\n\n response.add('items', entityList.items);\n response.add('pagination', entityList.pagination);\n }\n }\n\n\n @A_Feature.Define({\n name: 'getEntity',\n invoke: false\n })\n @A_Router.Get({\n path: '/:aseid',\n version: 'v1',\n prefix: 'a-entity'\n })\n async load(\n @A_Inject(A_Request) request: A_Request<any, any, { aseid: string }>,\n @A_Inject(A_Response) response: A_Response,\n @A_Inject(A_Scope) scope: A_Scope\n ) {\n // Check if the scope has a manifest and if the entity is allowed to save\n // if (\n // scope.has(A_Manifest) && !scope.resolve(A_Manifest)\n // .isAllowed(entity.constructor, 'save')\n // .for(entity.constructor as A_TYPES__Entity_Constructor)\n // )\n // return;\n\n\n if (!ASEID.isASEID(request.params.aseid)) {\n response.add('A_EntityController.load', 'Invalid ASEID');\n return;\n }\n\n\n const aseid = new ASEID(request.params.aseid);\n\n const constructor = scope.resolveConstructor(aseid.entity);\n\n\n if (constructor) {\n const entity = new constructor(request.params.aseid);\n\n scope.register(entity);\n\n await entity.load();\n\n return response.status(200).json(entity.toJSON());\n }\n else\n throw new A_ServerError({\n title: 'Entity Not Found',\n description: `Entity constructor for ASEID ${request.params.aseid} not found`,\n status: 404,\n });\n }\n\n\n\n @A_Router.Post({\n path: '/',\n version: 'v1',\n prefix: 'a-entity'\n })\n async create(\n @A_Inject(A_Request) request: A_Request<any, any, { aseid: string }>,\n @A_Inject(A_EntityFactory) factory: A_EntityFactory,\n @A_Inject(A_Scope) scope: A_Scope\n ) {\n const constructor = factory.resolve(request.params.aseid);\n\n if (constructor) {\n const entity = new constructor(request.body);\n\n scope.register(entity);\n\n await entity.save();\n }\n }\n\n\n\n @A_Router.Put({\n path: '/:aseid',\n version: 'v1',\n prefix: 'a-entity'\n })\n async update(\n @A_Inject(A_Request) request: A_Request<any, any, { aseid: string }>,\n @A_Inject(A_Response) response: A_Response,\n @A_Inject(A_EntityFactory) factory: A_EntityFactory,\n @A_Inject(A_Scope) scope: A_Scope\n ) {\n if (!ASEID.isASEID(request.params.aseid)) {\n response.add('A_EntityController.update', 'Invalid ASEID');\n return;\n }\n\n const constructor = factory.resolve(request.params.aseid);\n\n\n if (constructor) {\n const entity = new constructor(request.body);\n\n scope.register(entity);\n\n await entity.save();\n }\n }\n\n\n @A_Router.Delete({\n path: '/:aseid',\n version: 'v1',\n prefix: 'a-entity'\n })\n async delete(\n @A_Inject(A_Request) request: A_Request<any, any, { aseid: string }>,\n @A_Inject(A_Response) response: A_Response,\n @A_Inject(A_EntityFactory) factory: A_EntityFactory,\n @A_Inject(A_Scope) scope: A_Scope\n ) {\n if (!ASEID.isASEID(request.params.aseid)) {\n response.add('A_EntityController.delete', 'Invalid ASEID');\n return;\n }\n\n const constructor = factory.resolve(request.params.aseid);\n\n if (constructor) {\n const entity = new constructor(request.params.aseid);\n\n scope.register(entity);\n\n await entity.destroy();\n }\n }\n\n\n\n // @A_Feature.Define({\n // name: 'callEntity',\n // invoke: false\n // })\n @A_Router.Post({\n path: '/:aseid/:action',\n version: 'v1',\n prefix: 'a-entity'\n })\n async callEntity(\n @A_Inject(A_Request) request: A_Request<any, any, { aseid: string, action: string }>,\n @A_Inject(A_Response) response: A_Response,\n @A_Inject(A_EntityFactory) factory: A_EntityFactory,\n @A_Inject(A_Scope) scope: A_Scope\n ) {\n if (!ASEID.isASEID(request.params.aseid)) {\n response.add('A_EntityController.callEntity', 'Invalid ASEID');\n return;\n }\n\n const constructor = factory.resolve(request.params.aseid);\n\n if (!constructor) {\n response.add('A_EntityController.callEntity', 'Entity not found');\n return;\n }\n\n const meta = A_Context.meta(constructor);\n\n const targetFeature = meta.features().find(f => f.name === `${constructor.name}.${request.params.action}`);\n\n if (!targetFeature) {\n response.add('A_EntityController.callEntity', 'Feature not found');\n return;\n }\n\n const entity = new constructor(request.params.aseid);\n\n scope.register(entity);\n\n await entity.load(scope);\n\n await entity[targetFeature.handler](scope);\n\n response.add('result', scope.toJSON());\n response.add('entity', entity);\n response.add('type', entity.aseid.entity);\n }\n}","import { A_Component, A_Inject } from \"@adaas/a-concept\";\nimport { A_Router } from \"../A-Router/A-Router.component\";\nimport { A_Request } from \"@adaas/a-server/entities/A-Request/A-Request.entity\";\nimport { A_Response } from \"@adaas/a-server/entities/A-Response/A-Response.entity\";\nimport { A_Config, A_Logger } from \"@adaas/a-utils\";\n\n\n\nexport class A_ServerHealthMonitor extends A_Component {\n\n\n // =======================================================\n // ================ Method Definition=====================\n // =======================================================\n\n @A_Router.Get({\n path: '/',\n prefix: 'health',\n version: 'v1',\n })\n async get(\n @A_Inject(A_Config) config: A_Config<['VERSION_PATH', 'EXPOSED_PROPERTIES']>,\n @A_Inject(A_Request) request: A_Request,\n @A_Inject(A_Response) response: A_Response,\n @A_Inject(A_Logger) logger: A_Logger\n ): Promise<any> {\n logger.log('Health check requested', config.get('A_CONCEPT_ROOT_FOLDER'));\n\n const packageJSON = await import(`${config.get('A_CONCEPT_ROOT_FOLDER')}/package.json`);\n const exposedProperties: Array<string> = config.get('EXPOSED_PROPERTIES')?.split(',') || [\n 'name',\n 'version',\n 'description',\n ];\n\n exposedProperties.forEach(prop => response.add(prop, packageJSON[prop]));\n\n console.log(`Health check accessed: ${request.method} ${request.url}`);\n }\n}","import { A_Component, A_Concept, A_Feature, A_Inject } from \"@adaas/a-concept\";\nimport { A_SERVER_TYPES__ServerFeature } from \"@adaas/a-server/containers/A-Service/A-Service.container.types\";\nimport { A_ProxyConfig } from \"@adaas/a-server/context/A-ProxyConfig/A_ProxyConfig.context\";\nimport { A_Request } from \"@adaas/a-server/entities/A-Request/A-Request.entity\";\nimport { A_Response } from \"@adaas/a-server/entities/A-Response/A-Response.entity\";\nimport { A_Route } from \"@adaas/a-server/entities/A-Route/A-Route.entity\";\nimport { A_Logger } from \"@adaas/a-utils\";\nimport http from \"http\";\nimport https from \"https\";\n\n\nexport class A_ServerProxy extends A_Component {\n\n\n @A_Concept.Load()\n async load(\n @A_Inject(A_Logger) logger: A_Logger,\n @A_Inject(A_ProxyConfig) config: A_ProxyConfig\n ) {\n logger.log(\n 'pink',\n `Proxy routes configured:`,\n config.configs.map(c => c.route).join('\\n')\n );\n }\n\n\n \n @A_Feature.Extend({\n name: A_SERVER_TYPES__ServerFeature.onRequest,\n })\n async onRequest(\n @A_Inject(A_Request) req: A_Request,\n @A_Inject(A_Response) res: A_Response,\n @A_Inject(A_ProxyConfig) proxyConfig: A_ProxyConfig,\n @A_Inject(A_Logger) logger: A_Logger\n ) {\n return new Promise<void>((resolve, reject) => {\n const { method, url } = req;\n\n const route = new A_Route(url, method);\n const config = proxyConfig.config(route.toString());\n\n if (!config) {\n return resolve(); // nothing to proxy\n }\n\n logger.log(\n \"yellow\",\n `Proxying request ${method} ${url} to ${config.hostname}`,\n config\n );\n\n const client = config.protocol === \"https:\" ? https : http;\n\n const proxyReq = client.request(\n {\n method: config.route.method,\n hostname: config.hostname,\n port: config.port,\n headers: config.headers,\n path: route.path,\n },\n (proxyRes) => {\n if (!res.headersSent) {\n res.writeHead(proxyRes.statusCode || 200, proxyRes.headers);\n }\n proxyRes.on(\"end\", () => {\n\n logger.log(\"green\", `Proxy request to ${config?.hostname} completed`);\n\n resolve();\n });\n\n proxyRes.pipe(res.original);\n }\n );\n\n proxyReq.on(\"error\", (err) => reject(err));\n\n req.pipe(proxyReq);\n });\n }\n\n}","import { A_SERVER_TYPES__CorsConfig } from \"./A_ServerCORS.component.types\";\n\n\n\nexport const A_SERVER_DEFAULTS__CorsConfig: A_SERVER_TYPES__CorsConfig = {\n origin: '*', // Default to allow all origins\n methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],\n headers: ['Content-Type'],\n credentials: false,\n maxAge: 0\n};\n","import { A_Component, A_Feature, A_Inject } from '@adaas/a-concept';\nimport { A_SERVER_TYPES__CorsConfig } from './A_ServerCORS.component.types';\nimport { A_SERVER_DEFAULTS__CorsConfig } from './A_ServerCORS.component.defaults';\nimport { A_SERVER_TYPES__ServerFeature } from '@adaas/a-server/containers/A-Service/A-Service.container.types';\nimport { A_Request } from '@adaas/a-server/entities/A-Request/A-Request.entity';\nimport { A_Response } from '@adaas/a-server/entities/A-Response/A-Response.entity';\nimport { A_Config } from '@adaas/a-utils';\n\n\nexport class A_ServerCORS extends A_Component {\n\n private config!: A_SERVER_TYPES__CorsConfig;\n\n @A_Feature.Extend({\n name: A_SERVER_TYPES__ServerFeature.beforeStart\n })\n async init(\n @A_Inject(A_Config) config: A_Config<['ORIGIN', 'METHODS', 'HEADERS', 'CREDENTIALS', 'MAX_AGE']>,\n ) {\n this.config = {\n origin: config.get('ORIGIN') || A_SERVER_DEFAULTS__CorsConfig.origin,\n methods: config.get('METHODS') || A_SERVER_DEFAULTS__CorsConfig.methods,\n headers: config.get('HEADERS') || A_SERVER_DEFAULTS__CorsConfig.headers,\n credentials: config.get('CREDENTIALS') || A_SERVER_DEFAULTS__CorsConfig.credentials,\n maxAge: config.get('MAX_AGE') || A_SERVER_DEFAULTS__CorsConfig.maxAge,\n };\n }\n\n\n @A_Feature.Extend({\n name: A_SERVER_TYPES__ServerFeature.beforeRequest\n })\n public apply(\n @A_Inject(A_Request) aReq: A_Request,\n @A_Inject(A_Response) aRes: A_Response,\n ) {\n\n aRes.setHeader('Access-Control-Allow-Origin', this.config.origin);\n aRes.setHeader('Access-Control-Allow-Methods', this.config.methods.join(', '));\n aRes.setHeader('Access-Control-Allow-Headers', this.config.headers.join(', '));\n\n if (this.config.credentials) {\n aRes.setHeader('Access-Control-Allow-Credentials', 'true');\n }\n\n if (this.config.maxAge) {\n aRes.setHeader('Access-Control-Max-Age', this.config.maxAge.toString());\n }\n\n // Handle preflight OPTIONS requests\n if (aReq.req.method === 'OPTIONS') {\n aRes.status(204).send();\n }\n }\n}\n","import { A_Component, A_Concept, A_Feature, A_Inject } from \"@adaas/a-concept\"\nimport fs from \"fs\";\nimport path from \"path\";\nimport { URL } from \"url\";\nimport { A_Request } from \"@adaas/a-server/entities/A-Request/A-Request.entity\";\nimport { A_Response } from \"@adaas/a-server/entities/A-Response/A-Response.entity\";\nimport { A_SERVER_TYPES__ServerFeature } from \"@adaas/a-server/containers/A-Service/A-Service.container.types\";\nimport { A_Route } from \"@adaas/a-server/entities/A-Route/A-Route.entity\";\nimport { A_StaticConfig } from \"@adaas/a-server/context/A-StaticConfig/A-StaticConfig.context\";\nimport { A_Logger } from \"@adaas/a-utils\";\n\n\nexport class A_StaticLoader extends A_Component {\n\n\n @A_Concept.Load()\n async load(\n @A_Inject(A_Logger) logger: A_Logger,\n @A_Inject(A_StaticConfig) config: A_StaticConfig\n ) {\n logger.log(\n 'pink',\n `Static directories configured:`,\n config.directories.join('\\n')\n );\n }\n\n\n // =======================================================\n // ================ Method Definition=====================\n // =======================================================\n\n @A_Feature.Extend({\n name: A_SERVER_TYPES__ServerFeature.onRequest,\n })\n async onRequest(\n @A_Inject(A_Request) req: A_Request,\n @A_Inject(A_Response) res: A_Response,\n @A_Inject(A_Logger) logger: A_Logger,\n @A_Inject(A_StaticConfig) config: A_StaticConfig\n ) {\n\n if (req.method !== 'GET' && req.method !== 'HEAD') {\n return; // Only handle GET and HEAD requests\n }\n\n const { method, url } = req;\n const route = new A_Route(url, method);\n\n const staticDirConfig = config.has(route.path)\n\n if (!staticDirConfig) {\n return; // No static config for this path\n }\n\n const staticDir = path.resolve(process.cwd(), staticDirConfig);\n\n if (!fs.existsSync(staticDir) || !fs.statSync(staticDir).isDirectory()) {\n logger.log(\"red\", `Static directory ${staticDir} does not exist or is not a directory.`);\n return;\n }\n\n await this.serveFile(route.path.startsWith('/') ? route.path.slice(1) : route.path, res);\n }\n\n\n\n protected getMimeType(ext: string): string {\n const mimeTypes: Record<string, string> = {\n \".html\": \"text/html\",\n \".js\": \"application/javascript\",\n \".css\": \"text/css\",\n \".json\": \"application/json\",\n \".png\": \"image/png\",\n \".jpg\": \"image/jpeg\",\n \".jpeg\": \"image/jpeg\",\n \".gif\": \"image/gif\",\n \".svg\": \"image/svg+xml\",\n \".ico\": \"image/x-icon\",\n \".txt\": \"text/plain\",\n };\n\n return mimeTypes[ext.toLowerCase()] || \"application/octet-stream\";\n }\n\n\n protected safeFilePath(staticDir: string, reqUrl: string, host?: string): string {\n const parsedUrl = new URL(reqUrl || \"/\", `http://${host || \"localhost\"}`);\n let pathname = decodeURIComponent(parsedUrl.pathname);\n\n // Prevent path traversal attacks\n pathname = pathname.replace(/\\.\\.[\\/\\\\]/g, \"\");\n\n let filePath = path.join(staticDir, pathname);\n if (!fs.existsSync(filePath))\n throw new Error(`File not found: ${filePath}`);\n\n return filePath;\n }\n\n\n protected serveFile(filePath: string, res: A_Response): Promise<void> {\n\n\n return new Promise<void>((resolve, reject) => {\n\n if (fs.existsSync(filePath)) {\n const ext = path.extname(filePath);\n const contentType = this.getMimeType(ext);\n\n res.writeHead(200, { \"Content-Type\": contentType });\n const stream = fs.createReadStream(filePath);\n stream.pipe(res.original);\n\n stream.on('end', () => {\n resolve();\n });\n\n stream.on(\"error\", (err) => {\n reject(new Error(`File stream error: ${err.message}`));\n });\n } else {\n reject(new Error(`File not found: ${filePath}`));\n }\n\n\n resolve();\n });\n }\n\n}\n\n\n","import { A_Component, A_Container, A_Context, A_Feature, A_Inject, A_Scope } from \"@adaas/a-concept\";\nimport { A_Router } from \"../A-Router/A-Router.component\";\nimport { A_Response } from \"@adaas/a-server/entities/A-Response/A-Response.entity\";\nimport { A_Request } from \"@adaas/a-server/entities/A-Request/A-Request.entity\";\n\n\n\nexport class A_Controller extends A_Component {\n\n\n @A_Router.Post({\n path: '/:component/:operation',\n version: 'v1',\n prefix: 'a-component'\n })\n async callEntityMethod(\n @A_Inject(A_Request) request: A_Request<any, any, {\n component: string,\n operation: string\n }>,\n @A_Inject(A_Response) response: A_Response,\n @A_Inject(A_Scope) scope: A_Scope\n ) {\n\n // check step by step each parameter to ensure they are valid\n\n if (!scope.has(request.params.component))\n return\n\n if (!request.params.operation || typeof request.params.operation !== 'string')\n return;\n\n\n const possibleComponent = scope.resolve(request.params.component);\n\n if (\n !possibleComponent\n ||\n ![A_Component, A_Container]\n .some(c => possibleComponent instanceof c)\n )\n return;\n\n const component = possibleComponent as A_Component | A_Container;\n\n const meta = A_Context.meta(component);\n\n const targetFeature = meta.features().find(f => f.name === `${component.constructor.name}.${request.params.operation}`);\n\n if (!targetFeature)\n return;\n\n\n await component.call(request.params.operation, scope);\n }\n}","import { A_Component, A_Feature, A_Inject, A_Scope } from \"@adaas/a-concept\"\nimport { A_EntityFactory } from \"@adaas/a-server/context/A-EntityFactory/A-EntityFactory.context\";\nimport { A_Request } from \"@adaas/a-server/entities/A-Request/A-Request.entity\";\nimport { A_Response } from \"@adaas/a-server/entities/A-Response/A-Response.entity\";\nimport { A_Router } from \"../A-Router/A-Router.component\";\nimport { A_EntityList } from \"@adaas/a-server/entities/A_EntityList/A_EntityList.entity\";\nimport { A_ListQueryFilter } from \"@adaas/a-server/context/A-ListQueryFilter/A_ListQueryFilter.context\";\nimport { A_Config } from \"@adaas/a-utils\";\n\n\n\nexport class A_ListingController extends A_Component {\n\n // @A_Feature.Define({\n // name: 'listEntities',\n // invoke: false\n // })\n @A_Router.Get({\n path: '/:type',\n version: 'v1',\n prefix: 'a-list'\n })\n async list(\n @A_Inject(A_Request) request: A_Request<any, any, { type: string }>,\n @A_Inject(A_Response) response: A_Response,\n @A_Inject(A_EntityFactory) factory: A_EntityFactory,\n @A_Inject(A_Scope) scope: A_Scope,\n @A_Inject(A_Config) config: A_Config<['A_LIST_ITEMS_PER_PAGE', 'A_LIST_PAGE']>\n ) {\n\n const constructor = factory.resolveByName(request.params.type);\n\n if (constructor) {\n\n const entityList = new A_EntityList({\n name: request.params.type,\n scope: scope.name,\n constructor\n });\n\n scope.register(entityList);\n\n const queryFilter = new A_ListQueryFilter(request.query, {\n itemsPerPage: String(config.get('A_LIST_ITEMS_PER_PAGE') || '10'),\n page: String(config.get('A_LIST_PAGE') || '1')\n });\n\n const queryScope = new A_Scope({\n fragments: [queryFilter]\n }).inherit(scope);\n\n await entityList.load(queryScope);\n\n response.add('items', entityList.items);\n response.add('pagination', entityList.pagination);\n }\n }\n}","import { A_Component, A_Container, A_Inject, A_Scope } from \"@adaas/a-concept\";\nimport { A_Router } from \"../A-Router/A-Router.component\";\nimport { A_Request } from \"@adaas/a-server/entities/A-Request/A-Request.entity\";\nimport { A_Response } from \"@adaas/a-server/entities/A-Response/A-Response.entity\";\nimport { A_Command } from \"@adaas/a-utils\";\n\n\nexport class A_CommandController extends A_Component {\n\n @A_Router.Get({\n path: \"/:command/execute\",\n version: \"v1\",\n prefix: \"a-command\"\n })\n async handleCommand(\n @A_Inject(A_Request) req: A_Request<any, any, { command: string }>,\n @A_Inject(A_Response) res: A_Response,\n @A_Inject(A_Scope) scope: A_Scope,\n @A_Inject(A_Container) container: A_Container,\n ): Promise<void> {\n\n const commandName = req.params.command;\n\n const CommandConstructor = scope.resolveConstructor<A_Command>(commandName);\n\n if (!CommandConstructor) {\n res.status(404);\n\n throw new Error(`Command ${commandName} not found`);\n }\n\n const command = new CommandConstructor(req.body);\n\n container.scope.register(command);\n\n await command.execute();\n\n const serialized = command.toJSON();\n\n return res.status(200).json(serialized);\n }\n\n}","import { A_Caller, A_Component, A_Entity, A_Feature, A_Inject, A_Scope, A_TYPES__Entity_Constructor } from \"@adaas/a-concept\";\nimport { A_TYPES__EntityFeatures } from \"@adaas/a-concept/dist/src/global/A-Entity/A-Entity.constants\";\nimport { A_HTTPChannel } from \"@adaas/a-server/channels/A-Http/A-Http.channel\";\nimport { A_EntityList } from \"@adaas/a-server/entities/A_EntityList/A_EntityList.entity\";\nimport { A_Manifest } from \"@adaas/a-utils\";\n\n\n\n\nexport class A_EntityRepository extends A_Component {\n\n @A_Feature.Extend({\n name: A_TYPES__EntityFeatures.LOAD,\n scope: {\n include: [A_EntityList]\n }\n })\n async list(\n @A_Inject(A_HTTPChannel) channel: A_HTTPChannel,\n @A_Inject(A_Caller) entity: A_EntityList,\n @A_Inject(A_Scope) scope: A_Scope,\n ) {\n // Check if the scope has a manifest and if the entity is allowed to load\n if (\n scope.has(A_Manifest) && !scope.resolve(A_Manifest)\n .isAllowed(entity.constructor, 'load')\n .for(entity.constructor as A_TYPES__Entity_Constructor)\n )\n return;\n\n const response = await channel.get(`/a-list/${entity.aseid.entity}`);\n\n entity.fromJSON(response.data);\n }\n\n\n @A_Feature.Extend({\n name: A_TYPES__EntityFeatures.LOAD,\n scope: {\n exclude: [A_EntityList]\n }\n })\n async load(\n @A_Inject(A_HTTPChannel) channel: A_HTTPChannel,\n @A_Inject(A_Caller) entity: A_Entity,\n @A_Inject(A_Scope) scope: A_Scope,\n ) {\n // Check if the scope has a manifest and if the entity is allowed to load\n if (\n scope.has(A_Manifest) && !scope.resolve(A_Manifest)\n .isAllowed(entity.constructor, 'load')\n .for(entity.constructor as A_TYPES__Entity_Constructor)\n )\n return;\n\n const response = await channel.get(`/a-entity/${entity.aseid.toString()}`);\n\n entity.fromJSON(response.data);\n }\n\n\n @A_Feature.Extend({\n name: A_TYPES__EntityFeatures.SAVE,\n scope: {\n exclude: [A_EntityList]\n }\n })\n async save(\n @A_Inject(A_HTTPChannel) channel: A_HTTPChannel,\n @A_Inject(A_Caller) entity: A_Entity,\n @A_Inject(A_Scope) scope: A_Scope,\n ) {\n // Check if the scope has a manifest and if the entity is allowed to save\n if (\n scope.has(A_Manifest) && !scope.resolve(A_Manifest)\n .isAllowed(entity.constructor, 'save')\n .for(entity.constructor as A_TYPES__Entity_Constructor)\n )\n return;\n\n const response = await channel.post(`/a-entity/${entity.aseid.toString()}`, entity.toJSON());\n\n entity.fromJSON(response.data);\n }\n\n\n @A_Feature.Extend({\n name: A_TYPES__EntityFeatures.DESTROY,\n scope: {\n exclude: [A_EntityList]\n }\n })\n async destroy(\n @A_Inject(A_HTTPChannel) channel: A_HTTPChannel,\n @A_Inject(A_Caller) entity: A_Entity,\n @A_Inject(A_Scope) scope: A_Scope,\n ) {\n // Check if the scope has a manifest and if the entity is allowed to destroy\n if (\n scope.has(A_Manifest) && !scope.resolve(A_Manifest)\n .isAllowed(entity.constructor, 'destroy')\n .for(entity.constructor as A_TYPES__Entity_Constructor)\n )\n return;\n\n const response = await channel.delete(`/a-entity/${entity.aseid.toString()}`);\n\n entity.fromJSON(response.data);\n }\n\n\n}"]}
|
|
1
|
+
{"version":3,"sources":["../src/containers/A-Service/A-Service.container.types.ts","../src/context/A-HttpChannel/A-HttpChannel.context.ts","../src/channels/A-Http/A-Http.channel.constants.ts","../src/components/A-ServerError/A-ServerError.class.ts","../src/channels/A-Http/A-Http.channel.error.ts","../src/channels/A-Http/A-Http.channel.ts","../src/constants/env.constants.ts","../src/context/A-Server/A_Server.context.ts","../src/entities/A-Request/A-Request.entity.types.ts","../src/entities/A-Route/A-Route.entity.ts","../src/entities/A-Request/A-Request.entity.ts","../src/entities/A-Response/A-Response.entity.types.ts","../src/entities/A-Response/A-Response.entity.ts","../src/containers/A-Service/A-Service.container.ts","../src/context/A-ProxyConfig/A_ProxyConfig.constants.ts","../src/context/A-ProxyConfig/A_ProxyConfig.context.ts","../src/context/A-StaticConfig/A-StaticConfig.context.ts","../src/context/A-ListQueryFilter/A_ListQueryFilter.context.ts","../src/context/A-EntityFactory/A-EntityFactory.context.ts","../src/entities/A_EntityList/A_EntityList.entity.ts","../src/components/A-ServerLogger/A_ServerLogger.component.ts","../src/components/A-Router/A-Router.component.types.ts","../src/components/A-Router/A-Router.component.ts","../src/components/A-EntityController/A-EntityController.component.ts","../src/components/A-ServerHealthMonitor/A-ServerHealthMonitor.component.ts","../src/components/A-ServerProxy/A-ServerProxy.component.ts","../src/components/A-ServerCORS/A_ServerCORS.component.defaults.ts","../src/components/A-ServerCORS/A_ServerCORS.component.ts","../src/components/A-StaticLoader/A-StaticLoader.component.ts","../src/components/A-Controller/A-Controller.component.ts","../src/components/A-ListingController/A-ListingController.component.ts","../src/components/A-CommandController/A-CommandController.component.ts","../src/components/A-EntityRepository/A-EntityRepository.component.ts"],"names":["A_SERVER_TYPES__ServerFeature","A_SERVER_TYPES__ServerMethod","A_SERVER_CONSTANTS__A_HttpChannel_Lifecycle","A_Error","path","A_Fragment","A_SERVER_TYPES__RequestEvent","A_Context","A_SERVER_TYPES__ResponseEvent","A_Entity","ASEID","config","A_Scope","A_Logger","A_IdentityHelper","A_Feature","A_Inject","A_SERVER_TYPES__RouterMethod","A_SERVER_TYPES__ARouterComponentMetaKey","A_Concept","A_Config","A_Component","A_Polyfill","URL","A_Container","A_Manifest"],"mappings":"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","file":"index.mjs","sourcesContent":["import { A_Component, A_Fragment } from \"@adaas/a-concept\";\n\n\nexport type A_SERVER_TYPES__ServerFeatures = [\n A_SERVER_TYPES__ServerFeature.beforeStart,\n A_SERVER_TYPES__ServerFeature.afterStart,\n A_SERVER_TYPES__ServerFeature.beforeStop,\n A_SERVER_TYPES__ServerFeature.afterStop,\n A_SERVER_TYPES__ServerFeature.onRequest\n]\n\nexport enum A_SERVER_TYPES__ServerFeature {\n beforeStart = 'beforeStart',\n afterStart = 'afterStart',\n beforeStop = 'beforeStop',\n afterStop = 'afterStop',\n beforeRequest = 'beforeRequest',\n onRequest = 'onRequest',\n afterRequest = 'afterRequest',\n}\n\n\nexport type A_SERVER_TYPES__ServerConstructor = {\n name: string,\n version: string,\n controllers: Array<A_Component>,\n entities: Array<A_Fragment>,\n extensions: Array<A_Component>\n}\n\n\n\nexport enum A_SERVER_TYPES__ServerMethod {\n GET = 'GET',\n POST = 'POST',\n PUT = 'PUT',\n DELETE = 'DELETE',\n PATCH = 'PATCH',\n OPTIONS = 'OPTIONS',\n HEAD = 'HEAD',\n CONNECT = 'CONNECT',\n TRACE = 'TRACE',\n DEFAULT = 'DEFAULT'\n}\n\n\n","import { A_Fragment } from \"@adaas/a-concept\";\nimport { A_SERVER_TYPES__ServerMethod } from \"@adaas/a-server/containers/A-Service/A-Service.container.types\";\nimport { A_SERVER_TYPES__HttpChannelRequestParams } from \"@adaas/a-server/channels/A-Http/A-Http.channel.types\";\n\n\n\n\n\nexport class A_HTTPChannel_RequestContext<\n T extends any = any\n> extends A_Fragment {\n url: string;\n method: A_SERVER_TYPES__ServerMethod;\n data?: any;\n config?: Partial<A_SERVER_TYPES__HttpChannelRequestParams['config']>;\n\n constructor(params: A_SERVER_TYPES__HttpChannelRequestParams) {\n super();\n\n const {\n method,\n url,\n data,\n config,\n } = params;\n\n this.url = url;\n this.method = method;\n this.data = data;\n this.config = config;\n }\n\n result?: T;\n error?: any;\n\n}\n","\n\n\nexport enum A_SERVER_CONSTANTS__A_HttpChannel_Lifecycle {\n onAfterRequest = 'onAfterHttpChannelRequest',\n onError = 'onHttpChannelError',\n onBeforeRequest = 'onBeforeHttpChannelRequest',\n}","import { A_Error } from '@adaas/a-concept';\nimport { A_SERVER_TYPES__ServerError_Init, A_SERVER_TYPES__ServerError_Serialized } from './A-ServerError.types';\n\n\nexport class A_ServerError extends A_Error<A_SERVER_TYPES__ServerError_Init, A_SERVER_TYPES__ServerError_Serialized> {\n\n status: number = 500;\n\n\n // constructor(\n // /**\n // * A_Error Constructor params\n // */\n // params: A_SERVER_TYPES__ServerError_Init\n // )\n // constructor(\n // /**\n // * HTTP Status Code of the error\n // */\n // status: number,\n // /**\n // * Error message\n // */\n // message: string\n // )\n // constructor(\n // /**\n // * Original JS Error\n // */\n // error: Error\n // )\n // constructor(\n // /**\n // * HTTP Status Code of the error\n // */\n // status: number,\n // /**\n // * Error message\n // */\n // title: string,\n // /**\n // * Detailed description of the error\n // */\n // description: string\n // )\n // constructor(\n // param1: A_SERVER_TYPES__ServerError_Init | Error | string | A_Error | number,\n // param2?: string | A_Error,\n // param3?: string\n // ) {\n // switch (true) {\n // case typeof param1 === 'number':\n // if (typeof param2 === 'string' && param3) {\n // super({\n // title: param2,\n // description: param3\n // });\n // }\n // else if (param2 instanceof A_Error) {\n // super(param2);\n // }\n // else {\n // super();\n // }\n // this.status = param1;\n // break;\n\n // case param1 instanceof A_Error:\n // super (param1);\n // break;\n // case param1 instanceof Error:\n // super (param1);\n // break;\n \n // default:\n // break;\n // }\n\n // }\n\n\n protected fromConstructor(params: A_SERVER_TYPES__ServerError_Init): void {\n super.fromConstructor(params);\n if (params.status) {\n this.status = params.status;\n }\n }\n\n\n toJSON(): A_SERVER_TYPES__ServerError_Serialized {\n return {\n ...super.toJSON(),\n status: this.status\n }\n }\n}\n\n\n","import { A_Error } from \"@adaas/a-concept\";\n\n\nexport class A_HTTPChannelError extends A_Error {\n\n static readonly HttpRequestError = 'HTTP Channel Request Error';\n\n}","import { A_Context, A_Scope } from \"@adaas/a-concept\";\nimport { A_SERVER_TYPES__ServerMethod } from \"../../containers/A-Service/A-Service.container.types\";\nimport { A_HTTPChannel_RequestContext } from \"../../context/A-HttpChannel/A-HttpChannel.context\";\nimport { A_SERVER_CONSTANTS__A_HttpChannel_Lifecycle } from \"./A-Http.channel.constants\";\nimport { A_ServerError } from \"@adaas/a-server/components/A-ServerError/A-ServerError.class\";\nimport { A_Channel } from \"@adaas/a-utils\";\nimport { A_HTTPChannelError } from \"./A-Http.channel.error\";\nimport { A_SERVER_TYPES__HttpChannelRequestConfig, A_SERVER_TYPES__HttpChannelRequestParams, A_SERVER_TYPES__HttpChannelSendParams } from \"./A-Http.channel.types\";\n\n\n\nexport class A_HTTPChannel extends A_Channel {\n\n protected baseUrl?: string;\n\n\n async connect(): Promise<void> {\n // keep it empty since HTTP channel does not require persistent connection\n return;\n }\n\n /**\n * Allows to send an HTTP request without expecting a response\n * \n * @param params \n */\n async send(params: A_SERVER_TYPES__HttpChannelSendParams): Promise<void> {\n this.request(params);\n }\n\n /**\n * Makes an HTTP request\n * \n * @param params \n * @returns \n */\n async request<T = any, M extends Record<string, any> = any>(\n /**\n * Provide request parameters\n */\n params: A_SERVER_TYPES__HttpChannelRequestParams<M>\n ): Promise<A_HTTPChannel_RequestContext<T>> {\n const { method, url, data, config } = params;\n\n await this.initialize;\n\n this._processing = true;\n\n const fullUrl = this.buildURL(url, config?.params);\n\n const requestScope = new A_Scope({ name: `a-http-channel-request-scope-${method}-${url}-${Date.now()}` });\n const context = new A_HTTPChannel_RequestContext({\n method,\n url,\n data,\n config\n });\n\n requestScope.inherit(A_Context.scope(this));\n requestScope.register(context);\n\n try {\n await this.call(A_SERVER_CONSTANTS__A_HttpChannel_Lifecycle.onBeforeRequest, requestScope);\n\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n ...config?.headers,\n };\n\n const options: RequestInit = {\n method,\n headers,\n };\n\n if (data && method !== A_SERVER_TYPES__ServerMethod.GET) {\n options.body = JSON.stringify(data);\n }\n\n const response = await fetch(fullUrl, options);\n\n if (!response.ok) {\n throw new A_ServerError({\n status: response.status,\n title: response.statusText,\n description: `HTTP request to ${fullUrl} failed with status ${response.status}`,\n });\n }\n\n context.result =\n config?.params?.responseType === \"text\"\n ? await response.text()\n : config?.params?.responseType === \"blob\"\n ? await response.blob()\n : await response.json();\n\n await this.call(A_SERVER_CONSTANTS__A_HttpChannel_Lifecycle.onAfterRequest, requestScope);\n\n this._processing = false;\n\n return context as A_HTTPChannel_RequestContext<T>;\n\n } catch (error) {\n\n this._processing = false;\n\n context.error = error;\n\n await this.call(A_SERVER_CONSTANTS__A_HttpChannel_Lifecycle.onError, requestScope);\n\n if (config?.throwOnError === false)\n return context as A_HTTPChannel_RequestContext<T>;\n else\n throw error;\n }\n }\n\n async post<T, M extends Record<string, any> = any>(\n url: string,\n body?: any,\n config?: Partial<A_SERVER_TYPES__HttpChannelRequestConfig>,\n ): Promise<A_HTTPChannel_RequestContext<T>> {\n return this.request<T, M>(\n {\n method: A_SERVER_TYPES__ServerMethod.POST,\n url,\n data: body,\n config,\n }\n );\n }\n\n async get<T, M extends Record<string, any> = any>(\n url: string,\n params?: any,\n config?: Partial<A_SERVER_TYPES__HttpChannelRequestConfig>,\n ): Promise<A_HTTPChannel_RequestContext<T>> {\n return this.request<T, M>(\n {\n method: A_SERVER_TYPES__ServerMethod.GET,\n url,\n config: {\n ...config,\n params,\n }\n }\n );\n }\n\n async put<T, M extends Record<string, any> = any>(\n url: string,\n body?: any,\n config?: Partial<A_SERVER_TYPES__HttpChannelRequestConfig>,\n ): Promise<A_HTTPChannel_RequestContext<T>> {\n return this.request<T, M>({\n method: A_SERVER_TYPES__ServerMethod.PUT,\n url,\n data: body,\n config,\n });\n }\n\n async delete<T, M extends Record<string, any> = any>(\n url: string,\n params?: any,\n config?: Partial<A_SERVER_TYPES__HttpChannelRequestConfig>,\n ): Promise<A_HTTPChannel_RequestContext<T>> {\n return this.request<T, M>({\n method: A_SERVER_TYPES__ServerMethod.DELETE,\n url,\n data: params,\n config,\n });\n }\n\n\n protected buildURL(path: string = '', params: Record<string, any> = {}): string {\n\n if (!this.baseUrl)\n throw new A_HTTPChannelError(\n A_HTTPChannelError.HttpRequestError,\n \"Base URL is not set for HTTP Channel\"\n );\n\n const url = new URL(`${this.baseUrl}${path.startsWith('/') ? path : `/${path}`}`);\n\n Object.keys(params).forEach(key => {\n if (params[key] !== undefined && params[key] !== null) {\n url.searchParams.append(key, params[key]);\n }\n });\n\n return url.toString()\n }\n}\n","export const A_SERVER_CONSTANTS__DEFAULT_ENV_VARIABLES = {\n // ----------------------------------------------------------\n // A-Server Environment Variables\n // ----------------------------------------------------------\n // These environment variables are used by A-Server to configure the application\n // ----------------------------------------------------------\n /**\n * Port for the server to listen on\n * [!] Default is 3000\n * @default 3000\n */\n A_SERVER_PORT: 'A_SERVER_PORT',\n\n} as const;\n\nexport type A_TYPES__ServerENVVariables = (typeof A_SERVER_CONSTANTS__DEFAULT_ENV_VARIABLES)[keyof typeof A_SERVER_CONSTANTS__DEFAULT_ENV_VARIABLES][];\n\n\n\nexport const A_SERVER_CONSTANTS__DEFAULT_ENV_VARIABLES_ARRAY = [\n A_SERVER_CONSTANTS__DEFAULT_ENV_VARIABLES.A_SERVER_PORT,\n] as const;\n\n\n\n\n","import { A_Fragment } from \"@adaas/a-concept\";\nimport { A_SERVER_TYPES__ServerConstructor } from \"./A_Server.context.types\";\nimport { A_Route } from \"@adaas/a-server/entities/A-Route/A-Route.entity\";\nimport { A_TYPES__Required } from \"@adaas/a-concept/dist/src/types/A_Common.types\";\n\n\nexport class A_Server extends A_Fragment {\n\n public port: number;\n public version: string;\n protected _routes: A_Route[] = [];\n\n constructor(\n params: A_TYPES__Required<Partial<A_SERVER_TYPES__ServerConstructor>, [\n 'port',\n 'name'\n ]>\n ) {\n super(params);\n\n this.port = params.port;\n this.name = params.name;\n this.version = params.version || 'v1';\n\n this._routes = params.routes || this._routes;\n }\n\n\n /**\n * A list of routes that the server will listen to\n */\n get routes(): A_Route[] {\n return this._routes\n }\n\n}\n\n\n","import type { IncomingMessage } from \"http\";\nimport { A_Request } from \"./A-Request.entity\";\nimport { A_TYPES__Entity_Serialized } from \"@adaas/a-concept\";\n\n\nexport type A_SERVER_TYPES__RequestConstructor = {\n /**\n * Should correspond to Response id\n */\n id: string,\n request: IncomingMessage,\n scope: string,\n};\n\nexport type A_SERVER_TYPES__RequestSerialized = {\n} & A_TYPES__Entity_Serialized;\n\n\n\nexport type A_SERVER_TYPES__RequestMethods = 'GET'\n | 'POST'\n | 'PUT'\n | 'DELETE'\n | 'PATCH'\n | 'OPTIONS'\n | 'HEAD'\n | 'CONNECT'\n | 'TRACE'\n | 'DEFAULT'; // Default is used for routes that do not have a method specified\n\n\nexport enum A_SERVER_TYPES__RequestEvent {\n Error = 'error',\n Finish = 'finish',\n Data = 'data',\n End = 'end',\n Close = 'close',\n}\n\n\nexport type A_SERVER_TYPES__RequestEventCallback = (request: A_Request) => void;","import { A_SERVER_TYPES__RequestMethods } from '../A-Request/A-Request.entity.types';\n\n\n\nexport class A_Route {\n\n public url!: string;\n public method!: A_SERVER_TYPES__RequestMethods;\n\n\n constructor(\n url: string | RegExp,\n method: A_SERVER_TYPES__RequestMethods\n )\n constructor(\n url: string | RegExp,\n )\n constructor(\n param1: string | RegExp,\n param2?: A_SERVER_TYPES__RequestMethods\n ) {\n\n this.url = param1 instanceof RegExp ? param1.source : param1;\n this.method = param2 || 'GET';\n\n }\n\n\n /**\n * returns path only without query and hash\n */\n get path(): string {\n const p = this.url.split('?')[0].split('#')[0];\n\n // ensure that last char is not /\n return p.endsWith('/') ? p.slice(0, -1) : p;\n }\n\n\n get params(): string[] {\n return this.path\n .match(/:([^\\/]+)/g)\n ?.map((param) => param.slice(1))\n || [];\n }\n\n\n \n\n\n extractParams(url: string): Record<string, string> {\n // Remove query string (anything after ?)\n const cleanUrl = url.split('?')[0];\n\n const urlSegments = cleanUrl.split('/').filter(Boolean);\n const maskSegments = this.path.split('/').filter(Boolean);\n\n const params: Record<string, string> = {};\n\n for (let i = 0; i < maskSegments.length; i++) {\n const maskSegment = maskSegments[i];\n const urlSegment = urlSegments[i];\n\n if (maskSegment.startsWith(':')) {\n const paramName = maskSegment.slice(1); // Remove ':' from mask\n params[paramName] = urlSegment;\n } else if (maskSegment !== urlSegment) {\n // If static segments don’t match → fail\n return {};\n }\n }\n\n return params;\n }\n\n extractQuery(url: string): Record<string, string> {\n const query: Record<string, string> = {};\n\n // Take only the part after \"?\"\n const queryString = url.split('?')[1];\n if (!queryString) return query;\n\n // Remove fragment (#...) if present\n const cleanQuery = queryString.split('#')[0];\n\n // Split into key=value pairs\n for (const pair of cleanQuery.split('&')) {\n if (!pair) continue;\n const [key, value = ''] = pair.split('=');\n query[decodeURIComponent(key)] = decodeURIComponent(value);\n }\n\n return query;\n }\n\n\n\n toString(): string {\n // path can be like /api/v1/users/:id\n // and because of that :id we need to replace it with regex that matches chars and numbers only \n return `${this.method}::${this.path }`;\n\n // .replace(/\\/:([^\\/]+)/g, '\\\\/([^\\/]+)')\n }\n\n toRegExp(): RegExp {\n return new RegExp(`^${this.method}::${this.path.replace(/\\/:([^\\/]+)/g, '/([^/]+)')}$`);\n }\n\n toAFeatureExtension(extensionScope: Array<string> = []): RegExp {\n return new RegExp(`^${extensionScope.length\n ? `(${extensionScope.join('|')})`\n : '.*'\n }\\\\.${this.method}::${this.path.replace(/\\/:([^\\/]+)/g, '/([^/]+)')}$`);\n }\n}\n\n","import type { IncomingHttpHeaders, IncomingMessage } from \"http\";\nimport { A_Context, A_Entity, A_IdentityHelper, ASEID, } from '@adaas/a-concept';\nimport {\n A_SERVER_TYPES__RequestConstructor,\n A_SERVER_TYPES__RequestEvent,\n A_SERVER_TYPES__RequestMethods,\n A_SERVER_TYPES__RequestSerialized\n} from \"./A-Request.entity.types\";\nimport { A_Route } from '../A-Route/A-Route.entity';\nimport { A_ServerError } from \"@adaas/a-server/components/A-ServerError/A-ServerError.class\";\n\n\nexport class A_Request<\n _ReqBodyType = any,\n _ResponseType = any,\n _ParamsType extends Record<string, string> = any,\n _QueryType = any,\n>\n extends A_Entity<\n A_SERVER_TYPES__RequestConstructor,\n A_SERVER_TYPES__RequestSerialized\n > {\n\n static get namespace(): string {\n return 'a-server';\n }\n\n req!: IncomingMessage;\n\n body: _ReqBodyType = {} as _ReqBodyType;\n params: _ParamsType = {} as _ParamsType;\n query: _QueryType = {} as _QueryType;\n response?: _ResponseType;\n\n error?: A_ServerError;\n\n /**\n * Duration of the request in milliseconds\n */\n duration: number = 0;\n\n fromNew(newEntity: A_SERVER_TYPES__RequestConstructor): void {\n this.req = newEntity.request;\n\n this.aseid = new ASEID({\n concept: A_Context.root.name,\n scope: newEntity.scope,\n entity: (this.constructor as typeof A_Request).entity,\n id: newEntity.id\n });\n }\n\n get startedAt(): Date | undefined {\n const timeId = A_IdentityHelper.parseTimeId(this.aseid.id.split('-')[0]);\n\n return timeId ? new Date(timeId.timestamp) : undefined;\n }\n\n\n\n // Getter for request URL\n public get url(): string {\n return this.req.url!;\n }\n\n // Getter for request method\n public get method(): A_SERVER_TYPES__RequestMethods {\n return (String(this.req.method).toUpperCase() as A_SERVER_TYPES__RequestMethods) || 'DEFAULT';\n }\n\n get headers(): IncomingHttpHeaders {\n return this.req.headers;\n }\n\n\n get route(): A_Route {\n return new A_Route(this.url, this.method);\n }\n\n\n pipe(\n destination: NodeJS.WritableStream,\n options?: { end?: boolean | undefined; }\n ): NodeJS.WritableStream {\n return this.req.pipe(destination, options);\n }\n\n\n\n async init(): Promise<void> {\n this.req.on('error', async (err) => {\n this.error = new A_ServerError(err);\n await this.call(A_SERVER_TYPES__RequestEvent.Error);\n });\n\n this.params = this.extractParams(this.url) as _ParamsType;\n this.query = this.extractQuery(this.url) as _QueryType;\n }\n\n\n extractParams(url: string): Record<string, string> {\n // Remove query string (anything after ?)\n const cleanUrl = url.split('?')[0];\n\n const urlSegments = cleanUrl.split('/').filter(Boolean);\n const maskSegments = this.url.split('/').filter(Boolean);\n\n const params: Record<string, string> = {};\n\n for (let i = 0; i < maskSegments.length; i++) {\n const maskSegment = maskSegments[i];\n const urlSegment = urlSegments[i];\n\n if (maskSegment.startsWith(':')) {\n const paramName = maskSegment.slice(1); // Remove ':' from mask\n params[paramName] = urlSegment;\n } else if (maskSegment !== urlSegment) {\n // If static segments don’t match → fail\n return {};\n }\n }\n\n return params;\n }\n\n extractQuery(url: string): Record<string, string> {\n const query: Record<string, string> = {};\n\n // Take only the part after \"?\"\n const queryString = url.split('?')[1];\n if (!queryString) return query;\n\n // Remove fragment (#...) if present\n const cleanQuery = queryString.split('#')[0];\n\n // Split into key=value pairs\n for (const pair of cleanQuery.split('&')) {\n if (!pair) continue;\n const [key, value = ''] = pair.split('=');\n query[decodeURIComponent(key)] = decodeURIComponent(value);\n }\n\n return query;\n }\n\n\n\n parseBody(): Promise<any> {\n return new Promise((resolve, reject) => {\n let body = '';\n this.req.on('data', chunk => body += chunk);\n this.req.on('end', () => {\n try {\n resolve(JSON.parse(body));\n } catch (err) {\n reject(err);\n }\n });\n this.req.on('error', reject);\n });\n }\n\n} ","import { A_TYPES__Entity_Serialized } from \"@adaas/a-concept\";\nimport type { ServerResponse } from \"http\";\n\n\nexport type A_SERVER_TYPES__ResponseConstructor = {\n /**\n * Should correspond to Request id\n */\n id: string,\n scope: string,\n response: ServerResponse,\n}\n\nexport enum A_SERVER_TYPES__ResponseEvent {\n Error = 'error',\n Finish = 'finish',\n Data = 'data',\n End = 'end',\n Close = 'close',\n}\n\nexport type A_SERVER_TYPES__ResponseSerialized = A_TYPES__Entity_Serialized;\n\n\nexport type A_SERVER_TYPES__SendResponseObject<_ResponseType = any> = \nRecord<string, _ResponseType> ;","import {\n A_Context,\n A_Entity,\n A_Error,\n A_Scope,\n ASEID,\n} from \"@adaas/a-concept\";\nimport type {\n IncomingHttpHeaders,\n ServerResponse\n} from \"http\";\nimport {\n A_SERVER_TYPES__ResponseConstructor,\n A_SERVER_TYPES__ResponseEvent,\n A_SERVER_TYPES__ResponseSerialized,\n A_SERVER_TYPES__SendResponseObject\n} from \"./A-Response.entity.types\";\nimport { A_ServerError } from \"@adaas/a-server/components/A-ServerError/A-ServerError.class\";\nimport { A_Logger } from \"@adaas/a-utils\";\n\n\n\n\nexport class A_Response<\n _ResponseType = any\n> extends A_Entity<\n A_SERVER_TYPES__ResponseConstructor,\n A_SERVER_TYPES__ResponseSerialized\n> {\n\n\n\n /**\n * Duration of the request in milliseconds\n */\n duration: number = 0;\n\n private res!: ServerResponse;\n private data: Map<string, _ResponseType> = new Map();\n error?: A_ServerError;\n\n\n fromNew(newEntity: A_SERVER_TYPES__ResponseConstructor): void {\n this.res = newEntity.response;\n\n this.aseid = new ASEID({\n concept: A_Context.root.name,\n scope: newEntity.scope,\n entity: (this.constructor as typeof A_Response).entity,\n id: newEntity.id\n });\n }\n\n get headersSent(): boolean {\n return this.res.headersSent;\n }\n\n get original() {\n return this.res;\n }\n\n get statusCode(): number {\n return this.res.statusCode;\n }\n\n async init(): Promise<void> {\n const startTime = process.hrtime();\n\n this.res.on('finish', async () => {\n const elapsedTime = process.hrtime(startTime);\n const elapsedMilliseconds = elapsedTime[0] * 1000 + elapsedTime[1] / 1e6;\n\n this.duration = elapsedMilliseconds;\n await this.call(A_SERVER_TYPES__ResponseEvent.Finish);\n });\n\n this.res.on('close', async () => {\n await this.call(A_SERVER_TYPES__ResponseEvent.Close)\n });\n\n }\n\n\n\n public failed(error: A_ServerError | A_Error | Error | any): void {\n switch (true) {\n case error instanceof A_ServerError:\n this.error = error;\n\n break;\n\n case error instanceof A_Error:\n this.error = new A_ServerError(error);\n\n break;\n\n default:\n this.error = new A_ServerError(error)\n\n break;\n }\n\n return this.status(this.error.status).json(this.error);\n }\n\n // Send a plain text or JSON response\n public send(\n data: string | object = this.toResponse()\n ): void {\n const logger = A_Context.scope(this).resolve(A_Logger);\n if (this.headersSent) {\n logger.warning('Response headers already sent, cannot send response again.');\n return;\n }\n\n try {\n switch (true) {\n case !!data && typeof data === 'object':\n return this.json(data);\n\n case !!data && typeof data === 'string':\n this.res.setHeader('Content-Type', 'text/plain');\n this.res.writeHead(this.statusCode);\n this.res.end(data);\n\n return;\n\n default:\n this.res.writeHead(this.statusCode);\n this.res.end(data);\n\n return;\n }\n } catch (error) {\n logger.warning('Response send error:', error);\n }\n }\n\n destroy(error: Error | unknown, scope?: A_Scope): Promise<any> {\n this.res.end();\n return super.destroy(scope);\n }\n\n // Explicit JSON response\n public json(\n data: object = this.toResponse()\n ): void {\n const logger = A_Context.scope(this).resolve(A_Logger);\n\n if (this.headersSent) {\n logger.warning('Response headers already sent, cannot send response again.');\n return;\n }\n this.res.setHeader('Content-Type', 'application/json');\n this.res.writeHead(this.statusCode);\n this.res.end(JSON.stringify(data));\n }\n\n // Set HTTP status code\n public status(code: number): this {\n this.res.statusCode = code;\n return this;\n }\n\n writeHead(statusCode: number, headers?: Record<string, string> | IncomingHttpHeaders | any) {\n this.res.writeHead(statusCode, headers);\n }\n\n\n setHeader(key: string, value: string) {\n this.res.setHeader(key, value);\n }\n\n getHeader(key: string): string | number | string[] | undefined {\n return this.res.getHeader(key) as string | number | string[] | undefined;\n }\n\n\n add(key: string, data: _ResponseType) {\n this.data.set(key, data);\n }\n\n\n toResponse(): A_SERVER_TYPES__SendResponseObject<_ResponseType> {\n return Array.from(this.data.entries()).reduce((acc, [key, value]) => {\n if (value instanceof A_Entity)\n acc[key] = value.toJSON();\n else\n\n acc[key] = value;\n return acc;\n }, {});\n }\n}","import type { IncomingMessage, Server, ServerResponse } from \"http\";\nimport { A_SERVER_TYPES__ServerFeature } from \"./A-Service.container.types\";\nimport { A_Server } from \"@adaas/a-server/context/A-Server/A_Server.context\";\nimport { A_Request } from \"@adaas/a-server/entities/A-Request/A-Request.entity\";\nimport { A_Response } from \"@adaas/a-server/entities/A-Response/A-Response.entity\";\nimport crypto from 'crypto';\nimport { A_SERVER_CONSTANTS__DEFAULT_ENV_VARIABLES_ARRAY, A_TYPES__ServerENVVariables } from \"@adaas/a-server/constants/env.constants\";\nimport { A_Concept, A_Container, A_Feature, A_IdentityHelper, A_Inject, A_Scope } from \"@adaas/a-concept\";\nimport { A_Config, A_Logger, A_Polyfill } from \"@adaas/a-utils\";\n\n\n\n\n/**\n * A-Service is a container that can run different types of services, such as HTTP servers, workers, etc.\n * Depending on the provided config and configuration, it will load the necessary components and start the service.\n * \n */\nexport class A_Service extends A_Container {\n\n private server!: Server;\n port!: number;\n\n @A_Concept.Load()\n async load(\n @A_Inject(A_Polyfill) polyfill: A_Polyfill\n ) {\n\n let config: A_Config<A_TYPES__ServerENVVariables>;\n let aServer: A_Server;\n\n if (!this.scope.has(A_Config<A_TYPES__ServerENVVariables>)) {\n const config = new A_Config<A_TYPES__ServerENVVariables>({\n variables: [...Array.from(A_SERVER_CONSTANTS__DEFAULT_ENV_VARIABLES_ARRAY)],\n defaults: {\n A_SERVER_PORT: 3000\n }\n });\n\n this.scope.register(config);\n }\n\n config = this.scope.resolve(A_Config) as A_Config<A_TYPES__ServerENVVariables>;\n\n\n if (!this.scope.has(A_Server)) {\n aServer = new A_Server({\n port: config.get('A_SERVER_PORT'),\n name: this.name,\n version: 'v1'\n });\n }\n\n // Set the server to listen on port 3000\n this.port = config.get('A_SERVER_PORT');\n\n const http = await polyfill.http();\n\n // Create the HTTP server\n this.server = http.createServer(this.onRequest.bind(this));\n\n }\n\n protected listen(): Promise<void> {\n return new Promise((resolve, reject) => {\n this.server.listen(this.port, () => {\n resolve();\n });\n });\n }\n\n protected close(): Promise<void> {\n return new Promise((resolve, reject) => {\n this.server.close(() => {\n resolve();\n });\n });\n }\n\n\n @A_Concept.Start()\n /**\n * Start the server\n */\n async start() {\n await this.beforeStart();\n\n await this.listen();\n\n await this.afterStart();\n }\n\n\n @A_Feature.Define({ invoke: true })\n async beforeStart() { }\n\n @A_Feature.Define({ invoke: true })\n async afterStart() { }\n\n\n\n @A_Concept.Stop()\n /**\n * Stop service \n */\n async stop() {\n await this.call(A_SERVER_TYPES__ServerFeature.beforeStop);\n\n await this.server.close();\n\n await this.call(A_SERVER_TYPES__ServerFeature.afterStop)\n }\n\n @A_Feature.Define({\n name: A_SERVER_TYPES__ServerFeature.beforeRequest,\n invoke: true\n })\n async beforeRequest(scope: A_Scope) { }\n\n @A_Feature.Define({\n name: A_SERVER_TYPES__ServerFeature.beforeRequest,\n invoke: true\n })\n async afterRequest(scope: A_Scope) { }\n\n @A_Feature.Define({\n name: A_SERVER_TYPES__ServerFeature.onRequest,\n invoke: false\n })\n async onRequest(\n request: IncomingMessage,\n response: ServerResponse\n ) {\n const scope = new A_Scope({\n name: `a-server-request::${Date.now()}`,\n });\n\n // We need it to stop feature execution in case request ends\n const { req, res } = await this.convertToAServer(request, response);\n\n try {\n scope.register(req);\n scope.register(res);\n\n scope.inherit(this.scope);\n\n await this.beforeRequest(scope);\n await this.call(A_SERVER_TYPES__ServerFeature.onRequest, scope);\n await this.afterRequest(scope);\n\n await res.status(200).send();\n\n } catch (error) {\n\n const logger = this.scope.resolve(A_Logger);\n\n logger.error(error);\n\n return res.failed(error);\n }\n }\n\n\n\n protected async convertToAServer(\n request: IncomingMessage,\n response: ServerResponse\n ): Promise<{ req: A_Request, res: A_Response }> {\n\n if (!request.method || !request.url)\n throw new Error('Request method or url is missing');\n\n const id = this.generateRequestId(request.method, request.url);\n\n const req = new A_Request({ id, request, scope: this.scope.name });\n const res = new A_Response({ id, response, scope: this.scope.name });\n\n await req.init();\n await res.init();\n\n return { req, res };\n }\n\n protected generateRequestId(\n method: string,\n url: string\n ): string {\n // Use the current time, request URL, and a few other details to create a unique ID\n const hash = crypto.createHash('sha256');\n const timeId = A_IdentityHelper.generateTimeId();\n const randomValue = Math.random().toString(); // Adds extra randomness\n\n hash.update(`${timeId}-${method}-${url}-${randomValue}`);\n return `${timeId}-${hash.digest('hex')}`;\n }\n\n @A_Feature.Define({ invoke: true })\n async beforeStop() { }\n\n @A_Feature.Define({ invoke: true })\n async afterStop() { }\n}","import { A_SERVER_TYPES__ProxyConfigConstructorConfig } from \"./A_ProxyConfig.types\";\n\nexport const PROXY_CONFIG_DEFAULTS: A_SERVER_TYPES__ProxyConfigConstructorConfig = {\n path: '/',\n hostname: 'localhost',\n port: 80,\n method: 'GET',\n headers: {},\n protocol: 'http'\n};\n","import { A_Fragment } from \"@adaas/a-concept\";\nimport { A_SERVER_TYPES__ProxyConfigConstructor, A_SERVER_TYPES__ProxyConfigConstructorConfig, A_SERVER_TYPES__RoutesConfig } from \"./A_ProxyConfig.types\";\nimport { PROXY_CONFIG_DEFAULTS } from \"./A_ProxyConfig.constants\";\nimport { A_Route } from \"@adaas/a-server/entities/A-Route/A-Route.entity\";\n\n\n\nexport class A_ProxyConfig extends A_Fragment {\n\n protected readonly _configs: Array<A_SERVER_TYPES__RoutesConfig>\n\n constructor(\n /**\n * Setup proxy configs, where key is the path to match, and value is either a full URL or a partial config object\n */\n configs: A_SERVER_TYPES__ProxyConfigConstructor = {}\n ) {\n super();\n\n this._configs = Object.entries(configs).map(([path, config]) => {\n\n const targetUrl = new URL(typeof config === 'string' ? config : config.hostname || ''); // parse hostname, may include scheme\n\n const port =\n targetUrl.port ||\n (targetUrl.protocol === \"https:\" ? '443' : '80');\n\n\n const prepared = {\n ...PROXY_CONFIG_DEFAULTS,\n ...(typeof config === 'string' ? {\n path,\n port: parseInt(port),\n protocol: targetUrl.protocol,\n hostname: targetUrl.hostname\n } : config)\n }\n\n return {\n route: new A_Route(prepared.path, prepared.method),\n hostname: prepared.hostname,\n port: prepared.port,\n headers: prepared.headers,\n protocol: prepared.protocol\n }\n });\n }\n\n /**\n * Returns all configured proxy configs\n * \n */\n get configs(): Array<A_SERVER_TYPES__RoutesConfig> {\n return this._configs;\n }\n\n\n /**\n * Checks if a given path is configured in the proxy\n * \n * @param path \n * @returns \n */\n has(path: string): boolean {\n return this._configs.some(route => route.route.toRegExp().test(path));\n }\n\n /**\n * Returns the proxy configuration for a given path, if exists\n *\n * @param path \n * @returns \n */\n config(path: string): A_SERVER_TYPES__RoutesConfig | undefined {\n \n\n return this._configs.find(route => route.route.toRegExp().test(path));\n }\n}","import { A_Fragment } from \"@adaas/a-concept\";\nimport { A_Route } from \"@adaas/a-server/entities/A-Route/A-Route.entity\";\n\n\n\nexport class A_StaticConfig extends A_Fragment {\n\n readonly directories: Array<string>\n\n constructor(\n /**\n * Setup directories to serve static files from, comma separated\n */\n directories: string[] = []\n ) {\n super();\n\n this.directories = directories;\n }\n\n\n\n /**\n * Checks if a given path is configured in the proxy\n * \n * @param path \n * @returns \n */\n has(path: string): false | string {\n\n const found = this.directories.find(dir => {\n return new RegExp(`^\\/${dir.startsWith('/') ? dir.slice(1) : dir}/?.*`).test(path)\n });\n return !!found && found;\n }\n}","import { A_Fragment } from \"@adaas/a-concept\";\n\n\n\nexport class A_ListQueryFilter<FilterFields extends string[]> extends A_Fragment {\n\n protected parsedQuery!: Record<FilterFields[number], string>;\n\n constructor(\n protected _query: string | Partial<Record<FilterFields[number], string>> = {},\n protected defaults: Partial<Record<FilterFields[number], string>> = {}\n ) {\n super();\n this.parsedQuery = this.parseQueryString(_query);\n }\n\n\n get query() {\n return this._query;\n }\n\n\n get(property: FilterFields[number], defaultValue: string = '') {\n return this.parsedQuery[property] || this.defaults[property] || defaultValue;\n }\n\n protected parseQueryString(value: string | Partial<Record<FilterFields[number], string>> = {}): Record<FilterFields[number], string> {\n if (typeof value === 'string') {\n return value.split('&').reduce((acc, part) => {\n const [key, val] = part.split('=');\n acc[decodeURIComponent(key)] = decodeURIComponent(val || '');\n return acc;\n }, {}) as Record<FilterFields[number], string>;\n }\n return value as Record<FilterFields[number], string>;\n }\n}","import { A_Entity, A_Fragment, ASEID } from \"@adaas/a-concept\"\nimport { A_SERVER_TYPES__AEntityFactoryConstructor1, A_SERVER_TYPES__AEntityFactoryConstructor2 } from \"./A-EntityFactory.context.types\";\n\n\nexport class A_EntityFactory extends A_Fragment {\n\n\n private _entities: Map<string, { new(...args: any[]): any }> = new Map();\n\n\n constructor(\n map: A_SERVER_TYPES__AEntityFactoryConstructor1\n )\n constructor(\n entities: A_SERVER_TYPES__AEntityFactoryConstructor2\n )\n constructor(\n map: A_SERVER_TYPES__AEntityFactoryConstructor1,\n entities: A_SERVER_TYPES__AEntityFactoryConstructor2\n )\n constructor(\n param1: A_SERVER_TYPES__AEntityFactoryConstructor1 | A_SERVER_TYPES__AEntityFactoryConstructor2,\n param2?: A_SERVER_TYPES__AEntityFactoryConstructor2\n ) {\n super();\n\n this._setEntities(param1);\n this._setEntities(param2);\n }\n\n\n protected _setEntities(\n entities: A_SERVER_TYPES__AEntityFactoryConstructor2 | A_SERVER_TYPES__AEntityFactoryConstructor1 = []\n ) {\n if (Array.isArray(entities)) {\n entities.forEach((entity) => {\n this._entities.set(entity.entity, entity);\n });\n } else {\n Object.keys(entities).forEach((key) => {\n this._entities.set(key, entities[key]);\n });\n }\n }\n\n\n add(\n key: string,\n entity: typeof A_Entity\n ): void\n add(\n entity: typeof A_Entity\n ): void\n add(\n param1: string | typeof A_Entity,\n param2?: typeof A_Entity\n ): void {\n switch (true) {\n case typeof param1 === 'string' && !!param2:\n this._entities.set(param1, param2);\n\n break;\n\n case typeof param1 !== 'string':\n this._entities.set(param1.entity, param1);\n\n break;\n }\n }\n \n\n\n has(\n aseid: ASEID\n ): boolean\n has(\n /**\n * The name of the entity\n */\n entity: string\n ): boolean\n has(\n /**\n * The ASEID of the entity\n */\n aseid: string\n ): boolean\n has(\n param1: string | ASEID\n ): boolean {\n let name: string;\n\n switch (true) {\n case param1 instanceof ASEID:\n name = param1.entity;\n\n break;\n\n case !(param1 instanceof ASEID) && ASEID.isASEID(param1):\n name = new ASEID(param1).entity;\n\n break;\n\n default:\n name = param1;\n\n break;\n }\n\n return this._entities.has(name);\n }\n\n\n /**\n * Resolves the entity constructor by the entity name\n * \n * @param entity \n */\n resolve(\n entity: string\n ): { new(...args: any[]): A_Entity } | undefined\n resolve(\n aseid: string\n ): { new(...args: any[]): A_Entity } | undefined\n resolve(\n aseid: ASEID\n ): { new(...args: any[]): A_Entity } | undefined\n resolve(\n param1: string | ASEID\n ): { new(...args: any[]): A_Entity } | undefined {\n\n let name: string;\n\n switch (true) {\n case param1 instanceof ASEID:\n name = param1.entity;\n\n break;\n\n case typeof param1 === 'string' && ASEID.isASEID(param1):\n\n name = new ASEID(param1).entity;\n\n break;\n\n default:\n name = param1;\n\n break;\n }\n\n return this._entities.get(name);\n }\n\n\n\n resolveByName(\n name: string\n ): { new(...args: any[]): A_Entity } | undefined {\n return this._entities.get(name);\n }\n\n}","import {\n A_Context, A_Entity,\n ASEID,\n} from \"@adaas/a-concept\";\nimport {\n A_SERVER_TYPES__A_EntityListConstructor,\n A_SERVER_TYPES__A_EntityListPagination,\n A_SERVER_TYPES__A_EntityListSerialized\n} from \"./A_EntityList.entity.types\";\n\n\n\n/**\n * A-EntityList\n * \n * Entity that represents a list of entities with pagination of particular type\n */\nexport class A_EntityList<\n EntityType extends A_Entity = A_Entity,\n> extends A_Entity<\n A_SERVER_TYPES__A_EntityListConstructor,\n A_SERVER_TYPES__A_EntityListSerialized\n> {\n\n static get scope(): string {\n return 'a-server';\n }\n\n protected _entityConstructor!: new (...args: ConstructorParameters<typeof A_Entity>) => EntityType;\n protected _items: Array<EntityType> = [];\n protected _pagination: A_SERVER_TYPES__A_EntityListPagination = {\n total: 0,\n page: 1,\n pageSize: 10\n };\n\n\n /**\n * Returns the entity constructor used for the list\n */\n get entityConstructor(): new (...args: ConstructorParameters<typeof A_Entity>) => EntityType {\n return this._entityConstructor;\n }\n\n /**\n * Returns the list of items contained in the entity list\n */\n get items(): Array<EntityType> {\n return this._items;\n }\n\n /**\n * Returns pagination information about the entity list\n */\n get pagination(): A_SERVER_TYPES__A_EntityListPagination {\n return this._pagination;\n }\n\n\n\n\n /**\n * Creates a new instance of A_EntityList\n * \n * @param newEntity \n */\n fromNew(newEntity: A_SERVER_TYPES__A_EntityListConstructor): void {\n this.aseid = new ASEID({\n concept: A_Context.root.name,\n scope: 'default',\n entity: 'a-list' + (newEntity.name ? `.${newEntity.name}` : ''),\n id: (new Date()).getTime().toString(),\n });\n\n this._entityConstructor = newEntity.constructor as new (...args: any[]) => EntityType;\n }\n\n\n\n /**\n * Allows to convert Repository Response data to EntityList instance\n * \n * [!] This method does not load the data from the repository, it only converts the data to the EntityList instance\n * \n * @param items \n * @param pagination \n */\n fromList(\n items: Array<EntityType> | Array<ReturnType<EntityType['toJSON']>>,\n pagination?: A_SERVER_TYPES__A_EntityListPagination\n ) {\n this._items = items.map(item => {\n if (item instanceof A_Entity) {\n return item as EntityType;\n } else {\n const entity = new this._entityConstructor(item);\n return entity;\n }\n });\n\n if (pagination) {\n this._pagination = {\n total: pagination.total,\n page: pagination.page,\n pageSize: pagination.pageSize\n }\n }\n }\n\n\n\n /**\n * Serializes the EntityList to a JSON object\n * \n * @returns \n */\n toJSON(): A_SERVER_TYPES__A_EntityListSerialized<EntityType> {\n return {\n ...super.toJSON(),\n items: this._items.map(i => i.toJSON()) as ReturnType<EntityType['toJSON']>[],\n pagination: this._pagination\n }\n }\n}\n","import { A_Container, A_Feature, A_Inject, } from \"@adaas/a-concept\";\nimport { A_SERVER_TYPES__ServerFeature } from \"@adaas/a-server/containers/A-Service/A-Service.container.types\";\nimport { A_Server } from \"@adaas/a-server/context/A-Server/A_Server.context\";\nimport { A_SERVER_TYPES__ServerLoggerEnvVariables, A_SERVER_TYPES__ServerLoggerRouteParams } from \"./A_ServerLogger.component.types\";\nimport { A_Service } from \"@adaas/a-server/containers/A-Service/A-Service.container\";\nimport { A_Request } from \"@adaas/a-server/entities/A-Request/A-Request.entity\";\nimport { A_Response } from \"@adaas/a-server/entities/A-Response/A-Response.entity\";\nimport { A_SERVER_TYPES__ResponseEvent } from \"@adaas/a-server/entities/A-Response/A-Response.entity.types\";\nimport { A_Route } from \"@adaas/a-server/entities/A-Route/A-Route.entity\";\nimport { A_SERVER_TYPES__RequestEvent } from \"@adaas/a-server/entities/A-Request/A-Request.entity.types\";\nimport { A_Config, A_Logger } from \"@adaas/a-utils\";\n\n\nexport class A_ServerLogger extends A_Logger {\n\n protected declare config: A_Config<A_SERVER_TYPES__ServerLoggerEnvVariables>\n\n\n @A_Feature.Extend({\n name: A_SERVER_TYPES__ResponseEvent.Finish,\n scope: [A_Response]\n })\n async onRequestEnd(\n @A_Inject(A_Request) request: A_Request,\n @A_Inject(A_Response) response: A_Response\n ) {\n\n this.route({\n method: request.method,\n url: request.url,\n status: response.statusCode,\n responseTime: response.duration\n });\n }\n\n\n @A_Feature.Extend({\n name: A_SERVER_TYPES__RequestEvent.Error,\n })\n async onRequestError(\n @A_Inject(A_Request) request: A_Request\n ) {\n }\n\n\n @A_Feature.Extend({\n name: A_SERVER_TYPES__ServerFeature.afterStart,\n scope: [A_Service]\n })\n logStart(\n @A_Inject(A_Service) container: A_Service,\n ): void {\n this.serverReady({\n port: container.port,\n app: {\n name: container.name,\n }\n })\n }\n\n\n\n\n @A_Feature.Extend({\n name: A_SERVER_TYPES__ServerFeature.afterStop,\n scope: [A_Service]\n })\n logStop(\n @A_Inject(A_Server) server: A_Server,\n ) {\n this.log('red', `Server ${server.name} stopped`);\n }\n\n\n\n\n metrics() {\n\n }\n\n\n\n routes(routes: Array<A_Route>) {\n const time = this.getTime();\n\n console.log(`\\x1b[36m[${this.scope.name}] |${time}| Exposed Routes:\n${' '.repeat(this.scopeLength + 3)}|-------------------------------\n${routes.map(route => `${' '.repeat(this.scopeLength + 3)}| [${route.method.toUpperCase()}]${' '.repeat(7 - route.method.length)} ${route.path}`).join('\\n')\n }\n${' '.repeat(this.scopeLength + 3)}|-------------------------------\\x1b[0m`);\n\n }\n\n /**\n * Logs the route information based on status code\n * \n * @param route \n */\n route(route: A_SERVER_TYPES__ServerLoggerRouteParams) {\n\n switch (route.status) {\n case 200:\n this.log200(route);\n break;\n case 404:\n this.log404(route);\n break;\n case 500:\n this.log500(route);\n break;\n case 400:\n this.log400(route);\n break;\n default:\n this.logDefault(route);\n break;\n }\n }\n\n\n log200(route: A_SERVER_TYPES__ServerLoggerRouteParams) {\n if (this.config.get('SERVER_IGNORE_LOG_200'))\n return\n console.log(`\\x1b[32m[${this.scope.name}] |${this.getTime()}| ${route.status} | [${route.method.toUpperCase()}]${' '.repeat(7 - route.method.length)} ${route.url} | ${route.responseTime}ms\\x1b[0m`);\n }\n\n log404(route: A_SERVER_TYPES__ServerLoggerRouteParams) {\n if (this.config.get('SERVER_IGNORE_LOG_404'))\n return;\n\n console.log(`\\x1b[33m[${this.scope.name}] |${this.getTime()}| ${route.status} | [${route.method.toUpperCase()}]${' '.repeat(7 - route.method.length)} ${route.url} | ${route.responseTime}ms\\x1b[0m`);\n }\n\n log500(route: A_SERVER_TYPES__ServerLoggerRouteParams) {\n if (this.config.get('SERVER_IGNORE_LOG_500'))\n return;\n\n console.log(`\\x1b[31m[${this.scope.name}] |${this.getTime()}| ${route.status} | [${route.method.toUpperCase()}]${' '.repeat(7 - route.method.length)} ${route.url} | ${route.responseTime}ms\\x1b[0m`);\n }\n\n log400(route: A_SERVER_TYPES__ServerLoggerRouteParams) {\n if (this.config.get('SERVER_IGNORE_LOG_400'))\n return;\n console.log(`\\x1b[33m[${this.scope.name}] |${this.getTime()}| ${route.status} | [${route.method.toUpperCase()}]${' '.repeat(7 - route.method.length)} ${route.url} | ${route.responseTime}ms\\x1b[0m`);\n }\n\n logDefault(route: A_SERVER_TYPES__ServerLoggerRouteParams) {\n if (this.config.get('SERVER_IGNORE_LOG_DEFAULT'))\n return\n console.log(`\\x1b[36m[${this.scope.name}] |${this.getTime()}| ${route.status} | [${route.method.toUpperCase()}]${' '.repeat(7 - route.method.length)} ${route.url} | ${route.responseTime}ms\\x1b[0m`);\n }\n\n\n serverReady(\n params: {\n port: number,\n\n app: {\n name: string,\n version?: string\n }\n }\n ) {\n const processId = process.pid;\n\n console.log(`\\x1b[36m[${this.scope.name}] |${this.getTime()}| Server Ready:\n${' '.repeat(this.scopeLength + 3)}|-------------------------------\n${' '.repeat(this.scopeLength + 3)}| ${params.app.name} v${params.app.version || '0.0.1'} is running on port ${params.port}\n${' '.repeat(this.scopeLength + 3)}| Process ID: ${processId}\n${' '.repeat(this.scopeLength + 3)}|-------------------------------\n${' '.repeat(this.scopeLength + 3)}| ==============================\n${' '.repeat(this.scopeLength + 3)}| LISTENING... \n${' '.repeat(this.scopeLength + 3)}| ==============================\n\\x1b[0m`);\n }\n\n\n /**\n * Displays a proxy routes \n * \n * @param params \n */\n proxy(\n params: {\n original: string,\n destination: string,\n }\n ) {\n console.log(`\\x1b[35m[${this.scope.name}] |${this.getTime()}| Proxy:\n${' '.repeat(this.scopeLength + 3)}| ${params.original} -> ${params.destination}\n${' '.repeat(this.scopeLength + 3)}|-------------------------------\\x1b[0m`);\n }\n\n}","import { A_Component, A_TYPES__ComponentMeta } from \"@adaas/a-concept\";\nimport { A_Route } from \"@adaas/a-server/entities/A-Route/A-Route.entity\";\n\n\nexport enum A_SERVER_TYPES__RouterMethod {\n POST = 'POST',\n GET = 'GET',\n PUT = 'PUT',\n DELETE = 'DELETE',\n PATCH = 'PATCH',\n DEFAULT = 'DEFAULT'\n}\n\n\nexport type A_TYPES__ARouterComponentMeta = {\n [A_SERVER_TYPES__ARouterComponentMetaKey.ROUTES]: Map<string, A_TYPES__ARouterDefineRoute>\n} & A_TYPES__ComponentMeta\n\n\nexport type A_TYPES__ARouterDefineRoute = {\n component: A_Component,\n handler: string,\n route: A_Route\n}\n\n\nexport enum A_SERVER_TYPES__ARouterComponentMetaKey {\n ROUTES = 'ROUTES'\n\n}\n\n\n\nexport type A_SERVER_TYPES__ARouterRouteConfig = {\n path: string | RegExp;\n version: string;\n prefix: string;\n} ","import {\n A_Component,\n A_Concept,\n A_Context,\n A_Feature,\n A_Feature_Define,\n A_Feature_Extend,\n A_IdentityHelper,\n A_Inject,\n A_Meta,\n A_Scope,\n A_TypeGuards\n} from \"@adaas/a-concept\";\nimport { A_Service } from \"@adaas/a-server/containers/A-Service/A-Service.container\";\nimport { A_SERVER_TYPES__ServerFeature } from \"@adaas/a-server/containers/A-Service/A-Service.container.types\";\nimport { A_Request } from \"@adaas/a-server/entities/A-Request/A-Request.entity\";\nimport {\n A_SERVER_TYPES__ARouterComponentMetaKey,\n A_SERVER_TYPES__ARouterRouteConfig,\n A_SERVER_TYPES__RouterMethod,\n A_TYPES__ARouterComponentMeta,\n A_TYPES__ARouterDefineRoute\n} from \"./A-Router.component.types\";\nimport { A_Route } from \"@adaas/a-server/entities/A-Route/A-Route.entity\";\nimport { A_Response } from \"@adaas/a-server/entities/A-Response/A-Response.entity\";\nimport { A_ServerLogger } from \"../A-ServerLogger/A_ServerLogger.component\";\nimport { A_TYPES__Required } from \"@adaas/a-concept/dist/src/types/A_Common.types\";\nimport { A_Config, A_Logger } from \"@adaas/a-utils\";\n\n\n\nexport class A_Router extends A_Component {\n\n // =======================================================\n // ================ Method Definition=====================\n // =======================================================\n\n /**\n * Allows to define a custom route for POST requests\n * \n * @param path \n * @returns \n */\n static Post(path: string | A_Route | RegExp | A_TYPES__Required<Partial<A_SERVER_TYPES__ARouterRouteConfig>, ['path']>) {\n\n\n return this.defineRoute({\n method: A_SERVER_TYPES__RouterMethod.POST,\n path: typeof path === 'object' && 'path' in path ? path.path : path,\n version: typeof path === 'object' && 'version' in path && path.version ? path.version : 'v1',\n prefix: typeof path === 'object' && 'prefix' in path && path.prefix ? path.prefix : 'api',\n });\n }\n\n /**\n * Allows to define a custom route for GET requests\n * \n * @param path \n * @returns \n */\n static Get(path: string | A_Route | RegExp | A_TYPES__Required<Partial<A_SERVER_TYPES__ARouterRouteConfig>, ['path']>) {\n return this.defineRoute({\n method: A_SERVER_TYPES__RouterMethod.GET,\n path: typeof path === 'object' && 'path' in path ? path.path : path,\n version: typeof path === 'object' && 'version' in path && path.version ? path.version : 'v1',\n prefix: typeof path === 'object' && 'prefix' in path && path.prefix ? path.prefix : 'api',\n });\n }\n\n /**\n * Allows to define a custom route for PUT requests\n * \n * @param path \n * @returns \n */\n static Put(path: string | A_Route | RegExp | A_TYPES__Required<Partial<A_SERVER_TYPES__ARouterRouteConfig>, ['path']>) {\n return this.defineRoute({\n method: A_SERVER_TYPES__RouterMethod.PUT,\n path: typeof path === 'object' && 'path' in path ? path.path : path,\n version: typeof path === 'object' && 'version' in path && path.version ? path.version : 'v1',\n prefix: typeof path === 'object' && 'prefix' in path && path.prefix ? path.prefix : 'api',\n });\n }\n\n /**\n * Allows to define a custom route for DELETE requests\n * \n * @param path \n * @returns \n */\n static Delete(path: string | A_Route | RegExp | A_TYPES__Required<Partial<A_SERVER_TYPES__ARouterRouteConfig>, ['path']>) {\n return this.defineRoute({\n method: A_SERVER_TYPES__RouterMethod.DELETE,\n path: typeof path === 'object' && 'path' in path ? path.path : path,\n version: typeof path === 'object' && 'version' in path && path.version ? path.version : 'v1',\n prefix: typeof path === 'object' && 'prefix' in path && path.prefix ? path.prefix : 'api',\n });\n }\n\n /**\n * Allows to define a custom route for PATCH requests\n * \n * @param path \n * @returns \n */\n static Patch(path: string | A_Route | RegExp | A_TYPES__Required<Partial<A_SERVER_TYPES__ARouterRouteConfig>, ['path']>) {\n return this.defineRoute({\n method: A_SERVER_TYPES__RouterMethod.PATCH,\n path: typeof path === 'object' && 'path' in path ? path.path : path,\n version: typeof path === 'object' && 'version' in path && path.version ? path.version : 'v1',\n prefix: typeof path === 'object' && 'prefix' in path && path.prefix ? path.prefix : 'api',\n });\n }\n\n /**\n * Allows to define a custom route for DEFAULT requests\n * \n * @param path \n * @returns \n */\n static Default(path: string | A_Route | RegExp | A_TYPES__Required<Partial<A_SERVER_TYPES__ARouterRouteConfig>, ['path']>) {\n return this.defineRoute({\n method: A_SERVER_TYPES__RouterMethod.DEFAULT,\n path: typeof path === 'object' && 'path' in path ? path.path : path,\n version: typeof path === 'object' && 'version' in path && path.version ? path.version : 'v1',\n prefix: typeof path === 'object' && 'prefix' in path && path.prefix ? path.prefix : 'api',\n });\n }\n\n\n static routes: Array<A_Route> = [];\n\n /**\n * Private method to have the same signature for all route methods\n * \n * @param method \n * @param path \n * @returns \n */\n private static defineRoute(\n config: A_SERVER_TYPES__ARouterRouteConfig & { method: A_SERVER_TYPES__RouterMethod }\n ) {\n const route = typeof config.path === 'string' || config.path instanceof RegExp\n ? new A_Route(\n `/${config.prefix}/${config.version}${config.path instanceof RegExp ? config.path.source : config.path.startsWith('/') ? config.path : `/${config.path}`}`,\n config.method)\n : config.path;\n\n this.routes.push(route);\n\n return function decorator(\n target: A_Component,\n propertyKey: string,\n descriptor: PropertyDescriptor\n ) {\n\n const meta: A_Meta<A_TYPES__ARouterComponentMeta> = A_Context.meta<A_TYPES__ARouterComponentMeta>(target as any);\n\n const routes = meta.get(A_SERVER_TYPES__ARouterComponentMetaKey.ROUTES) || new Map<string, A_TYPES__ARouterDefineRoute>();\n\n const searchKey = route.toAFeatureExtension(['A_Router', 'A_Service']);\n\n routes.set(searchKey.source, {\n component: target,\n handler: propertyKey,\n route\n });\n\n meta.set(A_SERVER_TYPES__ARouterComponentMetaKey.ROUTES, routes);\n\n A_Feature_Define({\n name: searchKey.source,\n invoke: false\n })(target, propertyKey, descriptor)\n\n return A_Feature_Extend(searchKey)(target, propertyKey, descriptor);\n }\n }\n\n\n // =====================================================\n // ================ Concept Lifecycle ========================\n // =====================================================\n\n @A_Concept.Load()\n protected async load(\n @A_Inject(A_ServerLogger) logger: A_ServerLogger\n ): Promise<void> {\n logger.routes(A_Router.routes);\n }\n\n\n\n // =======================================================\n // ================ Feature Definition=====================\n // =======================================================\n // @A_Feature.Define({\n // invoke: false\n // })\n @A_Feature.Extend({\n name: A_SERVER_TYPES__ServerFeature.onRequest,\n scope: [A_Service],\n })\n async identifyRoute(\n @A_Inject(A_Request) request: A_Request,\n @A_Inject(A_Response) response: A_Response,\n @A_Inject(A_Scope) scope: A_Scope,\n @A_Inject(A_Config) config: A_Config,\n @A_Inject(A_Logger) logger: A_Logger\n ) {\n\n const route = request.route;\n\n if (config.get('A_CONCEPT_ENVIRONMENT') === 'development') {\n logger.log(`Incoming request: ${request.method} ${request.url}`);\n logger.log(`Identified route: ${route.toString()}`);\n }\n\n\n /**\n * just execute all listeners on the Route\n * url example: /api/v1/users/123\n * OR\n * url example: /api/v1/users\n * => Then The feature will be \"GET::/api/v1/users\"\n * And it will return all stages that are similar to the feature name \n */\n\n const feature = new A_Feature({\n name: route.toString(),\n component: this,\n })\n\n\n for (const stage of feature) {\n if (A_TypeGuards.isComponentConstructor(stage.definition.component)) {\n\n const meta: A_Meta<A_TYPES__ARouterComponentMeta> = A_Context.meta<A_TYPES__ARouterComponentMeta>(stage.definition.component);\n\n const routes = meta.get(A_SERVER_TYPES__ARouterComponentMetaKey.ROUTES);\n\n if (routes) {\n const currentRoute = routes.get(stage.definition.name || '');\n\n if (currentRoute) {\n request.params = {\n ...request.params,\n ...currentRoute.route.extractParams(request.url)\n };\n }\n }\n }\n\n const stageScope = new A_Scope({\n name: `a-route--${A_IdentityHelper.generateTimeId()}`,\n entities: [request],\n }, {\n parent: scope\n });\n\n\n await stage.process(stageScope);\n }\n\n\n console.log('Finished processing route for request:', request.method, request.url);\n }\n}","import { A_Component, A_Context, A_Feature, A_Inject, A_Scope, A_TYPES__Entity_Constructor, ASEID } from \"@adaas/a-concept\";\nimport { A_Request } from \"@adaas/a-server/entities/A-Request/A-Request.entity\";\nimport { A_Router } from \"../A-Router/A-Router.component\";\nimport { A_EntityFactory } from \"@adaas/a-server/context/A-EntityFactory/A-EntityFactory.context\";\nimport { A_Response } from \"@adaas/a-server/entities/A-Response/A-Response.entity\";\nimport { A_ServerError } from \"../A-ServerError/A-ServerError.class\";\nimport { A_Config, A_Manifest } from \"@adaas/a-utils\";\nimport { A_ListQueryFilter } from \"@adaas/a-server/context/A-ListQueryFilter/A_ListQueryFilter.context\";\nimport { A_EntityList } from \"@adaas/a-server/entities/A_EntityList/A_EntityList.entity\";\n\n\n\nexport class A_EntityController extends A_Component {\n\n // =======================================================\n // ================ Method Definition=====================\n // =======================================================\n @A_Router.Get({\n path: '/:type',\n version: 'v1',\n prefix: 'a-list'\n })\n async list(\n @A_Inject(A_Request) request: A_Request<any, any, { type: string }>,\n @A_Inject(A_Response) response: A_Response,\n @A_Inject(A_EntityFactory) factory: A_EntityFactory,\n @A_Inject(A_Scope) scope: A_Scope,\n @A_Inject(A_Config) config: A_Config<['A_LIST_ITEMS_PER_PAGE', 'A_LIST_PAGE']>\n ) {\n\n const constructor = factory.resolveByName(request.params.type);\n\n if (constructor) {\n\n const entityList = new A_EntityList({\n name: request.params.type,\n scope: scope.name,\n constructor\n });\n\n scope.register(entityList);\n\n const queryFilter = new A_ListQueryFilter(request.query, {\n itemsPerPage: String(config.get('A_LIST_ITEMS_PER_PAGE') || '10'),\n page: String(config.get('A_LIST_PAGE') || '1')\n });\n\n const queryScope = new A_Scope({\n fragments: [queryFilter]\n }).inherit(scope);\n\n await entityList.load(queryScope);\n\n response.add('items', entityList.items);\n response.add('pagination', entityList.pagination);\n }\n }\n\n\n @A_Feature.Define({\n name: 'getEntity',\n invoke: false\n })\n @A_Router.Get({\n path: '/:aseid',\n version: 'v1',\n prefix: 'a-entity'\n })\n async load(\n @A_Inject(A_Request) request: A_Request<any, any, { aseid: string }>,\n @A_Inject(A_Response) response: A_Response,\n @A_Inject(A_Scope) scope: A_Scope\n ) {\n // Check if the scope has a manifest and if the entity is allowed to save\n // if (\n // scope.has(A_Manifest) && !scope.resolve(A_Manifest)\n // .isAllowed(entity.constructor, 'save')\n // .for(entity.constructor as A_TYPES__Entity_Constructor)\n // )\n // return;\n\n\n if (!ASEID.isASEID(request.params.aseid)) {\n response.add('A_EntityController.load', 'Invalid ASEID');\n return;\n }\n\n\n const aseid = new ASEID(request.params.aseid);\n\n const constructor = scope.resolveConstructor(aseid.entity);\n\n\n if (constructor) {\n const entity = new constructor(request.params.aseid);\n\n scope.register(entity);\n\n await entity.load();\n\n return response.status(200).json(entity.toJSON());\n }\n else\n throw new A_ServerError({\n title: 'Entity Not Found',\n description: `Entity constructor for ASEID ${request.params.aseid} not found`,\n status: 404,\n });\n }\n\n\n\n @A_Router.Post({\n path: '/',\n version: 'v1',\n prefix: 'a-entity'\n })\n async create(\n @A_Inject(A_Request) request: A_Request<any, any, { aseid: string }>,\n @A_Inject(A_EntityFactory) factory: A_EntityFactory,\n @A_Inject(A_Scope) scope: A_Scope\n ) {\n const constructor = factory.resolve(request.params.aseid);\n\n if (constructor) {\n const entity = new constructor(request.body);\n\n scope.register(entity);\n\n await entity.save();\n }\n }\n\n\n\n @A_Router.Put({\n path: '/:aseid',\n version: 'v1',\n prefix: 'a-entity'\n })\n async update(\n @A_Inject(A_Request) request: A_Request<any, any, { aseid: string }>,\n @A_Inject(A_Response) response: A_Response,\n @A_Inject(A_EntityFactory) factory: A_EntityFactory,\n @A_Inject(A_Scope) scope: A_Scope\n ) {\n if (!ASEID.isASEID(request.params.aseid)) {\n response.add('A_EntityController.update', 'Invalid ASEID');\n return;\n }\n\n const constructor = factory.resolve(request.params.aseid);\n\n\n if (constructor) {\n const entity = new constructor(request.body);\n\n scope.register(entity);\n\n await entity.save();\n }\n }\n\n\n @A_Router.Delete({\n path: '/:aseid',\n version: 'v1',\n prefix: 'a-entity'\n })\n async delete(\n @A_Inject(A_Request) request: A_Request<any, any, { aseid: string }>,\n @A_Inject(A_Response) response: A_Response,\n @A_Inject(A_EntityFactory) factory: A_EntityFactory,\n @A_Inject(A_Scope) scope: A_Scope\n ) {\n if (!ASEID.isASEID(request.params.aseid)) {\n response.add('A_EntityController.delete', 'Invalid ASEID');\n return;\n }\n\n const constructor = factory.resolve(request.params.aseid);\n\n if (constructor) {\n const entity = new constructor(request.params.aseid);\n\n scope.register(entity);\n\n await entity.destroy();\n }\n }\n\n\n\n // @A_Feature.Define({\n // name: 'callEntity',\n // invoke: false\n // })\n @A_Router.Post({\n path: '/:aseid/:action',\n version: 'v1',\n prefix: 'a-entity'\n })\n async callEntity(\n @A_Inject(A_Request) request: A_Request<any, any, { aseid: string, action: string }>,\n @A_Inject(A_Response) response: A_Response,\n @A_Inject(A_EntityFactory) factory: A_EntityFactory,\n @A_Inject(A_Scope) scope: A_Scope\n ) {\n if (!ASEID.isASEID(request.params.aseid)) {\n response.add('A_EntityController.callEntity', 'Invalid ASEID');\n return;\n }\n\n const constructor = factory.resolve(request.params.aseid);\n\n if (!constructor) {\n response.add('A_EntityController.callEntity', 'Entity not found');\n return;\n }\n\n const meta = A_Context.meta(constructor);\n\n const targetFeature = meta.features().find(f => f.name === `${constructor.name}.${request.params.action}`);\n\n if (!targetFeature) {\n response.add('A_EntityController.callEntity', 'Feature not found');\n return;\n }\n\n const entity = new constructor(request.params.aseid);\n\n scope.register(entity);\n\n await entity.load(scope);\n\n await entity[targetFeature.handler](scope);\n\n response.add('result', scope.toJSON());\n response.add('entity', entity);\n response.add('type', entity.aseid.entity);\n }\n}","import { A_Component, A_Inject } from \"@adaas/a-concept\";\nimport { A_Router } from \"../A-Router/A-Router.component\";\nimport { A_Request } from \"@adaas/a-server/entities/A-Request/A-Request.entity\";\nimport { A_Response } from \"@adaas/a-server/entities/A-Response/A-Response.entity\";\nimport { A_Config, A_Logger } from \"@adaas/a-utils\";\n\n\n\nexport class A_ServerHealthMonitor extends A_Component {\n\n\n // =======================================================\n // ================ Method Definition=====================\n // =======================================================\n\n @A_Router.Get({\n path: '/',\n prefix: 'health',\n version: 'v1',\n })\n async get(\n @A_Inject(A_Config) config: A_Config<['VERSION_PATH', 'EXPOSED_PROPERTIES']>,\n @A_Inject(A_Request) request: A_Request,\n @A_Inject(A_Response) response: A_Response,\n @A_Inject(A_Logger) logger: A_Logger\n ): Promise<any> {\n logger.log('Health check requested', config.get('A_CONCEPT_ROOT_FOLDER'));\n\n const packageJSON = await import(`${config.get('A_CONCEPT_ROOT_FOLDER')}/package.json`);\n const exposedProperties: Array<string> = config.get('EXPOSED_PROPERTIES')?.split(',') || [\n 'name',\n 'version',\n 'description',\n ];\n\n exposedProperties.forEach(prop => response.add(prop, packageJSON[prop]));\n\n console.log(`Health check accessed: ${request.method} ${request.url}`);\n }\n}","import { A_Component, A_Concept, A_Feature, A_Inject } from \"@adaas/a-concept\";\nimport { A_SERVER_TYPES__ServerFeature } from \"@adaas/a-server/containers/A-Service/A-Service.container.types\";\nimport { A_ProxyConfig } from \"@adaas/a-server/context/A-ProxyConfig/A_ProxyConfig.context\";\nimport { A_Request } from \"@adaas/a-server/entities/A-Request/A-Request.entity\";\nimport { A_Response } from \"@adaas/a-server/entities/A-Response/A-Response.entity\";\nimport { A_Route } from \"@adaas/a-server/entities/A-Route/A-Route.entity\";\nimport { A_Logger, A_Polyfill } from \"@adaas/a-utils\";\n\n\nexport class A_ServerProxy extends A_Component {\n\n\n @A_Concept.Load()\n async load(\n @A_Inject(A_Logger) logger: A_Logger,\n @A_Inject(A_ProxyConfig) config: A_ProxyConfig\n ) {\n logger.log(\n 'pink',\n `Proxy routes configured:`,\n config.configs.map(c => c.route).join('\\n')\n );\n }\n\n\n\n @A_Feature.Extend({\n name: A_SERVER_TYPES__ServerFeature.onRequest,\n })\n async onRequest(\n @A_Inject(A_Request) req: A_Request,\n @A_Inject(A_Response) res: A_Response,\n @A_Inject(A_ProxyConfig) proxyConfig: A_ProxyConfig,\n @A_Inject(A_Logger) logger: A_Logger,\n @A_Inject(A_Polyfill) polyfill: A_Polyfill\n ) {\n return new Promise<void>(async (resolve, reject) => {\n const { method, url } = req;\n\n const route = new A_Route(url, method);\n const config = proxyConfig.config(route.toString());\n\n if (!config) {\n return resolve(); // nothing to proxy\n }\n\n logger.log(\n \"yellow\",\n `Proxying request ${method} ${url} to ${config.hostname}`,\n config\n );\n\n const client = await (config.protocol === \"https:\"\n ? polyfill.https()\n : polyfill.http());\n\n const proxyReq = client.request(\n {\n method: config.route.method,\n hostname: config.hostname,\n port: config.port,\n headers: config.headers,\n path: route.path,\n },\n (proxyRes) => {\n if (!res.headersSent) {\n res.writeHead(proxyRes.statusCode || 200, proxyRes.headers);\n }\n proxyRes.on(\"end\", () => {\n\n logger.log(\"green\", `Proxy request to ${config?.hostname} completed`);\n\n resolve();\n });\n\n proxyRes.pipe(res.original);\n }\n );\n\n proxyReq.on(\"error\", (err) => reject(err));\n\n req.pipe(proxyReq);\n });\n }\n\n}","import { A_SERVER_TYPES__CorsConfig } from \"./A_ServerCORS.component.types\";\n\n\n\nexport const A_SERVER_DEFAULTS__CorsConfig: A_SERVER_TYPES__CorsConfig = {\n origin: '*', // Default to allow all origins\n methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],\n headers: ['Content-Type'],\n credentials: false,\n maxAge: 0\n};\n","import { A_Component, A_Feature, A_Inject } from '@adaas/a-concept';\nimport { A_SERVER_TYPES__CorsConfig } from './A_ServerCORS.component.types';\nimport { A_SERVER_DEFAULTS__CorsConfig } from './A_ServerCORS.component.defaults';\nimport { A_SERVER_TYPES__ServerFeature } from '@adaas/a-server/containers/A-Service/A-Service.container.types';\nimport { A_Request } from '@adaas/a-server/entities/A-Request/A-Request.entity';\nimport { A_Response } from '@adaas/a-server/entities/A-Response/A-Response.entity';\nimport { A_Config } from '@adaas/a-utils';\n\n\nexport class A_ServerCORS extends A_Component {\n\n private config!: A_SERVER_TYPES__CorsConfig;\n\n @A_Feature.Extend({\n name: A_SERVER_TYPES__ServerFeature.beforeStart\n })\n async init(\n @A_Inject(A_Config) config: A_Config<['ORIGIN', 'METHODS', 'HEADERS', 'CREDENTIALS', 'MAX_AGE']>,\n ) {\n this.config = {\n origin: config.get('ORIGIN') || A_SERVER_DEFAULTS__CorsConfig.origin,\n methods: config.get('METHODS') || A_SERVER_DEFAULTS__CorsConfig.methods,\n headers: config.get('HEADERS') || A_SERVER_DEFAULTS__CorsConfig.headers,\n credentials: config.get('CREDENTIALS') || A_SERVER_DEFAULTS__CorsConfig.credentials,\n maxAge: config.get('MAX_AGE') || A_SERVER_DEFAULTS__CorsConfig.maxAge,\n };\n }\n\n\n @A_Feature.Extend({\n name: A_SERVER_TYPES__ServerFeature.beforeRequest\n })\n public apply(\n @A_Inject(A_Request) aReq: A_Request,\n @A_Inject(A_Response) aRes: A_Response,\n ) {\n\n aRes.setHeader('Access-Control-Allow-Origin', this.config.origin);\n aRes.setHeader('Access-Control-Allow-Methods', this.config.methods.join(', '));\n aRes.setHeader('Access-Control-Allow-Headers', this.config.headers.join(', '));\n\n if (this.config.credentials) {\n aRes.setHeader('Access-Control-Allow-Credentials', 'true');\n }\n\n if (this.config.maxAge) {\n aRes.setHeader('Access-Control-Max-Age', this.config.maxAge.toString());\n }\n\n // Handle preflight OPTIONS requests\n if (aReq.req.method === 'OPTIONS') {\n aRes.status(204).send();\n }\n }\n}\n","import { A_Component, A_Concept, A_Feature, A_Inject } from \"@adaas/a-concept\"\nimport fs from \"fs\";\nimport path from \"path\";\nimport { URL } from \"url\";\nimport { A_Request } from \"@adaas/a-server/entities/A-Request/A-Request.entity\";\nimport { A_Response } from \"@adaas/a-server/entities/A-Response/A-Response.entity\";\nimport { A_SERVER_TYPES__ServerFeature } from \"@adaas/a-server/containers/A-Service/A-Service.container.types\";\nimport { A_Route } from \"@adaas/a-server/entities/A-Route/A-Route.entity\";\nimport { A_StaticConfig } from \"@adaas/a-server/context/A-StaticConfig/A-StaticConfig.context\";\nimport { A_Logger } from \"@adaas/a-utils\";\n\n\nexport class A_StaticLoader extends A_Component {\n\n\n @A_Concept.Load()\n async load(\n @A_Inject(A_Logger) logger: A_Logger,\n @A_Inject(A_StaticConfig) config: A_StaticConfig\n ) {\n logger.log(\n 'pink',\n `Static directories configured:`,\n config.directories.join('\\n')\n );\n }\n\n\n // =======================================================\n // ================ Method Definition=====================\n // =======================================================\n\n @A_Feature.Extend({\n name: A_SERVER_TYPES__ServerFeature.onRequest,\n })\n async onRequest(\n @A_Inject(A_Request) req: A_Request,\n @A_Inject(A_Response) res: A_Response,\n @A_Inject(A_Logger) logger: A_Logger,\n @A_Inject(A_StaticConfig) config: A_StaticConfig\n ) {\n\n if (req.method !== 'GET' && req.method !== 'HEAD') {\n return; // Only handle GET and HEAD requests\n }\n\n const { method, url } = req;\n const route = new A_Route(url, method);\n\n const staticDirConfig = config.has(route.path)\n\n if (!staticDirConfig) {\n return; // No static config for this path\n }\n\n const staticDir = path.resolve(process.cwd(), staticDirConfig);\n\n if (!fs.existsSync(staticDir) || !fs.statSync(staticDir).isDirectory()) {\n logger.log(\"red\", `Static directory ${staticDir} does not exist or is not a directory.`);\n return;\n }\n\n await this.serveFile(route.path.startsWith('/') ? route.path.slice(1) : route.path, res);\n }\n\n\n\n protected getMimeType(ext: string): string {\n const mimeTypes: Record<string, string> = {\n \".html\": \"text/html\",\n \".js\": \"application/javascript\",\n \".css\": \"text/css\",\n \".json\": \"application/json\",\n \".png\": \"image/png\",\n \".jpg\": \"image/jpeg\",\n \".jpeg\": \"image/jpeg\",\n \".gif\": \"image/gif\",\n \".svg\": \"image/svg+xml\",\n \".ico\": \"image/x-icon\",\n \".txt\": \"text/plain\",\n };\n\n return mimeTypes[ext.toLowerCase()] || \"application/octet-stream\";\n }\n\n\n protected safeFilePath(staticDir: string, reqUrl: string, host?: string): string {\n const parsedUrl = new URL(reqUrl || \"/\", `http://${host || \"localhost\"}`);\n let pathname = decodeURIComponent(parsedUrl.pathname);\n\n // Prevent path traversal attacks\n pathname = pathname.replace(/\\.\\.[\\/\\\\]/g, \"\");\n\n let filePath = path.join(staticDir, pathname);\n if (!fs.existsSync(filePath))\n throw new Error(`File not found: ${filePath}`);\n\n return filePath;\n }\n\n\n protected serveFile(filePath: string, res: A_Response): Promise<void> {\n\n\n return new Promise<void>((resolve, reject) => {\n\n if (fs.existsSync(filePath)) {\n const ext = path.extname(filePath);\n const contentType = this.getMimeType(ext);\n\n res.writeHead(200, { \"Content-Type\": contentType });\n const stream = fs.createReadStream(filePath);\n stream.pipe(res.original);\n\n stream.on('end', () => {\n resolve();\n });\n\n stream.on(\"error\", (err) => {\n reject(new Error(`File stream error: ${err.message}`));\n });\n } else {\n reject(new Error(`File not found: ${filePath}`));\n }\n\n\n resolve();\n });\n }\n\n}\n\n\n","import { A_Component, A_Container, A_Context, A_Feature, A_Inject, A_Scope } from \"@adaas/a-concept\";\nimport { A_Router } from \"../A-Router/A-Router.component\";\nimport { A_Response } from \"@adaas/a-server/entities/A-Response/A-Response.entity\";\nimport { A_Request } from \"@adaas/a-server/entities/A-Request/A-Request.entity\";\n\n\n\nexport class A_Controller extends A_Component {\n\n\n @A_Router.Post({\n path: '/:component/:operation',\n version: 'v1',\n prefix: 'a-component'\n })\n async callEntityMethod(\n @A_Inject(A_Request) request: A_Request<any, any, {\n component: string,\n operation: string\n }>,\n @A_Inject(A_Response) response: A_Response,\n @A_Inject(A_Scope) scope: A_Scope\n ) {\n\n // check step by step each parameter to ensure they are valid\n\n if (!scope.has(request.params.component))\n return\n\n if (!request.params.operation || typeof request.params.operation !== 'string')\n return;\n\n\n const possibleComponent = scope.resolve(request.params.component);\n\n if (\n !possibleComponent\n ||\n ![A_Component, A_Container]\n .some(c => possibleComponent instanceof c)\n )\n return;\n\n const component = possibleComponent as A_Component | A_Container;\n\n const meta = A_Context.meta(component);\n\n const targetFeature = meta.features().find(f => f.name === `${component.constructor.name}.${request.params.operation}`);\n\n if (!targetFeature)\n return;\n\n\n await component.call(request.params.operation, scope);\n }\n}","import { A_Component, A_Feature, A_Inject, A_Scope } from \"@adaas/a-concept\"\nimport { A_EntityFactory } from \"@adaas/a-server/context/A-EntityFactory/A-EntityFactory.context\";\nimport { A_Request } from \"@adaas/a-server/entities/A-Request/A-Request.entity\";\nimport { A_Response } from \"@adaas/a-server/entities/A-Response/A-Response.entity\";\nimport { A_Router } from \"../A-Router/A-Router.component\";\nimport { A_EntityList } from \"@adaas/a-server/entities/A_EntityList/A_EntityList.entity\";\nimport { A_ListQueryFilter } from \"@adaas/a-server/context/A-ListQueryFilter/A_ListQueryFilter.context\";\nimport { A_Config } from \"@adaas/a-utils\";\n\n\n\nexport class A_ListingController extends A_Component {\n\n // @A_Feature.Define({\n // name: 'listEntities',\n // invoke: false\n // })\n @A_Router.Get({\n path: '/:type',\n version: 'v1',\n prefix: 'a-list'\n })\n async list(\n @A_Inject(A_Request) request: A_Request<any, any, { type: string }>,\n @A_Inject(A_Response) response: A_Response,\n @A_Inject(A_EntityFactory) factory: A_EntityFactory,\n @A_Inject(A_Scope) scope: A_Scope,\n @A_Inject(A_Config) config: A_Config<['A_LIST_ITEMS_PER_PAGE', 'A_LIST_PAGE']>\n ) {\n\n const constructor = factory.resolveByName(request.params.type);\n\n if (constructor) {\n\n const entityList = new A_EntityList({\n name: request.params.type,\n scope: scope.name,\n constructor\n });\n\n scope.register(entityList);\n\n const queryFilter = new A_ListQueryFilter(request.query, {\n itemsPerPage: String(config.get('A_LIST_ITEMS_PER_PAGE') || '10'),\n page: String(config.get('A_LIST_PAGE') || '1')\n });\n\n const queryScope = new A_Scope({\n fragments: [queryFilter]\n }).inherit(scope);\n\n await entityList.load(queryScope);\n\n response.add('items', entityList.items);\n response.add('pagination', entityList.pagination);\n }\n }\n}","import { A_Component, A_Container, A_Inject, A_Scope } from \"@adaas/a-concept\";\nimport { A_Router } from \"../A-Router/A-Router.component\";\nimport { A_Request } from \"@adaas/a-server/entities/A-Request/A-Request.entity\";\nimport { A_Response } from \"@adaas/a-server/entities/A-Response/A-Response.entity\";\nimport { A_Command } from \"@adaas/a-utils\";\n\n\nexport class A_CommandController extends A_Component {\n\n @A_Router.Get({\n path: \"/:command/execute\",\n version: \"v1\",\n prefix: \"a-command\"\n })\n async handleCommand(\n @A_Inject(A_Request) req: A_Request<any, any, { command: string }>,\n @A_Inject(A_Response) res: A_Response,\n @A_Inject(A_Scope) scope: A_Scope,\n @A_Inject(A_Container) container: A_Container,\n ): Promise<void> {\n\n const commandName = req.params.command;\n\n const CommandConstructor = scope.resolveConstructor<A_Command>(commandName);\n\n if (!CommandConstructor) {\n res.status(404);\n\n throw new Error(`Command ${commandName} not found`);\n }\n\n const command = new CommandConstructor(req.body);\n\n container.scope.register(command);\n\n await command.execute();\n\n const serialized = command.toJSON();\n\n return res.status(200).json(serialized);\n }\n\n}","import { A_Caller, A_Component, A_Entity, A_Feature, A_Inject, A_Scope, A_TYPES__Entity_Constructor } from \"@adaas/a-concept\";\nimport { A_TYPES__EntityFeatures } from \"@adaas/a-concept/dist/src/global/A-Entity/A-Entity.constants\";\nimport { A_HTTPChannel } from \"@adaas/a-server/channels/A-Http/A-Http.channel\";\nimport { A_EntityList } from \"@adaas/a-server/entities/A_EntityList/A_EntityList.entity\";\nimport { A_Manifest } from \"@adaas/a-utils\";\n\n\n\n\nexport class A_EntityRepository extends A_Component {\n\n @A_Feature.Extend({\n name: A_TYPES__EntityFeatures.LOAD,\n scope: {\n include: [A_EntityList]\n }\n })\n async list(\n @A_Inject(A_HTTPChannel) channel: A_HTTPChannel,\n @A_Inject(A_Caller) entity: A_EntityList,\n @A_Inject(A_Scope) scope: A_Scope,\n ) {\n // Check if the scope has a manifest and if the entity is allowed to load\n if (\n scope.has(A_Manifest) && !scope.resolve(A_Manifest)\n .isAllowed(entity.constructor, 'load')\n .for(entity.constructor as A_TYPES__Entity_Constructor)\n )\n return;\n\n const response = await channel.get(`/a-list/${entity.aseid.entity}`);\n\n entity.fromJSON(response.data);\n }\n\n\n @A_Feature.Extend({\n name: A_TYPES__EntityFeatures.LOAD,\n scope: {\n exclude: [A_EntityList]\n }\n })\n async load(\n @A_Inject(A_HTTPChannel) channel: A_HTTPChannel,\n @A_Inject(A_Caller) entity: A_Entity,\n @A_Inject(A_Scope) scope: A_Scope,\n ) {\n // Check if the scope has a manifest and if the entity is allowed to load\n if (\n scope.has(A_Manifest) && !scope.resolve(A_Manifest)\n .isAllowed(entity.constructor, 'load')\n .for(entity.constructor as A_TYPES__Entity_Constructor)\n )\n return;\n\n const response = await channel.get(`/a-entity/${entity.aseid.toString()}`);\n\n entity.fromJSON(response.data);\n }\n\n\n @A_Feature.Extend({\n name: A_TYPES__EntityFeatures.SAVE,\n scope: {\n exclude: [A_EntityList]\n }\n })\n async save(\n @A_Inject(A_HTTPChannel) channel: A_HTTPChannel,\n @A_Inject(A_Caller) entity: A_Entity,\n @A_Inject(A_Scope) scope: A_Scope,\n ) {\n // Check if the scope has a manifest and if the entity is allowed to save\n if (\n scope.has(A_Manifest) && !scope.resolve(A_Manifest)\n .isAllowed(entity.constructor, 'save')\n .for(entity.constructor as A_TYPES__Entity_Constructor)\n )\n return;\n\n const response = await channel.post(`/a-entity/${entity.aseid.toString()}`, entity.toJSON());\n\n entity.fromJSON(response.data);\n }\n\n\n @A_Feature.Extend({\n name: A_TYPES__EntityFeatures.DESTROY,\n scope: {\n exclude: [A_EntityList]\n }\n })\n async destroy(\n @A_Inject(A_HTTPChannel) channel: A_HTTPChannel,\n @A_Inject(A_Caller) entity: A_Entity,\n @A_Inject(A_Scope) scope: A_Scope,\n ) {\n // Check if the scope has a manifest and if the entity is allowed to destroy\n if (\n scope.has(A_Manifest) && !scope.resolve(A_Manifest)\n .isAllowed(entity.constructor, 'destroy')\n .for(entity.constructor as A_TYPES__Entity_Constructor)\n )\n return;\n\n const response = await channel.delete(`/a-entity/${entity.aseid.toString()}`);\n\n entity.fromJSON(response.data);\n }\n\n\n}"]}
|