{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../src/common/fetch.ts"],"names":[],"mappings":"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","sourcesContent":["\nimport { ProxyAgent, setGlobalDispatcher } from 'undici'\n\ntype Method = 'POST' | 'GET' | 'PUT' | 'DELETE' | 'post' | 'get' | 'put' | 'delete'\n\ntype Options = OptionsT & {\n /* Set the query string of the request from an object */\n query?: Record\n}\n\nclass FetchError extends Error {\n constructor(\n public response: Response,\n public data: Record | undefined,\n ) {\n super()\n }\n}\n\nexport const isFetchError = (error: unknown): error is FetchError => {\n return error instanceof FetchError\n}\n\nexport function getProxyUrl() {\n return (\n process.env.HTTPS_PROXY ||\n process.env.HTTP_PROXY ||\n process.env.https_proxy ||\n process.env.http_proxy\n )\n}\n\n/**\n * Creates a ProxyAgent and sets it as the global dispatcher via unidici (which\n * affects fetch calls) if a proxy is set either in VS Code settings or as an\n * environment variable.\n */\nconst proxyUrl = getProxyUrl()\nconst agent = proxyUrl ? new ProxyAgent({ uri: proxyUrl }) : undefined\nif (agent) {\n setGlobalDispatcher(agent)\n}\n\n/**\n * Makes a request to the Figma API. This is used by other functions to make\n * various types of requests. We return both the response object, and the data\n * parsed as JSON, to make it easier to work with the response.\n */\nasync function makeRequestInternal(\n url: string,\n method: Method,\n options: Options = {},\n body?: Record,\n) {\n const urlObj = new URL(url)\n if (options?.query) {\n Object.entries(options.query).forEach(([key, value]) => {\n urlObj.searchParams.append(key, value as string)\n })\n }\n url = urlObj.toString()\n\n if (body) {\n options.body = JSON.stringify(body)\n }\n\n const response = await fetch(url, { ...options, method })\n if (!response.ok) {\n let data\n try {\n data = await response.json()\n } catch (e) {\n data = undefined\n }\n throw new FetchError(response, data)\n }\n\n const text = await response.text()\n const data = text ? (JSON.parse(text) as ResponseT) : ({} as ResponseT)\n\n return { response, data }\n}\n\nexport const request = {\n get: (url: string, options: Options = {}) => {\n return makeRequestInternal(url, 'GET', options)\n },\n post: (url: string, body: Record, options: Options = {}) => {\n return makeRequestInternal(url, 'POST', options, body)\n },\n put: (url: string, body: Record, options: Options = {}) => {\n return makeRequestInternal(url, 'PUT', options, body)\n },\n delete: (url: string, body?: Record, options: Options = {}) => {\n return makeRequestInternal(url, 'DELETE', options, body)\n },\n}\n"]}