{"version":3,"sources":["../../../../src/lib/A-Response/A-Response.entity.ts"],"names":[],"mappings":"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","file":"A-Response.entity.mjs","sourcesContent":["import {\n    A_Context,\n    A_Entity,\n    A_Error,\n    A_Feature,\n    A_Inject,\n    ASEID,\n} from \"@adaas/a-concept\";\nimport type {\n    IncomingHttpHeaders,\n    ServerResponse\n} from \"http\";\nimport {\n    A_Response_Constructor,\n    A_Response_CacheOptions,\n    A_Response_Options,\n    A_Response_Serialized,\n    A_Response_CookieOptions,\n    A_ResponseFeatureNames,\n} from \"./A-Response.types\";\nimport { pipeline, Readable } from 'stream';\nimport { A_ResponseFeatures } from \"./A-Response.constants\";\nimport { A_Response_Listener } from \"./A-Response.types\";\nimport { A_HttpServerError } from \"@adaas/a-server/server/A-HttpServer.error\";\nimport { A_Request } from \"@adaas/a-server/request/A-Request.entity\";\nimport { A_HttpServerRequestContext } from \"@adaas/a-server/request/A-HttpServerRequest.context\";\n\n/**\n * A_Response - Comprehensive HTTP Response Processing Entity\n * \n * This class provides a complete wrapper around Node.js ServerResponse with advanced features:\n * - Response data accumulation and value management\n * - Error collection and standardized error responses\n * - Response streaming with progress tracking\n * - Template rendering and view engine support\n * - Cookie management and secure cookie handling\n * - Response compression (gzip, deflate, brotli)\n * - File downloads and static file serving\n * - Response caching and ETags\n * - Performance metrics and timing\n * - Response validation and content negotiation\n * \n * @example\n */\nexport class A_Response<_ResponseType = any> extends A_Entity<\n    A_Response_Constructor,\n    A_Response_Serialized<_ResponseType>\n> {\n\n    // =============================================\n    // Static Properties\n    // =============================================\n    static get namespace(): string {\n        return 'a-server';\n    }\n\n    // =============================================\n    // Core Properties\n    // =============================================\n    /**\n     * Original ServerResponse object\n     */\n    private _res!: ServerResponse;\n    /**\n     * Internal object to store all response data\n     */\n    private _data!: Map<string, _ResponseType>;\n    /**\n     * uses in case the response isn't an object \n     */\n    private _dataOverride?: _ResponseType\n    /**\n     * Redirect URL for handling redirects\n     */\n    private _redirectURL?: string;\n    /**\n     * Cookies map for managing response cookies\n     */\n    private _cookies!: Map<string, { value: string, options?: A_Response_CookieOptions }>;\n    /**\n     * Indicates if the response has finished\n     */\n    private _cacheOptions?: A_Response_CacheOptions;\n    /**\n     * Indicates if the response has finished\n     */\n    private _options!: Required<A_Response_Options>\n    /**\n     * Event listeners map for A_Response events\n     */\n    private _listeners: Map<A_ResponseFeatureNames, Set<A_Response_Listener>> = new Map();\n    /**\n     * Whether this response is operating as a persistent SSE stream\n     */\n    private _isStreaming: boolean = false;\n\n\n    constructor(params: A_Response_Constructor, options?: A_Response_Options) {\n        super(params);\n        this._options = {\n            autoCompress: true,\n            compressionThreshold: 1024, // 1KB\n            enableCaching: true,\n            defaultCacheMaxAge: 3600, // 1 hour\n            enableMetrics: true,\n            enableEtag: true,\n            enableLastModified: true,\n            charset: 'utf-8',\n            defaultContentType: 'application/json',\n            maxRedirects: 5,\n            enableCookies: true,\n            enableSessions: true,\n            ...(options || {})\n        };\n    }\n\n    /**\n     * Initialize from new entity parameters\n     */\n    fromNew(newEntity: A_Response_Constructor): void {\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            shard: newEntity.shard,\n            id: newEntity.id\n        });\n\n        this._res = newEntity.response;\n        this._data = new Map<string, _ResponseType>();\n        this._cookies = new Map<string, { value: string, options?: A_Response_CookieOptions }>();\n\n\n    }\n    /**\n     * Gets the response data map\n     */\n    get data(): Map<string, _ResponseType> {\n        return this._data;\n    }\n    /**\n     * Gets the original ServerResponse object\n     */\n    get original(): ServerResponse {\n        return this._res;\n    }\n    /**\n     * Gets whether headers have been sent\n     */\n    get headersSent(): boolean {\n        return this.original.headersSent;\n    }\n    /**\n     * Gets the current status code\n     */\n    get statusCode(): number {\n        return this.original.statusCode;\n    }\n    /**\n     * Gets response size in bytes\n     */\n    get size(): number {\n        return this.original.getHeader('Content-Length') as number || 0;\n    }\n    /**\n     * Whether this response is in SSE streaming mode.\n     * When true the server container will NOT auto-send and destroy() will\n     * leave the underlying socket open.\n     */\n    get isStreaming(): boolean {\n        return this._isStreaming;\n    }\n\n    // ======================================================================================\n    // --------------------------------------------------------------------------\n    // A-Response Primary Methods\n    // --------------------------------------------------------------------------\n    // ======================================================================================\n    /**\n     * Initialize the response\n     */\n    async load(): Promise<void> {\n\n        // Track response completion\n        // this.original.on('finish', this.handleFinish.bind(this));\n\n        // this.original.on('close', this.handleClose.bind(this));\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     * Destroy the response\n     */\n    async destroy(): Promise<any> {\n\n        if (!this._isStreaming) {\n            // Only call end() if not already ended — avoids double-end which can\n            // interrupt an in-flight response body on keep-alive connections.\n            if (!this.original.writableEnded) {\n                this.original.end();\n            }\n\n            this._listeners.clear();\n\n            // Remove only the 'error' listener we added in load().\n            // Do NOT call removeAllListeners() — that strips Node.js HTTP's own\n            // internal keep-alive 'finish' handler, causing the socket to never\n            // re-enter the server's connection pool and hanging all subsequent\n            // requests on the same keep-alive connection.\n            this.original.removeAllListeners('error');\n        }\n\n        return super.destroy();\n    }\n    /**\n     * Handle response failure with error details\n     */\n    async fail(err?: A_HttpServerError): Promise<void> {\n        if (err)\n            A_Context\n                .scope(this)\n                .register(err);\n\n        await this.call(A_ResponseFeatures.onError);\n\n        await this.destroy();\n    }\n    /**\n     * Send a plain text or JSON response\n     */\n    async send(data?: any): Promise<void> {\n        if (this.headersSent)\n            return;\n\n        try {\n            this._dataOverride = data;\n\n            await this.call(A_ResponseFeatures.onSend);\n\n        } catch (error) {\n            await this.fail(error instanceof A_HttpServerError ? error : new A_HttpServerError({\n                status: 500,\n                description: 'An error occurred while sending the response.',\n                originalError: error\n            }));\n        }\n    }\n    /**\n      * Stream response data\n      */\n    public async stream(\n        dataStream: Readable | any[]\n    ): Promise<void> {\n        if (this.headersSent)\n            return;\n\n        try {\n            return new Promise((resolve, reject) => {\n                this.original.setHeader('Transfer-Encoding', 'chunked');\n                this.setDefaultResponseHeaders();\n                this.setCookieHeaders();\n                this.original.writeHead(this.statusCode);\n\n                let stream: Readable;\n\n                if (Array.isArray(dataStream)) {\n                    // Convert array to readable stream\n                    stream = new Readable({\n                        read() {\n                            if (dataStream.length > 0) {\n                                const chunk = dataStream.shift();\n                                this.push(typeof chunk === 'string' ? chunk : JSON.stringify(chunk) + '\\n');\n                            } else {\n                                this.push(null);\n                            }\n                        }\n                    });\n                } else {\n                    stream = dataStream;\n                }\n\n                let bytesWritten = 0;\n\n                stream.on('data', (chunk) => {\n                    bytesWritten += chunk.length;\n                });\n\n                stream.on('end', resolve);\n\n                stream.on('error', reject);\n\n                pipeline(stream, this.original, (error) => {\n                    if (error) {\n                        reject(error);\n                    }\n                });\n\n            });\n        } catch (error) {\n            await this.fail(error instanceof A_HttpServerError ? error : new A_HttpServerError({\n                status: 500,\n                description: 'An error occurred while streaming the response. Unable to process the stream.',\n                originalError: error\n            }));\n        }\n    }\n    /**\n     * Redirect response\n     * \n     * [!] Note: This method ends the response immediately.\n     */\n    public async redirect(\n        url: string\n    ): Promise<void> {\n        if (this.headersSent)\n            return;\n\n        try {\n            this._redirectURL = url;\n\n            await this.call(A_ResponseFeatures.onRedirect);\n\n        } catch (error) {\n            await this.fail(error instanceof A_HttpServerError ? error : new A_HttpServerError({\n                status: 500,\n                description: 'An error occurred while redirecting the response.',\n                originalError: error\n            }));\n        }\n    }\n    // ======================================================================================\n    // --------------------------------------------------------------------------\n    // A-Response SSE (Server-Sent Events) Methods\n    // --------------------------------------------------------------------------\n    // ======================================================================================\n    /**\n     * Upgrade this response to a persistent SSE stream.\n     * Sends the required headers and writes the initial `:ok` comment to flush\n     * the connection. After calling this the response will NOT be auto-closed\n     * by the server container or by destroy().\n     */\n    public sseOpen(): void {\n        if (this.headersSent || this._isStreaming) return;\n        this._isStreaming = true;\n        this.original.writeHead(200, {\n            'Content-Type': 'text/event-stream',\n            'Cache-Control': 'no-cache, no-transform',\n            'Connection': 'keep-alive',\n            'X-Accel-Buffering': 'no',\n        });\n        this.original.write(':ok\\n\\n');\n        // Reset streaming flag when the client disconnects\n        this.original.once('close', () => {\n            this._isStreaming = false;\n        });\n    }\n    /**\n     * Write a named SSE event onto the open stream.\n     * Format: `event: <name>\\ndata: <JSON>\\n\\n`\n     *\n     * Compatible with browser EventSource `addEventListener(name, handler)`.\n     *\n     * @returns false when the channel is no longer writable\n     */\n    public sseWrite(event: string, data?: any): boolean {\n        if (!this._isStreaming || this.original.destroyed) return false;\n        try {\n            return this.original.write(`event: ${event}\\ndata: ${JSON.stringify(data ?? {})}\\n\\n`);\n        } catch {\n            return false;\n        }\n    }\n    /**\n     * Close the SSE stream gracefully.\n     */\n    public sseClose(): void {\n        if (!this._isStreaming || this.original.destroyed) return;\n        this._isStreaming = false;\n        this.original.end();\n    }\n    /**\n     * Write head with status and headers\n     */\n    public writeHead(statusCode: number, headers?: Record<string, string> | IncomingHttpHeaders | any): this {\n        this.original.writeHead(statusCode, headers);\n        return this;\n    }\n    /**\n     * Set HTTP status code\n     */\n    public status(code: number): this {\n        this.original.statusCode = code;\n        return this;\n    }\n    /**\n     * Set response header\n     */\n    public setHeader(key: string, value: string | number | string[]): this {\n        this.original.setHeader(key, value);\n        return this;\n    }\n    /**\n     * Get response header\n     */\n    public getHeader(key: string): string | number | string[] | undefined {\n        return this.original.getHeader(key);\n    }\n    /**\n     * Remove response header\n     */\n    public removeHeader(key: string): this {\n        this.original.removeHeader(key);\n        return this;\n    }\n    /**\n     * Set cookie\n     */\n    public setCookie(\n        name: string,\n        value: string,\n        options?: A_Response_CookieOptions\n    ): this {\n        this._cookies.set(name, { value, options });\n        return this;\n    }\n    /**\n     * Clear cookie\n     */\n    public clearCookie(name: string, options?: A_Response_CookieOptions): this {\n        const clearOptions = {\n            ...options,\n            expires: new Date(0),\n            maxAge: 0\n        };\n        this._cookies.set(name, { value: '', options: clearOptions });\n        return this;\n    }\n    // --------------------------------------------------------------------------\n    // Response Data manipulation methods\n    // --------------------------------------------------------------------------\n    /**\n     * Add data to response\n     */\n    public add(key: string, data: _ResponseType): this {\n        this._data.set(key, data);\n        return this;\n    }\n    /**\n     * Remove data from response\n     */\n    public remove(key: string): this {\n        this._data.delete(key);\n        return this;\n    }\n    /**\n     * Get data from response\n     */\n    public get(key: string): _ResponseType | undefined {\n        return this._data.get(key);\n    }\n    /**\n     * Check if response has data\n     */\n    public has(key: string): boolean {\n        return this._data.has(key);\n    }\n    /**\n     * Clear all response data\n     */\n    public clear(): this {\n        this._data.clear();\n        return this;\n    }\n    // ======================================================================================\n    // --------------------------------------------------------------------------\n    // Internal handlers for request events\n    // --------------------------------------------------------------------------\n    // ======================================================================================\n    /**\n     * Handle response finish event\n     * \n     * @returns \n     */\n    protected handleFinish(): Promise<void> {\n        try {\n            return this.call(A_ResponseFeatures.onFinish) as Promise<void>;\n        } catch (error) {\n            return this.fail(new A_HttpServerError({\n                status: 500,\n                description: `Response finish error: ${error instanceof A_Error ? error.message : 'An error occurred while finishing the response.'}`,\n                originalError: error\n            }));\n        }\n    }\n    /**\n     * Handle response close event\n     */\n    protected async handleClose(): Promise<void> {\n        try {\n\n            await this.call(A_ResponseFeatures.onClose);\n\n        } catch (error) {\n\n            await this.fail(new A_HttpServerError({\n                status: 499,\n                description: 'Client closed the connection before the response could be completed.',\n                originalError: error\n            }));\n        }\n    }\n    // ======================================================================================\n    // --------------------------------------------------------------------------   \n    // A-Request Event-Emitter methods\n    // --------------------------------------------------------------------------\n    // ======================================================================================\n    /**\n     * Registers an event listener for a specific event\n     * \n     * @param event \n     * @param listener \n     */\n    on(event: A_ResponseFeatureNames, listener: A_Response_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_ResponseFeatureNames, listener: A_Response_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_ResponseFeatureNames) {\n        this._listeners.get(event)?.forEach(async listener => {\n            listener(this);\n        });\n    }\n\n    // ======================================================================================\n    // --------------------------------------------------------------------------\n    // A-Response Feature Default Extensions\n    // --------------------------------------------------------------------------\n    // ======================================================================================\n\n    @A_Feature.Extend({\n        after: /.*/\n    })\n    async [A_ResponseFeatures.onSend](\n        @A_Inject(A_HttpServerRequestContext) context: A_HttpServerRequestContext,\n        ...args: any[]\n    ) {\n\n        const responseData = this._dataOverride || this.toResponse();\n\n        switch (true) {\n            case !!responseData && typeof responseData === 'object':\n                this.original.setHeader('Content-Type', `application/json; charset=${this._options.charset}`);\n                this.setDefaultResponseHeaders();\n                this.original.writeHead(this.statusCode);\n\n                // this.setCookieHeaders();\n                // this.setCacheHeaders();\n\n                this.original.end(JSON.stringify(responseData));\n                return;\n\n            case !!responseData && typeof responseData === 'string':\n                this.original.setHeader('Content-Type', `text/plain; charset=${this._options.charset}`);\n                this.setDefaultResponseHeaders();\n                this.original.writeHead(this.statusCode);\n\n                this.original.end(responseData);\n                return;\n\n            default:\n                this.setDefaultResponseHeaders();\n                this.original.writeHead(this.statusCode);\n\n                this.original.end(responseData);\n                return;\n        }\n    }\n\n    @A_Feature.Extend({\n        after: /.*/\n    })\n    async [A_ResponseFeatures.onRedirect](\n        @A_Inject(A_HttpServerRequestContext) context: A_HttpServerRequestContext,\n        ...args: any[]\n    ) {\n\n        if (!this._redirectURL) return;\n\n        this.original.setHeader('Location', this._redirectURL!);\n        if (!this.statusCode || (this.statusCode < 300 || this.statusCode > 399))\n            this.status(301);\n\n        this.original.end();\n    }\n\n    @A_Feature.Extend({\n        after: /.*/\n    })\n    async [A_ResponseFeatures.onError](\n        @A_Inject(A_HttpServerError) error: A_HttpServerError,\n        @A_Inject(A_HttpServerRequestContext) context: A_HttpServerRequestContext,\n        @A_Inject(A_Request) request: A_Request,\n        ...args: any[]\n    ) {\n\n        if (this.headersSent) {\n            return;\n        }\n\n        const statusCode = error.status || 500;\n        this.status(statusCode);\n\n        const errorResponse = {\n            error: {\n                message: error.message,\n                status: statusCode,\n                description: error.description || '',\n            }\n        };\n\n        this.setDefaultResponseHeaders();\n        this.original.writeHead(this.statusCode);\n\n        this.original.end(JSON.stringify(errorResponse));\n    }\n    // ======================================================================================\n    // --------------------------------------------------------------------------\n    // A-Response Helper Methods\n    // --------------------------------------------------------------------------\n    // ======================================================================================\n    /**\n  * Set standard response headers\n  */\n    protected setDefaultResponseHeaders(): void {\n        // Security headers\n        this.original.setHeader('X-Content-Type-Options', 'nosniff');\n        this.original.setHeader('X-Frame-Options', 'DENY');\n        this.original.setHeader('X-XSS-Protection', '1; mode=block');\n\n        // Request ID for tracking\n        this.original.setHeader('X-Request-ID', this.aseid.id);\n    }\n    /**\n     * Set cookie headers\n     */\n    protected setCookieHeaders(): void {\n        if (!this._options.enableCookies || this._cookies.size === 0) return;\n\n        const cookieStrings: string[] = [];\n\n        this._cookies.forEach(({ value, options }, name) => {\n            let cookieString = `${name}=${encodeURIComponent(value)}`;\n\n            if (options) {\n                if (options.domain) cookieString += `; Domain=${options.domain}`;\n                if (options.path) cookieString += `; Path=${options.path}`;\n                if (options.maxAge) cookieString += `; Max-Age=${options.maxAge}`;\n                if (options.expires) cookieString += `; Expires=${options.expires.toUTCString()}`;\n                if (options.httpOnly) cookieString += '; HttpOnly';\n                if (options.secure) cookieString += '; Secure';\n                if (options.sameSite) cookieString += `; SameSite=${options.sameSite}`;\n            }\n\n            cookieStrings.push(cookieString);\n        });\n\n        this.original.setHeader('Set-Cookie', cookieStrings);\n    }\n    /**\n     * Set cache headers\n     */\n    protected setCacheHeaders(): void {\n        if (!this._cacheOptions) return;\n\n        const cacheControl: string[] = [];\n\n        if (this._cacheOptions.public) cacheControl.push('public');\n        if (this._cacheOptions.private) cacheControl.push('private');\n        if (this._cacheOptions.noCache) cacheControl.push('no-cache');\n        if (this._cacheOptions.noStore) cacheControl.push('no-store');\n        if (this._cacheOptions.mustRevalidate) cacheControl.push('must-revalidate');\n        if (this._cacheOptions.proxyRevalidate) cacheControl.push('proxy-revalidate');\n        if (this._cacheOptions.immutable) cacheControl.push('immutable');\n\n        if (this._cacheOptions.maxAge !== undefined) {\n            cacheControl.push(`max-age=${this._cacheOptions.maxAge}`);\n        }\n\n        if (this._cacheOptions.sMaxAge !== undefined) {\n            cacheControl.push(`s-maxage=${this._cacheOptions.sMaxAge}`);\n        }\n\n        if (cacheControl.length > 0) {\n            this.original.setHeader('Cache-Control', cacheControl.join(', '));\n        }\n\n        if (this._cacheOptions.etag) {\n            this.original.setHeader('ETag', this._cacheOptions.etag);\n        }\n\n        if (this._cacheOptions.lastModified) {\n            this.original.setHeader('Last-Modified', this._cacheOptions.lastModified.toUTCString());\n        }\n    }\n\n\n    // ======================================================================================\n    // --------------------------------------------------------------------------\n    // A-Response Serialization Methods\n    // --------------------------------------------------------------------------\n    // ======================================================================================\n    /**\n     * Convert accumulated data to response object\n     */\n    public toResponse(): _ResponseType {\n        const response = Array.from(this._data.entries()).reduce((acc, [key, value]) => {\n            if (value instanceof A_Entity) {\n                acc[key] = value.toJSON();\n            } else {\n                acc[key] = value;\n            }\n            return acc;\n        }, {} as any);\n\n        return response;\n    }\n    /**\n     * Enhanced JSON serialization for logging/debugging\n     */\n    public toJSON(): A_Response_Serialized<_ResponseType> {\n        return {\n            ...super.toJSON(),\n            status: this.statusCode,\n            headersSent: this.headersSent,\n            size: this.size,\n            data: this.toResponse(),\n            redirectURL: this._redirectURL,\n        };\n    }\n}"]}