{"version":3,"file":"static/chunks/5434-34cd69ab55fc95b8.js","mappings":"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","sources":["webpack://_N_E/./lib/errors/throwOnResourceLoadError.ts","webpack://_N_E/./lib/networks/getNetworkTitle.ts","webpack://_N_E/./lib/metadata/compileValue.ts","webpack://_N_E/./lib/metadata/getCanonicalUrl.ts","webpack://_N_E/./lib/metadata/getPageOgType.ts","webpack://_N_E/./lib/metadata/templates/title.ts","webpack://_N_E/./lib/metadata/templates/description.ts","webpack://_N_E/./lib/metadata/templates/index.ts","webpack://_N_E/./lib/metadata/generate.ts","webpack://_N_E/./lib/metadata/update.ts","webpack://_N_E/./lib/metadata/index.ts","webpack://_N_E/./lib/hooks/useAdblockDetect.tsx","webpack://_N_E/./lib/hooks/useGetCsrfToken.tsx","webpack://_N_E/./lib/sentry/config.ts","webpack://_N_E/./nextjs/PageNextJs.tsx"],"sourcesContent":["import type { ResourceError, ResourceName } from 'lib/api/resources';\n\ntype Params = ({\n isError: true;\n error: ResourceError;\n} | {\n isError: false;\n error: null;\n}) & {\n resource?: ResourceName;\n}\n\nexport const RESOURCE_LOAD_ERROR_MESSAGE = 'Resource load error';\n\nexport default function throwOnResourceLoadError({ isError, error, resource }: Params) {\n if (isError) {\n throw Error(RESOURCE_LOAD_ERROR_MESSAGE, { cause: { ...error, resource } as unknown as Error });\n }\n}\n","import config from 'configs/app';\n\n// TODO delete when page descriptions is refactored\nexport default function getNetworkTitle() {\n return config.chain.name + (config.chain.shortName ? ` (${ config.chain.shortName })` : '') + ' Explorer';\n}\n","export default function compileValue(template: string, params: Record | undefined>) {\n const PLACEHOLDER_REGEX = /%(\\w+)%/g;\n return template.replaceAll(PLACEHOLDER_REGEX, (match, p1) => {\n const value = params[p1];\n\n if (Array.isArray(value)) {\n return value.join(', ');\n }\n\n if (value === undefined) {\n return '';\n }\n\n return value;\n });\n}\n","import type { Route } from 'nextjs-routes';\n\nimport config from 'configs/app';\n\nconst CANONICAL_ROUTES: Array = [\n '/',\n '/txs',\n '/ops',\n '/verified-contracts',\n '/name-domains',\n '/withdrawals',\n '/tokens',\n '/stats',\n '/api-docs',\n '/graphiql',\n '/gas-tracker',\n '/apps',\n];\n\nexport default function getCanonicalUrl(pathname: Route['pathname']) {\n if (CANONICAL_ROUTES.includes(pathname)) {\n return config.app.baseUrl + pathname;\n }\n}\n","import type { Route } from 'nextjs-routes';\n\ntype OGPageType = 'Homepage' | 'Root page' | 'Regular page';\n\nconst OG_TYPE_DICT: Record = {\n '/': 'Homepage',\n '/txs': 'Root page',\n '/txs/kettle/[hash]': 'Regular page',\n '/tx/[hash]': 'Regular page',\n '/blocks': 'Root page',\n '/block/[height_or_hash]': 'Regular page',\n '/block/countdown': 'Regular page',\n '/block/countdown/[height]': 'Regular page',\n '/accounts': 'Root page',\n '/address/[hash]': 'Regular page',\n '/verified-contracts': 'Root page',\n '/contract-verification': 'Root page',\n '/address/[hash]/contract-verification': 'Regular page',\n '/tokens': 'Root page',\n '/token/[hash]': 'Regular page',\n '/token/[hash]/instance/[id]': 'Regular page',\n '/apps': 'Root page',\n '/apps/[id]': 'Regular page',\n '/stats': 'Root page',\n '/api-docs': 'Regular page',\n '/graphiql': 'Regular page',\n '/search-results': 'Regular page',\n '/auth/profile': 'Root page',\n '/account/watchlist': 'Regular page',\n '/account/api-key': 'Regular page',\n '/account/custom-abi': 'Regular page',\n '/account/tag-address': 'Regular page',\n '/account/verified-addresses': 'Root page',\n '/public-tags/submit': 'Regular page',\n '/withdrawals': 'Root page',\n '/visualize/sol2uml': 'Regular page',\n '/csv-export': 'Regular page',\n '/deposits': 'Root page',\n '/output-roots': 'Root page',\n '/dispute-games': 'Root page',\n '/batches': 'Root page',\n '/batches/[number]': 'Regular page',\n '/blobs/[hash]': 'Regular page',\n '/ops': 'Root page',\n '/op/[hash]': 'Regular page',\n '/404': 'Regular page',\n '/name-domains': 'Root page',\n '/name-domains/[name]': 'Regular page',\n '/validators': 'Root page',\n '/gas-tracker': 'Root page',\n '/mud-worlds': 'Root page',\n\n // service routes, added only to make typescript happy\n '/login': 'Regular page',\n '/sprite': 'Regular page',\n '/api/metrics': 'Regular page',\n '/api/monitoring/invalid-api-schema': 'Regular page',\n '/api/log': 'Regular page',\n '/api/media-type': 'Regular page',\n '/api/proxy': 'Regular page',\n '/api/csrf': 'Regular page',\n '/api/healthz': 'Regular page',\n '/api/config': 'Regular page',\n '/api/sprite': 'Regular page',\n '/auth/auth0': 'Regular page',\n '/auth/unverified-email': 'Regular page',\n};\n\nexport default function getPageOgType(pathname: Route['pathname']) {\n return OG_TYPE_DICT[pathname];\n}\n","import type { Route } from 'nextjs-routes';\n\nimport config from 'configs/app';\n\nconst TEMPLATE_MAP: Record = {\n '/': '%network_name% blockchain explorer - View %network_name% stats',\n '/txs': '%network_name% transactions - %network_name% explorer',\n '/txs/kettle/[hash]': '%network_name% kettle %hash% transactions',\n '/tx/[hash]': '%network_name% transaction %hash%',\n '/blocks': '%network_name% blocks',\n '/block/[height_or_hash]': '%network_name% block %height_or_hash%',\n '/block/countdown': '%network_name% block countdown index',\n '/block/countdown/[height]': '%network_name% block %height% countdown',\n '/accounts': '%network_name% top accounts',\n '/address/[hash]': '%network_name% address details for %hash%',\n '/verified-contracts': 'Verified %network_name% contracts lookup - %network_name% explorer',\n '/contract-verification': '%network_name% verify contract',\n '/address/[hash]/contract-verification': '%network_name% contract verification for %hash%',\n '/tokens': 'Tokens list - %network_name% explorer',\n '/token/[hash]': '%network_name% token details',\n '/token/[hash]/instance/[id]': '%network_name% NFT instance',\n '/apps': '%network_name% DApps - Explore top apps',\n '/apps/[id]': '%network_name% marketplace app',\n '/stats': '%network_name% stats - %network_name% network insights',\n '/api-docs': '%network_name% API docs - %network_name% developer tools',\n '/graphiql': 'GraphQL for %network_name% - %network_name% data query',\n '/search-results': '%network_name% search result for %q%',\n '/auth/profile': '%network_name% - my profile',\n '/account/watchlist': '%network_name% - watchlist',\n '/account/api-key': '%network_name% - API keys',\n '/account/custom-abi': '%network_name% - custom ABI',\n '/account/tag-address': '%network_name% - private tags',\n '/account/verified-addresses': '%network_name% - my verified addresses',\n '/public-tags/submit': '%network_name% - public tag requests',\n '/withdrawals': '%network_name% withdrawals - track on %network_name% explorer',\n '/visualize/sol2uml': '%network_name% Solidity UML diagram',\n '/csv-export': '%network_name% export data to CSV',\n '/deposits': '%network_name% deposits (L1 > L2)',\n '/output-roots': '%network_name% output roots',\n '/dispute-games': '%network_name% dispute games',\n '/batches': '%network_name% tx batches (L2 blocks)',\n '/batches/[number]': '%network_name% L2 tx batch %number%',\n '/blobs/[hash]': '%network_name% blob %hash% details',\n '/ops': 'User operations on %network_name% - %network_name% explorer',\n '/op/[hash]': '%network_name% user operation %hash%',\n '/404': '%network_name% error - page not found',\n '/name-domains': '%network_name% name domains - %network_name% explorer',\n '/name-domains/[name]': '%network_name% %name% domain details',\n '/validators': '%network_name% validators list',\n '/gas-tracker': '%network_name% gas tracker - Current gas fees',\n '/mud-worlds': '%network_name% MUD worlds list',\n\n // service routes, added only to make typescript happy\n '/login': '%network_name% login',\n '/sprite': '%network_name% SVG sprite',\n '/api/metrics': '%network_name% node API prometheus metrics',\n '/api/monitoring/invalid-api-schema': '%network_name% node API prometheus metrics',\n '/api/log': '%network_name% node API request log',\n '/api/media-type': '%network_name% node API media type',\n '/api/proxy': '%network_name% node API proxy',\n '/api/csrf': '%network_name% node API CSRF token',\n '/api/healthz': '%network_name% node API health check',\n '/api/config': '%network_name% node API app config',\n '/api/sprite': '%network_name% node API SVG sprite content',\n '/auth/auth0': '%network_name% authentication',\n '/auth/unverified-email': '%network_name% unverified email',\n};\n\nconst TEMPLATE_MAP_ENHANCED: Partial> = {\n '/token/[hash]': '%network_name% %symbol% token details',\n '/token/[hash]/instance/[id]': '%network_name% token instance for %symbol%',\n '/apps/[id]': '%network_name% - %app_name%',\n '/address/[hash]': '%network_name% address details for %domain_name%',\n};\n\nexport function make(pathname: Route['pathname'], isEnriched = false) {\n const template = (isEnriched ? TEMPLATE_MAP_ENHANCED[pathname] : undefined) ?? TEMPLATE_MAP[pathname];\n const postfix = config.meta.promoteBlockscoutInTitle ? ' | Blockscout' : '';\n\n return (template + postfix).trim();\n}\n","/* eslint-disable max-len */\nimport type { Route } from 'nextjs-routes';\n\n// equal og:description\n// eslint-disable-next-line max-len\nconst DEFAULT_TEMPLATE = 'Blockscout is the #1 open-source blockchain explorer available today. 100+ chains and counting rely on Blockscout data availability, APIs, and ecosystem tools to support their networks.';\n\n// FIXME all page descriptions will be updated later\nconst TEMPLATE_MAP: Record = {\n '/': DEFAULT_TEMPLATE,\n '/txs': DEFAULT_TEMPLATE,\n '/txs/kettle/[hash]': DEFAULT_TEMPLATE,\n '/tx/[hash]': 'View transaction %hash% on %network_title%',\n '/blocks': DEFAULT_TEMPLATE,\n '/block/[height_or_hash]': 'View the transactions, token transfers, and uncles for block %height_or_hash%',\n '/block/countdown': DEFAULT_TEMPLATE,\n '/block/countdown/[height]': DEFAULT_TEMPLATE,\n '/accounts': DEFAULT_TEMPLATE,\n '/address/[hash]': 'View the account balance, transactions, and other data for %hash% on the %network_title%',\n '/verified-contracts': DEFAULT_TEMPLATE,\n '/contract-verification': DEFAULT_TEMPLATE,\n '/address/[hash]/contract-verification': 'View the account balance, transactions, and other data for %hash% on the %network_title%',\n '/tokens': DEFAULT_TEMPLATE,\n '/token/[hash]': '%hash%, balances and analytics on the %network_title%',\n '/token/[hash]/instance/[id]': '%hash%, balances and analytics on the %network_title%',\n '/apps': DEFAULT_TEMPLATE,\n '/apps/[id]': DEFAULT_TEMPLATE,\n '/stats': DEFAULT_TEMPLATE,\n '/api-docs': DEFAULT_TEMPLATE,\n '/graphiql': DEFAULT_TEMPLATE,\n '/search-results': DEFAULT_TEMPLATE,\n '/auth/profile': DEFAULT_TEMPLATE,\n '/account/watchlist': DEFAULT_TEMPLATE,\n '/account/api-key': DEFAULT_TEMPLATE,\n '/account/custom-abi': DEFAULT_TEMPLATE,\n '/account/tag-address': DEFAULT_TEMPLATE,\n '/account/verified-addresses': DEFAULT_TEMPLATE,\n '/public-tags/submit': 'Propose a new public tag for your address, contract or set of contracts for your dApp. Our team will review and approve your submission. Public tags are incredible tool which helps users identify contracts and addresses.',\n '/withdrawals': DEFAULT_TEMPLATE,\n '/visualize/sol2uml': DEFAULT_TEMPLATE,\n '/csv-export': DEFAULT_TEMPLATE,\n '/deposits': DEFAULT_TEMPLATE,\n '/output-roots': DEFAULT_TEMPLATE,\n '/dispute-games': DEFAULT_TEMPLATE,\n '/batches': DEFAULT_TEMPLATE,\n '/batches/[number]': DEFAULT_TEMPLATE,\n '/blobs/[hash]': DEFAULT_TEMPLATE,\n '/ops': DEFAULT_TEMPLATE,\n '/op/[hash]': DEFAULT_TEMPLATE,\n '/404': DEFAULT_TEMPLATE,\n '/name-domains': DEFAULT_TEMPLATE,\n '/name-domains/[name]': DEFAULT_TEMPLATE,\n '/validators': DEFAULT_TEMPLATE,\n '/gas-tracker': DEFAULT_TEMPLATE,\n '/mud-worlds': DEFAULT_TEMPLATE,\n\n // service routes, added only to make typescript happy\n '/login': DEFAULT_TEMPLATE,\n '/sprite': DEFAULT_TEMPLATE,\n '/api/metrics': DEFAULT_TEMPLATE,\n '/api/monitoring/invalid-api-schema': DEFAULT_TEMPLATE,\n '/api/log': DEFAULT_TEMPLATE,\n '/api/media-type': DEFAULT_TEMPLATE,\n '/api/proxy': DEFAULT_TEMPLATE,\n '/api/csrf': DEFAULT_TEMPLATE,\n '/api/healthz': DEFAULT_TEMPLATE,\n '/api/config': DEFAULT_TEMPLATE,\n '/api/sprite': DEFAULT_TEMPLATE,\n '/auth/auth0': DEFAULT_TEMPLATE,\n '/auth/unverified-email': DEFAULT_TEMPLATE,\n};\n\nexport function make(pathname: Route['pathname']) {\n const template = TEMPLATE_MAP[pathname];\n\n return template ?? '';\n}\n","export * as title from './title';\nexport * as description from './description';\n","import type { ApiData, Metadata } from './types';\nimport type { RouteParams } from 'nextjs/types';\n\nimport type { Route } from 'nextjs-routes';\n\nimport config from 'configs/app';\nimport getNetworkTitle from 'lib/networks/getNetworkTitle';\n\nimport compileValue from './compileValue';\nimport getCanonicalUrl from './getCanonicalUrl';\nimport getPageOgType from './getPageOgType';\nimport * as templates from './templates';\n\nexport default function generate(route: RouteParams, apiData: ApiData = null): Metadata {\n const params = {\n ...route.query,\n ...apiData,\n network_name: config.chain.name,\n network_title: getNetworkTitle(),\n };\n\n const title = compileValue(templates.title.make(route.pathname, Boolean(apiData)), params);\n const description = compileValue(templates.description.make(route.pathname), params);\n\n const pageOgType = getPageOgType(route.pathname);\n\n return {\n title: title,\n description,\n opengraph: {\n title: title,\n description: pageOgType !== 'Regular page' ? config.meta.og.description : '',\n imageUrl: pageOgType !== 'Regular page' ? config.meta.og.imageUrl : '',\n },\n canonical: getCanonicalUrl(route.pathname),\n };\n}\n","import type { ApiData } from './types';\nimport type { RouteParams } from 'nextjs/types';\n\nimport type { Route } from 'nextjs-routes';\n\nimport generate from './generate';\n\nexport default function update(route: RouteParams, apiData: ApiData) {\n const { title, description } = generate(route, apiData);\n\n window.document.title = title;\n window.document.querySelector('meta[name=\"description\"]')?.setAttribute('content', description);\n}\n","export { default as generate } from './generate';\nexport { default as update } from './update';\nexport * from './types';\n","import { useEffect } from 'react';\n\nimport type { AdBannerProviders } from 'types/client/adProviders';\n\nimport config from 'configs/app';\nimport { useAppContext } from 'lib/contexts/app';\nimport * as cookies from 'lib/cookies';\nimport isBrowser from 'lib/isBrowser';\n\nconst DEFAULT_URL = 'https://request-global.czilladx.com';\n\n// in general, detect should work with any ad-provider url (that is alive)\n// but we see some false-positive results in certain browsers\nconst TEST_URLS: Record = {\n slise: 'https://v1.slise.xyz/serve',\n coinzilla: 'https://request-global.czilladx.com',\n adbutler: 'https://servedbyadbutler.com/app.js',\n hype: 'https://api.hypelab.com/v1/scripts/hp-sdk.js',\n // I don't have an url for getit to test\n // getit: DEFAULT_URL,\n none: DEFAULT_URL,\n};\n\nconst feature = config.features.adsBanner;\n\nexport default function useAdblockDetect() {\n const hasAdblockCookie = cookies.get(cookies.NAMES.ADBLOCK_DETECTED, useAppContext().cookies);\n const provider = feature.isEnabled && feature.provider;\n\n useEffect(() => {\n if (isBrowser() && !hasAdblockCookie && provider) {\n const url = TEST_URLS[provider] || DEFAULT_URL;\n fetch(url, {\n method: 'HEAD',\n mode: 'no-cors',\n cache: 'no-store',\n })\n .then(() => {\n cookies.set(cookies.NAMES.ADBLOCK_DETECTED, 'false', { expires: 1 });\n })\n .catch(() => {\n cookies.set(cookies.NAMES.ADBLOCK_DETECTED, 'true', { expires: 1 });\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n}\n","import * as Sentry from '@sentry/react';\nimport { useQuery } from '@tanstack/react-query';\n\nimport buildUrl from 'lib/api/buildUrl';\nimport isNeedProxy from 'lib/api/isNeedProxy';\nimport { getResourceKey } from 'lib/api/useApiQuery';\nimport * as cookies from 'lib/cookies';\nimport useFetch from 'lib/hooks/useFetch';\n\nexport default function useGetCsrfToken() {\n const nodeApiFetch = useFetch();\n\n useQuery({\n queryKey: getResourceKey('csrf'),\n queryFn: async() => {\n if (!isNeedProxy()) {\n const url = buildUrl('csrf');\n const apiResponse = await fetch(url, { credentials: 'include' });\n const csrfFromHeader = apiResponse.headers.get('x-bs-account-csrf');\n\n if (!csrfFromHeader) {\n Sentry.captureException(new Error('Client fetch failed'), { tags: {\n source: 'fetch',\n 'source.resource': 'csrf',\n 'status.code': 500,\n 'status.text': 'Unable to obtain csrf token from header',\n } });\n return;\n }\n\n return { token: csrfFromHeader };\n }\n\n return nodeApiFetch('/node-api/csrf');\n },\n enabled: Boolean(cookies.get(cookies.NAMES.API_TOKEN)),\n });\n}\n","import * as Sentry from '@sentry/react';\nimport { BrowserTracing } from '@sentry/tracing';\n\nimport appConfig from 'configs/app';\nimport { RESOURCE_LOAD_ERROR_MESSAGE } from 'lib/errors/throwOnResourceLoadError';\n\nconst feature = appConfig.features.sentry;\n\nexport const config: Sentry.BrowserOptions | undefined = (() => {\n if (!feature.isEnabled) {\n return;\n }\n\n const tracesSampleRate: number | undefined = (() => {\n switch (feature.environment) {\n case 'development':\n return 1;\n case 'staging':\n return 0.75;\n case 'production':\n return 0.2;\n }\n })();\n\n return {\n environment: feature.environment,\n dsn: feature.dsn,\n release: feature.release,\n enableTracing: feature.enableTracing,\n tracesSampleRate,\n integrations: feature.enableTracing ? [ new BrowserTracing() ] : undefined,\n\n // error filtering settings\n // were taken from here - https://docs.sentry.io/platforms/node/guides/azure-functions/configuration/filtering/#decluttering-sentry\n ignoreErrors: [\n // Random plugins/extensions\n 'top.GLOBALS',\n // See: http://blog.errorception.com/2012/03/tale-of-unfindable-js-error.html\n 'originalCreateNotification',\n 'canvas.contentDocument',\n 'MyApp_RemoveAllHighlights',\n 'http://tt.epicplay.com',\n 'Can\\'t find variable: ZiteReader',\n 'jigsaw is not defined',\n 'ComboSearch is not defined',\n 'http://loading.retry.widdit.com/',\n 'atomicFindClose',\n // Facebook borked\n 'fb_xd_fragment',\n // ISP \"optimizing\" proxy - `Cache-Control: no-transform` seems to reduce this. (thanks @acdha)\n // See http://stackoverflow.com/questions/4113268/how-to-stop-javascript-injection-from-vodafone-proxy\n 'bmi_SafeAddOnload',\n 'EBCallBackMessageReceived',\n // See http://toolbar.conduit.com/Developer/HtmlAndGadget/Methods/JSInjection.aspx\n 'conduitPage',\n // Generic error code from errors outside the security sandbox\n 'Script error.',\n\n // Relay and WalletConnect errors\n 'The quota has been exceeded',\n 'Attempt to connect to relay via',\n 'WebSocket connection failed for URL: wss://relay.walletconnect.com',\n\n // API errors\n RESOURCE_LOAD_ERROR_MESSAGE,\n ],\n denyUrls: [\n // Facebook flakiness\n /graph\\.facebook\\.com/i,\n // Facebook blocked\n /connect\\.facebook\\.net\\/en_US\\/all\\.js/i,\n // Woopra flakiness\n /eatdifferent\\.com\\.woopra-ns\\.com/i,\n /static\\.woopra\\.com\\/js\\/woopra\\.js/i,\n // Chrome and other extensions\n /extensions\\//i,\n /^chrome:\\/\\//i,\n /^chrome-extension:\\/\\//i,\n /^moz-extension:\\/\\//i,\n // Other plugins\n /127\\.0\\.0\\.1:4001\\/isrunning/i, // Cacaoweb\n /webappstoolbarba\\.texthelp\\.com\\//i,\n /metrics\\.itunes\\.apple\\.com\\.edgesuite\\.net\\//i,\n\n // AD fetch failed errors\n /czilladx\\.com/i,\n /coinzilla\\.com/i,\n /coinzilla\\.io/i,\n /slise\\.xyz/i,\n ],\n };\n})();\n\nexport function configureScope(scope: Sentry.Scope) {\n if (!feature.isEnabled) {\n return;\n }\n scope.setTag('app_instance', feature.instance);\n}\n\nexport function init() {\n if (!config) {\n return;\n }\n\n Sentry.init(config);\n Sentry.configureScope(configureScope);\n}\n","import Head from 'next/head';\nimport React from 'react';\n\nimport type { Route } from 'nextjs-routes';\nimport type { Props as PageProps } from 'nextjs/getServerSideProps';\n\nimport config from 'configs/app';\nimport useAdblockDetect from 'lib/hooks/useAdblockDetect';\nimport useGetCsrfToken from 'lib/hooks/useGetCsrfToken';\nimport * as metadata from 'lib/metadata';\nimport * as mixpanel from 'lib/mixpanel';\nimport { init as initSentry } from 'lib/sentry/config';\n\ninterface Props {\n pathname: Pathname;\n children: React.ReactNode;\n query?: PageProps['query'];\n apiData?: PageProps['apiData'];\n}\n\ninitSentry();\n\nconst PageNextJs = (props: Props) => {\n const { title, description, opengraph, canonical } = metadata.generate(props, props.apiData);\n\n useGetCsrfToken();\n useAdblockDetect();\n\n const isMixpanelInited = mixpanel.useInit();\n mixpanel.useLogPageView(isMixpanelInited);\n\n return (\n <>\n \n { title }\n \n { canonical && }\n\n { /* OG TAGS */ }\n \n { opengraph.description && }\n \n \n\n { /* Twitter Meta Tags */ }\n \n \n \n { opengraph.description && }\n \n \n { props.children }\n \n );\n};\n\nexport default React.memo(PageNextJs);\n"],"names":["RESOURCE_LOAD_ERROR_MESSAGE","throwOnResourceLoadError","param","isError","error","resource","Error","cause","compileValue","template","params","replaceAll","match","p1","value","isArray","join","undefined","CANONICAL_ROUTES","OG_TYPE_DICT","TEMPLATE_MAP","TEMPLATE_MAP_ENHANCED","DEFAULT_TEMPLATE","generate","route","apiData","query","network_name","config","chain","name","network_title","shortName","concat","title","templates","pathname","isEnriched","meta","promoteBlockscoutInTitle","postfix","trim","Boolean","description","pageOgType","opengraph","og","imageUrl","canonical","getCanonicalUrl","includes","app","baseUrl","update","window","document","querySelector","setAttribute","DEFAULT_URL","TEST_URLS","slise","coinzilla","adbutler","hype","none","feature","features","adsBanner","appConfig","sentry","isEnabled","tracesSampleRate","environment","dsn","release","enableTracing","integrations","BrowserTracing","ignoreErrors","denyUrls","Sentry","scope","setTag","instance","nextjs_PageNextJs","React","metadata","props","useGetCsrfToken","nodeApiFetch","useFetch","useQuery","queryKey","getResourceKey","queryFn","isNeedProxy","url","buildUrl","csrfFromHeader","apiResponse","fetch","credentials","headers","get","tags","source","token","enabled","cookies","API_TOKEN","useAdblockDetect","hasAdblockCookie","ADBLOCK_DETECTED","useAppContext","provider","useEffect","isBrowser","method","mode","cache","then","expires","catch","isMixpanelInited","mixpanel","jsx_runtime","jsxs","Fragment","Head","jsx","content","link","rel","href","property","host","children"],"sourceRoot":""}