{"version":3,"file":"FetchClient.js","sources":["../../src/network/FetchClient.ts"],"sourcesContent":["/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { Constants, INetworkModule, NetworkRequestOptions, NetworkResponse } from \"@azure/msal-common\";\r\nimport { BrowserAuthError } from \"../error/BrowserAuthError\";\r\nimport { HTTP_REQUEST_TYPE } from \"../utils/BrowserConstants\";\r\n\r\n/**\r\n * This class implements the Fetch API for GET and POST requests. See more here: https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API\r\n */\r\nexport class FetchClient implements INetworkModule {\r\n\r\n /**\r\n * Fetch Client for REST endpoints - Get request\r\n * @param url \r\n * @param headers \r\n * @param body \r\n */\r\n async sendGetRequestAsync(url: string, options?: NetworkRequestOptions): Promise> {\r\n let response;\r\n try {\r\n response = await fetch(url, {\r\n method: HTTP_REQUEST_TYPE.GET,\r\n headers: this.getFetchHeaders(options)\r\n });\r\n } catch (e) {\r\n if (window.navigator.onLine) {\r\n throw BrowserAuthError.createGetRequestFailedError(e, url);\r\n } else {\r\n throw BrowserAuthError.createNoNetworkConnectivityError();\r\n }\r\n }\r\n\r\n try {\r\n return {\r\n headers: this.getHeaderDict(response.headers),\r\n body: await response.json() as T,\r\n status: response.status\r\n };\r\n } catch (e) {\r\n throw BrowserAuthError.createFailedToParseNetworkResponseError(url);\r\n }\r\n }\r\n\r\n /**\r\n * Fetch Client for REST endpoints - Post request\r\n * @param url \r\n * @param headers \r\n * @param body \r\n */\r\n async sendPostRequestAsync(url: string, options?: NetworkRequestOptions): Promise> {\r\n const reqBody = (options && options.body) || Constants.EMPTY_STRING;\r\n\r\n let response;\r\n try {\r\n response = await fetch(url, {\r\n method: HTTP_REQUEST_TYPE.POST,\r\n headers: this.getFetchHeaders(options),\r\n body: reqBody\r\n });\r\n } catch (e) {\r\n if (window.navigator.onLine) {\r\n throw BrowserAuthError.createPostRequestFailedError(e, url);\r\n } else {\r\n throw BrowserAuthError.createNoNetworkConnectivityError();\r\n }\r\n }\r\n\r\n try {\r\n return {\r\n headers: this.getHeaderDict(response.headers),\r\n body: await response.json() as T,\r\n status: response.status\r\n };\r\n } catch (e) {\r\n throw BrowserAuthError.createFailedToParseNetworkResponseError(url);\r\n }\r\n }\r\n\r\n /**\r\n * Get Fetch API Headers object from string map\r\n * @param inputHeaders \r\n */\r\n private getFetchHeaders(options?: NetworkRequestOptions): Headers {\r\n const headers = new Headers();\r\n if (!(options && options.headers)) {\r\n return headers;\r\n }\r\n const optionsHeaders = options.headers;\r\n Object.keys(optionsHeaders).forEach((key) => {\r\n headers.append(key, optionsHeaders[key]);\r\n });\r\n return headers;\r\n }\r\n\r\n private getHeaderDict(headers: Headers): Record {\r\n const headerDict: Record = {};\r\n headers.forEach((value: string, key: string) => {\r\n headerDict[key] = value;\r\n });\r\n return headerDict;\r\n }\r\n}\r\n"],"names":[],"mappings":";;;;;;;AAAA;;;;AASA;;;;IAGA;KA4FC;;;;;;;IApFS,yCAAmB,GAAzB,UAA6B,GAAW,EAAE,OAA+B;;;;;;;wBAGtD,qBAAM,KAAK,CAAC,GAAG,EAAE;gCACxB,MAAM,EAAE,iBAAiB,CAAC,GAAG;gCAC7B,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC;6BACzC,CAAC,EAAA;;wBAHF,QAAQ,GAAG,SAGT,CAAC;;;;wBAEH,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE;4BACzB,MAAM,gBAAgB,CAAC,2BAA2B,CAAC,GAAC,EAAE,GAAG,CAAC,CAAC;yBAC9D;6BAAM;4BACH,MAAM,gBAAgB,CAAC,gCAAgC,EAAE,CAAC;yBAC7D;;;;4BAKG,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC;;wBACvC,qBAAM,QAAQ,CAAC,IAAI,EAAE,EAAA;4BAF/B,uBAEI,OAAI,IAAE,SAA0B,CAAA;4BAChC,SAAM,GAAE,QAAQ,CAAC,MAAM;iCACzB;;;wBAEF,MAAM,gBAAgB,CAAC,uCAAuC,CAAC,GAAG,CAAC,CAAC;;;;;KAE3E;;;;;;;IAQK,0CAAoB,GAA1B,UAA8B,GAAW,EAAE,OAA+B;;;;;;wBAChE,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,YAAY,CAAC;;;;wBAIrD,qBAAM,KAAK,CAAC,GAAG,EAAE;gCACxB,MAAM,EAAE,iBAAiB,CAAC,IAAI;gCAC9B,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC;gCACtC,IAAI,EAAE,OAAO;6BAChB,CAAC,EAAA;;wBAJF,QAAQ,GAAG,SAIT,CAAC;;;;wBAEH,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE;4BACzB,MAAM,gBAAgB,CAAC,4BAA4B,CAAC,GAAC,EAAE,GAAG,CAAC,CAAC;yBAC/D;6BAAM;4BACH,MAAM,gBAAgB,CAAC,gCAAgC,EAAE,CAAC;yBAC7D;;;;4BAKG,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC;;wBACvC,qBAAM,QAAQ,CAAC,IAAI,EAAE,EAAA;4BAF/B,uBAEI,OAAI,IAAE,SAA0B,CAAA;4BAChC,SAAM,GAAE,QAAQ,CAAC,MAAM;iCACzB;;;wBAEF,MAAM,gBAAgB,CAAC,uCAAuC,CAAC,GAAG,CAAC,CAAC;;;;;KAE3E;;;;;IAMO,qCAAe,GAAvB,UAAwB,OAA+B;QACnD,IAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;QAC9B,IAAI,EAAE,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;YAC/B,OAAO,OAAO,CAAC;SAClB;QACD,IAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,UAAC,GAAG;YACpC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;SAC5C,CAAC,CAAC;QACH,OAAO,OAAO,CAAC;KAClB;IAEO,mCAAa,GAArB,UAAsB,OAAgB;QAClC,IAAM,UAAU,GAA2B,EAAE,CAAC;QAC9C,OAAO,CAAC,OAAO,CAAC,UAAC,KAAa,EAAE,GAAW;YACvC,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;SAC3B,CAAC,CAAC;QACH,OAAO,UAAU,CAAC;KACrB;IACL,kBAAC;AAAD,CAAC;;;;"}