{"version":3,"file":"index.mjs","sources":["../../../projects/http-service/src/http.service.ts","../../../projects/http-service/src/wm-http-request.ts","../../../projects/http-service/src/wm-http-response.ts","../../../projects/http-service/src/index.ts"],"sourcesContent":["import { Injectable, OnDestroy } from '@angular/core';\nimport { HttpClient, HttpEvent, HttpHeaders, HttpParams, HttpRequest, HttpResponse } from '@angular/common/http';\n\nimport { Observable, Subject, Subscription } from 'rxjs';\n\nimport { AbstractHttpService } from '@wm/core';\nimport { HttpClientService, getErrMessage } from '@wavemaker/variables';\nimport { includes, isBoolean, isFunction, isNumber } from \"lodash-es\";\n\nenum HTTP_EVENT_TYPE {\n    Sent = 0,\n    UploadProgress = 1,\n    ResponseHeader = 2,\n    DownloadProgress = 3,\n    Response = 4,\n    User = 5\n}\n\n@Injectable(\n    {\n        providedIn: 'root'\n    }\n)\nexport class HttpServiceImpl extends AbstractHttpService implements HttpClientService, OnDestroy {\n    nonBodyTypeMethods = ['GET', 'DELETE', 'HEAD', 'OPTIONS', 'JSONP'];\n    sessionTimeoutObservable = new Subject();\n    sessionTimeoutQueue = [];\n    localeObject: any;\n    private sessionTimeoutSubscriptions: Subscription[] = []; // MEMORY LEAK FIX: Track subscriptions\n\n    constructor(private httpClient: HttpClient) {\n        super();\n    }\n\n    /**\n     * This method handles session timeout.\n     * @param options\n     * @param resolve\n     * @param reject\n     */\n    handleSessionTimeout(options, subscriber401?) {\n        this.sessionTimeoutQueue.push({\n            requestInfo: options,\n            sub401: subscriber401\n        });\n        this.on401();\n    }\n\n    /**\n     * Generates a request with provided options\n     * @param options, request params/options\n     */\n    private generateRequest(options: any) {\n        let reqHeaders = new HttpHeaders(),\n            reqParams = new HttpParams();\n        const headers = options.headers;\n        const params = options.params;\n        const responseType = options.responseType;\n        const withCredentials = options.withCredentials;\n\n        // this header is not to be sent with non-proxy calls from service variable\n        if (!options.isDirectCall) {\n            reqHeaders = reqHeaders.append('X-Requested-With', 'XMLHttpRequest');\n        }\n\n        // headers\n        if (headers) {\n            Object.entries(headers).forEach(([k, v]) => {\n                if (isNumber(v) || isBoolean(v)) {\n                    v = v.toString();\n                }\n                reqHeaders = reqHeaders.append(k, v as string);\n            })\n        }\n\n        // params\n        if (params) {\n            Object.entries(params).forEach(([k, v]) => reqParams = reqParams.append(k, v as string));\n        }\n\n        let third, fourth;\n        const reqOptions = {\n            headers: reqHeaders,\n            params: reqParams,\n            responseType: responseType,\n            withCredentials: withCredentials\n        };\n        // Even if method is not expecting request body, if body is passed in request, pass it on.\n        if (includes(this.nonBodyTypeMethods, options.method && options.method.toUpperCase()) && options.data === undefined) {\n            third = reqOptions;\n            fourth = null;\n        } else {\n            third = options.data;\n            fourth = reqOptions;\n        }\n        return new HttpRequest(options.method, options.url, third, fourth);\n    }\n\n\n    /**\n     * Make a http call and returns an observable that can be cancelled\n     * @param options, options using which the call needs to be made\n     */\n    sendCallAsObservable(options: any, params?: any): any {\n        const req = this.generateRequest(options);\n        return this.httpClient.request(req);\n    }\n\n    sendCall(requestParams, variable, params?) {\n        return new Promise((resolve, reject) => {\n            variable._observable = this.sendCallAsObservable(requestParams, params).subscribe((response: any) => {\n                if (response && response.type) {\n                    resolve(response);\n                }\n            }, (err: any) => {\n                reject(err);\n            });\n        });\n    }\n\n    /**\n     * Makes a http call and return a promise\n     * @param options, options using which the call needs to be made\n     */\n    send(options: any) {\n        const req = this.generateRequest(options);\n\n        return new Promise((resolve, reject) => {\n            this.httpClient.request(req).toPromise().then((response) => {\n                resolve(response);\n            }, (err) => {\n                if (this.isPlatformSessionTimeout(err)) {\n                    err._401Subscriber.asObservable().subscribe((response) => {\n                        resolve(response);\n                    }, (e) => {\n                        reject(e);\n                    });\n                } else {\n                    const errMsg = getErrMessage(err, this.getLocale());\n                    reject({\n                        error: errMsg,\n                        details: err\n                    });\n                }\n            });\n        });\n    }\n\n    cancel(variable, $file?) {\n        if (variable._observable) {\n            variable._observable.unsubscribe();\n        }\n        if ($file && $file._uploadProgress) {\n            $file._uploadProgress.unsubscribe();\n        }\n    }\n\n    setLocale(locale) {\n        this.localeObject = locale;\n    }\n\n    getLocale() {\n        return this.localeObject;\n    }\n\n    getHeader(error, headerKey) {\n        return error.headers.get(headerKey);\n    }\n\n    isPlatformSessionTimeout(error) {\n        const MSG_SESSION_NOT_FOUND = 'Session Not Found';\n        return error.status === 401 && this.getHeader(error, 'x-wm-login-errormessage') === MSG_SESSION_NOT_FOUND;\n    }\n\n    get(url: string, options?: any) {\n        options = options || {};\n        options.url = url;\n        options.method = 'get';\n        return this.send(options).then((response: HttpResponse<string>) => response.body);\n    }\n\n    post(url, data, options) {\n        options = options || {};\n        options.url = url;\n        options.method = 'post';\n        options.data = data;\n        return this.send(options);\n    }\n\n    put(url, data, options) {\n        options = options || {};\n        options.url = url;\n        options.method = 'put';\n        options.data = data;\n        return this.send(options);\n    }\n\n    patch(url, data, options) {\n        options = options || {};\n        options.url = url;\n        options.method = 'patch';\n        options.data = data;\n        return this.send(options);\n    }\n\n    delete(url, options) {\n        options = options || {};\n        options.url = url;\n        options.method = 'delete';\n        return this.send(options);\n    }\n\n    head(url, options) {\n        options = options || {};\n        options.url = url;\n        options.method = 'head';\n        return this.send(options);\n    }\n\n    jsonp(url, options) {\n        options = options || {};\n        options.url = url;\n        options.method = 'jsonp';\n        return this.send(options);\n    }\n\n    upload(url, data, options): Observable<HttpEvent<any>> {\n        const req = new HttpRequest('POST', url, data, {\n            reportProgress: true // for progress data\n        });\n        return this.httpClient.request(req);\n        // return this.httpClient.post(url, data, {\n        //     reportProgress: true\n        // });\n    }\n\n    uploadFile(url, data, variable, options?) {\n        return new Promise((resolve, reject) => {\n            variable.request = this.upload(url, data, options).subscribe((event: any) => {\n                if (event.type === HTTP_EVENT_TYPE.UploadProgress) {\n                    const uploadProgress = Math.round(100 * event.loaded / event.total);\n                    options.notify(uploadProgress);\n                }\n\n                if (event.type === HTTP_EVENT_TYPE.Response) {\n                    resolve(event.body);\n                }\n            }, error => {\n                reject(error);\n            });\n        });\n    }\n    /**\n     * registers a callback to be trigerred on session timeout\n     * @param callback\n     * @returns unsubscribe function\n     */\n    registerOnSessionTimeout(callback) {\n        // MEMORY LEAK FIX: Store subscription reference for cleanup\n        const subscription = this.sessionTimeoutObservable.asObservable().subscribe(callback);\n        this.sessionTimeoutSubscriptions.push(subscription);\n        // Return unsubscribe function so caller can clean up if needed\n        return () => {\n            subscription.unsubscribe();\n            const index = this.sessionTimeoutSubscriptions.indexOf(subscription);\n            if (index > -1) {\n                this.sessionTimeoutSubscriptions.splice(index, 1);\n            }\n        };\n    }\n\n    /**\n     * trigger the registered methods on session timeout\n     */\n    on401() {\n        this.sessionTimeoutObservable.next(undefined);\n    }\n\n    pushToSessionFailureQueue(callback) {\n        this.sessionTimeoutQueue.push({\n            callback: callback\n        });\n    }\n\n    /**\n     * Execute queued requests, failed due to session timeout\n     */\n    executeSessionFailureRequests() {\n        const queue = this.sessionTimeoutQueue;\n        const that = this;\n        that.sessionTimeoutQueue = [];\n        queue.forEach(data => {\n            if (isFunction(data.callback)) {\n                data.callback();\n            } else {\n                data.requestInfo.headers.headers.delete('x-wm-xsrf-token');\n                that.httpClient.request(data.requestInfo)\n                    .subscribe(\n                        response => {\n                            if (response && response.type && data.sub401) {\n                                data.sub401.next(response);\n                            }\n                        }, (reason) => {\n                            data.sub401.error(reason);\n                        });\n            }\n        });\n    }\n\n    ngOnDestroy() {\n        // MEMORY LEAK FIX: Unsubscribe from all session timeout subscriptions\n        this.sessionTimeoutSubscriptions.forEach(sub => {\n            if (sub && !sub.closed) {\n                sub.unsubscribe();\n            }\n        });\n        this.sessionTimeoutSubscriptions = [];\n\n        // MEMORY LEAK FIX: Complete Subject to release subscriptions\n        if (this.sessionTimeoutObservable) {\n            this.sessionTimeoutObservable.complete();\n            this.sessionTimeoutObservable = null;\n        }\n\n        // MEMORY LEAK FIX: Clear session timeout queue\n        this.sessionTimeoutQueue = [];\n\n        // MEMORY LEAK FIX: Clear locale object\n        this.localeObject = null;\n    }\n}\n","import { HttpRequest } from '@angular/common/http';\n\n/**\n * This class creates a custom WmHttpRequest.\n */\nexport class WmHttpRequest {\n\n    method: string;\n    url: string;\n    headers: any = [];\n    responseType: string;\n    reportProgress: boolean;\n    withCredentials: boolean;\n    urlWithParams: string;\n    body: any;\n\n    constructor() {}\n\n    /**\n     * This method converts the given wm HttpRequest to angular HttpRequest\n     * @param reqObj, the wm HttpRequest\n     */\n    wmToAngularRequest(reqObj) {\n        let angReq;\n        angReq = new HttpRequest(reqObj.method, reqObj.url);\n        angReq = angReq.clone();\n        angReq.body = reqObj.body;\n        angReq.method = reqObj.method;\n        angReq.responseType =  reqObj.responseType;\n        angReq.reportProgress = reqObj.reportProgress;\n        angReq.urlWithParams = reqObj.url;\n        angReq.withCredentials =  reqObj.withCredentials;\n        reqObj.headers.forEach((value, header) => {\n            angReq.headers = angReq.headers.append(header, value);\n        });\n        return angReq;\n    }\n\n    /**\n     * This method converts the given angular HttpRequest to wm HttpRequest\n     * @param req, the angular HttpRequest\n     */\n    angularToWmRequest(req) {\n        let wmReq = new WmHttpRequest();\n        let headerMap = new Map();\n        wmReq.body = req.body;\n        wmReq.method = req.method;\n        wmReq.responseType = req.responseType;\n        wmReq.reportProgress = req.reportProgress;\n        wmReq.url = req.urlWithParams;\n        wmReq.withCredentials = req.withCredentials;\n        req.headers.keys().forEach((header) => {\n            headerMap.set(header, req.headers.headers.get(header.toLowerCase())[0]);\n        });\n        wmReq.headers = headerMap;\n        return wmReq;\n    }\n}\n","import { WmHttpRequest } from './wm-http-request';\nimport { HttpResponse } from '@angular/common/http';\n\n/**\n * This class creates a custom WmHttpRequest.\n */\nexport class WmHttpResponse extends WmHttpRequest{\n\n    error: any;\n    message: string;\n    ok: boolean;\n    status: number;\n    statusText: string;\n\n    constructor() {\n        super();\n    }\n\n    /**\n     * This method converts the given wm HttpResponse to angular HttpResponse\n     * @param respObj, the wm HttpResponse\n     */\n    wmToAngularResponse(respObj) {\n        let angResp;\n        angResp = new HttpResponse();\n        angResp = angResp.clone();\n        angResp.body = respObj.body;\n        angResp.error = respObj.error;\n        angResp.message = respObj.message;\n        angResp.url = respObj.url;\n        angResp.ok = respObj.ok;\n        angResp.status = respObj.status;\n        angResp.statusText = respObj.statusText;\n        respObj.headers.forEach((value, header)=>{\n            angResp.headers = angResp.headers.append(header, value);\n        });\n        return angResp;\n    }\n\n    /**\n     * This method converts the given wm HttpResponse to angular HttpResponse\n     * @param respObj, the angular HttpResponse\n     */\n    angularToWmResponse(respObj) {\n        let wmResp;\n        let headerMap = new Map();\n        wmResp = new WmHttpResponse();\n        wmResp.body = respObj.body;\n        wmResp.error = respObj.error;\n        wmResp.message = respObj.message;\n        wmResp.url = respObj.url;\n        wmResp.ok = respObj.ok;\n        wmResp.status = respObj.status;\n        wmResp.statusText = respObj.statusText;\n        respObj.headers.keys().forEach((header) => {\n            headerMap.set(header, respObj.headers.headers.get(header.toLowerCase())[0]);\n        });\n        wmResp.headers = headerMap;\n        return wmResp;\n    }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}