{"version":3,"file":"js/active_docs.ts-31cc36f1979e0973957d.js","mappings":"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","sources":["webpack://porta/./app/javascript/packs/active_docs.ts","webpack://porta/./app/javascript/src/ActiveDocs/OAS3Autocomplete.ts","webpack://porta/./app/javascript/src/utilities/fetchData.ts"],"sourcesContent":["// We can define the 3scale plugins here and export the modified bundle\nimport SwaggerUI from 'swagger-ui'\nimport 'swagger-ui/dist/swagger-ui.css'\n\nimport { autocompleteRequestInterceptor } from 'ActiveDocs/OAS3Autocomplete'\nimport { fetchData } from 'utilities/fetchData'\n\nimport type { AccountDataResponse } from 'Types/SwaggerTypes'\n\nimport 'ActiveDocs/swagger-ui-3-patch.scss'\n\nconst accountDataUrl = '/api_docs/account_data.json'\n\nwindow.SwaggerUI = (args: SwaggerUI.SwaggerUIOptions, serviceEndpoint: string) => {\n fetchData(accountDataUrl)\n .then(accountData => {\n const requestInterceptor = (request: SwaggerUI.Request) => autocompleteRequestInterceptor(request, accountData, serviceEndpoint)\n\n return SwaggerUI({\n ...args,\n requestInterceptor\n } as SwaggerUI.SwaggerUIOptions)\n })\n .catch(error => { console.error(error) })\n}\n","/* eslint-disable @typescript-eslint/no-redundant-type-constituents */\n/* eslint-disable @typescript-eslint/no-unnecessary-condition */\n/* eslint-disable @typescript-eslint/default-param-last */\n/* eslint-disable @typescript-eslint/no-unsafe-argument */\n/* eslint-disable @typescript-eslint/no-non-null-assertion */\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-return */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/naming-convention */\n/* TODO: this module needs to be properly typed !!! */\n\nimport type { Request as SwaggerUIRequest, Response as SwaggerUIResponse } from 'swagger-ui'\nimport type { AccountData, AccountDataResponse } from 'Types/SwaggerTypes'\n\nconst X_DATA_ATTRIBUTE = 'x-data-threescale-name'\n\nconst X_DATA_PARAMS_DESCRIPTIONS = {\n metric_names: 'Latest 5 metrics',\n metric_ids: 'Latest 5 metrics',\n app_keys: 'First application key from the latest five applications',\n app_ids: 'Latest 5 applications (across all accounts and services)',\n application_ids: 'Latest 5 applications',\n user_keys: 'First user key from latest 5 applications',\n account_ids: 'Latest 5 accounts',\n access_token: 'Access Token',\n user_ids: 'First user (admin) of the latest 5 account',\n service_ids: 'Service IDs',\n service_tokens: 'Service tokens',\n admin_ids: 'Latest 5 users (admin) from your account',\n provider_users_ids: 'Latest 5 users of your account',\n service_plan_ids: 'Latest 5 service plans',\n application_plan_ids: 'Latest 5 application plans',\n account_plan_ids: 'Latest 5 account plans',\n client_ids: 'Client IDs from the latest five applications',\n client_secrets: 'Client secrets from the latest five applications'\n} as const\n\nconst addAutocompleteToParam = (param: any, accountData: AccountData): any => {\n const xDataKey = param[X_DATA_ATTRIBUTE] as keyof typeof X_DATA_PARAMS_DESCRIPTIONS\n const autocompleteData = accountData[xDataKey]\n const paramHasAutocompleteData = autocompleteData && autocompleteData.length > 0 &&\n autocompleteData.every(p => p.name !== '')\n\n return paramHasAutocompleteData\n ? {\n ...param,\n examples: autocompleteData.reduce<{ summary: string; value: string }[]>((examples, item) => (\n [...examples, { summary: item.value ? `${item.name} - ${item.value}` : item.name, value: item.value }]\n ), [{ summary: X_DATA_PARAMS_DESCRIPTIONS[xDataKey], value: '-' }])\n }\n : param\n}\n\nconst injectParametersToPathOperation = (pathOperation: any, accountData: AccountData): any => {\n const operationParameters = pathOperation.parameters\n if (!operationParameters) return pathOperation\n const parametersWithAutocompleteData = operationParameters.map((param: any) => X_DATA_ATTRIBUTE in param ? addAutocompleteToParam(param, accountData) : param)\n return {\n ...pathOperation,\n parameters: parametersWithAutocompleteData\n }\n}\n\nconst injectAutocompleteToCommonParameters = (parameters: any[], accountData: AccountData): any[] => parameters.map(\n param => X_DATA_ATTRIBUTE in param ? addAutocompleteToParam(param, accountData) : param\n)\n\nconst injectParametersToPath = (\n path: Record,\n commonParameters: any[] | null | undefined = [],\n accountData: AccountData\n): any => (Object.keys(path).reduce>((updatedPath, item) => {\n updatedPath[item] = (item === 'parameters' && commonParameters)\n ? injectAutocompleteToCommonParameters(commonParameters, accountData)\n : injectParametersToPathOperation(path[item], accountData)\n return updatedPath\n}, {}))\n\nconst injectAutocompleteToResponseBody = (responseBody: string | { paths?: Record }, accountData: AccountData): any | string => {\n const res = (typeof responseBody !== 'string' && responseBody.paths && accountData) ? {\n ...responseBody,\n paths: Object.keys(responseBody.paths).reduce>((paths, path) => {\n const commonParameters = responseBody.paths![path].parameters\n paths[path] = injectParametersToPath(responseBody.paths![path], commonParameters, accountData)\n return paths\n }, {})\n } : responseBody\n return res\n}\n\nconst injectServerToResponseBody = (responseBody: any | string, serviceEndpoint: string): any | string => {\n if (typeof responseBody === 'string') {\n return responseBody\n }\n\n const originalServers = responseBody.servers || []\n const servers = serviceEndpoint ? [{ url: serviceEndpoint }] : originalServers\n\n return {\n ...responseBody,\n servers\n }\n}\n\nexport interface Response extends SwaggerUIResponse {\n body: {\n servers: unknown;\n paths: any;\n };\n data: string;\n text: string;\n}\n\nconst autocompleteOAS3 = (response: SwaggerUIResponse, accountData: AccountDataResponse, serviceEndpoint: string): Response => {\n const bodyWithServer = injectServerToResponseBody(response.body, serviceEndpoint)\n\n let body = undefined\n try {\n body = accountData.results\n ? injectAutocompleteToResponseBody(bodyWithServer, accountData.results)\n : bodyWithServer\n } catch (error: unknown) {\n console.error(error)\n body = bodyWithServer\n }\n\n return {\n ...response,\n body,\n data: JSON.stringify(body),\n text: JSON.stringify(body)\n }\n}\n\n/**\n * Intercept the request, and if it fetches the OpenAPI specification, apply a custom responseInterceptor that applies\n * transformations (inject servers list and autocomplete data) to the response\n * keep the responses to the actual API calls (made through 'Try it out') untouched\n * @param request request made through Swagger UI\n * @param accountData data for autocompletion\n * @param serviceEndpoint Public Base URL of the gateway, that will replace the URL in the \"servers\" object\n */\nexport const autocompleteRequestInterceptor = (request: SwaggerUIRequest, accountData: AccountDataResponse, serviceEndpoint: string): Promise | SwaggerUIRequest => {\n if (request.loadSpec) {\n request.responseInterceptor = (response: SwaggerUIResponse) => autocompleteOAS3(response, accountData, serviceEndpoint)\n }\n return request\n}\n","export function fetchData (url: string): Promise {\n return fetch(url)\n .then(response => {\n if (!response.ok) {\n throw new Error(response.statusText)\n }\n\n return response.json() as Promise\n })\n}\n"],"names":["accountDataUrl","args","serviceEndpoint","accountData","requestInterceptor","request","error","X_DATA_ATTRIBUTE","X_DATA_PARAMS_DESCRIPTIONS","addAutocompleteToParam","param","xDataKey","autocompleteData","p","examples","item","injectParametersToPathOperation","pathOperation","operationParameters","parametersWithAutocompleteData","injectAutocompleteToCommonParameters","parameters","injectParametersToPath","path","commonParameters","updatedPath","injectAutocompleteToResponseBody","responseBody","paths","injectServerToResponseBody","originalServers","autocompleteOAS3","response","bodyWithServer","body","autocompleteRequestInterceptor","fetchData","url"],"sourceRoot":""}