UNPKG

@hahnpro/ms-speech-sdk

Version:
1 lines 5.8 kB
{"version":3,"sources":["src/common.browser/RestMessageAdapter.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,oBAAY,eAAe;IACvB,GAAG,QAAQ;IACX,IAAI,SAAS;IACb,MAAM,WAAW;IACjB,IAAI,SAAS;CAChB;AAED,MAAM,WAAW,aAAa;IAC1B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,GAAG,CAAC;IACV,OAAO,EAAE,MAAM,CAAC;CACnB;AASD,qBAAa,kBAAkB;IAE3B,OAAO,CAAC,eAAe,CAAU;IACjC,OAAO,CAAC,WAAW,CAA4B;gBAG3C,YAAY,EAAE,eAAe;WAWnB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IAqB5E,IAAW,OAAO,CAAC,YAAY,EAAE,eAAe,EAG/C;IAEM,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAI5C,OAAO,CACV,MAAM,EAAE,eAAe,EACvB,GAAG,EAAE,MAAM,EACX,WAAW,GAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAO,EACxC,IAAI,GAAE,GAAU,GACb,OAAO,CAAC,aAAa,CAAC;IAiD7B,OAAO,CAAC,WAAW;CAKtB","file":"RestMessageAdapter.d.ts","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT license.\n\nimport bent, { BentResponse, RequestBody } from \"bent\";\nimport {\n ArgumentNullError,\n Deferred\n} from \"../common/Exports.js\";\nimport { IRequestOptions } from \"./Exports.js\";\n\nexport enum RestRequestType {\n Get = \"GET\",\n Post = \"POST\",\n Delete = \"DELETE\",\n File = \"file\",\n}\n\nexport interface IRestResponse {\n ok: boolean;\n status: number;\n statusText: string;\n data: string;\n json: any;\n headers: string;\n}\n\ninterface JsonError {\n error?: {\n message: string;\n };\n}\n\n// accept rest operations via request method and return abstracted objects from server response\nexport class RestMessageAdapter {\n\n private privIgnoreCache: boolean;\n private privHeaders: { [key: string]: string };\n\n public constructor(\n configParams: IRequestOptions\n ) {\n\n if (!configParams) {\n throw new ArgumentNullError(\"configParams\");\n }\n\n this.privHeaders = configParams.headers;\n this.privIgnoreCache = configParams.ignoreCache;\n }\n\n public static extractHeaderValue(headerKey: string, headers: string): string {\n let headerValue: string = \"\";\n\n try {\n const arr = headers.trim().split(/[\\r\\n]+/);\n const headerMap: { [key: string]: string } = {};\n arr.forEach((line: string): void => {\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\n public set options(configParams: IRequestOptions) {\n this.privHeaders = configParams.headers;\n this.privIgnoreCache = configParams.ignoreCache;\n }\n\n public setHeaders(key: string, value: string): void {\n this.privHeaders[key] = value;\n }\n\n public request(\n method: RestRequestType,\n uri: string,\n queryParams: { [key: string]: any } = {},\n body: any = null,\n ): Promise<IRestResponse> {\n\n const responseReceivedDeferral = new Deferred<IRestResponse>();\n\n const requestCommand = method === RestRequestType.File ? \"POST\" : method;\n const handleRestResponse = (data: BentResponse, j: JsonError = {}): IRestResponse => {\n const d: { statusText?: string; statusMessage?: string } = data;\n return {\n data: JSON.stringify(j),\n headers: JSON.stringify(data.headers),\n json: j,\n ok: data.statusCode >= 200 && data.statusCode < 300,\n status: data.statusCode,\n statusText: j.error ? j.error.message : d.statusText ? d.statusText : d.statusMessage\n };\n };\n\n const send = (postData: RequestBody): void => {\n const sendRequest = bent(uri, requestCommand, this.privHeaders, 200, 201, 202, 204, 400, 401, 402, 403, 404);\n const params = this.queryParams(queryParams) === \"\" ? \"\" : `?${this.queryParams(queryParams)}`;\n sendRequest(params, postData).then( async (data: BentResponse): Promise<void> => {\n if (method === RestRequestType.Delete || data.statusCode === 204) {\n // No JSON from Delete and reset (204) operations\n responseReceivedDeferral.resolve(handleRestResponse(data));\n } else {\n try {\n const j: JsonError = await data.json() as JsonError;\n responseReceivedDeferral.resolve(handleRestResponse(data, j));\n } catch {\n responseReceivedDeferral.resolve(handleRestResponse(data));\n }\n }\n }).catch((error: string): void => {\n responseReceivedDeferral.reject(error);\n });\n };\n\n if (this.privIgnoreCache) {\n this.privHeaders[\"Cache-Control\"] = \"no-cache\";\n }\n\n if (method === RestRequestType.Post && body) {\n this.privHeaders[\"content-type\"] = \"application/json\";\n this.privHeaders[\"Content-Type\"] = \"application/json\";\n }\n send(body as RequestBody);\n return responseReceivedDeferral.promise;\n }\n\n private queryParams(params: { [key: string]: string } = {}): string {\n return Object.keys(params)\n .map((k: string): string => encodeURIComponent(k) + \"=\" + encodeURIComponent(params[k]))\n .join(\"&\");\n }\n}\n"]}