{"version":3,"sources":["src/common.speech/Transcription/ConversationUtils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAkB,MAAM,qCAAqC,CAAC;AACtF,OAAO,EAAE,OAAO,EAAiB,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,uCAAuC,CAAC;AA2CjE,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAoB7E;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,EACjC,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,GAAQ,EACrB,IAAI,EAAE,GAAU,EAChB,OAAO,EAAE,eAAoB,EAC7B,QAAQ,EAAE,GAAG,GAAG,GAAG,CAuC1C;AAED,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,EAAE,QAAQ,GAAG,IAAI,CAwBlG","file":"ConversationUtils.d.ts","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT license.\n\nimport { IRequestOptions, RestConfigBase } from \"../../common.browser/RestConfigBase\";\nimport { Promise, PromiseResult } from \"../../common/Promise\";\nimport { Callback } from \"../../sdk/Transcription/IConversation\";\nimport { IResponse } from \"./ConversationTranslatorInterfaces\";\n\n/**\n * Config settings for Conversation Translator\n */\n/**\n * Helpers for sending / receiving HTTPS requests / responses.\n * @param params\n */\nfunction queryParams(params: any = {}): any {\n    return Object.keys(params)\n        .map((k: any) => encodeURIComponent(k) + \"=\" + encodeURIComponent(params[k]))\n        .join(\"&\");\n}\n\nfunction withQuery(url: string, params: any = {}): any {\n    const queryString = queryParams(params);\n    return queryString ? url + (url.indexOf(\"?\") === -1 ? \"?\" : \"&\") + queryString : url;\n}\n\nfunction parseXHRResult(xhr: XMLHttpRequest): IResponse {\n    return {\n        data: xhr.responseText,\n        headers: xhr.getAllResponseHeaders(),\n        json: <T>() => JSON.parse(xhr.responseText) as T,\n        ok: xhr.status >= 200 && xhr.status < 300,\n        status: xhr.status,\n        statusText: xhr.statusText,\n    };\n}\n\nfunction errorResponse(xhr: XMLHttpRequest, message: string | null = null): IResponse {\n    return {\n        data: message || xhr.statusText,\n        headers: xhr.getAllResponseHeaders(),\n        json: <T>() => JSON.parse(message || (\"\\\"\" + xhr.statusText + \"\\\"\")) as T,\n      ok: false,\n      status: xhr.status,\n      statusText: xhr.statusText,\n    };\n}\n\nexport function extractHeaderValue(headerKey: string, headers: string): string {\n\n    let headerValue: string = \"\";\n\n    try {\n      const arr = headers.trim().split(/[\\r\\n]+/);\n      const headerMap: any = {};\n      arr.forEach((line: any) => {\n        const parts = line.split(\": \");\n        const header = parts.shift().toLowerCase();\n        const value = parts.join(\": \");\n        headerMap[header] = value;\n      });\n\n      headerValue = headerMap[headerKey.toLowerCase()];\n    } catch (e) {\n      // ignore the error\n    }\n\n    return headerValue;\n}\n\nexport function request(method: \"get\" | \"post\" | \"delete\",\n                        url: string,\n                        queryParams: any = {},\n                        body: any = null,\n                        options: IRequestOptions = {},\n                        callback: any): any {\n\n    const defaultRequestOptions = RestConfigBase.requestOptions;\n\n    const ignoreCache = options.ignoreCache || defaultRequestOptions.ignoreCache;\n    const headers = options.headers || defaultRequestOptions.headers;\n    const timeout = options.timeout || defaultRequestOptions.timeout;\n\n    const xhr = new XMLHttpRequest();\n    xhr.open(method, withQuery(url, queryParams), true);\n\n    if (headers) {\n        Object.keys(headers).forEach((key: any) => xhr.setRequestHeader(key, headers[key]));\n    }\n\n    if (ignoreCache) {\n        xhr.setRequestHeader(\"Cache-Control\", \"no-cache\");\n    }\n\n    xhr.timeout = timeout;\n\n    xhr.onload = (evt: any) => {\n        callback(parseXHRResult(xhr));\n    };\n\n    xhr.onerror = (evt: any) => {\n        callback(errorResponse(xhr, \"Failed to make request.\"));\n    };\n\n    xhr.ontimeout = (evt: any) => {\n        callback(errorResponse(xhr, \"Request took longer than expected.\"));\n    };\n\n    if (method === \"post\" && body) {\n        xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n        xhr.send(JSON.stringify(body));\n    } else {\n        xhr.send();\n    }\n}\n\nexport function PromiseToEmptyCallback<T>(promise: Promise<T>, cb?: Callback, err?: Callback): void {\n    if (!!promise) {\n        promise.continueWith((antecedent: PromiseResult<T>): void => {\n            try {\n                if (antecedent.isError) {\n                    if (!!err) {\n                        err(antecedent.error);\n                    }\n                } else {\n                    if (!!cb) {\n                        cb();\n                    }\n                }\n            } catch (e) {\n                if (!!err) {\n                    err(`'Unhandled error on promise callback: ${e}. InnerError: ${antecedent.error}'`);\n                }\n            }\n        });\n    } else {\n        if (!!err) {\n            err(\"Null promise\");\n        }\n    }\n}\n"]}