{"version":3,"sources":["../../../../src/lib/A-Request/A-Request.entity.ts"],"names":[],"mappings":"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","file":"A-Request.entity.mjs","sourcesContent":["import type { IncomingHttpHeaders, IncomingMessage } from \"http\";\nimport {\n    A_Context,\n    A_Entity,\n    A_Error,\n    A_Feature,\n    A_IdentityHelper,\n    A_Inject,\n    A_Scope,\n    ASEID,\n} from '@adaas/a-concept';\nimport {\n    A_Request_BodyType,\n    A_Request_FileUpload,\n    A_Request_Init,\n    A_Request_Listener,\n    A_Request_Options,\n    A_Request_Serialized,\n    A_RequestFeatureNames,\n} from \"./A-Request.types\";\nimport { A_HttpServerError } from \"@adaas/a-server/server/A-HttpServer.error\";\nimport { A_HttpServerRequestMethod } from \"@adaas/a-server/server/A-HttpServer.types\";\nimport { A_RequestFeatures } from \"./A-Request.constants\";\nimport { A_RequestHelper } from \"./A-Request.helper\";\nimport { A_RequestEnvVariables, A_RequestEnvVariablesType } from \"./A-Request.env\";\nimport { A_HttpServerRequestContext } from \"./A-HttpServerRequest.context\";\nimport { A_HttpRequestData } from \"./A-HttpRequestData.context\";\nimport { A_RequestError } from \"./A-Request.error\";\nimport { A_ScheduleObject } from \"@adaas/a-utils/a-schedule\";\nimport { A_Config } from \"@adaas/a-utils/a-config\";\nimport { A_ServerRoute } from \"@adaas/a-server/route/A-ServerRoute.entity\";\n\n\n\nexport class A_Request<\n    _ReqBodyType = any,\n    _ParamsType extends Record<string, string> = any,\n    _QueryType = any,\n>\n    extends A_Entity<\n        A_Request_Init,\n        A_Request_Serialized<_ReqBodyType, _ParamsType, _QueryType>\n    > {\n\n    static get concept(): string {\n        return 'a-server';\n    }\n\n    // =============================================\n    // Core Properties\n    // =============================================\n\n    /**\n     * Request processing status\n     */\n    protected _listeners: Map<A_RequestFeatureNames, Set<A_Request_Listener>> = new Map();\n\n    // =============================================\n    // Cookie Management\n    // =============================================\n    /**\n     * Parsed cookies from request headers\n     */\n    private _cookies!: Record<string, string>;\n\n    // ============================================\n    // Data Management \n    // ============================================\n    /**\n     * Request body type\n     */\n    private _bodyType?: A_Request_BodyType;\n    /**\n     * Request body data\n     */\n    private _body!: _ReqBodyType;\n    private _req!: IncomingMessage;\n\n    private _timeout: A_ScheduleObject | undefined;\n\n    // =============================================\n    // File Upload Handling\n    // =============================================\n    /**\n     * Uploaded files from multipart requests\n     */\n    private _files!: A_Request_FileUpload[];\n\n    // =============================================\n    // Request Metadata\n    // =============================================\n\n    /**\n     * User agent string from request headers\n     */\n    private _userAgent?: string;\n\n    /**\n     * Content length in bytes\n     */\n    private _contentLength?: number;\n\n    // =============================================\n    // Configuration\n    // =============================================\n    /**\n     * Request processing configuration options\n     */\n    private _options!: Required<A_Request_Options>\n\n    private _routeDefinition?: A_ServerRoute;\n\n\n    /**\n     * A_Request - Comprehensive HTTP Request Processing Entity\n     * \n     * This class provides a complete wrapper around Node.js IncomingMessage with advanced features:\n     * - Automatic body parsing (JSON, form-data, multipart, raw)\n     * - Cookie and session management\n     * - File upload handling with easy access methods\n     * - Request validation\n     * - Middleware support\n     * - Type-safe parameter extraction\n     * - Request timing and metrics\n     * \n     * @example\n     * ```typescript\n     * const request = new A_Request({\n     *     id: 'req-123',\n     *     request: incomingMessage,\n     *     scope: 'api'\n     * }, {\n     *     enableFileUploads: true,\n     *     maxBodySize: 50 * 1024 * 1024 // 50MB for file uploads\n     * });\n     * \n     * await request.init();\n     * \n     * // Access parsed body\n     * const userData = request.body;\n     * \n     * // Get typed parameters\n     * const userId = request.params.id;\n     * \n     * // Handle file uploads\n     * if (request.hasFiles()) {\n     *     const avatar = request.getFile('avatar');\n     *     if (avatar) {\n     *         console.log(`Uploaded file: ${avatar.filename}`);\n     *         console.log(`File size: ${avatar.size} bytes`);\n     *         console.log(`File type: ${avatar.mimetype}`);\n     *         \n     *         // Access file buffer for processing\n     *         const fileBuffer = avatar.buffer;\n     *         // Save to disk, process, etc.\n     *     }\n     *     \n     *     // Get all files for a specific field\n     *     const documents = request.getFiles('documents');\n     *     for (const doc of documents) {\n     *         // Process each document...\n     *     }\n     * }\n     * \n     * // Check specific files\n     * if (request.hasFile('profilePicture')) {\n     *     const pic = request.getFile('profilePicture');\n     *     // Process profile picture...\n     * }\n     * ```\n     */\n    constructor(params: A_Request_Init, options?: A_Request_Options) {\n        super(params);\n        this._options = {\n            maxBodySize: 10 * 1024 * 1024, // 10MB default\n            timeout: 30000, // 30 seconds\n            encoding: 'utf8',\n            parseCookies: true,\n            parseQuery: true,\n            parseBody: true,\n            enableFileUploads: false,\n            strictValidation: false,\n            ...(options || {})\n        }\n    }\n\n    /**\n     * Creates A_Request entity from initialization data\n     * \n     * @param newEntity \n     */\n    fromNew(newEntity: A_Request_Init): void {\n        this.aseid = new ASEID({\n            concept: (this.constructor as typeof A_Request).concept,\n            scope: newEntity.scope,\n            entity: (this.constructor as typeof A_Request).entity,\n            shard: newEntity.shard,\n            id: newEntity.id\n        });\n\n        this._req = newEntity.request;\n    }\n\n\n    /**\n     * Core HTTP request object from Node.js\n     */\n    get original(): IncomingMessage {\n        return this._req;\n    }\n    /**\n     * Parsed request body data\n     */\n    get body(): _ReqBodyType {\n        return this._body;\n    }\n    /**\n     * URL route parameters (e.g., /users/:id)\n     */\n    get params(): _ParamsType {\n\n        console.log('Extracting params using route definition:', this.url);\n        console.log('Extracting params using route definition:', this._routeDefinition?.path);\n\n        return A_RequestHelper.extractParams(this.url,\n            this._routeDefinition?.path || ''\n\n        ) as _ParamsType;\n    }\n    /**\n     * Query string parameters\n     */\n    get query(): _QueryType {\n        return A_RequestHelper.extractQuery(this.url) as _QueryType;\n    }\n    /**\n     * Gets the parsed cookies\n     */\n    get cookies(): Record<string, string> {\n        if (!this._cookies) {\n            this._cookies = A_RequestHelper.parseCookies(this.headers['cookie']);\n        }\n\n        return this._cookies;\n    }\n    /**\n     * Gets the request URL\n     */\n    get url(): string {\n        return this.original.url!;\n    }\n    /**\n     * Gets the HTTP method\n     */\n    get method(): A_HttpServerRequestMethod {\n        return (String(this.original.method).toUpperCase() as A_HttpServerRequestMethod) || 'DEFAULT';\n    }\n    /**\n     * Gets the request headers\n     */\n    get headers(): IncomingHttpHeaders {\n        return this.original.headers;\n    }\n    /**\n     * Gets the timestamp when the request was started\n     */\n    get startedAt(): Date | undefined {\n        const timeId = A_IdentityHelper.parseTimeId(this.aseid.id.split('-')[0]);\n        return timeId ? new Date(timeId.timestamp) : undefined;\n    }\n    /**\n     * Gets uploaded files\n     */\n    get files(): A_Request_FileUpload[] {\n        return this._files || [];\n    }\n    /**\n     * Gets user agent string\n     */\n    get userAgent(): string | undefined {\n        return this.headers?.['user-agent'] || ''\n    }\n    /**\n     * Gets content length\n     */\n    get contentLength(): number {\n        return this.headers?.['content-length'] ? parseInt(this.headers['content-length'], 10) : 0;\n    }\n    /**\n     * Check if request is secure (HTTPS)\n     */\n    get isSecure(): boolean {\n        return this.original.socket && 'encrypted' in this.original.socket;\n    }\n    /**\n     * Check if request is from mobile device\n     */\n    get isMobile(): boolean {\n        const userAgent = this._userAgent?.toLowerCase() || '';\n        return /mobile|android|iphone|ipad|phone/i.test(userAgent);\n    }\n    /**\n     * Get request size in bytes\n     */\n    get size(): number {\n        return this._contentLength || 0;\n    }\n    /**\n     * Gets content type from headers\n     */\n    get contentType(): string | undefined {\n        return this.headers['content-type'] || undefined;\n    }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n    /**\n     * Pipes request stream to destination\n     */\n    pipe(\n        destination: NodeJS.WritableStream,\n        options?: { end?: boolean | undefined; }\n    ): NodeJS.WritableStream {\n        return this.original.pipe(destination, options);\n    }\n    /**\n     * Get a file by field name\n     */\n    getFile(fieldName: string): A_Request_FileUpload | undefined {\n        return this._files?.find(file => file.fieldName === fieldName);\n    }\n\n    /**\n     * Get all files for a specific field name\n     */\n    getFiles(fieldName: string): A_Request_FileUpload[] {\n        return this._files?.filter(file => file.fieldName === fieldName) || [];\n    }\n\n    /**\n     * Check if request has any files\n     */\n    hasFiles(): boolean {\n        return this._files && this._files.length > 0;\n    }\n\n    /**\n     * Check if request has a file with specific field name\n     */\n    hasFile(fieldName: string): boolean {\n        return this._files?.some(file => file.fieldName === fieldName) || false;\n    }\n\n    /**\n     * Get total size of all uploaded files\n     */\n    getTotalFileSize(): number {\n        return this._files?.reduce((total, file) => total + file.size, 0) || 0;\n    }\n\n    /**\n     * Get a cookie value\n     */\n    getCookie(name: string): string | undefined {\n        return this._cookies[name];\n    }\n    /**\n     * Check if request has a specific cookie\n     */\n    hasCookie(name: string): boolean {\n        return name in this._cookies;\n    }\n    /**\n     * Check if request accepts specific content type\n     */\n    accepts(contentType: string): boolean {\n        const acceptHeader = this.headers.accept || '';\n        return acceptHeader.includes(contentType) || acceptHeader.includes('*/*');\n    }\n    /**\n     * Get request fingerprint for caching/identification\n     */\n    getFingerprint(): string {\n        const components = [\n            this.method,\n            this.url,\n            this._userAgent,\n            JSON.stringify(this.body)\n        ];\n\n        return Buffer.from(components.join('|')).toString('base64');\n    }\n\n    // --------------------------------------------------------------------------   \n    // A-Request Event-Emitter methods\n    // --------------------------------------------------------------------------\n    /**\n     * Registers an event listener for a specific event\n     * \n     * @param event \n     * @param listener \n     */\n    on(event: A_RequestFeatureNames, listener: A_Request_Listener) {\n        if (!this._listeners.has(event)) {\n            this._listeners.set(event, new Set());\n        }\n        this._listeners.get(event)!.add(listener);\n    }\n    /**\n     * Removes an event listener for a specific event\n     * \n     * @param event \n     * @param listener \n     */\n    off(event: A_RequestFeatureNames, listener: A_Request_Listener) {\n        this._listeners.get(event)?.delete(listener);\n    }\n    /**\n     * Emits an event to all registered listeners\n     * \n     * @param event \n     */\n    emit(event: A_RequestFeatureNames) {\n        this._listeners.get(event)?.forEach(async listener => {\n            listener(this);\n        });\n    }\n\n    /**\n     * Allows to use a route definition for this request\n     * \n     * @param route \n     */\n    useRoute(route: A_ServerRoute): void {\n        this._routeDefinition = route;\n    }\n\n\n    clearTimeout(): void {\n        this._timeout?.clear();\n    }\n\n    /**\n     * Initialize the request - parse cookies, query, body etc.\n     */\n    async load(): Promise<void> {\n\n        // this.original.on('close', this.handleClose.bind(this));\n\n        try {\n\n            await this.call(A_RequestFeatures.onInit);\n\n            await new Promise<void>((resolve, reject) => {\n                const onData = this.handleData.bind(this);\n                const onEnd = () => {\n                    cleanup();\n                    resolve();\n                };\n                const onError = (err: Error) => {\n                    cleanup();\n                    reject(err);\n                };\n\n                const cleanup = () => {\n                    this.original.off('data', onData);\n                    this.original.off('end', onEnd);\n                    this.original.off('error', onError);\n                };\n\n                this.original.on('data', onData);\n                this.original.on('end', onEnd);\n                this.original.on('error', onError);\n            });\n\n            await this.handleEnd();\n\n        } catch (error) {\n\n            const targetError = error instanceof A_HttpServerError\n                ? error\n                : new A_HttpServerError({\n                    status: 500,\n                    description: 'An error occurred while processing the request.',\n                    originalError: error\n                });\n\n            await this.fail(targetError);\n        }\n\n        this.original.on('error', err => {\n            this.fail(new A_HttpServerError({\n                status: 500,\n                description: `Request error: ${err.message}`,\n                originalError: err\n            }));\n        });\n    }\n\n\n    async validate(): Promise<void> {\n        try {\n            await this.call(A_RequestFeatures.onValidate);\n        } catch (error) {\n            const targetError = error instanceof A_HttpServerError\n                ? error\n                : new A_HttpServerError({\n                    status: 400,\n                    description: ` Request Validation Failed: ${error instanceof A_Error ? error.message : 'Invalid request.'}`,\n                    originalError: error\n                });\n\n            await this.fail(targetError);\n        }\n    }\n    /**\n     * Destroy the request A-Entity with cleanup\n     * \n     * @returns \n     */\n    async destroy(): Promise<any> {\n        const targetError = A_Context.scope(this)?.resolve(A_Error);\n\n        if (!this.original.destroyed) {\n            this.original.destroy(targetError);\n            this.original.removeAllListeners();\n\n            this._listeners.clear();\n\n            return super.destroy();\n        }\n    }\n\n    /**\n     * Handles request failure - registers error, emits event, and destroys request\n     * \n     * [!] Destroys the request after handling the failure.\n     * \n     * @param err \n     */\n    async fail(err?: A_HttpServerError): Promise<void> {\n        console.log('Request failed with error:', this.method, this.url, err?.message);\n\n        if (err)\n            A_Context\n                .scope(this)\n                .register(err);\n\n        this._timeout?.clear();\n\n        await this.call(A_RequestFeatures.onError);\n\n        await this.destroy();\n    }\n\n\n    // ======================================================================================\n    // Internal handlers for request events\n    // ======================================================================================\n    /**\n     * Internal helper method to handle incoming data chunks\n     * It creates a new scope for each data chunk, inherits the parent scope,\n     * and calls the onData feature with the new scope.\n     * \n     * [!] This method ensures that each data chunk is processed in isolation, \n     * preventing side effects between chunks.\n     * \n     * @param data \n     */\n    protected async handleData(data: Buffer): Promise<void> {\n        const chunk = new A_HttpRequestData(data);\n\n        const scope = new A_Scope({\n            name: `${this.aseid.toString()}-data-chunk`,\n            fragments: [chunk],\n        })\n        .inherit(A_Context.scope(this));\n\n        try {\n\n            scope.inherit(A_Context.scope(this));\n\n            await this.call(A_RequestFeatures.onData, scope);\n\n            scope.destroy();\n\n        } catch (error) {\n\n            scope.destroy();\n\n            await this.fail(new A_HttpServerError({\n                status: 500,\n                description: `Request data chunk error: ${error instanceof A_Error ? error.message : 'Unable to process request data chunk.'}`,\n                originalError: error\n            }));\n        }\n    }\n\n    /**\n     * Handles request close event\n     * \n     * This method is called when the request is closed prematurely.\n     * It triggers the onClose feature and handles any errors that occur during processing.\n     * \n     */\n    protected async handleClose(): Promise<void> {\n        try {\n            await this.call(A_RequestFeatures.onClose);\n        } catch (error) {\n\n            await this.fail(new A_HttpServerError({\n                status: 499,\n                description: `Request closed error: ${error instanceof A_Error ? error.message : 'Request was closed.'}`,\n                originalError: error\n            }));\n        }\n    }\n\n    /**\n     * Handles request end event\n     * \n     * This method is called when the request has finished sending data.\n     * It triggers the onEnd feature and handles any errors that occur during processing.\n     */\n    protected async handleEnd(): Promise<void> {\n        try {\n\n            await this.call(A_RequestFeatures.onEnd);\n\n        } catch (error) {\n            await this.fail(new A_HttpServerError({\n                status: 500,\n                description: `Request processing error: ${error instanceof A_Error ? error.message : 'Unable to process request.'}`,\n                originalError: error\n            }));\n        }\n    }\n\n    /**\n     * Handles request timeout event\n     * \n     * This method is called when the request processing exceeds the configured timeout.\n     * It triggers the onTimeout feature and fails the request with a timeout error.\n     */\n    protected async handleTimeout(): Promise<void> {\n        try {\n            await this.call(A_RequestFeatures.onTimeout);\n\n            throw new A_HttpServerError({\n                status: 503,\n                description: `Request processing take too long and timed out. Current timeout is set to ${this._options.timeout} ms.`,\n            })\n\n        } catch (error) {\n\n            const targetError = error instanceof A_HttpServerError\n                ? error\n                : new A_HttpServerError({\n                    status: 503,\n                    description: `Request timeout error: ${error instanceof A_Error ? error.message : 'Request timed out.'}`,\n                    originalError: error\n                });\n\n            await this.fail(targetError);\n        }\n    }\n\n\n\n\n    // ======================================================================================\n    // A-Request Feature Extensions\n    // ======================================================================================\n\n    @A_Feature.Extend()\n    /**\n     * Hook called during initialization\n     * \n     * Default Behavior: Starts request processing timer and sets up timeout handling.\n     */\n    async [A_RequestFeatures.onInit](\n        @A_Inject(A_Config) config: A_Config<['A_SERVER_REQUEST_TIMEOUT']>,\n        @A_Inject(A_HttpServerRequestContext) context: A_HttpServerRequestContext,\n        ...args: any[]\n    ): Promise<void> {\n\n        context.startProcessing();\n\n        const ms = Number(config?.get('A_SERVER_REQUEST_TIMEOUT')\n            || A_RequestEnvVariables.A_SERVER_REQUEST_TIMEOUT);\n\n        this._timeout = new A_ScheduleObject(ms, this.handleTimeout.bind(this), { resolveOnClear: true });\n    }\n\n\n    @A_Feature.Extend({\n        before: /.*/\n    })\n    /**\n     * Hook called on receiving data chunk\n     * \n     * Default Behavior: Accumulates data chunks into context buffers and checks for max body size.\n     */\n    async [A_RequestFeatures.onData](\n        @A_Inject(A_HttpServerRequestContext) context: A_HttpServerRequestContext,\n        @A_Inject(A_HttpRequestData) chunk: A_HttpRequestData,\n        ...args: any[]\n    ): Promise<void> {\n\n        if (context.length + chunk.length > this._options.maxBodySize!) {\n            throw new A_RequestError(\n                A_RequestError.RequestBodyParsingError,\n                `Request body too large. Max size is ${this._options.maxBodySize} bytes.`\n            );\n        }\n\n        context.buffers.push(chunk.data);\n        if (!context.data)\n            context.data = '';\n\n        context.data += chunk.toString(this._options.encoding as BufferEncoding);\n    }\n\n    @A_Feature.Extend({\n        before: /.*/\n    })\n    /**\n     * Hook called on request timeout\n     * \n     * Default Behavior: Stops request processing and emits timeout event.\n     * \n     * @param context \n     * @param args \n     */\n    async [A_RequestFeatures.onTimeout](\n        @A_Inject(A_HttpServerRequestContext) context: A_HttpServerRequestContext,\n        ...args: any[]\n    ): Promise<void> {\n        context.stopProcessing();\n\n        this._timeout?.clear();\n\n        this.emit(A_RequestFeatures.onTimeout);\n    }\n\n    @A_Feature.Extend({\n        before: /.*/\n    })\n    /**\n     * Hook called on request close\n     */\n    async [A_RequestFeatures.onClose](\n        @A_Inject(A_HttpServerRequestContext) context: A_HttpServerRequestContext,\n        ...args: any[]\n    ): Promise<void> {\n\n        this.emit(A_RequestFeatures.onClose);\n    }\n\n\n    @A_Feature.Extend({\n        after: /.*/\n    })\n    /**\n     * Hook called on request error\n     */\n    async [A_RequestFeatures.onError](\n        @A_Inject(A_Error) error: A_Error,\n        @A_Inject(A_HttpServerRequestContext) context: A_HttpServerRequestContext,\n        ...args: any[]\n    ): Promise<void> {\n        context.stopProcessing();\n\n        this.emit(A_RequestFeatures.onError);\n    }\n\n    @A_Feature.Extend()\n    /**\n     * Hook called to parse request data\n     */\n    async [A_RequestFeatures.onEnd](\n        @A_Inject(A_Config) config: A_Config<A_RequestEnvVariablesType>,\n        @A_Inject(A_HttpServerRequestContext) context: A_HttpServerRequestContext,\n        ...args: any[]\n    ): Promise<void> {\n\n        const { data, type } = A_RequestHelper.parseRequestBody(context);\n\n        this._body = data;\n        this._bodyType = type;\n    }\n\n\n\n    @A_Feature.Extend()\n    /**\n     * Hook called to validate request data\n     */\n    async [A_RequestFeatures.onValidate](\n        @A_Inject(A_HttpServerRequestContext) context: A_HttpServerRequestContext,\n        ...args: any[]\n    ): Promise<void> {\n        // Validate file uploads if multipart data detected\n        if (!!this.contentType && this.contentType.includes('multipart/form-data') && !this._options.enableFileUploads) {\n            throw new A_HttpServerError({\n                status: 400,\n                description: 'File uploads detected but not enabled. Set enableFileUploads: true in options.',\n            });\n        }\n    }\n\n\n    /**\n     * Serialize request for logging/debugging\n     */\n    toJSON(): A_Request_Serialized {\n        return {\n            ...super.toJSON(),\n            method: this.method,\n            url: this.url,\n            headers: this.headers,\n            params: this.params,\n            query: this.query,\n            cookies: this._cookies,\n            userAgent: this.userAgent,\n            bodyType: this._bodyType,\n            body: this._body,\n            filesCount: this._files?.length || 0,\n            totalFileSize: this.getTotalFileSize(),\n        };\n    }\n}"]}