{
  "version": 3,
  "sources": ["../../../../../node_modules/@microsoft/fetch-event-source/src/parse.ts", "../../../../../node_modules/@microsoft/fetch-event-source/src/fetch.ts", "../../src/web/lib/Fetcher.ts", "../../src/web/lib/apiFetcher.ts"],
  "sourcesContent": [null, null, "import { ApiError, ErrorCodes } from \"@framerjs/app-shared\"\nimport { getLogger } from \"@framerjs/shared\"\nimport type { FetchEventSourceInit } from \"@microsoft/fetch-event-source\"\nimport { fetchEventSource } from \"@microsoft/fetch-event-source\"\nimport { isArray } from \"utils/typeChecks.ts\"\nimport { accessTokenRefresher } from \"./accessTokenRefresherWeb.ts\"\nimport { ErrorArea, record } from \"./tracker.ts\"\nimport { xRequestedByHeader } from \"./xRequestedByHeader.ts\"\n\nconst log = getLogger(\"fetcher\")\n\ntype QueryParamValue = string | number | undefined | boolean\n\ninterface QueryParams {\n\t[key: string]: QueryParamValue | readonly QueryParamValue[]\n}\n\nconst composeURLString = (href: string, queryParams?: QueryParams): string => {\n\tif (!queryParams) return href\n\tconst url = new URL(href)\n\n\tfor (const key in queryParams) {\n\t\tconst value = queryParams[key]\n\t\tif (value === undefined) continue\n\n\t\tif (isArray(value)) {\n\t\t\tfor (const item of value) {\n\t\t\t\tif (item) url.searchParams.append(`${key}[]`, item.toString())\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\turl.searchParams.append(key, value.toString())\n\t}\n\n\treturn url.href\n}\n\nconst handleNetworkFailure = (cause?: unknown): never => {\n\t// For now we assume all fetch errors are connection errors. The only other\n\t// way to end up here is that we constructed an invalid request.\n\tthrow new ApiError({\n\t\tisTemporary: true,\n\t\tmessage: \"Connection error\",\n\t\tcode: ErrorCodes.ConnectionError,\n\t\tstatus: 0,\n\t\tskipSentry: true,\n\t\tcause,\n\t})\n}\n\n/** Allow custom handling of abortController.abort() errors in the UI.\nSee https://developer.mozilla.org/en-US/docs/Web/API/AbortController */\nexport function isAbortError(err: unknown): boolean {\n\treturn err instanceof DOMException && err.name === \"AbortError\"\n}\n\ninterface ValidateResponseResultSuccess {\n\tstatus: \"success\"\n\tresponse: Response\n}\n\ninterface ValidateResponseResultRetry {\n\tstatus: \"retry\"\n}\n\ninterface ValidateResponseResultError {\n\tstatus: \"error\"\n\terror: ApiError\n}\n\ntype ValidateResponseResult = ValidateResponseResultSuccess | ValidateResponseResultRetry | ValidateResponseResultError\n\nasync function validateResponse(response: Response, retryCount: number): Promise<ValidateResponseResult> {\n\tif (response.ok) return { status: \"success\", response }\n\n\tlet message = response.statusText\n\tlet code: number | undefined\n\tlet ref: string | undefined\n\tlet data: Record<string, unknown> | undefined\n\t// Attempt to get more info out of the error response.\n\ttry {\n\t\tconst { error: maybeError, ref: maybeRef, data: maybeData } = await response.json()\n\t\tif (typeof maybeError?.message === \"string\") message = maybeError.message\n\t\tif (typeof maybeError?.code === \"number\") code = maybeError.code\n\t\tif (typeof maybeRef === \"string\") ref = maybeRef\n\t\tif (typeof maybeData === \"object\" && maybeData) data = maybeData\n\t} catch {\n\t\t// Ignore errors parsing the error body.\n\t}\n\n\tif (response.status === 401) {\n\t\t// If we're getting this, that means that either our accessToken has expired, was revoked, or we didn't send one.\n\t\tawait accessTokenRefresher.discardAccessToken(true)\n\n\t\t// The access token shouldn't expire if AccessTokenRefresher does its job right.\n\t\t// However, we've seen a lot of sentry reports, so we're defensive and retry jwt expired requests.\n\t\t// One potential explanation for this is de-synced clocks.\n\t\tif (message.toLowerCase().includes(\"jwt expired\") && retryCount < 1) {\n\t\t\t// We are seeing an increased number of these, likely because of:\n\t\t\t// https://github.com/framer/FramerStudio/pull/24745\n\t\t\t// This log is useful for the time being to track how well is AccessTokenRefresher working\n\t\t\tlog.reportError(\n\t\t\t\tnew Error(\"Sent an expired JWT to the backend. This shouldn't happen if AccessTokenRefresher works correctly.\"),\n\t\t\t)\n\n\t\t\tawait accessTokenRefresher.getAccessToken() // Ensure it's refreshed before proceeding\n\t\t\treturn { status: \"retry\" }\n\t\t}\n\t}\n\n\treturn {\n\t\tstatus: \"error\",\n\t\terror: new ApiError({\n\t\t\tdata,\n\t\t\tmessage,\n\t\t\tstatus: response.status,\n\t\t\tref,\n\t\t\tcode,\n\t\t}),\n\t}\n}\n\nexport class Fetcher {\n\tprivate activeRequestCount = 0\n\tprivate waitListeners = new Set<() => void>()\n\tprivate readonly = false\n\n\tconstructor(private baseURL: string) {}\n\n\tdebugSetReadOnly(readonly = true) {\n\t\tthis.readonly = readonly\n\t}\n\n\tprivate doWithListeners<R>(work: () => Promise<R>): Promise<R> {\n\t\tthis.activeRequestCount++\n\t\ttry {\n\t\t\treturn work().finally(() => {\n\t\t\t\tthis.activeRequestCount--\n\t\t\t\tif (this.activeRequestCount === 0) {\n\t\t\t\t\tconst listeners = Array.from(this.waitListeners)\n\t\t\t\t\tthis.waitListeners.clear()\n\t\t\t\t\tfor (const listener of listeners) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tlistener()\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t// Ignore\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t} catch (error) {\n\t\t\t// This is catching only _synchronous_ errors, specifically,\n\t\t\t// malformed `init` parameters that cause `TypeError`s when calling\n\t\t\t// `new Headers` in `withAuthorizationHeader` (and anything\n\t\t\t// unforeseen).\n\n\t\t\t// We need to balance the active request count here, but no\n\t\t\t// listeners should be called.\n\t\t\tthis.activeRequestCount--\n\n\t\t\tconst message = error instanceof Error ? error.message : String(error)\n\t\t\trecord(\"application_error\", { message, area: ErrorArea.fetch })\n\n\t\t\tthrow error\n\t\t}\n\t}\n\n\tprivate fetch(input: RequestInfo, init?: RequestInit, retryCount = 0): Promise<Response> {\n\t\treturn this.doWithListeners(async () => {\n\t\t\tconst initWithAuthToken = await this.accessTokenRefresher.withAuthorizationHeader(init || {})\n\t\t\tconst response = await fetch(input, initWithAuthToken).catch(error => {\n\t\t\t\tif (isAbortError(error)) {\n\t\t\t\t\tthrow error\n\t\t\t\t}\n\n\t\t\t\t// fetch itself rejects only on network/connection errors\n\t\t\t\t// @see https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch\n\t\t\t\tthrow handleNetworkFailure(error)\n\t\t\t})\n\n\t\t\tconst result = await validateResponse(response, retryCount)\n\n\t\t\tif (result.status === \"error\") {\n\t\t\t\tthrow result.error\n\t\t\t}\n\n\t\t\tif (result.status === \"retry\") {\n\t\t\t\treturn this.fetch(input, init, retryCount + 1)\n\t\t\t}\n\n\t\t\treturn result.response\n\t\t})\n\t}\n\n\tprivate fetchStream(input: RequestInfo, originalInit: FetchEventSourceInit = {}, retryCount = 0): Promise<void> {\n\t\t// fetchEventSource doesn't support the Headers type for `headers`, so we cannot directly\n\t\t// use `accessTokenRefresher.withAuthorizationHeader`.\n\t\t// See https://github.com/Azure/fetch-event-source/issues/37\n\t\treturn this.doWithListeners(async () => {\n\t\t\tconst { headers: initHeaders, onopen, onerror, ...rest } = originalInit\n\n\t\t\tconst bearerToken = await this.accessTokenRefresher.getAuthorizationHeaderValue()\n\t\t\tconst init: FetchEventSourceInit = {\n\t\t\t\t...rest,\n\t\t\t\theaders: bearerToken ? { ...initHeaders, authorization: bearerToken } : initHeaders,\n\t\t\t\tonopen: async response => {\n\t\t\t\t\tconst result = await validateResponse(response, retryCount)\n\n\t\t\t\t\tif (result.status === \"error\") {\n\t\t\t\t\t\tonerror?.(result.error)\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\n\t\t\t\t\tif (result.status === \"retry\") {\n\t\t\t\t\t\treturn this.fetchStream(input, originalInit, retryCount + 1)\n\t\t\t\t\t}\n\n\t\t\t\t\tawait onopen?.(result.response)\n\t\t\t\t},\n\t\t\t}\n\t\t\treturn fetchEventSource(input, init).catch(\n\t\t\t\t// fetch itself rejects only on network/connection errors\n\t\t\t\t// @see https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch\n\t\t\t\t// FIXME: This may be true for fetch, but not for fetchEventSource.\n\t\t\t\thandleNetworkFailure,\n\t\t\t)\n\t\t})\n\t}\n\n\twait(listener: () => void) {\n\t\tif (this.activeRequestCount === 0) {\n\t\t\tlistener()\n\t\t\treturn\n\t\t}\n\t\tthis.waitListeners.add(listener)\n\t}\n\n\tasync getRaw(endpoint: string, query?: QueryParams, signal?: AbortSignal) {\n\t\tconst response = await this.fetch(composeURLString(`${this.baseURL}${endpoint}`, query), {\n\t\t\tcredentials: \"include\",\n\t\t\tredirect: \"error\",\n\t\t\tsignal,\n\t\t})\n\t\treturn response\n\t}\n\n\tasync get(endpoint: string, query?: QueryParams, signal?: AbortSignal) {\n\t\tconst response = await this.getRaw(endpoint, query, signal)\n\t\treturn isJson(response) ? response.json() : response.text()\n\t}\n\n\tasync postRaw(endpoint: string, body?: string | FormData, contentType?: string, signal?: AbortSignal) {\n\t\tif (this.readonly) throw Error(\"apiFetcher is set to readonly\")\n\n\t\tconst hasBody = typeof body !== \"undefined\"\n\t\tconst headers: Record<string, string> =\n\t\t\thasBody && contentType ? { \"Content-Type\": contentType, ...xRequestedByHeader } : xRequestedByHeader\n\t\tconst response = await this.fetch(`${this.baseURL}${endpoint}`, {\n\t\t\tmethod: \"POST\",\n\t\t\tcredentials: \"include\",\n\t\t\tredirect: \"error\",\n\t\t\theaders,\n\t\t\tbody,\n\t\t\tsignal,\n\t\t})\n\t\treturn response\n\t}\n\n\tasync post(endpoint: string, body?: unknown, signal?: AbortSignal) {\n\t\tif (this.readonly) throw Error(\"apiFetcher is set to readonly\")\n\n\t\tconst response = await this.postRaw(endpoint, JSON.stringify(body), \"application/json\", signal)\n\t\treturn isJson(response) ? response.json() : response.text()\n\t}\n\n\tpostStream(\n\t\tendpoint: string,\n\t\tpartialInit: Pick<\n\t\t\tFetchEventSourceInit,\n\t\t\t\"onopen\" | \"onmessage\" | \"onclose\" | \"onerror\" | \"openWhenHidden\" | \"signal\"\n\t\t>,\n\t\tbody?: unknown,\n\t) {\n\t\tif (this.readonly) throw Error(\"apiFetcher is set to readonly\")\n\n\t\tconst hasBody = typeof body !== \"undefined\"\n\t\tconst headers: Record<string, string> = hasBody\n\t\t\t? { \"Content-Type\": \"application/json\", ...xRequestedByHeader }\n\t\t\t: xRequestedByHeader\n\n\t\treturn this.fetchStream(`${this.baseURL}${endpoint}`, {\n\t\t\t...partialInit,\n\t\t\tmethod: \"POST\",\n\t\t\tcredentials: \"include\",\n\t\t\theaders,\n\t\t\tbody: hasBody ? JSON.stringify(body) : null,\n\t\t})\n\t}\n\n\tasync putRaw(endpoint: string, body?: string | FormData, contentType?: string) {\n\t\tif (this.readonly) throw Error(\"apiFetcher is set to readonly\")\n\n\t\tconst hasBody = typeof body !== \"undefined\"\n\t\tconst headers: Record<string, string> =\n\t\t\thasBody && contentType ? { \"Content-Type\": contentType, ...xRequestedByHeader } : xRequestedByHeader\n\t\tconst response = await this.fetch(`${this.baseURL}${endpoint}`, {\n\t\t\tmethod: \"PUT\",\n\t\t\tcredentials: \"include\",\n\t\t\theaders,\n\t\t\tbody,\n\t\t})\n\t\treturn response\n\t}\n\n\tasync put(endpoint: string, body?: unknown) {\n\t\tif (this.readonly) throw Error(\"apiFetcher is set to readonly\")\n\n\t\tconst response = await this.putRaw(endpoint, JSON.stringify(body), \"application/json\")\n\t\treturn isJson(response) ? response.json() : response.text()\n\t}\n\n\tasync patchRaw(endpoint: string, body?: string | FormData, contentType?: string) {\n\t\tif (this.readonly) throw Error(\"apiFetcher is set to readonly\")\n\n\t\tconst hasBody = typeof body !== \"undefined\"\n\t\tconst headers: Record<string, string> =\n\t\t\thasBody && contentType ? { \"Content-Type\": contentType, ...xRequestedByHeader } : xRequestedByHeader\n\t\tconst response = await this.fetch(`${this.baseURL}${endpoint}`, {\n\t\t\tmethod: \"PATCH\",\n\t\t\tcredentials: \"include\",\n\t\t\theaders,\n\t\t\tbody,\n\t\t})\n\t\treturn response\n\t}\n\n\tasync patch(endpoint: string, body?: unknown) {\n\t\tif (this.readonly) throw Error(\"apiFetcher is set to readonly\")\n\n\t\tconst response = await this.patchRaw(endpoint, JSON.stringify(body), \"application/json\")\n\t\treturn isJson(response) ? response.json() : response.text()\n\t}\n\n\tasync deleteRaw(endpoint: string, body?: string | FormData, contentType?: string) {\n\t\tif (this.readonly) throw Error(\"apiFetcher is set to readonly\")\n\n\t\tconst hasBody = typeof body !== \"undefined\"\n\t\tconst headers: Record<string, string> =\n\t\t\thasBody && contentType ? { \"Content-Type\": contentType, ...xRequestedByHeader } : xRequestedByHeader\n\t\tconst response = await this.fetch(`${this.baseURL}${endpoint}`, {\n\t\t\tmethod: \"DELETE\",\n\t\t\tcredentials: \"include\",\n\t\t\tredirect: \"error\",\n\t\t\tbody,\n\t\t\theaders,\n\t\t})\n\t\treturn response\n\t}\n\n\tasync delete(endpoint: string, body?: unknown) {\n\t\tif (this.readonly) throw Error(\"apiFetcher is set to readonly\")\n\n\t\tconst response = await this.deleteRaw(endpoint, JSON.stringify(body), \"application/json\")\n\t\treturn isJson(response) ? response.json() : response.text()\n\t}\n\n\tget accessTokenRefresher() {\n\t\treturn accessTokenRefresher\n\t}\n}\n\nfunction isJson(response: Response): boolean {\n\tconst contentType = response.headers.get(\"Content-Type\")\n\treturn contentType?.toLowerCase().startsWith(\"application/json\") ?? false\n}\n", "import { getServiceMap } from \"@framerjs/shared\"\nimport { Fetcher } from \"./Fetcher.ts\"\n\nexport const apiFetcher = new Fetcher(getServiceMap().api)\n"],
  "mappings": "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",
  "names": ["fetch", "_a"]
}
