diff --git a/README.md b/README.md index 1fc0c61..4d4810a 100644 --- a/README.md +++ b/README.md @@ -4,3 +4,44 @@ # Webportal Health Check This repo contains the health checks that are run on the Skynet Webportals + +## Services composition + +### HTTP API server + +This service includes a standalone HTTP server that exposes health check API endpoints. + +> executing `node src` runs the server + +By default the server runs on 0.0.0.0 port 3100 but you can configure those settings with environment variables `HOSTNAME` and `PORT`. + +#### API endpoints + +- `/health-check` returns current health check status (shows only failed checks if any), response code will be 200 when status is up and 503 otherwise +- `/health-check/critical` returns critical checks (last 24 hours) +- `/health-check/extended` returns extended checks (last 24 hours) +- `/health-check/disabled` returns information whether server is set to disabled + +### Checks + +There are 2 types of checks in this service: + +- [critical](src/checks/critical.js): quick and cheap to run, failure of those checks should result in server being marked as failing (disabled) +- [extended](src/checks/extended.js): set of popular or common skylinks that should be checked against less frequently to ensure server is in good condition + +### CLI + +This service includes a [cli](bin/cli) binary that is accessible from `bin` directory and exposes some of the service' functionalities. + +- `bin/cli` displays available commands +- `bin/cli run [critical|extended]` executes health checks of given type +- `bin/cli enable` toggles the health check `disabled` flag to `false` +- `bin/cli disable ` toggles the health check `disabled` flag on with a given reason (ie. "down for maintenance") + +There are also cli scripts in `cli` directory but those should be considered deprecated and are kept only for backwards compatibility. + +## Docker image + +Image of this service is available on [dockerhub](https://hub.docker.com/repository/docker/skynetlabs/webportal-health-check) and is built from Dockerfile file found in root directory of this repository. + +Docker image includes running HTTP API server in foreground and crontab configuration for running critical checks every 5 minutes and extended checks every 60 minutes. It also exposes `cli` binary directly on the container so you can use it like `docker exec health-check cli enable`. diff --git a/bin/cli b/bin/cli index 765cfa0..a750181 100755 --- a/bin/cli +++ b/bin/cli @@ -61,7 +61,8 @@ require("yargs/yargs")(process.argv.slice(2)) const entry = { date: new Date().toISOString(), - checks: (await Promise.all(checks.map((check) => new Promise(check)))).filter(Boolean).map(middleware), + // run all checks, filter empty responses (skipped) and pass the response through the middleware + checks: (await Promise.all(checks.map((check) => check()))).filter(Boolean).map(middleware), }; db.read() // read before writing to make sure no external changes are overwritten diff --git a/package.json b/package.json index 728daa5..e8a300d 100644 --- a/package.json +++ b/package.json @@ -4,22 +4,24 @@ "main": "index.js", "license": "MIT", "dependencies": { + "blakejs": "^1.2.1", "deep-object-diff": "^1.1.7", "express": "^4.18.1", "form-data": "^4.0.0", - "got": "^11.8.2", + "got": "^11.8.3", "graceful-fs": "^4.2.10", "hasha": "^5.2.2", "http-status-codes": "^2.2.0", "lodash": "^4.17.21", "lowdb": "^1.0.0", - "skynet-js": "^4.3.0", - "tus-js-client": "^3.0.0", + "pbkdf2-hmac": "^1.0.4", + "tus-js-client": "^3.0.1", + "tweetnacl": "^1.0.3", "write-file-atomic": "^4.0.1", - "yargs": "^17.5.1" + "yargs": "^17.6.0" }, "devDependencies": { - "jest": "^29.0.1", + "jest": "^29.1.2", "prettier": "^2.7.1" }, "scripts": { diff --git a/src/checks/critical.js b/src/checks/critical.js index d52c892..fc2c90e 100644 --- a/src/checks/critical.js +++ b/src/checks/critical.js @@ -3,14 +3,9 @@ const got = require("got"); const FormData = require("form-data"); const { isEqual } = require("lodash"); const tus = require("tus-js-client"); -const { calculateElapsedTime, getResponseContent, isPortalModuleEnabled } = require("../utils"); -const { SkynetClient, genKeyPairAndSeed } = require("skynet-js"); +const { calculateElapsedTime, getResponseErrorData, isPortalModuleEnabled } = require("../utils"); +const { genKeyPairAndSeed, getRegistryEntry, setRegistryEntry } = require("../utils-registry"); -const MODULE_BLOCKER = "b"; - -const skynetClient = new SkynetClient(`https://${process.env.PORTAL_DOMAIN}`, { - skynetApiKey: process.env.ACCOUNTS_TEST_USER_API_KEY, -}); const exampleSkylink = "AACogzrAimYPG42tDOKhS3lXZD8YvlF8Q8R17afe95iV2Q"; const exampleSkylinkBase32 = "000ah0pqo256c3orhmmgpol19dslep1v32v52v23ohqur9uuuuc9bm8"; @@ -20,7 +15,7 @@ const exampleSkylinkBase32 = "000ah0pqo256c3orhmmgpol19dslep1v32v52v23ohqur9uuuu const exampleResolverSkylink = "AQCExZYFmmc75OPgjPpHuF4WVN0pc4FX2p09t4naLKfTLw"; // check that any relevant configuration is properly set in skyd -async function skydConfigCheck(done) { +async function skydConfigCheck() { const time = process.hrtime(); const data = { up: false }; @@ -37,16 +32,14 @@ async function skydConfigCheck(done) { data.up = true; } catch (error) { - data.statusCode = error.response?.statusCode || error.statusCode || error.status; - data.errorMessage = error.message; - data.errorResponseContent = getResponseContent(error.response); + Object.assign(data, getResponseErrorData(error)); // extend data object with error data } - done({ name: "skyd_config", time: calculateElapsedTime(time), ...data }); + return { name: "skyd_config", time: calculateElapsedTime(time), ...data }; } // check skyd for total number of workers on cooldown -async function skydWorkersCooldownCheck(done) { +async function skydWorkersCooldownCheck() { const workersCooldownThreshold = 0.6; // set to 60% initially, can be increased later const time = process.hrtime(); const data = { up: false }; @@ -72,16 +65,14 @@ async function skydWorkersCooldownCheck(done) { data.up = true; } catch (error) { - data.statusCode = error.response?.statusCode || error.statusCode || error.status; - data.errorMessage = error.message; - data.errorResponseContent = getResponseContent(error.response); + Object.assign(data, getResponseErrorData(error)); // extend data object with error data } - done({ name: "skyd_renter_workers", time: calculateElapsedTime(time), ...data }); + return { name: "skyd_renter_workers", time: calculateElapsedTime(time), ...data }; } // uploadCheck returns the result of uploading a sample file -async function uploadCheck(done) { +async function uploadCheck() { const time = process.hrtime(); const form = new FormData(); const payload = Buffer.from(new Date()); // current date to ensure data uniqueness @@ -99,98 +90,95 @@ async function uploadCheck(done) { data.up = true; data.ip = response.ip; } catch (error) { - data.statusCode = error.response?.statusCode || error.statusCode || error.status; - data.errorMessage = error.message; - data.errorResponseContent = getResponseContent(error.response); - data.ip = error?.response?.ip ?? null; + Object.assign(data, getResponseErrorData(error)); // extend data object with error data } - done({ name: "upload_file", time: calculateElapsedTime(time), ...data }); + return { name: "upload_file", time: calculateElapsedTime(time), ...data }; } // uploadTusCheck returns the result of uploading a sample file through tus endpoint -async function uploadTusCheck(done) { +async function uploadTusCheck() { const time = process.hrtime(); const headers = { "Skynet-Api-Key": process.env.ACCOUNTS_TEST_USER_API_KEY ?? "" }; const payload = Buffer.from(new Date()); // current date to ensure data uniqueness - const data = { up: false }; + const data = { name: "upload_file_tus", up: false }; try { - const upload = new tus.Upload(payload, { - endpoint: `https://${process.env.PORTAL_DOMAIN}/skynet/tus`, - headers, - onError: (error) => { - done({ name: "upload_file_tus", time: calculateElapsedTime(time), ...data, errorMessage: error.message }); - }, - onSuccess: async () => { - const response = await got.head(upload.url, { headers }); - const skylink = response.headers["skynet-skylink"]; + return new Promise((resolve, reject) => { + const upload = new tus.Upload(payload, { + endpoint: `https://${process.env.PORTAL_DOMAIN}/skynet/tus`, + headers, + onError: (error) => { + reject(error); // reject with error to trigger failed check + }, + onSuccess: async () => { + const response = await got.head(upload.url, { headers }); + const skylink = response.headers["skynet-skylink"]; + resolve({ time: calculateElapsedTime(time), ...data, skylink, up: Boolean(skylink) }); + }, + }); - done({ name: "upload_file_tus", time: calculateElapsedTime(time), ...data, skylink, up: Boolean(skylink) }); - }, + upload.start(); }); - - upload.start(); } catch (error) { - data.statusCode = error.response?.statusCode || error.statusCode || error.status; - data.errorMessage = error.message; - data.errorResponseContent = getResponseContent(error.response); - data.ip = error?.response?.ip ?? null; + Object.assign(data, getResponseErrorData(error)); // extend data object with error data - done({ name: "upload_file_tus", time: calculateElapsedTime(time), ...data }); + return { name: "upload_file_tus", time: calculateElapsedTime(time), ...data }; } } // websiteCheck checks whether the main website is working -async function websiteCheck(done) { - return done(await genericAccessCheck("website", `https://${process.env.PORTAL_DOMAIN}`)); +async function websiteCheck() { + return genericAccessCheck("website", `https://${process.env.PORTAL_DOMAIN}`); } // downloadSkylinkCheck returns the result of downloading the hard coded link -async function downloadSkylinkCheck(done) { +async function downloadSkylinkCheck() { const url = `https://${process.env.PORTAL_DOMAIN}/${exampleSkylink}`; - return done(await genericAccessCheck("skylink", url)); + return genericAccessCheck("skylink", url); } // downloadResolverSkylinkCheck returns the result of downloading an example resolver skylink -async function downloadResolverSkylinkCheck(done) { +async function downloadResolverSkylinkCheck() { const url = `https://${process.env.PORTAL_DOMAIN}/${exampleResolverSkylink}`; - return done(await genericAccessCheck("resolver_skylink", url)); + return genericAccessCheck("resolver_skylink", url); } // skylinkSubdomainCheck returns the result of downloading the hard coded link via subdomain -async function skylinkSubdomainCheck(done) { +async function skylinkSubdomainCheck() { const url = `https://${exampleSkylinkBase32}.${process.env.PORTAL_DOMAIN}`; - return done(await genericAccessCheck("skylink_via_subdomain", url)); + return genericAccessCheck("skylink_via_subdomain", url); } // handshakeSubdomainCheck returns the result of downloading the skylink via handshake domain -async function handshakeSubdomainCheck(done) { +async function handshakeSubdomainCheck() { const url = `https://note-to-self.hns.${process.env.PORTAL_DOMAIN}`; - return done(await genericAccessCheck("hns_via_subdomain", url)); + return genericAccessCheck("hns_via_subdomain", url); } // accountWebsiteCheck returns the result of accessing account dashboard website -async function accountWebsiteCheck(done) { +async function accountWebsiteCheck() { + if (!isPortalModuleEnabled("a")) return; // runs only when accounts are enabled + const url = `https://account.${process.env.PORTAL_DOMAIN}/auth/login`; - return done(await genericAccessCheck("account_website", url)); + return genericAccessCheck("account_website", url); } // registryWriteAndReadCheck writes to registry and immediately reads and compares the data -async function registryWriteAndReadCheck(done) { +async function registryWriteAndReadCheck() { const time = process.hrtime(); const data = { name: "registry_write_and_read", up: false }; - const { privateKey, publicKey } = genKeyPairAndSeed(); + const { privateKey, publicKey } = await genKeyPairAndSeed(); const expected = { dataKey: "foo-key", data: Uint8Array.from(Buffer.from("foo-data", "utf-8")), revision: BigInt(0) }; try { - await skynetClient.registry.setEntry(privateKey, expected); - const { entry } = await skynetClient.registry.getEntry(publicKey, expected.dataKey); + await setRegistryEntry(privateKey, publicKey, expected); + const entry = await getRegistryEntry(publicKey, expected.dataKey); if (isEqual(expected, entry)) { data.up = true; @@ -206,17 +194,18 @@ async function registryWriteAndReadCheck(done) { ]; } } catch (error) { + console.log(error?.request?.body?.message); data.errors = [{ message: error?.response?.data?.message ?? error.message }]; } - return done({ ...data, time: calculateElapsedTime(time) }); + return { ...data, time: calculateElapsedTime(time) }; } // directServerApiAccessCheck returns the basic server api check on direct server address -async function directServerApiAccessCheck(done) { +async function directServerApiAccessCheck() { // skip if SERVER_DOMAIN is not set or it equals PORTAL_DOMAIN (single server portals) if (!process.env.SERVER_DOMAIN || process.env.SERVER_DOMAIN === process.env.PORTAL_DOMAIN) { - return done(); + return; } const [portalAccessCheck, serverAccessCheck] = await Promise.all([ @@ -236,11 +225,13 @@ async function directServerApiAccessCheck(done) { }); } - return done(serverAccessCheck); + return serverAccessCheck; } // accountHealthCheck returns the result of accounts service health checks -async function accountHealthCheck(done, retries = 2) { +async function accountHealthCheck(retries = 2) { + if (!isPortalModuleEnabled("a")) return; // runs only when accounts are enabled + const time = process.hrtime(); const data = { up: false }; @@ -252,22 +243,21 @@ async function accountHealthCheck(done, retries = 2) { data.up = response.body.dbAlive === true; data.ip = response.ip; } catch (error) { - data.statusCode = error?.response?.statusCode || error.statusCode || error.status; - data.errorMessage = error.message; - data.errorResponseContent = getResponseContent(error.response); - data.ip = error?.response?.ip ?? null; + Object.assign(data, getResponseErrorData(error)); // extend data object with error data } // db checks can be a false negative due to slow network, retry to make sure it is actually down if (data.up === false && retries > 0) { - setTimeout(() => accountHealthCheck(done, retries - 1), 3000); // delay 3 seconds and retry + setTimeout(() => accountHealthCheck(retries - 1), 3000); // delay 3 seconds and retry } else { - done({ name: "accounts", time: calculateElapsedTime(time), ...data }); + return { name: "accounts", time: calculateElapsedTime(time), ...data }; } } // blockerHealthCheck returns the result of blocker container health endpoint -async function blockerHealthCheck(done, retries = 2) { +async function blockerHealthCheck(retries = 2) { + if (!isPortalModuleEnabled("b")) return; // runs only when blocker is enabled + const time = process.hrtime(); const data = { up: false }; @@ -280,16 +270,14 @@ async function blockerHealthCheck(done, retries = 2) { data.response = response.body; data.up = response.body.dbAlive === true; } catch (error) { - data.statusCode = error?.response?.statusCode || error.statusCode || error.status; - data.errorMessage = error.message; - data.errorResponseContent = getResponseContent(error.response); + Object.assign(data, getResponseErrorData(error)); // extend data object with error data } // db checks can be a false negative due to slow network, retry to make sure it is actually down if (data.up === false && retries > 0) { - setTimeout(() => blockerHealthCheck(done, retries - 1), 3000); // delay 3 seconds and retry + setTimeout(() => blockerHealthCheck(retries - 1), 3000); // delay 3 seconds and retry } else { - done({ name: "blocker", time: calculateElapsedTime(time), ...data }); + return { name: "blocker", time: calculateElapsedTime(time), ...data }; } } @@ -304,16 +292,13 @@ async function genericAccessCheck(name, url) { data.up = true; data.ip = response.ip; } catch (error) { - data.statusCode = error?.response?.statusCode || error.statusCode || error.status; - data.errorMessage = error.message; - data.errorResponseContent = getResponseContent(error.response); - data.ip = error?.response?.ip ?? null; + Object.assign(data, getResponseErrorData(error)); // extend data object with error data } return { name, time: calculateElapsedTime(time), ...data }; } -const checks = [ +module.exports = [ skydConfigCheck, skydWorkersCooldownCheck, uploadCheck, @@ -325,14 +310,7 @@ const checks = [ handshakeSubdomainCheck, registryWriteAndReadCheck, directServerApiAccessCheck, + accountHealthCheck, + accountWebsiteCheck, + blockerHealthCheck, ]; - -if (process.env.ACCOUNTS_ENABLED === "true") { - checks.push(accountHealthCheck, accountWebsiteCheck); -} - -if (isPortalModuleEnabled(MODULE_BLOCKER)) { - checks.push(blockerHealthCheck); -} - -module.exports = checks; diff --git a/src/checks/extended.js b/src/checks/extended.js index 87c1176..7a9919e 100644 --- a/src/checks/extended.js +++ b/src/checks/extended.js @@ -2,1165 +2,58 @@ const got = require("got"); const hasha = require("hasha"); const { detailedDiff } = require("deep-object-diff"); const { isEqual } = require("lodash"); -const { calculateElapsedTime, ensureValidJSON, getResponseContent } = require("../utils"); - -// audioExampleCheck returns the result of trying to download the skylink -// for the Example audio file on siasky.net -function audioExampleCheck(done) { - const linkInfo = { - name: "Audio Example", - skylink: "_A2zt5SKoqwnnZU4cBF8uBycSKULXMyeg1c5ZISBr2Q3dA", - bodyHash: "1bea1f570043f20149ae4cb4d30089d90897b15b", - metadata: { filename: "feel-good.mp3" }, - headers: { - "skynet-skylink": "_A2zt5SKoqwnnZU4cBF8uBycSKULXMyeg1c5ZISBr2Q3dA", - "content-disposition": 'inline; filename="feel-good.mp3"', - "content-type": "audio/mpeg", - }, - }; - - skylinkVerification(done, linkInfo); -} - -// covid19PaperCheck returns the result of trying to download the skylink -// for a known Covid19 paper -function covid19PaperCheck(done) { - const linkInfo = { - name: "Covid-19 Paper", - skylink: "PAMZVmfutxWoG6Wnl5BRKuWLkDNZR42k_okRRvksJekA3A", - bodyHash: "7ce20bfc4221503fd0bf909ad20c422eca125c7d", - metadata: { - filename: "An Effective Treatment for Coronavirus (COVID-19).pdf", - subfiles: { - "An Effective Treatment for Coronavirus (COVID-19).pdf": { - filename: "An Effective Treatment for Coronavirus (COVID-19).pdf", - contenttype: "application/pdf", - len: 474803, - }, - }, - }, - headers: { - "skynet-skylink": "PAMZVmfutxWoG6Wnl5BRKuWLkDNZR42k_okRRvksJekA3A", - "content-disposition": 'inline; filename="An Effective Treatment for Coronavirus (COVID-19).pdf"', - "content-type": "application/pdf", - }, - }; - - skylinkVerification(done, linkInfo); -} - -// covid19CoroNopePaperCheck returns the result of trying to download the skylink -// for another known Covid19 paper -function covid19CoroNopePaperCheck(done) { - const linkInfo = { - name: "Covid-19 CoroNope Paper", - skylink: "bACLKGmcmX4NCp47WwOOJf0lU666VLeT5HRWpWVtqZPjEA", - bodyHash: "0db705da1b1232f8344ed74fd38245d35a49a965", - metadata: { filename: "coronope.pdf" }, - headers: { - "skynet-skylink": "bACLKGmcmX4NCp47WwOOJf0lU666VLeT5HRWpWVtqZPjEA", - "content-disposition": 'inline; filename="coronope.pdf"', - "content-type": "application/pdf", - }, - }; - - skylinkVerification(done, linkInfo); -} - -// dappExampleCheck returns the result of trying to download the skylink -// for the Example Dapp on siasky.net -function dappExampleCheck(done) { - const linkInfo = { - name: "Dapp Example (UniSwap)", - skylink: "EADWpKD0myqH2tZa6xtKebg6kNnwYnI94fl4R8UKgNrmOA", - bodyHash: "7b74cbb5927e964db493b82cc1f8a532f1ff72f5", - metadata: { - filename: "build", - length: 15578459, - subfiles: { - "451.html": { - filename: "451.html", - contenttype: "text/html", - offset: 40966, - len: 200, - }, - "asset-manifest.json": { - filename: "asset-manifest.json", - contenttype: "application/json", - offset: 35832, - len: 5134, - }, - "favicon.ico": { - filename: "favicon.ico", - contenttype: "image/vnd.microsoft.icon", - len: 31701, - }, - "index.html": { - filename: "index.html", - contenttype: "text/html", - offset: 31701, - len: 4131, - }, - "locales/de.json": { - filename: "locales/de.json", - contenttype: "application/json", - offset: 15542609, - len: 4376, - }, - "locales/en.json": { - filename: "locales/en.json", - contenttype: "application/json", - offset: 15558827, - len: 4049, - }, - "locales/es-AR.json": { - filename: "locales/es-AR.json", - contenttype: "application/json", - offset: 15551984, - len: 3624, - }, - "locales/es-US.json": { - filename: "locales/es-US.json", - contenttype: "application/json", - offset: 15574829, - len: 3630, - }, - "locales/it-IT.json": { - filename: "locales/it-IT.json", - contenttype: "application/json", - offset: 15538386, - len: 4223, - }, - "locales/ro.json": { - filename: "locales/ro.json", - contenttype: "application/json", - offset: 15562876, - len: 3794, - }, - "locales/ru.json": { - filename: "locales/ru.json", - contenttype: "application/json", - offset: 15546985, - len: 4999, - }, - "locales/vi.json": { - filename: "locales/vi.json", - contenttype: "application/json", - offset: 15569928, - len: 4901, - }, - "locales/zh-CN.json": { - filename: "locales/zh-CN.json", - contenttype: "application/json", - offset: 15555608, - len: 3219, - }, - "locales/zh-TW.json": { - filename: "locales/zh-TW.json", - contenttype: "application/json", - offset: 15566670, - len: 3258, - }, - "manifest.json": { - filename: "manifest.json", - contenttype: "application/json", - offset: 41166, - len: 297, - }, - "precache-manifest.cd4677068c6058f8626d6818e2c12fd3.js": { - filename: "precache-manifest.cd4677068c6058f8626d6818e2c12fd3.js", - contenttype: "text/javascript", - offset: 41463, - len: 4721, - }, - "service-worker.js": { - filename: "service-worker.js", - contenttype: "text/javascript", - offset: 46184, - len: 1185, - }, - "static/css/0.07de6c03.chunk.css": { - filename: "static/css/0.07de6c03.chunk.css", - contenttype: "text/css", - offset: 15537249, - len: 285, - }, - "static/css/0.07de6c03.chunk.css.map": { - filename: "static/css/0.07de6c03.chunk.css.map", - contenttype: "application/octet-stream", - offset: 15537818, - len: 568, - }, - "static/css/5.d75e0ccb.chunk.css": { - filename: "static/css/5.d75e0ccb.chunk.css", - contenttype: "text/css", - offset: 15537534, - len: 284, - }, - "static/css/5.d75e0ccb.chunk.css.map": { - filename: "static/css/5.d75e0ccb.chunk.css.map", - contenttype: "application/octet-stream", - offset: 15536511, - len: 738, - }, - "static/js/0.58b0f69f.chunk.js": { - filename: "static/js/0.58b0f69f.chunk.js", - contenttype: "text/javascript", - offset: 7300150, - len: 30029, - }, - "static/js/0.58b0f69f.chunk.js.map": { - filename: "static/js/0.58b0f69f.chunk.js.map", - contenttype: "application/octet-stream", - offset: 12111459, - len: 81144, - }, - "static/js/1.19c370e0.chunk.js": { - filename: "static/js/1.19c370e0.chunk.js", - contenttype: "text/javascript", - offset: 15495781, - len: 40203, - }, - "static/js/1.19c370e0.chunk.js.map": { - filename: "static/js/1.19c370e0.chunk.js.map", - contenttype: "application/octet-stream", - offset: 7330179, - len: 104594, - }, - "static/js/10.8ea29dcd.chunk.js": { - filename: "static/js/10.8ea29dcd.chunk.js", - contenttype: "text/javascript", - offset: 15483299, - len: 12345, - }, - "static/js/10.8ea29dcd.chunk.js.map": { - filename: "static/js/10.8ea29dcd.chunk.js.map", - contenttype: "application/octet-stream", - offset: 14524416, - len: 30393, - }, - "static/js/11.764b8915.chunk.js": { - filename: "static/js/11.764b8915.chunk.js", - contenttype: "text/javascript", - offset: 12208196, - len: 7103, - }, - "static/js/11.764b8915.chunk.js.map": { - filename: "static/js/11.764b8915.chunk.js.map", - contenttype: "application/octet-stream", - offset: 12192603, - len: 15593, - }, - "static/js/12.88d4fbe5.chunk.js": { - filename: "static/js/12.88d4fbe5.chunk.js", - contenttype: "text/javascript", - offset: 12055261, - len: 16721, - }, - "static/js/12.88d4fbe5.chunk.js.map": { - filename: "static/js/12.88d4fbe5.chunk.js.map", - contenttype: "application/octet-stream", - offset: 14460215, - len: 46695, - }, - "static/js/13.ea207f69.chunk.js": { - filename: "static/js/13.ea207f69.chunk.js", - contenttype: "text/javascript", - offset: 7168280, - len: 347, - }, - "static/js/13.ea207f69.chunk.js.map": { - filename: "static/js/13.ea207f69.chunk.js.map", - contenttype: "application/octet-stream", - offset: 6928538, - len: 563, - }, - "static/js/14.d8bc0d4c.chunk.js": { - filename: "static/js/14.d8bc0d4c.chunk.js", - contenttype: "text/javascript", - offset: 12870711, - len: 336, - }, - "static/js/14.d8bc0d4c.chunk.js.map": { - filename: "static/js/14.d8bc0d4c.chunk.js.map", - contenttype: "application/octet-stream", - offset: 15535984, - len: 527, - }, - "static/js/15.e6215497.chunk.js": { - filename: "static/js/15.e6215497.chunk.js", - contenttype: "text/javascript", - offset: 15495644, - len: 137, - }, - "static/js/15.e6215497.chunk.js.map": { - filename: "static/js/15.e6215497.chunk.js.map", - contenttype: "application/octet-stream", - offset: 6928431, - len: 107, - }, - "static/js/2.f6da9598.chunk.js": { - filename: "static/js/2.f6da9598.chunk.js", - contenttype: "text/javascript", - offset: 14506910, - len: 17506, - }, - "static/js/2.f6da9598.chunk.js.map": { - filename: "static/js/2.f6da9598.chunk.js.map", - contenttype: "application/octet-stream", - offset: 12071982, - len: 39477, - }, - "static/js/5.5cc0868a.chunk.js": { - filename: "static/js/5.5cc0868a.chunk.js", - contenttype: "text/javascript", - offset: 10199338, - len: 1842002, - }, - "static/js/5.5cc0868a.chunk.js.LICENSE": { - filename: "static/js/5.5cc0868a.chunk.js.LICENSE", - contenttype: "application/octet-stream", - offset: 14554809, - len: 3119, - }, - "static/js/5.5cc0868a.chunk.js.map": { - filename: "static/js/5.5cc0868a.chunk.js.map", - contenttype: "application/octet-stream", - offset: 289328, - len: 6632626, - }, - "static/js/6.b7681521.chunk.js": { - filename: "static/js/6.b7681521.chunk.js", - contenttype: "text/javascript", - offset: 14237363, - len: 222852, - }, - "static/js/6.b7681521.chunk.js.map": { - filename: "static/js/6.b7681521.chunk.js.map", - contenttype: "application/octet-stream", - offset: 12215299, - len: 655412, - }, - "static/js/7.0614dbc4.chunk.js": { - filename: "static/js/7.0614dbc4.chunk.js", - contenttype: "text/javascript", - offset: 6921954, - len: 6477, - }, - "static/js/7.0614dbc4.chunk.js.map": { - filename: "static/js/7.0614dbc4.chunk.js.map", - contenttype: "application/octet-stream", - offset: 12041340, - len: 13921, - }, - "static/js/8.7975098c.chunk.js": { - filename: "static/js/8.7975098c.chunk.js", - contenttype: "text/javascript", - offset: 13796515, - len: 420712, - }, - "static/js/8.7975098c.chunk.js.LICENSE": { - filename: "static/js/8.7975098c.chunk.js.LICENSE", - contenttype: "application/octet-stream", - offset: 13796191, - len: 324, - }, - "static/js/8.7975098c.chunk.js.map": { - filename: "static/js/8.7975098c.chunk.js.map", - contenttype: "application/octet-stream", - offset: 12871047, - len: 925144, - }, - "static/js/9.cc860b76.chunk.js": { - filename: "static/js/9.cc860b76.chunk.js", - contenttype: "text/javascript", - offset: 14557928, - len: 920812, - }, - "static/js/9.cc860b76.chunk.js.LICENSE": { - filename: "static/js/9.cc860b76.chunk.js.LICENSE", - contenttype: "application/octet-stream", - offset: 15478740, - len: 4559, - }, - "static/js/9.cc860b76.chunk.js.map": { - filename: "static/js/9.cc860b76.chunk.js.map", - contenttype: "application/octet-stream", - offset: 7434773, - len: 2764565, - }, - "static/js/main.a7822f79.chunk.js": { - filename: "static/js/main.a7822f79.chunk.js", - contenttype: "text/javascript", - offset: 7168627, - len: 131523, - }, - "static/js/main.a7822f79.chunk.js.map": { - filename: "static/js/main.a7822f79.chunk.js.map", - contenttype: "application/octet-stream", - offset: 6929101, - len: 239179, - }, - "static/js/runtime-main.68d129c6.js": { - filename: "static/js/runtime-main.68d129c6.js", - contenttype: "text/javascript", - offset: 14217227, - len: 3546, - }, - "static/js/runtime-main.68d129c6.js.map": { - filename: "static/js/runtime-main.68d129c6.js.map", - contenttype: "application/octet-stream", - offset: 14220773, - len: 16590, - }, - "static/media/arrow-down-blue.cd061363.svg": { - filename: "static/media/arrow-down-blue.cd061363.svg", - contenttype: "image/svg+xml", - offset: 219284, - len: 326, - }, - "static/media/arrow-down-grey.c0dedd2f.svg": { - filename: "static/media/arrow-down-grey.c0dedd2f.svg", - contenttype: "image/svg+xml", - offset: 196726, - len: 326, - }, - "static/media/arrow-right-white.337ad716.png": { - filename: "static/media/arrow-right-white.337ad716.png", - contenttype: "image/png", - offset: 197052, - len: 12999, - }, - "static/media/arrow-right.d285b6cf.svg": { - filename: "static/media/arrow-right.d285b6cf.svg", - contenttype: "image/svg+xml", - offset: 289065, - len: 263, - }, - "static/media/circle-grey.ed2a1dad.svg": { - filename: "static/media/circle-grey.ed2a1dad.svg", - contenttype: "image/svg+xml", - offset: 210213, - len: 321, - }, - "static/media/circle.2d975615.svg": { - filename: "static/media/circle.2d975615.svg", - contenttype: "image/svg+xml", - offset: 210534, - len: 321, - }, - "static/media/coinbaseWalletIcon.62578f59.svg": { - filename: "static/media/coinbaseWalletIcon.62578f59.svg", - contenttype: "image/svg+xml", - offset: 220450, - len: 53626, - }, - "static/media/dropdown-blue.b20914ec.svg": { - filename: "static/media/dropdown-blue.b20914ec.svg", - contenttype: "image/svg+xml", - offset: 47369, - len: 164, - }, - "static/media/dropdown.7d32d2fa.svg": { - filename: "static/media/dropdown.7d32d2fa.svg", - contenttype: "image/svg+xml", - offset: 287941, - len: 164, - }, - "static/media/dropup-blue.b96d70e1.svg": { - filename: "static/media/dropup-blue.b96d70e1.svg", - contenttype: "image/svg+xml", - offset: 210051, - len: 162, - }, - "static/media/ethereum-logo.802c6eac.svg": { - filename: "static/media/ethereum-logo.802c6eac.svg", - contenttype: "image/svg+xml", - offset: 219610, - len: 840, - }, - "static/media/magnifying-glass.67440097.svg": { - filename: "static/media/magnifying-glass.67440097.svg", - contenttype: "image/svg+xml", - offset: 210855, - len: 8429, - }, - "static/media/metamask.023762b6.png": { - filename: "static/media/metamask.023762b6.png", - contenttype: "image/png", - offset: 61600, - len: 114217, - }, - "static/media/plus-blue.e8021e51.svg": { - filename: "static/media/plus-blue.e8021e51.svg", - contenttype: "image/svg+xml", - offset: 196237, - len: 190, - }, - "static/media/plus-grey.d8e0be7d.svg": { - filename: "static/media/plus-grey.d8e0be7d.svg", - contenttype: "image/svg+xml", - offset: 288875, - len: 190, - }, - "static/media/portisIcon.b234b2bf.png": { - filename: "static/media/portisIcon.b234b2bf.png", - contenttype: "image/png", - offset: 274076, - len: 13865, - }, - "static/media/question-mark.1ae4d9f4.svg": { - filename: "static/media/question-mark.1ae4d9f4.svg", - contenttype: "image/svg+xml", - offset: 175817, - len: 818, - }, - "static/media/question.cc0a2451.svg": { - filename: "static/media/question.cc0a2451.svg", - contenttype: "image/svg+xml", - offset: 288105, - len: 770, - }, - "static/media/spinner.be00fc4a.svg": { - filename: "static/media/spinner.be00fc4a.svg", - contenttype: "image/svg+xml", - offset: 47533, - len: 694, - }, - "static/media/trustWallet.edcc1ab5.png": { - filename: "static/media/trustWallet.edcc1ab5.png", - contenttype: "image/png", - offset: 176635, - len: 19602, - }, - "static/media/walletConnectIcon.8215855c.svg": { - filename: "static/media/walletConnectIcon.8215855c.svg", - contenttype: "image/svg+xml", - offset: 48227, - len: 13373, - }, - "static/media/x.5b8e2186.svg": { - filename: "static/media/x.5b8e2186.svg", - contenttype: "image/svg+xml", - offset: 196427, - len: 299, - }, - }, - }, - headers: { - "skynet-skylink": "EADWpKD0myqH2tZa6xtKebg6kNnwYnI94fl4R8UKgNrmOA", - "content-disposition": 'inline; filename="index.html"', - "content-type": "text/html", - }, - }; - - skylinkVerification(done, linkInfo); -} - -const developMomentumBodyHash = "08e96877dd6c99c3e1d98105f2fd9df377b53d65"; -const developMomentumMetadata = require("../fixtures/developMomentumMetadata.json"); - -// developMomentumCheck returns the result of trying to download the skylink -// for the Develop Momentum Application -function developMomentumCheck(done) { - const linkInfo = { - name: "Develop Momentum Index File", - skylink: "EAA1fG_ip4C1Vi1Ijvsr1oyr8jpH0Bo9HXya0T3kw-elGw/", - bodyHash: developMomentumBodyHash, - // metadata: developMomentumMetadata, - headers: { - "skynet-skylink": "EAA1fG_ip4C1Vi1Ijvsr1oyr8jpH0Bo9HXya0T3kw-elGw", - "content-disposition": 'inline; filename="index.html"', - "content-type": "text/html", - }, - }; - - skylinkVerification(done, linkInfo); -} - -// developMomentumRedirectCheck returns the result of trying to download the skylink -// for the Develop Momentum Application without the tailing slash -function developMomentumRedirectCheck(done) { - const linkInfo = { - name: "Develop Momentum Index File - no trailing slash", - skylink: "EAA1fG_ip4C1Vi1Ijvsr1oyr8jpH0Bo9HXya0T3kw-elGw", - bodyHash: developMomentumBodyHash, - metadata: developMomentumMetadata, - headers: { - "skynet-skylink": "EAA1fG_ip4C1Vi1Ijvsr1oyr8jpH0Bo9HXya0T3kw-elGw", - "content-disposition": 'inline; filename="index.html"', - "content-type": "text/html", - }, - }; - - skylinkVerification(done, linkInfo); -} - -// developMomentumIndexFileCheck returns the result of trying to download the skylink -// for the Develop Momentum Application with a trailing /index.html -function developMomentumIndexFileCheck(done) { - const linkInfo = { - name: "Develop Momentum Index File", - skylink: "EAA1fG_ip4C1Vi1Ijvsr1oyr8jpH0Bo9HXya0T3kw-elGw/index.html", - bodyHash: developMomentumBodyHash, - headers: { - "skynet-skylink": "EAA1fG_ip4C1Vi1Ijvsr1oyr8jpH0Bo9HXya0T3kw-elGw", - "content-disposition": 'inline; filename="index.html"', - "content-type": "text/html", - }, - }; - - skylinkVerification(done, linkInfo); -} - -// htmlExampleCheck returns the result of trying to download the skylink -// for the Example HTML file on siasky.net -function htmlExampleCheck(done) { - const linkInfo = { - name: "HTML Example", - skylink: "PAL0w4SdA5rFCDGEutgpeQ50Om-YkBabtXVOJAkmedslKw", - bodyHash: "ecffcfbb74e017698cad30a91a74b9ba0b046413", - metadata: { filename: "introduction – Sia API Documentation.html" }, - headers: { - "skynet-skylink": "PAL0w4SdA5rFCDGEutgpeQ50Om-YkBabtXVOJAkmedslKw", - "content-disposition": 'inline; filename="introduction â\x80\x93 Sia API Documentation.html"', - "content-type": "text/html; charset=utf-8", - }, - }; - - skylinkVerification(done, linkInfo); -} - -// imageExampleCheck returns the result of trying to download the skylink -// for the Example image on siasky.net -function imageExampleCheck(done) { - const linkInfo = { - name: "Image Example", - skylink: "IADUs8d9CQjUO34LmdaaNPK_STuZo24rpKVfYW3wPPM2uQ", - bodyHash: "e318667a9d53a45a9d010ac4e0d120ad064279ac", - metadata: { filename: "sia-lm.png" }, - headers: { - "skynet-skylink": "IADUs8d9CQjUO34LmdaaNPK_STuZo24rpKVfYW3wPPM2uQ", - "content-disposition": 'inline; filename="sia-lm.png"', - "content-type": "image/png", - }, - }; - - skylinkVerification(done, linkInfo); -} - -// jsonExampleCheck returns the result of trying to download the skylink -// for the Example JSON file on siasky.net -function jsonExampleCheck(done) { - const linkInfo = { - name: "JSON Example", - skylink: "AAC0uO43g64ULpyrW0zO3bjEknSFbAhm8c-RFP21EQlmSQ", - bodyHash: "b514603ce8acd937197712700e21259f18a857d6", - metadata: { filename: "consensus.json" }, - headers: { - "skynet-skylink": "AAC0uO43g64ULpyrW0zO3bjEknSFbAhm8c-RFP21EQlmSQ", - "content-disposition": 'inline; filename="consensus.json"', - "content-type": "application/json", - }, - }; - - skylinkVerification(done, linkInfo); -} - -// pdfExampleCheck returns the result of trying to download the skylink -// for the Example PDF file on siasky.net -function pdfExampleCheck(done) { - const linkInfo = { - name: "PDF Example", - skylink: "XABvi7JtJbQSMAcDwnUnmp2FKDPjg8_tTTFP4BwMSxVdEg", - bodyHash: "7e079f7afc9e5bc0c1be04543e22ac552a14a8da", - metadata: { filename: "sia.pdf" }, - headers: { - "skynet-skylink": "XABvi7JtJbQSMAcDwnUnmp2FKDPjg8_tTTFP4BwMSxVdEg", - "content-disposition": 'inline; filename="sia.pdf"', - "content-type": "application/pdf", - }, - }; - - skylinkVerification(done, linkInfo); -} - -// skyBayCheck returns the result of trying to download the skylink for the SkyBay Application. -function skyBayCheck(done) { - const linkInfo = { - name: "SkyBay", - skylink: "EABkMjXzxJRpPz0eO0Or5fy2eo-rz3prdigGwRlyNd9mwA", - bodyHash: "dfc0b1d3d1113254d7545d19f6118855ed9c778b", - metadata: { - filename: "skybay.html", - subfiles: { "skybay.html": { filename: "skybay.html", contenttype: "text/html", len: 11655 } }, - }, - headers: { - "skynet-skylink": "EABkMjXzxJRpPz0eO0Or5fy2eo-rz3prdigGwRlyNd9mwA", - "content-disposition": 'inline; filename="skybay.html"', - "content-type": "text/html", - }, - }; - - skylinkVerification(done, linkInfo); -} - -// skyBayRedirectCheck returns the result of trying to download the skylink -// for the SkyBay Application with no trailing slash. -function skyBayRedirectCheck(done) { - const linkInfo = { - name: "SkyBay Redirect", - skylink: "EABkMjXzxJRpPz0eO0Or5fy2eo-rz3prdigGwRlyNd9mwA", - bodyHash: "dfc0b1d3d1113254d7545d19f6118855ed9c778b", - metadata: { - filename: "skybay.html", - subfiles: { "skybay.html": { filename: "skybay.html", contenttype: "text/html", len: 11655 } }, - }, - headers: { - "skynet-skylink": "EABkMjXzxJRpPz0eO0Or5fy2eo-rz3prdigGwRlyNd9mwA", - "content-disposition": 'inline; filename="skybay.html"', - "content-type": "text/html", - }, - }; - - skylinkVerification(done, linkInfo); -} - -// skyBinCheck returns the result of trying to download the skylink for the SkyBin Application. -function skyBinCheck(done) { - const linkInfo = { - name: "SkyBin", - skylink: "CAAVU14pB9GRIqCrejD7rlS27HltGGiiCLICzmrBV0wVtA", - bodyHash: "858ff733c4cb06a80060b8a62cf303fd5a051651", - metadata: { filename: "skybin.html" }, - headers: { - "skynet-skylink": "CAAVU14pB9GRIqCrejD7rlS27HltGGiiCLICzmrBV0wVtA", - "content-disposition": 'inline; filename="skybin.html"', - "content-type": "text/html; charset=utf-8", - }, - }; - - skylinkVerification(done, linkInfo); -} - -// skyBinRedirectCheck returns the result of trying to download the skylink -// for the SkyBin Application with no trailing slash. -function skyBinRedirectCheck(done) { - const linkInfo = { - name: "SkyBin Redirect", - skylink: "CAAVU14pB9GRIqCrejD7rlS27HltGGiiCLICzmrBV0wVtA", - bodyHash: "858ff733c4cb06a80060b8a62cf303fd5a051651", - metadata: { filename: "skybin.html" }, - headers: { - "skynet-skylink": "CAAVU14pB9GRIqCrejD7rlS27HltGGiiCLICzmrBV0wVtA", - "content-disposition": 'inline; filename="skybin.html"', - "content-type": "text/html; charset=utf-8", - }, - }; - - skylinkVerification(done, linkInfo); -} - -const skyGalleryBodyHash = "cb5905023a29bdd60d58817f26503345c9a1bd09"; -const skyGalleryMetadata = require("../fixtures/skygalleryMetadata.json"); - -// skyGalleryCheck returns the result of trying to download the skylink for the SkyGallery Application. -function skyGalleryCheck(done) { - const linkInfo = { - name: "SkyGallery", - skylink: "AADW6GsQcetwDBaDYnGCSTbYjSKY743NtY1A5VRx5sj3Dg", - bodyHash: skyGalleryBodyHash, - metadata: skyGalleryMetadata, - headers: { - "skynet-skylink": "AADW6GsQcetwDBaDYnGCSTbYjSKY743NtY1A5VRx5sj3Dg", - "content-disposition": 'inline; filename="index.html"', - "content-type": "text/html", - }, - }; - - skylinkVerification(done, linkInfo); -} - -// skyGalleryIndexFileCheck returns the result of trying to download the skylink -// for the SkyGallery Application with a trailing /index.html -function skyGalleryIndexFileCheck(done) { - const linkInfo = { - name: "SkyGallery Index File", - skylink: "AADW6GsQcetwDBaDYnGCSTbYjSKY743NtY1A5VRx5sj3Dg/index.html", - bodyHash: skyGalleryBodyHash, - headers: { - "skynet-skylink": "AADW6GsQcetwDBaDYnGCSTbYjSKY743NtY1A5VRx5sj3Dg", - "content-disposition": 'inline; filename="index.html"', - "content-type": "text/html", - }, - }; - - skylinkVerification(done, linkInfo); -} - -// skyGalleryRedirectCheck returns the result of trying to download the skylink -// for the SkyGallery Application with no trailing slash. -function skyGalleryRedirectCheck(done) { - const linkInfo = { - name: "SkyGallery Redirect", - skylink: "AADW6GsQcetwDBaDYnGCSTbYjSKY743NtY1A5VRx5sj3Dg", - bodyHash: skyGalleryBodyHash, - metadata: skyGalleryMetadata, - headers: { - "skynet-skylink": "AADW6GsQcetwDBaDYnGCSTbYjSKY743NtY1A5VRx5sj3Dg", - "content-disposition": 'inline; filename="index.html"', - "content-type": "text/html", - }, - }; - - skylinkVerification(done, linkInfo); -} - -// uncensoredLibraryCheck returns the result of trying to download the skylink -// for the uncensored library skylink -function uncensoredLibraryCheck(done) { - const linkInfo = { - name: "Unzip The Uncensored Library Map", - skylink: "AAC5glnZyNJ4Ieb4MhnYJGtID6qdMqEjl0or5EvEMt7bWQ", - bodyHash: "cd0377661eefd656c8b46c497aa03112393ba893", - metadata: { - filename: "Unzip_The_Uncensored_Library_Map.zip", - subfiles: { - "Unzip_The_Uncensored_Library_Map.zip": { - filename: "Unzip_The_Uncensored_Library_Map.zip", - contenttype: "application/zip", - len: 76744822, - }, - }, - }, - headers: { - "skynet-skylink": "AAC5glnZyNJ4Ieb4MhnYJGtID6qdMqEjl0or5EvEMt7bWQ", - "content-disposition": 'inline; filename="Unzip_The_Uncensored_Library_Map.zip"', - "content-type": "application/zip", - }, - }; - - skylinkVerification(done, linkInfo); -} - -function uncensoredLibraryPressReleaseCheck(done) { - const linkInfo = { - name: "The Uncensored Library - Press Release", - skylink: "AABHwuml_EhvyY8Gm7j1E2xGwodUNAJgX0A6-Cd22p9kNA", - bodyHash: "da39a3ee5e6b4b0d3255bfef95601890afd80709", - metadata: { - filename: "press-release-Reporters-Without-Borders-The-Uncensored-Library.zip", - subfiles: { - "press-release-Reporters-Without-Borders-The-Uncensored-Library.zip": { - filename: "press-release-Reporters-Without-Borders-The-Uncensored-Library.zip", - contenttype: "application/zip", - len: 383501533, - }, - }, - }, - headers: { - "skynet-skylink": "AABHwuml_EhvyY8Gm7j1E2xGwodUNAJgX0A6-Cd22p9kNA", - "content-disposition": 'inline; filename="press-release-Reporters-Without-Borders-The-Uncensored-Library.zip"', - "content-type": "application/zip", - }, - }; - - // request too large, use head just to verify the headers - skylinkVerification(done, linkInfo, { method: "head" }); -} - -function uncensoredLibraryV2Check(done) { - const linkInfo = { - name: "The Uncensored Library V2", - skylink: "AAAs-JOsRGWgABYIo7AwTDqSX79-BxQKjDj0wiRGoRPFnw", - bodyHash: "f2a802c2b7482825613a08853538203a53c96bd1", - metadata: { - filename: "The Uncensored Library V2.zip", - subfiles: { - "The Uncensored Library V2.zip": { - filename: "The Uncensored Library V2.zip", - contenttype: "application/zip", - len: 101262134, - }, - }, - }, - headers: { - "skynet-skylink": "AAAs-JOsRGWgABYIo7AwTDqSX79-BxQKjDj0wiRGoRPFnw", - "content-disposition": 'inline; filename="The Uncensored Library V2.zip"', - "content-type": "application/zip", - }, - }; - - skylinkVerification(done, linkInfo); -} - -function bitcoinWhitepaper(done) { - skylinkVerification(done, { - name: "Bitcoin Whitepaper", - skylink: "3ACpC9Umme41zlWUgMQh1fw0sNwgWwyfDDhRQ9Sppz9hjQ", - bodyHash: "8de2fdb04edce612738eb51e14ecc426381f8ed8", - headers: { - "skynet-skylink": "3ACpC9Umme41zlWUgMQh1fw0sNwgWwyfDDhRQ9Sppz9hjQ", - "content-disposition": 'inline; filename="bitcoin.pdf"', - "content-type": "application/pdf", - }, - }); -} - -const uniswapBodyHash = "3965f9a7def085b3a764ddc76a528eda38d72359"; -const uniswapMetadata = require("../fixtures/uniswapMetadata.json"); - -// uniswapCheck returns the result of trying to download the skylink -// for the Uniswap Application -function uniswapCheck(done) { - const linkInfo = { - name: "Uniswap", - skylink: "IAC6CkhNYuWZqMVr1gob1B6tPg4MrBGRzTaDvAIAeu9A9w/", - bodyHash: uniswapBodyHash, - metadata: uniswapMetadata, - }; - - skylinkVerification(done, linkInfo); -} - -// uniswapRedirectCheck returns the result of trying to download the skylink -// for the Uniswap Application without a trailing slash -function uniswapRedirectCheck(done) { - const linkInfo = { - name: "Uniswap", - skylink: "IAC6CkhNYuWZqMVr1gob1B6tPg4MrBGRzTaDvAIAeu9A9w", - bodyHash: uniswapBodyHash, - metadata: uniswapMetadata, - }; - - skylinkVerification(done, linkInfo); -} - -// uniswapIndexFileCheck returns the result of trying to download the skylink -// for the Uniswap Application with a trailing /index.html -function uniswapIndexFileCheck(done) { - const linkInfo = { - name: "Uniswap Skylink Index File", - skylink: "IAC6CkhNYuWZqMVr1gob1B6tPg4MrBGRzTaDvAIAeu9A9w/index.html", - bodyHash: uniswapBodyHash, - metadata: { - filename: "/index.html", - length: 3268, - subfiles: { "index.html": { filename: "index.html", contenttype: "text/html", len: 3268 } }, - }, - }; - - skylinkVerification(done, linkInfo); -} - -// uniswapHNSCheck returns the result of trying to download the skylink -// for the Uniswap Application with the HNS domain -function uniswapHNSCheck(done) { - const linkInfo = { - name: "Uniswap HNS", - skylink: "hns/uniswap-dex/", - bodyHash: uniswapBodyHash, - metadata: uniswapMetadata, - }; - - skylinkVerification(done, linkInfo); -} - -// uniswapHNSRedirectCheck returns the result of trying to download the skylink -// for the Uniswap Application with the HNS domain and without a trailing slash -function uniswapHNSRedirectCheck(done) { - const linkInfo = { - name: "Uniswap HNS Redirect", - skylink: "hns/uniswap-dex", - bodyHash: uniswapBodyHash, - metadata: uniswapMetadata, - }; - - skylinkVerification(done, linkInfo); -} - -// uniswapHNSResolverCheck returns the result of trying to download the skylink -// for the Uniswap Application via the HNS resolver endpoint -function uniswapHNSResolverCheck(done) { - const linkInfo = { - name: "Uniswap HNS Resolver", - skylink: "hnsres/uniswap-dex/", - bodyHash: "3634496800c254b93f9dcbca2aeb53e644f706c0", - }; - - skylinkVerification(done, linkInfo); -} - -// uniswapHNSResolverRedirectCheck returns the result of trying to download the skylink -// for the Uniswap Application via the HNS resolver endpoint without the -// trailing slash -function uniswapHNSResolverRedirectCheck(done) { - const linkInfo = { - name: "Uniswap HNS Resolver Redirect", - skylink: "hnsres/uniswap-dex", - bodyHash: "3634496800c254b93f9dcbca2aeb53e644f706c0", - }; - - skylinkVerification(done, linkInfo); -} - -// check whether content disposition is set correctly for downloads -function fileEndpointCheck(done) { - const linkInfo = { - name: "File endpoint check", - skylink: "file/XABvi7JtJbQSMAcDwnUnmp2FKDPjg8_tTTFP4BwMSxVdEg", - bodyHash: "7e079f7afc9e5bc0c1be04543e22ac552a14a8da", - // metadata: { filename: "sia2.pdf" }, - headers: { - "skynet-skylink": "XABvi7JtJbQSMAcDwnUnmp2FKDPjg8_tTTFP4BwMSxVdEg", - "content-disposition": 'attachment; filename="sia.pdf"', - "content-type": "application/pdf", - }, - }; - - skylinkVerification(done, linkInfo); -} - -// check whether hns/note-to-self would properly redirect to note-to-self/ -function hnsEndpointDirectoryRedirect(done) { - const expected = { - name: "hns endpoint directory redirect", - skylink: "hns/note-to-self", - statusCode: 308, - headers: { - location: "note-to-self/", - }, - }; - - skylinkVerification(done, expected, { followRedirect: false }); -} - -function skappSkySend(done) { - skylinkVerification(done, { - name: "skysend.hns", - source: "https://github.com/redsolver/skysend/", - skylink: "GADlWH3ALR2g1cDUBI6Ti8B22iD7R5dfn_8jLfq-atm5iw", - bodyHash: "35bc25301501a3b28913ca7a7a06120681365a9c", - headers: { - "skynet-skylink": "GADlWH3ALR2g1cDUBI6Ti8B22iD7R5dfn_8jLfq-atm5iw", - "content-disposition": 'inline; filename="index.html"', - "content-type": "text/html", - }, - }); -} - -function skappNoteToSelf(done) { - skylinkVerification(done, { - name: "note-to-self.hns", - source: "https://github.com/kwypchlo/note-to-self/", - skylink: "EAD_w2YcqtpqVgtRwKXPno9VmKfTcVG3E_OIL-Np_Hz_1g", - bodyHash: "e00c1b7348dd419e96bf3c188185a5fb8d04af53", - headers: { - "skynet-skylink": "EAD_w2YcqtpqVgtRwKXPno9VmKfTcVG3E_OIL-Np_Hz_1g", - "content-disposition": 'inline; filename="index.html"', - "content-type": "text/html", - }, - }); -} - -function skappUniswap(done) { - skylinkVerification(done, { - name: "uniswap skynet labs fork", - source: "https://github.com/SkynetLabs/uniswap-interface/", - skylink: "OAAy4_g9EYfuOiUZlz_irkoPgsc_seAjgGozerrT1QvE5A", - bodyHash: "db2882b7902f24d62e49905b77d536aaf7b7da75", - headers: { - "skynet-skylink": "OAAy4_g9EYfuOiUZlz_irkoPgsc_seAjgGozerrT1QvE5A", - "content-disposition": 'inline; filename="index.html"', - "content-type": "text/html", - }, - }); -} - -function skappHackerPaste(done) { - skylinkVerification(done, { - name: "hackerpaste.hns", - source: "https://github.com/harej/hackerpaste/", - skylink: "_AGZuZCyRn5kZMFHBssWYc20poXyez1XMO6hmPqAVcM1qg", - bodyHash: "12817ac933b7f64fc63ae24a652132ed11e5b622", - headers: { - "skynet-skylink": "_AGZuZCyRn5kZMFHBssWYc20poXyez1XMO6hmPqAVcM1qg", - "content-disposition": 'inline; filename="index.html"', - "content-type": "text/html", - }, - }); -} - -function skappHowAboutSkapp(done) { - skylinkVerification(done, { - name: "tirthahalli.hns", - source: "-", - skylink: "AAAsdvGalu2Fj9P5zLvZhfwoI0CpXeO_kPMSG_YU1PSIWg", - bodyHash: "734c49ddde2a49ac6ddbf1c6d90a014ff82e2f87", - headers: { - "skynet-skylink": "AAAsdvGalu2Fj9P5zLvZhfwoI0CpXeO_kPMSG_YU1PSIWg", - "content-disposition": 'inline; filename="index.html"', - "content-type": "text/html", - }, - }); -} - -function skappSkyDeploy(done) { - skylinkVerification(done, { - name: "sky-deploy.hns", - source: "-", - skylink: "CABR1ic_lIPaN9JYLG6AiudkW5GShRd-Cr6Wkjur7z29Rw", - bodyHash: "b2b0498a8a7f6fcfe76c29ae1a1176b4e64cb5ab", - headers: { - "skynet-skylink": "CABR1ic_lIPaN9JYLG6AiudkW5GShRd-Cr6Wkjur7z29Rw", - "content-disposition": 'inline; filename="index.html"', - "content-type": "text/html", - }, - }); -} - -function parseHeaderString(header) { - try { - return JSON.parse(header); - } catch { - return header; - } -} - -// skylinkVerification verifies a skylink against provided information. -async function skylinkVerification(done, expected, { followRedirect = true, method = "get" } = {}) { +const { calculateElapsedTime, ensureValidJSON, getResponseContent, parseHeaderString } = require("../utils"); +const extendedChecks = require("../fixtures/extendedChecks.json"); + +/** + * + * @param {string} name check names + * @param {object} expected expected data (metadata, headers, etc.) + * @param {object} config config object containing optional request parameters + */ +async function executeExtendedCheck(name, expected, config = {}) { const time = process.hrtime(); - const details = { name: expected.name, skylink: expected.skylink }; + const details = { name, skylink: expected.skylink }; try { const query = `https://${process.env.PORTAL_DOMAIN}/${expected.skylink}`; - const response = await got[method](query, { - followRedirect, + const response = await got[config.method ?? "get"](query, { + followRedirect: config.followRedirect ?? false, headers: { "Skynet-Api-Key": process.env.ACCOUNTS_TEST_USER_API_KEY }, }); + + // prepare entry report object const entry = { ...details, up: true, statusCode: response.statusCode, time: calculateElapsedTime(time) }; + + // prepare additional info object for any mismatch reposts const info = {}; + // compare status codes if defined in the expected response object if (expected.statusCode && expected.statusCode !== response.statusCode) { entry.up = false; info.statusCode = { expected: expected.statusCode, current: response.statusCode }; } - // Check if the response body is valid by checking against the known hash - if ("bodyHash" in expected) { + // compare body hash if defined in the expected response object + if (expected.bodyHash) { const currentBodyHash = hasha(response.rawBody, { algorithm: "sha1" }); + if (currentBodyHash !== expected.bodyHash) { entry.up = false; info.bodyHash = { expected: expected.bodyHash, current: currentBodyHash }; } } + // compare headers if defined in the expected response object if (expected.headers) { Object.entries(expected.headers).forEach(([headerName, expectedHeader]) => { const currentHeader = parseHeaderString(response.headers[headerName]); + if (!isEqual(currentHeader, expectedHeader)) { entry.up = false; info.headers = info.headers ?? {}; + + // special deep diff mode report for headers containing valid json objects if (typeof currentHeader === "object") { info.headers[headerName] = ensureValidJSON(detailedDiff(expectedHeader, currentHeader)); } else { @@ -1170,14 +63,20 @@ async function skylinkVerification(done, expected, { followRedirect = true, meth }); } + // if metadata comparison is expected and skylink is provided, fetch metadata + // in separate request and compare it with expected metadata if (expected.metadata && expected.skylink) { const url = `https://${process.env.PORTAL_DOMAIN}/skynet/metadata/${expected.skylink}`; try { const metadata = await got(url, { headers: { "Skynet-Api-Key": process.env.ACCOUNTS_TEST_USER_API_KEY }, }).json(); + + // deep compare requested metadata with expected metadata if (!isEqual(expected.metadata, metadata)) { entry.up = false; + + // report metadata diff on mismatch info.metadata = { url, diff: ensureValidJSON(detailedDiff(expected.metadata, metadata)) }; } } catch (error) { @@ -1192,11 +91,14 @@ async function skylinkVerification(done, expected, { followRedirect = true, meth } } - if (Object.keys(info).length) entry.info = info; // add info only if it exists + // attach info only if it exists + if (Object.keys(info).length) { + entry.info = info; + } - done(entry); // Return the entry information + return entry; // return the entry information } catch (error) { - done({ + return { ...details, up: false, ip: error?.response?.ip ?? null, @@ -1204,46 +106,10 @@ async function skylinkVerification(done, expected, { followRedirect = true, meth errorMessage: error.message, errorResponseContent: getResponseContent(error.response), time: calculateElapsedTime(time), - }); + }; } } -module.exports = [ - audioExampleCheck, - covid19PaperCheck, - covid19CoroNopePaperCheck, - dappExampleCheck, - developMomentumIndexFileCheck, - developMomentumCheck, - developMomentumRedirectCheck, - htmlExampleCheck, - imageExampleCheck, - jsonExampleCheck, - pdfExampleCheck, - skyBayCheck, - skyBayRedirectCheck, - skyBinCheck, - skyBinRedirectCheck, - skyGalleryCheck, - skyGalleryIndexFileCheck, - skyGalleryRedirectCheck, - uncensoredLibraryCheck, - uncensoredLibraryPressReleaseCheck, - uncensoredLibraryV2Check, - fileEndpointCheck, - bitcoinWhitepaper, - // uniswapIndexFileCheck, - // uniswapCheck, - // uniswapRedirectCheck, - // uniswapHNSCheck, - // uniswapHNSRedirectCheck, - uniswapHNSResolverCheck, - uniswapHNSResolverRedirectCheck, - hnsEndpointDirectoryRedirect, - skappSkySend, - skappNoteToSelf, - skappUniswap, - skappHackerPaste, - skappHowAboutSkapp, - skappSkyDeploy, -]; +module.exports = extendedChecks.map((extendedCheck) => { + return () => executeExtendedCheck(extendedCheck.name, extendedCheck.data, extendedCheck.config); +}); diff --git a/src/checks/middleware.js b/src/checks/middleware.js index 98ad71e..8f6164e 100644 --- a/src/checks/middleware.js +++ b/src/checks/middleware.js @@ -1,7 +1,10 @@ const got = require("got"); const { ipCheckService, ipRegex } = require("../utils"); -const getCurrentAddress = async () => { +/** + * Ask ip check service for current machine external ip address + */ +async function getCurrentAddress() { // use serverip env variable when available (set via Dockerfile) if (process.env.serverip) { if (ipRegex.test(process.env.serverip)) return process.env.serverip; @@ -24,13 +27,15 @@ const getCurrentAddress = async () => { return null; } -}; +} module.exports = async function middleware() { - const ip = await getCurrentAddress(); + const ip = await getCurrentAddress(); // get current machine ip address return (check) => { - // check only if current ip and check ip are provided + // ip comparison check middleware - executes only if current ip and check ip are provided + // reasoning: we had issues with health checks executing against different machines in cluster + // so we want to double check that we're running the checks against the machine that runs them if (ip && check.ip && check.ip !== ip) { check.up = false; check.errors = check.errors ?? []; diff --git a/src/db.js b/src/db.js index d7e4770..82c0157 100644 --- a/src/db.js +++ b/src/db.js @@ -2,11 +2,16 @@ const fs = require("graceful-fs"); const low = require("lowdb"); const FileSyncAtomic = require("./adapters/FileSyncAtomic"); -if (!fs.existsSync(process.env.STATE_DIR)) fs.mkdirSync(process.env.STATE_DIR); +// create state directory if it doesn't exist (otherwise lowdb will fail to write to it) +if (!fs.existsSync(process.env.STATE_DIR)) { + fs.mkdirSync(process.env.STATE_DIR); +} +// initialize lowdb instance with atomic file sync adapter const adapter = new FileSyncAtomic(`${process.env.STATE_DIR}/state.json`); const db = low(adapter); +// when db is empty, initialize it with default schema and persist db.defaults({ disabled: false, critical: [], extended: [] }).write(); module.exports = db; diff --git a/src/fixtures/developMomentumMetadata.json b/src/fixtures/developMomentumMetadata.json deleted file mode 100644 index dec5b29..0000000 --- a/src/fixtures/developMomentumMetadata.json +++ /dev/null @@ -1,322 +0,0 @@ -{ - "filename": "output", - "subfiles": { - ".well-known/brave-rewards-verification.txt": { - "filename": ".well-known/brave-rewards-verification.txt", - "contenttype": "text/plain", - "len": 154 - }, - "404.html": { "filename": "404.html", "contenttype": "text/html", "offset": 154, "len": 5482 }, - "assets/bootstrap/bootstrap-grid.css": { - "filename": "assets/bootstrap/bootstrap-grid.css", - "contenttype": "text/css", - "offset": 5636, - "len": 49901 - }, - "assets/bootstrap/bootstrap-reboot.css": { - "filename": "assets/bootstrap/bootstrap-reboot.css", - "contenttype": "text/css", - "offset": 55537, - "len": 4187 - }, - "assets/bootstrap/bootstrap.css": { - "filename": "assets/bootstrap/bootstrap.css", - "contenttype": "text/css", - "offset": 59724, - "len": 172594 - }, - "assets/css/styles.css": { - "filename": "assets/css/styles.css", - "contenttype": "text/css", - "offset": 232318, - "len": 4887 - }, - "assets/fonts/dm-serif-display-v4-latin-regular.woff": { - "filename": "assets/fonts/dm-serif-display-v4-latin-regular.woff", - "contenttype": "application/font-woff", - "offset": 237205, - "len": 29916 - }, - "assets/fonts/dm-serif-display-v4-latin-regular.woff2": { - "filename": "assets/fonts/dm-serif-display-v4-latin-regular.woff2", - "contenttype": "application/octet-stream", - "offset": 267121, - "len": 24980 - }, - "assets/fonts/open-sans-v16-latin-regular.woff": { - "filename": "assets/fonts/open-sans-v16-latin-regular.woff", - "contenttype": "application/font-woff", - "offset": 292101, - "len": 18100 - }, - "assets/fonts/open-sans-v16-latin-regular.woff2": { - "filename": "assets/fonts/open-sans-v16-latin-regular.woff2", - "contenttype": "application/octet-stream", - "offset": 310201, - "len": 14380 - }, - "assets/fonts/questrial-v9-latin-regular.woff": { - "filename": "assets/fonts/questrial-v9-latin-regular.woff", - "contenttype": "application/font-woff", - "offset": 324581, - "len": 23048 - }, - "assets/fonts/questrial-v9-latin-regular.woff2": { - "filename": "assets/fonts/questrial-v9-latin-regular.woff2", - "contenttype": "application/octet-stream", - "offset": 347629, - "len": 13776 - }, - "assets/images/blog/2a40df99-1847-4726-9c5b-af4779eeb667-w1920-h1440.jpg": { - "filename": "assets/images/blog/2a40df99-1847-4726-9c5b-af4779eeb667-w1920-h1440.jpg", - "contenttype": "image/jpeg", - "offset": 361405, - "len": 79551 - }, - "assets/images/blog/2a40df99-1847-4726-9c5b-af4779eeb667-w960-h720.jpg": { - "filename": "assets/images/blog/2a40df99-1847-4726-9c5b-af4779eeb667-w960-h720.jpg", - "contenttype": "image/jpeg", - "offset": 440956, - "len": 31700 - }, - "assets/images/blog/2a40df99-1847-4726-9c5b-af4779eeb667.jpg": { - "filename": "assets/images/blog/2a40df99-1847-4726-9c5b-af4779eeb667.jpg", - "contenttype": "image/jpeg", - "offset": 472656, - "len": 69094 - }, - "assets/images/blog/512e4dd1-6b3d-41aa-80a1-b96c3370b3c3-w1920-h1440.jpg": { - "filename": "assets/images/blog/512e4dd1-6b3d-41aa-80a1-b96c3370b3c3-w1920-h1440.jpg", - "contenttype": "image/jpeg", - "offset": 541750, - "len": 219602 - }, - "assets/images/blog/512e4dd1-6b3d-41aa-80a1-b96c3370b3c3-w960-h720.jpg": { - "filename": "assets/images/blog/512e4dd1-6b3d-41aa-80a1-b96c3370b3c3-w960-h720.jpg", - "contenttype": "image/jpeg", - "offset": 761352, - "len": 67741 - }, - "assets/images/blog/512e4dd1-6b3d-41aa-80a1-b96c3370b3c3.jpg": { - "filename": "assets/images/blog/512e4dd1-6b3d-41aa-80a1-b96c3370b3c3.jpg", - "contenttype": "image/jpeg", - "offset": 829093, - "len": 226910 - }, - "assets/images/blog/823a7764-af7c-4687-a42e-bd70768068ab-w1920-h1440.jpg": { - "filename": "assets/images/blog/823a7764-af7c-4687-a42e-bd70768068ab-w1920-h1440.jpg", - "contenttype": "image/jpeg", - "offset": 1056003, - "len": 258292 - }, - "assets/images/blog/823a7764-af7c-4687-a42e-bd70768068ab-w960-h720.jpg": { - "filename": "assets/images/blog/823a7764-af7c-4687-a42e-bd70768068ab-w960-h720.jpg", - "contenttype": "image/jpeg", - "offset": 1314295, - "len": 93250 - }, - "assets/images/blog/823a7764-af7c-4687-a42e-bd70768068ab.jpg": { - "filename": "assets/images/blog/823a7764-af7c-4687-a42e-bd70768068ab.jpg", - "contenttype": "image/jpeg", - "offset": 1407545, - "len": 236722 - }, - "assets/images/blog/9aeea0d6-737c-4be8-8b63-5ec38cbf394b-w1920-h1440.jpg": { - "filename": "assets/images/blog/9aeea0d6-737c-4be8-8b63-5ec38cbf394b-w1920-h1440.jpg", - "contenttype": "image/jpeg", - "offset": 1644267, - "len": 285727 - }, - "assets/images/blog/9aeea0d6-737c-4be8-8b63-5ec38cbf394b-w960-h720.jpg": { - "filename": "assets/images/blog/9aeea0d6-737c-4be8-8b63-5ec38cbf394b-w960-h720.jpg", - "contenttype": "image/jpeg", - "offset": 1929994, - "len": 115524 - }, - "assets/images/blog/9aeea0d6-737c-4be8-8b63-5ec38cbf394b.jpg": { - "filename": "assets/images/blog/9aeea0d6-737c-4be8-8b63-5ec38cbf394b.jpg", - "contenttype": "image/jpeg", - "offset": 2045518, - "len": 338905 - }, - "assets/images/blog/a1ee6dcf-55ef-43cd-ae05-682d2e28e932-w1920-h1440.jpg": { - "filename": "assets/images/blog/a1ee6dcf-55ef-43cd-ae05-682d2e28e932-w1920-h1440.jpg", - "contenttype": "image/jpeg", - "offset": 2384423, - "len": 66608 - }, - "assets/images/blog/a1ee6dcf-55ef-43cd-ae05-682d2e28e932-w960-h720.jpg": { - "filename": "assets/images/blog/a1ee6dcf-55ef-43cd-ae05-682d2e28e932-w960-h720.jpg", - "contenttype": "image/jpeg", - "offset": 2451031, - "len": 23239 - }, - "assets/images/blog/a1ee6dcf-55ef-43cd-ae05-682d2e28e932.jpg": { - "filename": "assets/images/blog/a1ee6dcf-55ef-43cd-ae05-682d2e28e932.jpg", - "contenttype": "image/jpeg", - "offset": 2474270, - "len": 82334 - }, - "assets/images/blog/content/17343f27-a62f-4193-a0e5-4190d948eb2e.png": { - "filename": "assets/images/blog/content/17343f27-a62f-4193-a0e5-4190d948eb2e.png", - "contenttype": "image/png", - "offset": 2556604, - "len": 8571 - }, - "assets/images/blog/content/1748cc9c-9ea0-47b8-a110-ad3a114408d1.png": { - "filename": "assets/images/blog/content/1748cc9c-9ea0-47b8-a110-ad3a114408d1.png", - "contenttype": "image/png", - "offset": 2565175, - "len": 19776 - }, - "assets/images/blog/content/27b98c5e-ba57-47e6-9fe7-9b82fb89868b.jpg": { - "filename": "assets/images/blog/content/27b98c5e-ba57-47e6-9fe7-9b82fb89868b.jpg", - "contenttype": "image/jpeg", - "offset": 2584951, - "len": 68054 - }, - "assets/images/blog/content/39374de9-f24a-46f6-9955-982687607c6d.png": { - "filename": "assets/images/blog/content/39374de9-f24a-46f6-9955-982687607c6d.png", - "contenttype": "image/png", - "offset": 2653005, - "len": 30305 - }, - "assets/images/blog/content/5c660f5c-04fb-46cd-9846-edccb9a7b778.jpg": { - "filename": "assets/images/blog/content/5c660f5c-04fb-46cd-9846-edccb9a7b778.jpg", - "contenttype": "image/jpeg", - "offset": 2683310, - "len": 10409 - }, - "assets/images/blog/content/5cb6fb87-75d0-4aa4-99c7-b7815ca7ea70.png": { - "filename": "assets/images/blog/content/5cb6fb87-75d0-4aa4-99c7-b7815ca7ea70.png", - "contenttype": "image/png", - "offset": 2693719, - "len": 123977 - }, - "assets/images/blog/content/765827f6-192b-48c9-b3e1-cb7b33e3b881.png": { - "filename": "assets/images/blog/content/765827f6-192b-48c9-b3e1-cb7b33e3b881.png", - "contenttype": "image/png", - "offset": 2817696, - "len": 110297 - }, - "assets/images/blog/content/7b39a2f8-8060-43e7-a439-43f799d3e069.jpg": { - "filename": "assets/images/blog/content/7b39a2f8-8060-43e7-a439-43f799d3e069.jpg", - "contenttype": "image/jpeg", - "offset": 2927993, - "len": 24372 - }, - "assets/images/blog/content/8af4faff-e011-4e31-ba28-5023f65d1003.png": { - "filename": "assets/images/blog/content/8af4faff-e011-4e31-ba28-5023f65d1003.png", - "contenttype": "image/png", - "offset": 2952365, - "len": 106400 - }, - "assets/images/blog/content/ae29cd58-f28f-4a0e-bffb-a7e4e1235797.png": { - "filename": "assets/images/blog/content/ae29cd58-f28f-4a0e-bffb-a7e4e1235797.png", - "contenttype": "image/png", - "offset": 3058765, - "len": 33357 - }, - "assets/images/blog/content/b3be6c1c-725a-4af2-a85f-e47e09bbceef.png": { - "filename": "assets/images/blog/content/b3be6c1c-725a-4af2-a85f-e47e09bbceef.png", - "contenttype": "image/png", - "offset": 3092122, - "len": 37074 - }, - "assets/images/blog/content/b4e772a3-effb-4a5d-82d9-db9596ccfe51.png": { - "filename": "assets/images/blog/content/b4e772a3-effb-4a5d-82d9-db9596ccfe51.png", - "contenttype": "image/png", - "offset": 3129196, - "len": 79662 - }, - "assets/images/blog/content/d2731109-b50f-4c1f-b4f9-7ab8cac196da.png": { - "filename": "assets/images/blog/content/d2731109-b50f-4c1f-b4f9-7ab8cac196da.png", - "contenttype": "image/png", - "offset": 3208858, - "len": 104535 - }, - "assets/images/blog/content/fed0e592-d063-497b-9a3b-2bfc29b04d1a.jpg": { - "filename": "assets/images/blog/content/fed0e592-d063-497b-9a3b-2bfc29b04d1a.jpg", - "contenttype": "image/jpeg", - "offset": 3313393, - "len": 9535 - }, - "assets/images/blog/e4956336-3662-46ae-bea2-7fd3059919c3-w1920-h1440.jpg": { - "filename": "assets/images/blog/e4956336-3662-46ae-bea2-7fd3059919c3-w1920-h1440.jpg", - "contenttype": "image/jpeg", - "offset": 3322928, - "len": 402770 - }, - "assets/images/blog/e4956336-3662-46ae-bea2-7fd3059919c3-w960-h720.jpg": { - "filename": "assets/images/blog/e4956336-3662-46ae-bea2-7fd3059919c3-w960-h720.jpg", - "contenttype": "image/jpeg", - "offset": 3725698, - "len": 143539 - }, - "assets/images/blog/e4956336-3662-46ae-bea2-7fd3059919c3.jpg": { - "filename": "assets/images/blog/e4956336-3662-46ae-bea2-7fd3059919c3.jpg", - "contenttype": "image/jpeg", - "offset": 3869237, - "len": 375170 - }, - "assets/images/logo.svg": { - "filename": "assets/images/logo.svg", - "contenttype": "image/svg+xml", - "offset": 4244407, - "len": 2183 - }, - "assets/js/themes.js": { - "filename": "assets/js/themes.js", - "contenttype": "text/javascript", - "offset": 4246590, - "len": 779 - }, - "blog/building_a_web_farm_with_docker_and_raspberry_pi.html": { - "filename": "blog/building_a_web_farm_with_docker_and_raspberry_pi.html", - "contenttype": "text/html", - "offset": 4247369, - "len": 23111 - }, - "blog/continuously_deploy_a_static_website_with_azure_pipelines.html": { - "filename": "blog/continuously_deploy_a_static_website_with_azure_pipelines.html", - "contenttype": "text/html", - "offset": 4270480, - "len": 24738 - }, - "blog/decentralise_your_website_as_much_as_possible.html": { - "filename": "blog/decentralise_your_website_as_much_as_possible.html", - "contenttype": "text/html", - "offset": 4295218, - "len": 14825 - }, - "blog/developing_smart_contracts_for_business.html": { - "filename": "blog/developing_smart_contracts_for_business.html", - "contenttype": "text/html", - "offset": 4310043, - "len": 25783 - }, - "blog/getting_to_grips_with_jwt_in_asp_net_core.html": { - "filename": "blog/getting_to_grips_with_jwt_in_asp_net_core.html", - "contenttype": "text/html", - "offset": 4335826, - "len": 20915 - }, - "blog/index.html": { "filename": "blog/index.html", "contenttype": "text/html", "offset": 4356741, "len": 7345 }, - "blog/setting_up_an_asp_net_core_web_farm.html": { - "filename": "blog/setting_up_an_asp_net_core_web_farm.html", - "contenttype": "text/html", - "offset": 4364086, - "len": 11464 - }, - "favicon-16x16.png": { "filename": "favicon-16x16.png", "contenttype": "image/png", "offset": 4375550, "len": 430 }, - "favicon-32x32.png": { "filename": "favicon-32x32.png", "contenttype": "image/png", "offset": 4375980, "len": 540 }, - "favicon.ico": { "filename": "favicon.ico", "contenttype": "image/x-icon", "offset": 4376520, "len": 15086 }, - "feed.atom": { - "filename": "feed.atom", - "contenttype": "application/octet-stream", - "offset": 4391606, - "len": 95092 - }, - "index.html": { "filename": "index.html", "contenttype": "text/html", "offset": 4486698, "len": 4981 } - } -} diff --git a/src/fixtures/extendedChecks.json b/src/fixtures/extendedChecks.json new file mode 100644 index 0000000..6c172cd --- /dev/null +++ b/src/fixtures/extendedChecks.json @@ -0,0 +1,1482 @@ +[ + { + "name": "Audio Example", + "data": { + "skylink": "_A2zt5SKoqwnnZU4cBF8uBycSKULXMyeg1c5ZISBr2Q3dA", + "bodyHash": "1bea1f570043f20149ae4cb4d30089d90897b15b", + "metadata": { "filename": "feel-good.mp3" }, + "headers": { + "skynet-skylink": "_A2zt5SKoqwnnZU4cBF8uBycSKULXMyeg1c5ZISBr2Q3dA", + "content-disposition": "inline; filename=\"feel-good.mp3\"", + "content-type": "audio/mpeg" + } + } + }, + { + "name": "Covid-19 Paper", + "data": { + "skylink": "PAMZVmfutxWoG6Wnl5BRKuWLkDNZR42k_okRRvksJekA3A", + "bodyHash": "7ce20bfc4221503fd0bf909ad20c422eca125c7d", + "metadata": { + "filename": "An Effective Treatment for Coronavirus (COVID-19).pdf", + "subfiles": { + "An Effective Treatment for Coronavirus (COVID-19).pdf": { + "filename": "An Effective Treatment for Coronavirus (COVID-19).pdf", + "contenttype": "application/pdf", + "len": 474803 + } + } + }, + "headers": { + "skynet-skylink": "PAMZVmfutxWoG6Wnl5BRKuWLkDNZR42k_okRRvksJekA3A", + "content-disposition": "inline; filename=\"An Effective Treatment for Coronavirus (COVID-19).pdf\"", + "content-type": "application/pdf" + } + } + }, + { + "name": "Covid-19 CoroNope Paper", + "data": { + "skylink": "bACLKGmcmX4NCp47WwOOJf0lU666VLeT5HRWpWVtqZPjEA", + "bodyHash": "0db705da1b1232f8344ed74fd38245d35a49a965", + "metadata": { "filename": "coronope.pdf" }, + "headers": { + "skynet-skylink": "bACLKGmcmX4NCp47WwOOJf0lU666VLeT5HRWpWVtqZPjEA", + "content-disposition": "inline; filename=\"coronope.pdf\"", + "content-type": "application/pdf" + } + } + }, + { + "name": "Dapp Example (UniSwap)", + "data": { + "skylink": "EADWpKD0myqH2tZa6xtKebg6kNnwYnI94fl4R8UKgNrmOA", + "bodyHash": "7b74cbb5927e964db493b82cc1f8a532f1ff72f5", + "metadata": { + "filename": "build", + "length": 15578459, + "subfiles": { + "451.html": { + "filename": "451.html", + "contenttype": "text/html", + "offset": 40966, + "len": 200 + }, + "asset-manifest.json": { + "filename": "asset-manifest.json", + "contenttype": "application/json", + "offset": 35832, + "len": 5134 + }, + "favicon.ico": { + "filename": "favicon.ico", + "contenttype": "image/vnd.microsoft.icon", + "len": 31701 + }, + "index.html": { + "filename": "index.html", + "contenttype": "text/html", + "offset": 31701, + "len": 4131 + }, + "locales/de.json": { + "filename": "locales/de.json", + "contenttype": "application/json", + "offset": 15542609, + "len": 4376 + }, + "locales/en.json": { + "filename": "locales/en.json", + "contenttype": "application/json", + "offset": 15558827, + "len": 4049 + }, + "locales/es-AR.json": { + "filename": "locales/es-AR.json", + "contenttype": "application/json", + "offset": 15551984, + "len": 3624 + }, + "locales/es-US.json": { + "filename": "locales/es-US.json", + "contenttype": "application/json", + "offset": 15574829, + "len": 3630 + }, + "locales/it-IT.json": { + "filename": "locales/it-IT.json", + "contenttype": "application/json", + "offset": 15538386, + "len": 4223 + }, + "locales/ro.json": { + "filename": "locales/ro.json", + "contenttype": "application/json", + "offset": 15562876, + "len": 3794 + }, + "locales/ru.json": { + "filename": "locales/ru.json", + "contenttype": "application/json", + "offset": 15546985, + "len": 4999 + }, + "locales/vi.json": { + "filename": "locales/vi.json", + "contenttype": "application/json", + "offset": 15569928, + "len": 4901 + }, + "locales/zh-CN.json": { + "filename": "locales/zh-CN.json", + "contenttype": "application/json", + "offset": 15555608, + "len": 3219 + }, + "locales/zh-TW.json": { + "filename": "locales/zh-TW.json", + "contenttype": "application/json", + "offset": 15566670, + "len": 3258 + }, + "manifest.json": { + "filename": "manifest.json", + "contenttype": "application/json", + "offset": 41166, + "len": 297 + }, + "precache-manifest.cd4677068c6058f8626d6818e2c12fd3.js": { + "filename": "precache-manifest.cd4677068c6058f8626d6818e2c12fd3.js", + "contenttype": "text/javascript", + "offset": 41463, + "len": 4721 + }, + "service-worker.js": { + "filename": "service-worker.js", + "contenttype": "text/javascript", + "offset": 46184, + "len": 1185 + }, + "static/css/0.07de6c03.chunk.css": { + "filename": "static/css/0.07de6c03.chunk.css", + "contenttype": "text/css", + "offset": 15537249, + "len": 285 + }, + "static/css/0.07de6c03.chunk.css.map": { + "filename": "static/css/0.07de6c03.chunk.css.map", + "contenttype": "application/octet-stream", + "offset": 15537818, + "len": 568 + }, + "static/css/5.d75e0ccb.chunk.css": { + "filename": "static/css/5.d75e0ccb.chunk.css", + "contenttype": "text/css", + "offset": 15537534, + "len": 284 + }, + "static/css/5.d75e0ccb.chunk.css.map": { + "filename": "static/css/5.d75e0ccb.chunk.css.map", + "contenttype": "application/octet-stream", + "offset": 15536511, + "len": 738 + }, + "static/js/0.58b0f69f.chunk.js": { + "filename": "static/js/0.58b0f69f.chunk.js", + "contenttype": "text/javascript", + "offset": 7300150, + "len": 30029 + }, + "static/js/0.58b0f69f.chunk.js.map": { + "filename": "static/js/0.58b0f69f.chunk.js.map", + "contenttype": "application/octet-stream", + "offset": 12111459, + "len": 81144 + }, + "static/js/1.19c370e0.chunk.js": { + "filename": "static/js/1.19c370e0.chunk.js", + "contenttype": "text/javascript", + "offset": 15495781, + "len": 40203 + }, + "static/js/1.19c370e0.chunk.js.map": { + "filename": "static/js/1.19c370e0.chunk.js.map", + "contenttype": "application/octet-stream", + "offset": 7330179, + "len": 104594 + }, + "static/js/10.8ea29dcd.chunk.js": { + "filename": "static/js/10.8ea29dcd.chunk.js", + "contenttype": "text/javascript", + "offset": 15483299, + "len": 12345 + }, + "static/js/10.8ea29dcd.chunk.js.map": { + "filename": "static/js/10.8ea29dcd.chunk.js.map", + "contenttype": "application/octet-stream", + "offset": 14524416, + "len": 30393 + }, + "static/js/11.764b8915.chunk.js": { + "filename": "static/js/11.764b8915.chunk.js", + "contenttype": "text/javascript", + "offset": 12208196, + "len": 7103 + }, + "static/js/11.764b8915.chunk.js.map": { + "filename": "static/js/11.764b8915.chunk.js.map", + "contenttype": "application/octet-stream", + "offset": 12192603, + "len": 15593 + }, + "static/js/12.88d4fbe5.chunk.js": { + "filename": "static/js/12.88d4fbe5.chunk.js", + "contenttype": "text/javascript", + "offset": 12055261, + "len": 16721 + }, + "static/js/12.88d4fbe5.chunk.js.map": { + "filename": "static/js/12.88d4fbe5.chunk.js.map", + "contenttype": "application/octet-stream", + "offset": 14460215, + "len": 46695 + }, + "static/js/13.ea207f69.chunk.js": { + "filename": "static/js/13.ea207f69.chunk.js", + "contenttype": "text/javascript", + "offset": 7168280, + "len": 347 + }, + "static/js/13.ea207f69.chunk.js.map": { + "filename": "static/js/13.ea207f69.chunk.js.map", + "contenttype": "application/octet-stream", + "offset": 6928538, + "len": 563 + }, + "static/js/14.d8bc0d4c.chunk.js": { + "filename": "static/js/14.d8bc0d4c.chunk.js", + "contenttype": "text/javascript", + "offset": 12870711, + "len": 336 + }, + "static/js/14.d8bc0d4c.chunk.js.map": { + "filename": "static/js/14.d8bc0d4c.chunk.js.map", + "contenttype": "application/octet-stream", + "offset": 15535984, + "len": 527 + }, + "static/js/15.e6215497.chunk.js": { + "filename": "static/js/15.e6215497.chunk.js", + "contenttype": "text/javascript", + "offset": 15495644, + "len": 137 + }, + "static/js/15.e6215497.chunk.js.map": { + "filename": "static/js/15.e6215497.chunk.js.map", + "contenttype": "application/octet-stream", + "offset": 6928431, + "len": 107 + }, + "static/js/2.f6da9598.chunk.js": { + "filename": "static/js/2.f6da9598.chunk.js", + "contenttype": "text/javascript", + "offset": 14506910, + "len": 17506 + }, + "static/js/2.f6da9598.chunk.js.map": { + "filename": "static/js/2.f6da9598.chunk.js.map", + "contenttype": "application/octet-stream", + "offset": 12071982, + "len": 39477 + }, + "static/js/5.5cc0868a.chunk.js": { + "filename": "static/js/5.5cc0868a.chunk.js", + "contenttype": "text/javascript", + "offset": 10199338, + "len": 1842002 + }, + "static/js/5.5cc0868a.chunk.js.LICENSE": { + "filename": "static/js/5.5cc0868a.chunk.js.LICENSE", + "contenttype": "application/octet-stream", + "offset": 14554809, + "len": 3119 + }, + "static/js/5.5cc0868a.chunk.js.map": { + "filename": "static/js/5.5cc0868a.chunk.js.map", + "contenttype": "application/octet-stream", + "offset": 289328, + "len": 6632626 + }, + "static/js/6.b7681521.chunk.js": { + "filename": "static/js/6.b7681521.chunk.js", + "contenttype": "text/javascript", + "offset": 14237363, + "len": 222852 + }, + "static/js/6.b7681521.chunk.js.map": { + "filename": "static/js/6.b7681521.chunk.js.map", + "contenttype": "application/octet-stream", + "offset": 12215299, + "len": 655412 + }, + "static/js/7.0614dbc4.chunk.js": { + "filename": "static/js/7.0614dbc4.chunk.js", + "contenttype": "text/javascript", + "offset": 6921954, + "len": 6477 + }, + "static/js/7.0614dbc4.chunk.js.map": { + "filename": "static/js/7.0614dbc4.chunk.js.map", + "contenttype": "application/octet-stream", + "offset": 12041340, + "len": 13921 + }, + "static/js/8.7975098c.chunk.js": { + "filename": "static/js/8.7975098c.chunk.js", + "contenttype": "text/javascript", + "offset": 13796515, + "len": 420712 + }, + "static/js/8.7975098c.chunk.js.LICENSE": { + "filename": "static/js/8.7975098c.chunk.js.LICENSE", + "contenttype": "application/octet-stream", + "offset": 13796191, + "len": 324 + }, + "static/js/8.7975098c.chunk.js.map": { + "filename": "static/js/8.7975098c.chunk.js.map", + "contenttype": "application/octet-stream", + "offset": 12871047, + "len": 925144 + }, + "static/js/9.cc860b76.chunk.js": { + "filename": "static/js/9.cc860b76.chunk.js", + "contenttype": "text/javascript", + "offset": 14557928, + "len": 920812 + }, + "static/js/9.cc860b76.chunk.js.LICENSE": { + "filename": "static/js/9.cc860b76.chunk.js.LICENSE", + "contenttype": "application/octet-stream", + "offset": 15478740, + "len": 4559 + }, + "static/js/9.cc860b76.chunk.js.map": { + "filename": "static/js/9.cc860b76.chunk.js.map", + "contenttype": "application/octet-stream", + "offset": 7434773, + "len": 2764565 + }, + "static/js/main.a7822f79.chunk.js": { + "filename": "static/js/main.a7822f79.chunk.js", + "contenttype": "text/javascript", + "offset": 7168627, + "len": 131523 + }, + "static/js/main.a7822f79.chunk.js.map": { + "filename": "static/js/main.a7822f79.chunk.js.map", + "contenttype": "application/octet-stream", + "offset": 6929101, + "len": 239179 + }, + "static/js/runtime-main.68d129c6.js": { + "filename": "static/js/runtime-main.68d129c6.js", + "contenttype": "text/javascript", + "offset": 14217227, + "len": 3546 + }, + "static/js/runtime-main.68d129c6.js.map": { + "filename": "static/js/runtime-main.68d129c6.js.map", + "contenttype": "application/octet-stream", + "offset": 14220773, + "len": 16590 + }, + "static/media/arrow-down-blue.cd061363.svg": { + "filename": "static/media/arrow-down-blue.cd061363.svg", + "contenttype": "image/svg+xml", + "offset": 219284, + "len": 326 + }, + "static/media/arrow-down-grey.c0dedd2f.svg": { + "filename": "static/media/arrow-down-grey.c0dedd2f.svg", + "contenttype": "image/svg+xml", + "offset": 196726, + "len": 326 + }, + "static/media/arrow-right-white.337ad716.png": { + "filename": "static/media/arrow-right-white.337ad716.png", + "contenttype": "image/png", + "offset": 197052, + "len": 12999 + }, + "static/media/arrow-right.d285b6cf.svg": { + "filename": "static/media/arrow-right.d285b6cf.svg", + "contenttype": "image/svg+xml", + "offset": 289065, + "len": 263 + }, + "static/media/circle-grey.ed2a1dad.svg": { + "filename": "static/media/circle-grey.ed2a1dad.svg", + "contenttype": "image/svg+xml", + "offset": 210213, + "len": 321 + }, + "static/media/circle.2d975615.svg": { + "filename": "static/media/circle.2d975615.svg", + "contenttype": "image/svg+xml", + "offset": 210534, + "len": 321 + }, + "static/media/coinbaseWalletIcon.62578f59.svg": { + "filename": "static/media/coinbaseWalletIcon.62578f59.svg", + "contenttype": "image/svg+xml", + "offset": 220450, + "len": 53626 + }, + "static/media/dropdown-blue.b20914ec.svg": { + "filename": "static/media/dropdown-blue.b20914ec.svg", + "contenttype": "image/svg+xml", + "offset": 47369, + "len": 164 + }, + "static/media/dropdown.7d32d2fa.svg": { + "filename": "static/media/dropdown.7d32d2fa.svg", + "contenttype": "image/svg+xml", + "offset": 287941, + "len": 164 + }, + "static/media/dropup-blue.b96d70e1.svg": { + "filename": "static/media/dropup-blue.b96d70e1.svg", + "contenttype": "image/svg+xml", + "offset": 210051, + "len": 162 + }, + "static/media/ethereum-logo.802c6eac.svg": { + "filename": "static/media/ethereum-logo.802c6eac.svg", + "contenttype": "image/svg+xml", + "offset": 219610, + "len": 840 + }, + "static/media/magnifying-glass.67440097.svg": { + "filename": "static/media/magnifying-glass.67440097.svg", + "contenttype": "image/svg+xml", + "offset": 210855, + "len": 8429 + }, + "static/media/metamask.023762b6.png": { + "filename": "static/media/metamask.023762b6.png", + "contenttype": "image/png", + "offset": 61600, + "len": 114217 + }, + "static/media/plus-blue.e8021e51.svg": { + "filename": "static/media/plus-blue.e8021e51.svg", + "contenttype": "image/svg+xml", + "offset": 196237, + "len": 190 + }, + "static/media/plus-grey.d8e0be7d.svg": { + "filename": "static/media/plus-grey.d8e0be7d.svg", + "contenttype": "image/svg+xml", + "offset": 288875, + "len": 190 + }, + "static/media/portisIcon.b234b2bf.png": { + "filename": "static/media/portisIcon.b234b2bf.png", + "contenttype": "image/png", + "offset": 274076, + "len": 13865 + }, + "static/media/question-mark.1ae4d9f4.svg": { + "filename": "static/media/question-mark.1ae4d9f4.svg", + "contenttype": "image/svg+xml", + "offset": 175817, + "len": 818 + }, + "static/media/question.cc0a2451.svg": { + "filename": "static/media/question.cc0a2451.svg", + "contenttype": "image/svg+xml", + "offset": 288105, + "len": 770 + }, + "static/media/spinner.be00fc4a.svg": { + "filename": "static/media/spinner.be00fc4a.svg", + "contenttype": "image/svg+xml", + "offset": 47533, + "len": 694 + }, + "static/media/trustWallet.edcc1ab5.png": { + "filename": "static/media/trustWallet.edcc1ab5.png", + "contenttype": "image/png", + "offset": 176635, + "len": 19602 + }, + "static/media/walletConnectIcon.8215855c.svg": { + "filename": "static/media/walletConnectIcon.8215855c.svg", + "contenttype": "image/svg+xml", + "offset": 48227, + "len": 13373 + }, + "static/media/x.5b8e2186.svg": { + "filename": "static/media/x.5b8e2186.svg", + "contenttype": "image/svg+xml", + "offset": 196427, + "len": 299 + } + } + }, + "headers": { + "skynet-skylink": "EADWpKD0myqH2tZa6xtKebg6kNnwYnI94fl4R8UKgNrmOA", + "content-disposition": "inline; filename=\"index.html\"", + "content-type": "text/html" + } + } + }, + { + "name": "Develop Momentum Index File", + "data": { + "skylink": "EAA1fG_ip4C1Vi1Ijvsr1oyr8jpH0Bo9HXya0T3kw-elGw/", + "bodyHash": "08e96877dd6c99c3e1d98105f2fd9df377b53d65", + "headers": { + "skynet-skylink": "EAA1fG_ip4C1Vi1Ijvsr1oyr8jpH0Bo9HXya0T3kw-elGw", + "content-disposition": "inline; filename=\"index.html\"", + "content-type": "text/html" + } + } + }, + { + "name": "Develop Momentum Index File - no trailing slash", + "data": { + "skylink": "EAA1fG_ip4C1Vi1Ijvsr1oyr8jpH0Bo9HXya0T3kw-elGw", + "bodyHash": "08e96877dd6c99c3e1d98105f2fd9df377b53d65", + "metadata": { + "filename": "output", + "subfiles": { + ".well-known/brave-rewards-verification.txt": { + "filename": ".well-known/brave-rewards-verification.txt", + "contenttype": "text/plain", + "len": 154 + }, + "404.html": { "filename": "404.html", "contenttype": "text/html", "offset": 154, "len": 5482 }, + "assets/bootstrap/bootstrap-grid.css": { + "filename": "assets/bootstrap/bootstrap-grid.css", + "contenttype": "text/css", + "offset": 5636, + "len": 49901 + }, + "assets/bootstrap/bootstrap-reboot.css": { + "filename": "assets/bootstrap/bootstrap-reboot.css", + "contenttype": "text/css", + "offset": 55537, + "len": 4187 + }, + "assets/bootstrap/bootstrap.css": { + "filename": "assets/bootstrap/bootstrap.css", + "contenttype": "text/css", + "offset": 59724, + "len": 172594 + }, + "assets/css/styles.css": { + "filename": "assets/css/styles.css", + "contenttype": "text/css", + "offset": 232318, + "len": 4887 + }, + "assets/fonts/dm-serif-display-v4-latin-regular.woff": { + "filename": "assets/fonts/dm-serif-display-v4-latin-regular.woff", + "contenttype": "application/font-woff", + "offset": 237205, + "len": 29916 + }, + "assets/fonts/dm-serif-display-v4-latin-regular.woff2": { + "filename": "assets/fonts/dm-serif-display-v4-latin-regular.woff2", + "contenttype": "application/octet-stream", + "offset": 267121, + "len": 24980 + }, + "assets/fonts/open-sans-v16-latin-regular.woff": { + "filename": "assets/fonts/open-sans-v16-latin-regular.woff", + "contenttype": "application/font-woff", + "offset": 292101, + "len": 18100 + }, + "assets/fonts/open-sans-v16-latin-regular.woff2": { + "filename": "assets/fonts/open-sans-v16-latin-regular.woff2", + "contenttype": "application/octet-stream", + "offset": 310201, + "len": 14380 + }, + "assets/fonts/questrial-v9-latin-regular.woff": { + "filename": "assets/fonts/questrial-v9-latin-regular.woff", + "contenttype": "application/font-woff", + "offset": 324581, + "len": 23048 + }, + "assets/fonts/questrial-v9-latin-regular.woff2": { + "filename": "assets/fonts/questrial-v9-latin-regular.woff2", + "contenttype": "application/octet-stream", + "offset": 347629, + "len": 13776 + }, + "assets/images/blog/2a40df99-1847-4726-9c5b-af4779eeb667-w1920-h1440.jpg": { + "filename": "assets/images/blog/2a40df99-1847-4726-9c5b-af4779eeb667-w1920-h1440.jpg", + "contenttype": "image/jpeg", + "offset": 361405, + "len": 79551 + }, + "assets/images/blog/2a40df99-1847-4726-9c5b-af4779eeb667-w960-h720.jpg": { + "filename": "assets/images/blog/2a40df99-1847-4726-9c5b-af4779eeb667-w960-h720.jpg", + "contenttype": "image/jpeg", + "offset": 440956, + "len": 31700 + }, + "assets/images/blog/2a40df99-1847-4726-9c5b-af4779eeb667.jpg": { + "filename": "assets/images/blog/2a40df99-1847-4726-9c5b-af4779eeb667.jpg", + "contenttype": "image/jpeg", + "offset": 472656, + "len": 69094 + }, + "assets/images/blog/512e4dd1-6b3d-41aa-80a1-b96c3370b3c3-w1920-h1440.jpg": { + "filename": "assets/images/blog/512e4dd1-6b3d-41aa-80a1-b96c3370b3c3-w1920-h1440.jpg", + "contenttype": "image/jpeg", + "offset": 541750, + "len": 219602 + }, + "assets/images/blog/512e4dd1-6b3d-41aa-80a1-b96c3370b3c3-w960-h720.jpg": { + "filename": "assets/images/blog/512e4dd1-6b3d-41aa-80a1-b96c3370b3c3-w960-h720.jpg", + "contenttype": "image/jpeg", + "offset": 761352, + "len": 67741 + }, + "assets/images/blog/512e4dd1-6b3d-41aa-80a1-b96c3370b3c3.jpg": { + "filename": "assets/images/blog/512e4dd1-6b3d-41aa-80a1-b96c3370b3c3.jpg", + "contenttype": "image/jpeg", + "offset": 829093, + "len": 226910 + }, + "assets/images/blog/823a7764-af7c-4687-a42e-bd70768068ab-w1920-h1440.jpg": { + "filename": "assets/images/blog/823a7764-af7c-4687-a42e-bd70768068ab-w1920-h1440.jpg", + "contenttype": "image/jpeg", + "offset": 1056003, + "len": 258292 + }, + "assets/images/blog/823a7764-af7c-4687-a42e-bd70768068ab-w960-h720.jpg": { + "filename": "assets/images/blog/823a7764-af7c-4687-a42e-bd70768068ab-w960-h720.jpg", + "contenttype": "image/jpeg", + "offset": 1314295, + "len": 93250 + }, + "assets/images/blog/823a7764-af7c-4687-a42e-bd70768068ab.jpg": { + "filename": "assets/images/blog/823a7764-af7c-4687-a42e-bd70768068ab.jpg", + "contenttype": "image/jpeg", + "offset": 1407545, + "len": 236722 + }, + "assets/images/blog/9aeea0d6-737c-4be8-8b63-5ec38cbf394b-w1920-h1440.jpg": { + "filename": "assets/images/blog/9aeea0d6-737c-4be8-8b63-5ec38cbf394b-w1920-h1440.jpg", + "contenttype": "image/jpeg", + "offset": 1644267, + "len": 285727 + }, + "assets/images/blog/9aeea0d6-737c-4be8-8b63-5ec38cbf394b-w960-h720.jpg": { + "filename": "assets/images/blog/9aeea0d6-737c-4be8-8b63-5ec38cbf394b-w960-h720.jpg", + "contenttype": "image/jpeg", + "offset": 1929994, + "len": 115524 + }, + "assets/images/blog/9aeea0d6-737c-4be8-8b63-5ec38cbf394b.jpg": { + "filename": "assets/images/blog/9aeea0d6-737c-4be8-8b63-5ec38cbf394b.jpg", + "contenttype": "image/jpeg", + "offset": 2045518, + "len": 338905 + }, + "assets/images/blog/a1ee6dcf-55ef-43cd-ae05-682d2e28e932-w1920-h1440.jpg": { + "filename": "assets/images/blog/a1ee6dcf-55ef-43cd-ae05-682d2e28e932-w1920-h1440.jpg", + "contenttype": "image/jpeg", + "offset": 2384423, + "len": 66608 + }, + "assets/images/blog/a1ee6dcf-55ef-43cd-ae05-682d2e28e932-w960-h720.jpg": { + "filename": "assets/images/blog/a1ee6dcf-55ef-43cd-ae05-682d2e28e932-w960-h720.jpg", + "contenttype": "image/jpeg", + "offset": 2451031, + "len": 23239 + }, + "assets/images/blog/a1ee6dcf-55ef-43cd-ae05-682d2e28e932.jpg": { + "filename": "assets/images/blog/a1ee6dcf-55ef-43cd-ae05-682d2e28e932.jpg", + "contenttype": "image/jpeg", + "offset": 2474270, + "len": 82334 + }, + "assets/images/blog/content/17343f27-a62f-4193-a0e5-4190d948eb2e.png": { + "filename": "assets/images/blog/content/17343f27-a62f-4193-a0e5-4190d948eb2e.png", + "contenttype": "image/png", + "offset": 2556604, + "len": 8571 + }, + "assets/images/blog/content/1748cc9c-9ea0-47b8-a110-ad3a114408d1.png": { + "filename": "assets/images/blog/content/1748cc9c-9ea0-47b8-a110-ad3a114408d1.png", + "contenttype": "image/png", + "offset": 2565175, + "len": 19776 + }, + "assets/images/blog/content/27b98c5e-ba57-47e6-9fe7-9b82fb89868b.jpg": { + "filename": "assets/images/blog/content/27b98c5e-ba57-47e6-9fe7-9b82fb89868b.jpg", + "contenttype": "image/jpeg", + "offset": 2584951, + "len": 68054 + }, + "assets/images/blog/content/39374de9-f24a-46f6-9955-982687607c6d.png": { + "filename": "assets/images/blog/content/39374de9-f24a-46f6-9955-982687607c6d.png", + "contenttype": "image/png", + "offset": 2653005, + "len": 30305 + }, + "assets/images/blog/content/5c660f5c-04fb-46cd-9846-edccb9a7b778.jpg": { + "filename": "assets/images/blog/content/5c660f5c-04fb-46cd-9846-edccb9a7b778.jpg", + "contenttype": "image/jpeg", + "offset": 2683310, + "len": 10409 + }, + "assets/images/blog/content/5cb6fb87-75d0-4aa4-99c7-b7815ca7ea70.png": { + "filename": "assets/images/blog/content/5cb6fb87-75d0-4aa4-99c7-b7815ca7ea70.png", + "contenttype": "image/png", + "offset": 2693719, + "len": 123977 + }, + "assets/images/blog/content/765827f6-192b-48c9-b3e1-cb7b33e3b881.png": { + "filename": "assets/images/blog/content/765827f6-192b-48c9-b3e1-cb7b33e3b881.png", + "contenttype": "image/png", + "offset": 2817696, + "len": 110297 + }, + "assets/images/blog/content/7b39a2f8-8060-43e7-a439-43f799d3e069.jpg": { + "filename": "assets/images/blog/content/7b39a2f8-8060-43e7-a439-43f799d3e069.jpg", + "contenttype": "image/jpeg", + "offset": 2927993, + "len": 24372 + }, + "assets/images/blog/content/8af4faff-e011-4e31-ba28-5023f65d1003.png": { + "filename": "assets/images/blog/content/8af4faff-e011-4e31-ba28-5023f65d1003.png", + "contenttype": "image/png", + "offset": 2952365, + "len": 106400 + }, + "assets/images/blog/content/ae29cd58-f28f-4a0e-bffb-a7e4e1235797.png": { + "filename": "assets/images/blog/content/ae29cd58-f28f-4a0e-bffb-a7e4e1235797.png", + "contenttype": "image/png", + "offset": 3058765, + "len": 33357 + }, + "assets/images/blog/content/b3be6c1c-725a-4af2-a85f-e47e09bbceef.png": { + "filename": "assets/images/blog/content/b3be6c1c-725a-4af2-a85f-e47e09bbceef.png", + "contenttype": "image/png", + "offset": 3092122, + "len": 37074 + }, + "assets/images/blog/content/b4e772a3-effb-4a5d-82d9-db9596ccfe51.png": { + "filename": "assets/images/blog/content/b4e772a3-effb-4a5d-82d9-db9596ccfe51.png", + "contenttype": "image/png", + "offset": 3129196, + "len": 79662 + }, + "assets/images/blog/content/d2731109-b50f-4c1f-b4f9-7ab8cac196da.png": { + "filename": "assets/images/blog/content/d2731109-b50f-4c1f-b4f9-7ab8cac196da.png", + "contenttype": "image/png", + "offset": 3208858, + "len": 104535 + }, + "assets/images/blog/content/fed0e592-d063-497b-9a3b-2bfc29b04d1a.jpg": { + "filename": "assets/images/blog/content/fed0e592-d063-497b-9a3b-2bfc29b04d1a.jpg", + "contenttype": "image/jpeg", + "offset": 3313393, + "len": 9535 + }, + "assets/images/blog/e4956336-3662-46ae-bea2-7fd3059919c3-w1920-h1440.jpg": { + "filename": "assets/images/blog/e4956336-3662-46ae-bea2-7fd3059919c3-w1920-h1440.jpg", + "contenttype": "image/jpeg", + "offset": 3322928, + "len": 402770 + }, + "assets/images/blog/e4956336-3662-46ae-bea2-7fd3059919c3-w960-h720.jpg": { + "filename": "assets/images/blog/e4956336-3662-46ae-bea2-7fd3059919c3-w960-h720.jpg", + "contenttype": "image/jpeg", + "offset": 3725698, + "len": 143539 + }, + "assets/images/blog/e4956336-3662-46ae-bea2-7fd3059919c3.jpg": { + "filename": "assets/images/blog/e4956336-3662-46ae-bea2-7fd3059919c3.jpg", + "contenttype": "image/jpeg", + "offset": 3869237, + "len": 375170 + }, + "assets/images/logo.svg": { + "filename": "assets/images/logo.svg", + "contenttype": "image/svg+xml", + "offset": 4244407, + "len": 2183 + }, + "assets/js/themes.js": { + "filename": "assets/js/themes.js", + "contenttype": "text/javascript", + "offset": 4246590, + "len": 779 + }, + "blog/building_a_web_farm_with_docker_and_raspberry_pi.html": { + "filename": "blog/building_a_web_farm_with_docker_and_raspberry_pi.html", + "contenttype": "text/html", + "offset": 4247369, + "len": 23111 + }, + "blog/continuously_deploy_a_static_website_with_azure_pipelines.html": { + "filename": "blog/continuously_deploy_a_static_website_with_azure_pipelines.html", + "contenttype": "text/html", + "offset": 4270480, + "len": 24738 + }, + "blog/decentralise_your_website_as_much_as_possible.html": { + "filename": "blog/decentralise_your_website_as_much_as_possible.html", + "contenttype": "text/html", + "offset": 4295218, + "len": 14825 + }, + "blog/developing_smart_contracts_for_business.html": { + "filename": "blog/developing_smart_contracts_for_business.html", + "contenttype": "text/html", + "offset": 4310043, + "len": 25783 + }, + "blog/getting_to_grips_with_jwt_in_asp_net_core.html": { + "filename": "blog/getting_to_grips_with_jwt_in_asp_net_core.html", + "contenttype": "text/html", + "offset": 4335826, + "len": 20915 + }, + "blog/index.html": { + "filename": "blog/index.html", + "contenttype": "text/html", + "offset": 4356741, + "len": 7345 + }, + "blog/setting_up_an_asp_net_core_web_farm.html": { + "filename": "blog/setting_up_an_asp_net_core_web_farm.html", + "contenttype": "text/html", + "offset": 4364086, + "len": 11464 + }, + "favicon-16x16.png": { + "filename": "favicon-16x16.png", + "contenttype": "image/png", + "offset": 4375550, + "len": 430 + }, + "favicon-32x32.png": { + "filename": "favicon-32x32.png", + "contenttype": "image/png", + "offset": 4375980, + "len": 540 + }, + "favicon.ico": { "filename": "favicon.ico", "contenttype": "image/x-icon", "offset": 4376520, "len": 15086 }, + "feed.atom": { + "filename": "feed.atom", + "contenttype": "application/octet-stream", + "offset": 4391606, + "len": 95092 + }, + "index.html": { "filename": "index.html", "contenttype": "text/html", "offset": 4486698, "len": 4981 } + } + }, + "headers": { + "skynet-skylink": "EAA1fG_ip4C1Vi1Ijvsr1oyr8jpH0Bo9HXya0T3kw-elGw", + "content-disposition": "inline; filename=\"index.html\"", + "content-type": "text/html" + } + } + }, + { + "name": "Develop Momentum Index File", + "data": { + "skylink": "EAA1fG_ip4C1Vi1Ijvsr1oyr8jpH0Bo9HXya0T3kw-elGw/index.html", + "bodyHash": "08e96877dd6c99c3e1d98105f2fd9df377b53d65", + "headers": { + "skynet-skylink": "EAA1fG_ip4C1Vi1Ijvsr1oyr8jpH0Bo9HXya0T3kw-elGw", + "content-disposition": "inline; filename=\"index.html\"", + "content-type": "text/html" + } + } + }, + { + "name": "HTML Example", + "data": { + "skylink": "PAL0w4SdA5rFCDGEutgpeQ50Om-YkBabtXVOJAkmedslKw", + "bodyHash": "ecffcfbb74e017698cad30a91a74b9ba0b046413", + "metadata": { "filename": "introduction – Sia API Documentation.html" }, + "headers": { + "skynet-skylink": "PAL0w4SdA5rFCDGEutgpeQ50Om-YkBabtXVOJAkmedslKw", + "content-disposition": "inline; filename=\"introduction – Sia API Documentation.html\"", + "content-type": "text/html; charset=utf-8" + } + } + }, + { + "name": "Image Example", + "data": { + "skylink": "IADUs8d9CQjUO34LmdaaNPK_STuZo24rpKVfYW3wPPM2uQ", + "bodyHash": "e318667a9d53a45a9d010ac4e0d120ad064279ac", + "metadata": { "filename": "sia-lm.png" }, + "headers": { + "skynet-skylink": "IADUs8d9CQjUO34LmdaaNPK_STuZo24rpKVfYW3wPPM2uQ", + "content-disposition": "inline; filename=\"sia-lm.png\"", + "content-type": "image/png" + } + } + }, + { + "name": "JSON Example", + "data": { + "skylink": "AAC0uO43g64ULpyrW0zO3bjEknSFbAhm8c-RFP21EQlmSQ", + "bodyHash": "b514603ce8acd937197712700e21259f18a857d6", + "metadata": { "filename": "consensus.json" }, + "headers": { + "skynet-skylink": "AAC0uO43g64ULpyrW0zO3bjEknSFbAhm8c-RFP21EQlmSQ", + "content-disposition": "inline; filename=\"consensus.json\"", + "content-type": "application/json" + } + } + }, + { + "name": "PDF Example", + "data": { + "skylink": "XABvi7JtJbQSMAcDwnUnmp2FKDPjg8_tTTFP4BwMSxVdEg", + "bodyHash": "7e079f7afc9e5bc0c1be04543e22ac552a14a8da", + "metadata": { "filename": "sia.pdf" }, + "headers": { + "skynet-skylink": "XABvi7JtJbQSMAcDwnUnmp2FKDPjg8_tTTFP4BwMSxVdEg", + "content-disposition": "inline; filename=\"sia.pdf\"", + "content-type": "application/pdf" + } + } + }, + { + "name": "SkyBay", + "data": { + "skylink": "EABkMjXzxJRpPz0eO0Or5fy2eo-rz3prdigGwRlyNd9mwA", + "bodyHash": "dfc0b1d3d1113254d7545d19f6118855ed9c778b", + "metadata": { + "filename": "skybay.html", + "subfiles": { "skybay.html": { "filename": "skybay.html", "contenttype": "text/html", "len": 11655 } } + }, + "headers": { + "skynet-skylink": "EABkMjXzxJRpPz0eO0Or5fy2eo-rz3prdigGwRlyNd9mwA", + "content-disposition": "inline; filename=\"skybay.html\"", + "content-type": "text/html" + } + } + }, + { + "name": "SkyBay Redirect", + "data": { + "skylink": "EABkMjXzxJRpPz0eO0Or5fy2eo-rz3prdigGwRlyNd9mwA", + "bodyHash": "dfc0b1d3d1113254d7545d19f6118855ed9c778b", + "metadata": { + "filename": "skybay.html", + "subfiles": { "skybay.html": { "filename": "skybay.html", "contenttype": "text/html", "len": 11655 } } + }, + "headers": { + "skynet-skylink": "EABkMjXzxJRpPz0eO0Or5fy2eo-rz3prdigGwRlyNd9mwA", + "content-disposition": "inline; filename=\"skybay.html\"", + "content-type": "text/html" + } + } + }, + { + "name": "SkyBin", + "data": { + "skylink": "CAAVU14pB9GRIqCrejD7rlS27HltGGiiCLICzmrBV0wVtA", + "bodyHash": "858ff733c4cb06a80060b8a62cf303fd5a051651", + "metadata": { "filename": "skybin.html" }, + "headers": { + "skynet-skylink": "CAAVU14pB9GRIqCrejD7rlS27HltGGiiCLICzmrBV0wVtA", + "content-disposition": "inline; filename=\"skybin.html\"", + "content-type": "text/html; charset=utf-8" + } + } + }, + { + "name": "SkyBin Redirect", + "data": { + "skylink": "CAAVU14pB9GRIqCrejD7rlS27HltGGiiCLICzmrBV0wVtA", + "bodyHash": "858ff733c4cb06a80060b8a62cf303fd5a051651", + "metadata": { "filename": "skybin.html" }, + "headers": { + "skynet-skylink": "CAAVU14pB9GRIqCrejD7rlS27HltGGiiCLICzmrBV0wVtA", + "content-disposition": "inline; filename=\"skybin.html\"", + "content-type": "text/html; charset=utf-8" + } + } + }, + { + "name": "SkyGallery", + "data": { + "skylink": "AADW6GsQcetwDBaDYnGCSTbYjSKY743NtY1A5VRx5sj3Dg", + "bodyHash": "cb5905023a29bdd60d58817f26503345c9a1bd09", + "metadata": { + "filename": "skygallery-v0.1.1-76c4c115fcb526716b2564568850f433", + "subfiles": { + "css/app.84a130ed.css": { "filename": "css/app.84a130ed.css", "contenttype": "text/css", "len": 698 }, + "css/chunk-5ce44031.d4e78528.css": { + "filename": "css/chunk-5ce44031.d4e78528.css", + "contenttype": "text/css", + "offset": 698, + "len": 45 + }, + "css/chunk-6bef839b.593aa2be.css": { + "filename": "css/chunk-6bef839b.593aa2be.css", + "contenttype": "text/css", + "offset": 743, + "len": 5013 + }, + "css/chunk-8ed50a48.8ba8c09d.css": { + "filename": "css/chunk-8ed50a48.8ba8c09d.css", + "contenttype": "text/css", + "offset": 5756, + "len": 7204 + }, + "css/chunk-eb4c1efc.2a7e25ed.css": { + "filename": "css/chunk-eb4c1efc.2a7e25ed.css", + "contenttype": "text/css", + "offset": 12960, + "len": 45 + }, + "css/chunk-vendors.b4f58487.css": { + "filename": "css/chunk-vendors.b4f58487.css", + "contenttype": "text/css", + "offset": 13005, + "len": 382063 + }, + "img/skygallery_logo.2336197e.svg": { + "filename": "img/skygallery_logo.2336197e.svg", + "contenttype": "image/svg+xml", + "offset": 395068, + "len": 923 + }, + "img/skynet-logo-animated.4d24345c.svg": { + "filename": "img/skynet-logo-animated.4d24345c.svg", + "contenttype": "image/svg+xml", + "offset": 395991, + "len": 2600 + }, + "index.html": { "filename": "index.html", "contenttype": "text/html", "offset": 398591, "len": 2534 }, + "js/app.cff1e0a4.js": { + "filename": "js/app.cff1e0a4.js", + "contenttype": "application/javascript", + "offset": 401125, + "len": 15604 + }, + "js/app.cff1e0a4.js.map": { + "filename": "js/app.cff1e0a4.js.map", + "contenttype": "application/json", + "offset": 416729, + "len": 54424 + }, + "js/chunk-5ce44031.7fb55da9.js": { + "filename": "js/chunk-5ce44031.7fb55da9.js", + "contenttype": "application/javascript", + "offset": 471153, + "len": 3644 + }, + "js/chunk-5ce44031.7fb55da9.js.map": { + "filename": "js/chunk-5ce44031.7fb55da9.js.map", + "contenttype": "application/json", + "offset": 474797, + "len": 13494 + }, + "js/chunk-6bef839b.b543fe7d.js": { + "filename": "js/chunk-6bef839b.b543fe7d.js", + "contenttype": "application/javascript", + "offset": 488291, + "len": 13349 + }, + "js/chunk-6bef839b.b543fe7d.js.map": { + "filename": "js/chunk-6bef839b.b543fe7d.js.map", + "contenttype": "application/json", + "offset": 501640, + "len": 46690 + }, + "js/chunk-8ed50a48.35f8ef35.js": { + "filename": "js/chunk-8ed50a48.35f8ef35.js", + "contenttype": "application/javascript", + "offset": 548330, + "len": 130329 + }, + "js/chunk-8ed50a48.35f8ef35.js.map": { + "filename": "js/chunk-8ed50a48.35f8ef35.js.map", + "contenttype": "application/json", + "offset": 678659, + "len": 507145 + }, + "js/chunk-eb4c1efc.57b6e01c.js": { + "filename": "js/chunk-eb4c1efc.57b6e01c.js", + "contenttype": "application/javascript", + "offset": 1185804, + "len": 4407 + }, + "js/chunk-eb4c1efc.57b6e01c.js.map": { + "filename": "js/chunk-eb4c1efc.57b6e01c.js.map", + "contenttype": "application/json", + "offset": 1190211, + "len": 15355 + }, + "js/chunk-vendors.1fd55121.js": { + "filename": "js/chunk-vendors.1fd55121.js", + "contenttype": "application/javascript", + "offset": 1205566, + "len": 749829 + }, + "js/chunk-vendors.1fd55121.js.map": { + "filename": "js/chunk-vendors.1fd55121.js.map", + "contenttype": "application/json", + "offset": 1955395, + "len": 2793251 + } + }, + "defaultpath": "/index.html" + }, + "headers": { + "skynet-skylink": "AADW6GsQcetwDBaDYnGCSTbYjSKY743NtY1A5VRx5sj3Dg", + "content-disposition": "inline; filename=\"index.html\"", + "content-type": "text/html" + } + } + }, + { + "name": "SkyGallery Index File", + "data": { + "skylink": "AADW6GsQcetwDBaDYnGCSTbYjSKY743NtY1A5VRx5sj3Dg/index.html", + "bodyHash": "cb5905023a29bdd60d58817f26503345c9a1bd09", + "headers": { + "skynet-skylink": "AADW6GsQcetwDBaDYnGCSTbYjSKY743NtY1A5VRx5sj3Dg", + "content-disposition": "inline; filename=\"index.html\"", + "content-type": "text/html" + } + } + }, + { + "name": "SkyGallery Redirect", + "data": { + "skylink": "AADW6GsQcetwDBaDYnGCSTbYjSKY743NtY1A5VRx5sj3Dg", + "bodyHash": "cb5905023a29bdd60d58817f26503345c9a1bd09", + "metadata": { + "filename": "skygallery-v0.1.1-76c4c115fcb526716b2564568850f433", + "subfiles": { + "css/app.84a130ed.css": { "filename": "css/app.84a130ed.css", "contenttype": "text/css", "len": 698 }, + "css/chunk-5ce44031.d4e78528.css": { + "filename": "css/chunk-5ce44031.d4e78528.css", + "contenttype": "text/css", + "offset": 698, + "len": 45 + }, + "css/chunk-6bef839b.593aa2be.css": { + "filename": "css/chunk-6bef839b.593aa2be.css", + "contenttype": "text/css", + "offset": 743, + "len": 5013 + }, + "css/chunk-8ed50a48.8ba8c09d.css": { + "filename": "css/chunk-8ed50a48.8ba8c09d.css", + "contenttype": "text/css", + "offset": 5756, + "len": 7204 + }, + "css/chunk-eb4c1efc.2a7e25ed.css": { + "filename": "css/chunk-eb4c1efc.2a7e25ed.css", + "contenttype": "text/css", + "offset": 12960, + "len": 45 + }, + "css/chunk-vendors.b4f58487.css": { + "filename": "css/chunk-vendors.b4f58487.css", + "contenttype": "text/css", + "offset": 13005, + "len": 382063 + }, + "img/skygallery_logo.2336197e.svg": { + "filename": "img/skygallery_logo.2336197e.svg", + "contenttype": "image/svg+xml", + "offset": 395068, + "len": 923 + }, + "img/skynet-logo-animated.4d24345c.svg": { + "filename": "img/skynet-logo-animated.4d24345c.svg", + "contenttype": "image/svg+xml", + "offset": 395991, + "len": 2600 + }, + "index.html": { "filename": "index.html", "contenttype": "text/html", "offset": 398591, "len": 2534 }, + "js/app.cff1e0a4.js": { + "filename": "js/app.cff1e0a4.js", + "contenttype": "application/javascript", + "offset": 401125, + "len": 15604 + }, + "js/app.cff1e0a4.js.map": { + "filename": "js/app.cff1e0a4.js.map", + "contenttype": "application/json", + "offset": 416729, + "len": 54424 + }, + "js/chunk-5ce44031.7fb55da9.js": { + "filename": "js/chunk-5ce44031.7fb55da9.js", + "contenttype": "application/javascript", + "offset": 471153, + "len": 3644 + }, + "js/chunk-5ce44031.7fb55da9.js.map": { + "filename": "js/chunk-5ce44031.7fb55da9.js.map", + "contenttype": "application/json", + "offset": 474797, + "len": 13494 + }, + "js/chunk-6bef839b.b543fe7d.js": { + "filename": "js/chunk-6bef839b.b543fe7d.js", + "contenttype": "application/javascript", + "offset": 488291, + "len": 13349 + }, + "js/chunk-6bef839b.b543fe7d.js.map": { + "filename": "js/chunk-6bef839b.b543fe7d.js.map", + "contenttype": "application/json", + "offset": 501640, + "len": 46690 + }, + "js/chunk-8ed50a48.35f8ef35.js": { + "filename": "js/chunk-8ed50a48.35f8ef35.js", + "contenttype": "application/javascript", + "offset": 548330, + "len": 130329 + }, + "js/chunk-8ed50a48.35f8ef35.js.map": { + "filename": "js/chunk-8ed50a48.35f8ef35.js.map", + "contenttype": "application/json", + "offset": 678659, + "len": 507145 + }, + "js/chunk-eb4c1efc.57b6e01c.js": { + "filename": "js/chunk-eb4c1efc.57b6e01c.js", + "contenttype": "application/javascript", + "offset": 1185804, + "len": 4407 + }, + "js/chunk-eb4c1efc.57b6e01c.js.map": { + "filename": "js/chunk-eb4c1efc.57b6e01c.js.map", + "contenttype": "application/json", + "offset": 1190211, + "len": 15355 + }, + "js/chunk-vendors.1fd55121.js": { + "filename": "js/chunk-vendors.1fd55121.js", + "contenttype": "application/javascript", + "offset": 1205566, + "len": 749829 + }, + "js/chunk-vendors.1fd55121.js.map": { + "filename": "js/chunk-vendors.1fd55121.js.map", + "contenttype": "application/json", + "offset": 1955395, + "len": 2793251 + } + }, + "defaultpath": "/index.html" + }, + "headers": { + "skynet-skylink": "AADW6GsQcetwDBaDYnGCSTbYjSKY743NtY1A5VRx5sj3Dg", + "content-disposition": "inline; filename=\"index.html\"", + "content-type": "text/html" + } + } + }, + { + "name": "Unzip The Uncensored Library Map", + "data": { + "skylink": "AAC5glnZyNJ4Ieb4MhnYJGtID6qdMqEjl0or5EvEMt7bWQ", + "bodyHash": "cd0377661eefd656c8b46c497aa03112393ba893", + "metadata": { + "filename": "Unzip_The_Uncensored_Library_Map.zip", + "subfiles": { + "Unzip_The_Uncensored_Library_Map.zip": { + "filename": "Unzip_The_Uncensored_Library_Map.zip", + "contenttype": "application/zip", + "len": 76744822 + } + } + }, + "headers": { + "skynet-skylink": "AAC5glnZyNJ4Ieb4MhnYJGtID6qdMqEjl0or5EvEMt7bWQ", + "content-disposition": "inline; filename=\"Unzip_The_Uncensored_Library_Map.zip\"", + "content-type": "application/zip" + } + } + }, + { + "name": "The Uncensored Library - Press Release", + "config": { "method": "head" }, + "data": { + "skylink": "AABHwuml_EhvyY8Gm7j1E2xGwodUNAJgX0A6-Cd22p9kNA", + "bodyHash": "da39a3ee5e6b4b0d3255bfef95601890afd80709", + "metadata": { + "filename": "press-release-Reporters-Without-Borders-The-Uncensored-Library.zip", + "subfiles": { + "press-release-Reporters-Without-Borders-The-Uncensored-Library.zip": { + "filename": "press-release-Reporters-Without-Borders-The-Uncensored-Library.zip", + "contenttype": "application/zip", + "len": 383501533 + } + } + }, + "headers": { + "skynet-skylink": "AABHwuml_EhvyY8Gm7j1E2xGwodUNAJgX0A6-Cd22p9kNA", + "content-disposition": "inline; filename=\"press-release-Reporters-Without-Borders-The-Uncensored-Library.zip\"", + "content-type": "application/zip" + } + } + }, + { + "name": "The Uncensored Library V2", + "data": { + "skylink": "AAAs-JOsRGWgABYIo7AwTDqSX79-BxQKjDj0wiRGoRPFnw", + "bodyHash": "f2a802c2b7482825613a08853538203a53c96bd1", + "metadata": { + "filename": "The Uncensored Library V2.zip", + "subfiles": { + "The Uncensored Library V2.zip": { + "filename": "The Uncensored Library V2.zip", + "contenttype": "application/zip", + "len": 101262134 + } + } + }, + "headers": { + "skynet-skylink": "AAAs-JOsRGWgABYIo7AwTDqSX79-BxQKjDj0wiRGoRPFnw", + "content-disposition": "inline; filename=\"The Uncensored Library V2.zip\"", + "content-type": "application/zip" + } + } + }, + { + "name": "Bitcoin Whitepaper", + "data": { + "skylink": "3ACpC9Umme41zlWUgMQh1fw0sNwgWwyfDDhRQ9Sppz9hjQ", + "bodyHash": "8de2fdb04edce612738eb51e14ecc426381f8ed8", + "headers": { + "skynet-skylink": "3ACpC9Umme41zlWUgMQh1fw0sNwgWwyfDDhRQ9Sppz9hjQ", + "content-disposition": "inline; filename=\"bitcoin.pdf\"", + "content-type": "application/pdf" + } + } + }, + { + "name": "Uniswap HNS Resolver", + "data": { + "skylink": "hnsres/uniswap-dex/", + "bodyHash": "3634496800c254b93f9dcbca2aeb53e644f706c0" + } + }, + { + "name": "Uniswap HNS Resolver Redirect", + "config": { "followRedirect": false }, + "data": { + "skylink": "hnsres/uniswap-dex", + "bodyHash": "3634496800c254b93f9dcbca2aeb53e644f706c0" + } + }, + { + "name": "File endpoint check", + "data": { + "skylink": "file/XABvi7JtJbQSMAcDwnUnmp2FKDPjg8_tTTFP4BwMSxVdEg", + "bodyHash": "7e079f7afc9e5bc0c1be04543e22ac552a14a8da", + "headers": { + "skynet-skylink": "XABvi7JtJbQSMAcDwnUnmp2FKDPjg8_tTTFP4BwMSxVdEg", + "content-disposition": "attachment; filename=\"sia.pdf\"", + "content-type": "application/pdf" + } + } + }, + { + "name": "skysend.hns", + "data": { + "source": "https://github.com/redsolver/skysend/", + "skylink": "GADlWH3ALR2g1cDUBI6Ti8B22iD7R5dfn_8jLfq-atm5iw", + "bodyHash": "35bc25301501a3b28913ca7a7a06120681365a9c", + "headers": { + "skynet-skylink": "GADlWH3ALR2g1cDUBI6Ti8B22iD7R5dfn_8jLfq-atm5iw", + "content-disposition": "inline; filename=\"index.html\"", + "content-type": "text/html" + } + } + }, + { + "name": "note-to-self.hns", + "data": { + "source": "https://github.com/kwypchlo/note-to-self/", + "skylink": "EAD_w2YcqtpqVgtRwKXPno9VmKfTcVG3E_OIL-Np_Hz_1g", + "bodyHash": "e00c1b7348dd419e96bf3c188185a5fb8d04af53", + "headers": { + "skynet-skylink": "EAD_w2YcqtpqVgtRwKXPno9VmKfTcVG3E_OIL-Np_Hz_1g", + "content-disposition": "inline; filename=\"index.html\"", + "content-type": "text/html" + } + } + }, + { + "name": "uniswap skynet labs fork", + "data": { + "source": "https://github.com/SkynetLabs/uniswap-interface/", + "skylink": "OAAy4_g9EYfuOiUZlz_irkoPgsc_seAjgGozerrT1QvE5A", + "bodyHash": "db2882b7902f24d62e49905b77d536aaf7b7da75", + "headers": { + "skynet-skylink": "OAAy4_g9EYfuOiUZlz_irkoPgsc_seAjgGozerrT1QvE5A", + "content-disposition": "inline; filename=\"index.html\"", + "content-type": "text/html" + } + } + }, + { + "name": "hackerpaste.hns", + "data": { + "source": "https://github.com/harej/hackerpaste/", + "skylink": "_AGZuZCyRn5kZMFHBssWYc20poXyez1XMO6hmPqAVcM1qg", + "bodyHash": "12817ac933b7f64fc63ae24a652132ed11e5b622", + "headers": { + "skynet-skylink": "_AGZuZCyRn5kZMFHBssWYc20poXyez1XMO6hmPqAVcM1qg", + "content-disposition": "inline; filename=\"index.html\"", + "content-type": "text/html" + } + } + }, + { + "name": "tirthahalli.hns", + "data": { + "source": "-", + "skylink": "AAAsdvGalu2Fj9P5zLvZhfwoI0CpXeO_kPMSG_YU1PSIWg", + "bodyHash": "734c49ddde2a49ac6ddbf1c6d90a014ff82e2f87", + "headers": { + "skynet-skylink": "AAAsdvGalu2Fj9P5zLvZhfwoI0CpXeO_kPMSG_YU1PSIWg", + "content-disposition": "inline; filename=\"index.html\"", + "content-type": "text/html" + } + } + }, + { + "name": "sky-deploy.hns", + "data": { + "source": "-", + "skylink": "CABR1ic_lIPaN9JYLG6AiudkW5GShRd-Cr6Wkjur7z29Rw", + "bodyHash": "b2b0498a8a7f6fcfe76c29ae1a1176b4e64cb5ab", + "headers": { + "skynet-skylink": "CABR1ic_lIPaN9JYLG6AiudkW5GShRd-Cr6Wkjur7z29Rw", + "content-disposition": "inline; filename=\"index.html\"", + "content-type": "text/html" + } + } + } +] diff --git a/src/fixtures/skygalleryMetadata.json b/src/fixtures/skygalleryMetadata.json deleted file mode 100644 index 525b8f5..0000000 --- a/src/fixtures/skygalleryMetadata.json +++ /dev/null @@ -1,122 +0,0 @@ -{ - "filename": "skygallery-v0.1.1-76c4c115fcb526716b2564568850f433", - "subfiles": { - "css/app.84a130ed.css": { "filename": "css/app.84a130ed.css", "contenttype": "text/css", "len": 698 }, - "css/chunk-5ce44031.d4e78528.css": { - "filename": "css/chunk-5ce44031.d4e78528.css", - "contenttype": "text/css", - "offset": 698, - "len": 45 - }, - "css/chunk-6bef839b.593aa2be.css": { - "filename": "css/chunk-6bef839b.593aa2be.css", - "contenttype": "text/css", - "offset": 743, - "len": 5013 - }, - "css/chunk-8ed50a48.8ba8c09d.css": { - "filename": "css/chunk-8ed50a48.8ba8c09d.css", - "contenttype": "text/css", - "offset": 5756, - "len": 7204 - }, - "css/chunk-eb4c1efc.2a7e25ed.css": { - "filename": "css/chunk-eb4c1efc.2a7e25ed.css", - "contenttype": "text/css", - "offset": 12960, - "len": 45 - }, - "css/chunk-vendors.b4f58487.css": { - "filename": "css/chunk-vendors.b4f58487.css", - "contenttype": "text/css", - "offset": 13005, - "len": 382063 - }, - "img/skygallery_logo.2336197e.svg": { - "filename": "img/skygallery_logo.2336197e.svg", - "contenttype": "image/svg+xml", - "offset": 395068, - "len": 923 - }, - "img/skynet-logo-animated.4d24345c.svg": { - "filename": "img/skynet-logo-animated.4d24345c.svg", - "contenttype": "image/svg+xml", - "offset": 395991, - "len": 2600 - }, - "index.html": { "filename": "index.html", "contenttype": "text/html", "offset": 398591, "len": 2534 }, - "js/app.cff1e0a4.js": { - "filename": "js/app.cff1e0a4.js", - "contenttype": "application/javascript", - "offset": 401125, - "len": 15604 - }, - "js/app.cff1e0a4.js.map": { - "filename": "js/app.cff1e0a4.js.map", - "contenttype": "application/json", - "offset": 416729, - "len": 54424 - }, - "js/chunk-5ce44031.7fb55da9.js": { - "filename": "js/chunk-5ce44031.7fb55da9.js", - "contenttype": "application/javascript", - "offset": 471153, - "len": 3644 - }, - "js/chunk-5ce44031.7fb55da9.js.map": { - "filename": "js/chunk-5ce44031.7fb55da9.js.map", - "contenttype": "application/json", - "offset": 474797, - "len": 13494 - }, - "js/chunk-6bef839b.b543fe7d.js": { - "filename": "js/chunk-6bef839b.b543fe7d.js", - "contenttype": "application/javascript", - "offset": 488291, - "len": 13349 - }, - "js/chunk-6bef839b.b543fe7d.js.map": { - "filename": "js/chunk-6bef839b.b543fe7d.js.map", - "contenttype": "application/json", - "offset": 501640, - "len": 46690 - }, - "js/chunk-8ed50a48.35f8ef35.js": { - "filename": "js/chunk-8ed50a48.35f8ef35.js", - "contenttype": "application/javascript", - "offset": 548330, - "len": 130329 - }, - "js/chunk-8ed50a48.35f8ef35.js.map": { - "filename": "js/chunk-8ed50a48.35f8ef35.js.map", - "contenttype": "application/json", - "offset": 678659, - "len": 507145 - }, - "js/chunk-eb4c1efc.57b6e01c.js": { - "filename": "js/chunk-eb4c1efc.57b6e01c.js", - "contenttype": "application/javascript", - "offset": 1185804, - "len": 4407 - }, - "js/chunk-eb4c1efc.57b6e01c.js.map": { - "filename": "js/chunk-eb4c1efc.57b6e01c.js.map", - "contenttype": "application/json", - "offset": 1190211, - "len": 15355 - }, - "js/chunk-vendors.1fd55121.js": { - "filename": "js/chunk-vendors.1fd55121.js", - "contenttype": "application/javascript", - "offset": 1205566, - "len": 749829 - }, - "js/chunk-vendors.1fd55121.js.map": { - "filename": "js/chunk-vendors.1fd55121.js.map", - "contenttype": "application/json", - "offset": 1955395, - "len": 2793251 - } - }, - "defaultpath": "/index.html" -} diff --git a/src/fixtures/uniswapMetadata.json b/src/fixtures/uniswapMetadata.json deleted file mode 100644 index 2072887..0000000 --- a/src/fixtures/uniswapMetadata.json +++ /dev/null @@ -1,658 +0,0 @@ -{ - "filename": "build", - "subfiles": { - "451.html": { "filename": "451.html", "contenttype": "text/html", "offset": 20181232, "len": 200 }, - "asset-manifest.json": { - "filename": "asset-manifest.json", - "contenttype": "application/json", - "offset": 485031, - "len": 4561 - }, - "favicon.png": { "filename": "favicon.png", "contenttype": "image/png", "offset": 489592, "len": 7072 }, - "images/192x192_App_Icon.png": { - "filename": "images/192x192_App_Icon.png", - "contenttype": "image/png", - "offset": 434153, - "len": 50878 - }, - "images/512x512_App_Icon.png": { - "filename": "images/512x512_App_Icon.png", - "contenttype": "image/png", - "offset": 47542, - "len": 386611 - }, - "index.html": { "filename": "index.html", "contenttype": "text/html", "len": 3268 }, - "locales/de.json": { - "filename": "locales/de.json", - "contenttype": "application/json", - "offset": 7491, - "len": 4376 - }, - "locales/en.json": { - "filename": "locales/en.json", - "contenttype": "application/json", - "offset": 23709, - "len": 4321 - }, - "locales/es-AR.json": { - "filename": "locales/es-AR.json", - "contenttype": "application/json", - "offset": 16866, - "len": 3624 - }, - "locales/es-US.json": { - "filename": "locales/es-US.json", - "contenttype": "application/json", - "offset": 43912, - "len": 3630 - }, - "locales/it-IT.json": { - "filename": "locales/it-IT.json", - "contenttype": "application/json", - "offset": 3268, - "len": 4223 - }, - "locales/iw.json": { - "filename": "locales/iw.json", - "contenttype": "application/json", - "offset": 28030, - "len": 3929 - }, - "locales/ro.json": { - "filename": "locales/ro.json", - "contenttype": "application/json", - "offset": 31959, - "len": 3794 - }, - "locales/ru.json": { - "filename": "locales/ru.json", - "contenttype": "application/json", - "offset": 11867, - "len": 4999 - }, - "locales/vi.json": { - "filename": "locales/vi.json", - "contenttype": "application/json", - "offset": 39011, - "len": 4901 - }, - "locales/zh-CN.json": { - "filename": "locales/zh-CN.json", - "contenttype": "application/json", - "offset": 20490, - "len": 3219 - }, - "locales/zh-TW.json": { - "filename": "locales/zh-TW.json", - "contenttype": "application/json", - "offset": 35753, - "len": 3258 - }, - "manifest.json": { "filename": "manifest.json", "contenttype": "application/json", "offset": 20190818, "len": 470 }, - "precache-manifest.5ce41899d70d2e0450f591b3e917c2a4.js": { - "filename": "precache-manifest.5ce41899d70d2e0450f591b3e917c2a4.js", - "contenttype": "application/x-javascript", - "offset": 20181432, - "len": 9386 - }, - "service-worker.js": { - "filename": "service-worker.js", - "contenttype": "application/x-javascript", - "offset": 20191288, - "len": 1183 - }, - "static/css/4.f04942fe.chunk.css": { - "filename": "static/css/4.f04942fe.chunk.css", - "contenttype": "text/css", - "offset": 496664, - "len": 5331 - }, - "static/css/4.f04942fe.chunk.css.map": { - "filename": "static/css/4.f04942fe.chunk.css.map", - "contenttype": "application/octet-stream", - "offset": 501995, - "len": 8394 - }, - "static/js/0.1043efff.chunk.js": { - "filename": "static/js/0.1043efff.chunk.js", - "contenttype": "application/x-javascript", - "offset": 3451819, - "len": 226756 - }, - "static/js/0.1043efff.chunk.js.map": { - "filename": "static/js/0.1043efff.chunk.js.map", - "contenttype": "application/octet-stream", - "offset": 8495570, - "len": 811341 - }, - "static/js/1.722d768c.chunk.js": { - "filename": "static/js/1.722d768c.chunk.js", - "contenttype": "application/x-javascript", - "offset": 2503781, - "len": 20289 - }, - "static/js/1.722d768c.chunk.js.map": { - "filename": "static/js/1.722d768c.chunk.js.map", - "contenttype": "application/octet-stream", - "offset": 11896220, - "len": 44729 - }, - "static/js/4.cebcd4f8.chunk.js": { - "filename": "static/js/4.cebcd4f8.chunk.js", - "contenttype": "application/x-javascript", - "offset": 11941212, - "len": 1486762 - }, - "static/js/4.cebcd4f8.chunk.js.LICENSE.txt": { - "filename": "static/js/4.cebcd4f8.chunk.js.LICENSE.txt", - "contenttype": "text/plain", - "offset": 14378677, - "len": 3519 - }, - "static/js/4.cebcd4f8.chunk.js.map": { - "filename": "static/js/4.cebcd4f8.chunk.js.map", - "contenttype": "application/octet-stream", - "offset": 3678575, - "len": 4816995 - }, - "static/js/5.428f04e8.chunk.js": { - "filename": "static/js/5.428f04e8.chunk.js", - "contenttype": "application/x-javascript", - "offset": 1887438, - "len": 616343 - }, - "static/js/5.428f04e8.chunk.js.LICENSE.txt": { - "filename": "static/js/5.428f04e8.chunk.js.LICENSE.txt", - "contenttype": "text/plain", - "offset": 3450983, - "len": 426 - }, - "static/js/5.428f04e8.chunk.js.map": { - "filename": "static/js/5.428f04e8.chunk.js.map", - "contenttype": "application/octet-stream", - "offset": 10046674, - "len": 1553345 - }, - "static/js/6.29fcca22.chunk.js": { - "filename": "static/js/6.29fcca22.chunk.js", - "contenttype": "application/x-javascript", - "offset": 11600019, - "len": 296095 - }, - "static/js/6.29fcca22.chunk.js.map": { - "filename": "static/js/6.29fcca22.chunk.js.map", - "contenttype": "application/octet-stream", - "offset": 13440646, - "len": 938031 - }, - "static/js/7.8d2bc3b4.chunk.js": { - "filename": "static/js/7.8d2bc3b4.chunk.js", - "contenttype": "application/x-javascript", - "offset": 9306911, - "len": 263 - }, - "static/js/7.8d2bc3b4.chunk.js.map": { - "filename": "static/js/7.8d2bc3b4.chunk.js.map", - "contenttype": "application/octet-stream", - "offset": 11896114, - "len": 106 - }, - "static/js/8.3d784f08.chunk.js": { - "filename": "static/js/8.3d784f08.chunk.js", - "contenttype": "application/x-javascript", - "offset": 11940949, - "len": 263 - }, - "static/js/8.3d784f08.chunk.js.map": { - "filename": "static/js/8.3d784f08.chunk.js.map", - "contenttype": "application/octet-stream", - "offset": 3450877, - "len": 106 - }, - "static/js/9.08920d68.chunk.js": { - "filename": "static/js/9.08920d68.chunk.js", - "contenttype": "application/x-javascript", - "offset": 2524070, - "len": 626875 - }, - "static/js/9.08920d68.chunk.js.LICENSE.txt": { - "filename": "static/js/9.08920d68.chunk.js.LICENSE.txt", - "contenttype": "text/plain", - "offset": 3451409, - "len": 410 - }, - "static/js/9.08920d68.chunk.js.map": { - "filename": "static/js/9.08920d68.chunk.js.map", - "contenttype": "application/octet-stream", - "offset": 512852, - "len": 1374586 - }, - "static/js/main.d2a5ca05.chunk.js": { - "filename": "static/js/main.d2a5ca05.chunk.js", - "contenttype": "application/x-javascript", - "offset": 3150945, - "len": 299932 - }, - "static/js/main.d2a5ca05.chunk.js.map": { - "filename": "static/js/main.d2a5ca05.chunk.js.map", - "contenttype": "application/octet-stream", - "offset": 9307174, - "len": 739500 - }, - "static/js/runtime-main.712341b8.js": { - "filename": "static/js/runtime-main.712341b8.js", - "contenttype": "application/x-javascript", - "offset": 510389, - "len": 2463 - }, - "static/js/runtime-main.712341b8.js.map": { - "filename": "static/js/runtime-main.712341b8.js.map", - "contenttype": "application/octet-stream", - "offset": 13427974, - "len": 12672 - }, - "static/media/Inter-Black.09f4068b.woff2": { - "filename": "static/media/Inter-Black.09f4068b.woff2", - "contenttype": "application/octet-stream", - "offset": 16311114, - "len": 104656 - }, - "static/media/Inter-Black.e3735483.woff": { - "filename": "static/media/Inter-Black.e3735483.woff", - "contenttype": "application/octet-stream", - "offset": 16415770, - "len": 139648 - }, - "static/media/Inter-BlackItalic.07e69b53.woff": { - "filename": "static/media/Inter-BlackItalic.07e69b53.woff", - "contenttype": "application/octet-stream", - "offset": 15020483, - "len": 145816 - }, - "static/media/Inter-BlackItalic.daa1ca3c.woff2": { - "filename": "static/media/Inter-BlackItalic.daa1ca3c.woff2", - "contenttype": "application/octet-stream", - "offset": 19675808, - "len": 109900 - }, - "static/media/Inter-Bold.79260e5b.woff": { - "filename": "static/media/Inter-Bold.79260e5b.woff", - "contenttype": "application/octet-stream", - "offset": 15781749, - "len": 143464 - }, - "static/media/Inter-Bold.aed27700.woff2": { - "filename": "static/media/Inter-Bold.aed27700.woff2", - "contenttype": "application/octet-stream", - "offset": 16555739, - "len": 107144 - }, - "static/media/Inter-BoldItalic.8ef77a03.woff2": { - "filename": "static/media/Inter-BoldItalic.8ef77a03.woff2", - "contenttype": "application/octet-stream", - "offset": 17104768, - "len": 112276 - }, - "static/media/Inter-BoldItalic.e0879d64.woff": { - "filename": "static/media/Inter-BoldItalic.e0879d64.woff", - "contenttype": "application/octet-stream", - "offset": 15483981, - "len": 149360 - }, - "static/media/Inter-ExtraBold.38bc51bc.woff": { - "filename": "static/media/Inter-ExtraBold.38bc51bc.woff", - "contenttype": "application/octet-stream", - "offset": 19419594, - "len": 143256 - }, - "static/media/Inter-ExtraBold.92d16aee.woff2": { - "filename": "static/media/Inter-ExtraBold.92d16aee.woff2", - "contenttype": "application/octet-stream", - "offset": 19312290, - "len": 107304 - }, - "static/media/Inter-ExtraBoldItalic.0e4b21eb.woff": { - "filename": "static/media/Inter-ExtraBoldItalic.0e4b21eb.woff", - "contenttype": "application/octet-stream", - "offset": 16671312, - "len": 149116 - }, - "static/media/Inter-ExtraBoldItalic.57ea76d0.woff2": { - "filename": "static/media/Inter-ExtraBoldItalic.57ea76d0.woff2", - "contenttype": "application/octet-stream", - "offset": 18732262, - "len": 112656 - }, - "static/media/Inter-ExtraLight.4bd040df.woff": { - "filename": "static/media/Inter-ExtraLight.4bd040df.woff", - "contenttype": "application/octet-stream", - "offset": 14746958, - "len": 141344 - }, - "static/media/Inter-ExtraLight.4d9f96f8.woff2": { - "filename": "static/media/Inter-ExtraLight.4d9f96f8.woff2", - "contenttype": "application/octet-stream", - "offset": 18945450, - "len": 105444 - }, - "static/media/Inter-ExtraLightItalic.54d3d9a5.woff2": { - "filename": "static/media/Inter-ExtraLightItalic.54d3d9a5.woff2", - "contenttype": "application/octet-stream", - "offset": 14888302, - "len": 111804 - }, - "static/media/Inter-ExtraLightItalic.84c26656.woff": { - "filename": "static/media/Inter-ExtraLightItalic.84c26656.woff", - "contenttype": "application/octet-stream", - "offset": 18569981, - "len": 148416 - }, - "static/media/Inter-Italic.9528384c.woff2": { - "filename": "static/media/Inter-Italic.9528384c.woff2", - "contenttype": "application/octet-stream", - "offset": 14383371, - "len": 108172 - }, - "static/media/Inter-Italic.e4ad3666.woff": { - "filename": "static/media/Inter-Italic.e4ad3666.woff", - "contenttype": "application/octet-stream", - "offset": 20037756, - "len": 143476 - }, - "static/media/Inter-Light.5baca21a.woff2": { - "filename": "static/media/Inter-Light.5baca21a.woff2", - "contenttype": "application/octet-stream", - "offset": 18016306, - "len": 105556 - }, - "static/media/Inter-Light.b9920de0.woff": { - "filename": "static/media/Inter-Light.b9920de0.woff", - "contenttype": "application/octet-stream", - "offset": 18428717, - "len": 141264 - }, - "static/media/Inter-LightItalic.0555a46c.woff": { - "filename": "static/media/Inter-LightItalic.0555a46c.woff", - "contenttype": "application/octet-stream", - "offset": 15633341, - "len": 148408 - }, - "static/media/Inter-LightItalic.adc70179.woff2": { - "filename": "static/media/Inter-LightItalic.adc70179.woff2", - "contenttype": "application/octet-stream", - "offset": 19200250, - "len": 112040 - }, - "static/media/Inter-Medium.7a8cc724.woff": { - "filename": "static/media/Inter-Medium.7a8cc724.woff", - "contenttype": "application/octet-stream", - "offset": 17763598, - "len": 142780 - }, - "static/media/Inter-Medium.f6cf0a0b.woff2": { - "filename": "static/media/Inter-Medium.f6cf0a0b.woff2", - "contenttype": "application/octet-stream", - "offset": 17431014, - "len": 106484 - }, - "static/media/Inter-MediumItalic.417907d2.woff": { - "filename": "static/media/Inter-MediumItalic.417907d2.woff", - "contenttype": "application/octet-stream", - "offset": 16955424, - "len": 149344 - }, - "static/media/Inter-MediumItalic.565a7104.woff2": { - "filename": "static/media/Inter-MediumItalic.565a7104.woff2", - "contenttype": "application/octet-stream", - "offset": 17318374, - "len": 112640 - }, - "static/media/Inter-Regular.4dd66a11.woff2": { - "filename": "static/media/Inter-Regular.4dd66a11.woff2", - "contenttype": "application/octet-stream", - "offset": 18844918, - "len": 100368 - }, - "static/media/Inter-Regular.7c539936.woff": { - "filename": "static/media/Inter-Regular.7c539936.woff", - "contenttype": "application/octet-stream", - "offset": 16820428, - "len": 134996 - }, - "static/media/Inter-SemiBold.1db6c55c.woff": { - "filename": "static/media/Inter-SemiBold.1db6c55c.woff", - "contenttype": "application/octet-stream", - "offset": 19785708, - "len": 143148 - }, - "static/media/Inter-SemiBold.dd8a55ef.woff2": { - "filename": "static/media/Inter-SemiBold.dd8a55ef.woff2", - "contenttype": "application/octet-stream", - "offset": 14491543, - "len": 106916 - }, - "static/media/Inter-SemiBoldItalic.81678d1a.woff": { - "filename": "static/media/Inter-SemiBoldItalic.81678d1a.woff", - "contenttype": "application/octet-stream", - "offset": 19050894, - "len": 149356 - }, - "static/media/Inter-SemiBoldItalic.ac201e30.woff2": { - "filename": "static/media/Inter-SemiBoldItalic.ac201e30.woff2", - "contenttype": "application/octet-stream", - "offset": 19562850, - "len": 112768 - }, - "static/media/Inter-Thin.850febbe.woff2": { - "filename": "static/media/Inter-Thin.850febbe.woff2", - "contenttype": "application/octet-stream", - "offset": 17217044, - "len": 101004 - }, - "static/media/Inter-Thin.ead42837.woff": { - "filename": "static/media/Inter-Thin.ead42837.woff", - "contenttype": "application/octet-stream", - "offset": 18230961, - "len": 137068 - }, - "static/media/Inter-ThinItalic.a76db065.woff": { - "filename": "static/media/Inter-ThinItalic.a76db065.woff", - "contenttype": "application/octet-stream", - "offset": 16166265, - "len": 144528 - }, - "static/media/Inter-ThinItalic.e08d9b2a.woff2": { - "filename": "static/media/Inter-ThinItalic.e08d9b2a.woff2", - "contenttype": "application/octet-stream", - "offset": 19930172, - "len": 107584 - }, - "static/media/Inter-italic.var.2690e3c2.woff2": { - "filename": "static/media/Inter-italic.var.2690e3c2.woff2", - "contenttype": "application/octet-stream", - "offset": 15925213, - "len": 241052 - }, - "static/media/Inter-roman.var.90e8f61d.woff2": { - "filename": "static/media/Inter-roman.var.90e8f61d.woff2", - "contenttype": "application/octet-stream", - "offset": 17537498, - "len": 226100 - }, - "static/media/Inter.var.4b976905.woff2": { - "filename": "static/media/Inter.var.4b976905.woff2", - "contenttype": "application/octet-stream", - "offset": 15166461, - "len": 317520 - }, - "static/media/arrow-down-blue.cd061363.svg": { - "filename": "static/media/arrow-down-blue.cd061363.svg", - "contenttype": "image/svg+xml", - "offset": 17318048, - "len": 326 - }, - "static/media/arrow-down-grey.c0dedd2f.svg": { - "filename": "static/media/arrow-down-grey.c0dedd2f.svg", - "contenttype": "image/svg+xml", - "offset": 15000106, - "len": 326 - }, - "static/media/arrow-right-white.337ad716.png": { - "filename": "static/media/arrow-right-white.337ad716.png", - "contenttype": "image/png", - "offset": 15000432, - "len": 12999 - }, - "static/media/arrow-right.d285b6cf.svg": { - "filename": "static/media/arrow-right.d285b6cf.svg", - "contenttype": "image/svg+xml", - "offset": 19929626, - "len": 263 - }, - "static/media/blue-loader.904b44c2.svg": { - "filename": "static/media/blue-loader.904b44c2.svg", - "contenttype": "image/svg+xml", - "offset": 19929889, - "len": 283 - }, - "static/media/circle-grey.ed2a1dad.svg": { - "filename": "static/media/circle-grey.ed2a1dad.svg", - "contenttype": "image/svg+xml", - "offset": 16310793, - "len": 321 - }, - "static/media/circle.2d975615.svg": { - "filename": "static/media/circle.2d975615.svg", - "contenttype": "image/svg+xml", - "offset": 16555418, - "len": 321 - }, - "static/media/coinbaseWalletIcon.62578f59.svg": { - "filename": "static/media/coinbaseWalletIcon.62578f59.svg", - "contenttype": "image/svg+xml", - "offset": 18375091, - "len": 53626 - }, - "static/media/dropdown-blue.b20914ec.svg": { - "filename": "static/media/dropdown-blue.b20914ec.svg", - "contenttype": "image/svg+xml", - "offset": 14382513, - "len": 164 - }, - "static/media/dropdown.7d32d2fa.svg": { - "filename": "static/media/dropdown.7d32d2fa.svg", - "contenttype": "image/svg+xml", - "offset": 18945286, - "len": 164 - }, - "static/media/dropup-blue.b96d70e1.svg": { - "filename": "static/media/dropup-blue.b96d70e1.svg", - "contenttype": "image/svg+xml", - "offset": 15166299, - "len": 162 - }, - "static/media/link.50c67f3c.svg": { - "filename": "static/media/link.50c67f3c.svg", - "contenttype": "image/svg+xml", - "offset": 14382196, - "len": 317 - }, - "static/media/logo.5827780d.svg": { - "filename": "static/media/logo.5827780d.svg", - "contenttype": "image/svg+xml", - "offset": 15013431, - "len": 7052 - }, - "static/media/logo_white.edb44e56.svg": { - "filename": "static/media/logo_white.edb44e56.svg", - "contenttype": "image/svg+xml", - "offset": 18368029, - "len": 7062 - }, - "static/media/magnifying-glass.67440097.svg": { - "filename": "static/media/magnifying-glass.67440097.svg", - "contenttype": "image/svg+xml", - "offset": 16662883, - "len": 8429 - }, - "static/media/menu.4f2c4440.svg": { - "filename": "static/media/menu.4f2c4440.svg", - "contenttype": "image/svg+xml", - "offset": 18015579, - "len": 727 - }, - "static/media/metamask.023762b6.png": { - "filename": "static/media/metamask.023762b6.png", - "contenttype": "image/png", - "offset": 14611832, - "len": 114217 - }, - "static/media/plus-blue.e8021e51.svg": { - "filename": "static/media/plus-blue.e8021e51.svg", - "contenttype": "image/svg+xml", - "offset": 14746469, - "len": 190 - }, - "static/media/plus-grey.d8e0be7d.svg": { - "filename": "static/media/plus-grey.d8e0be7d.svg", - "contenttype": "image/svg+xml", - "offset": 19675618, - "len": 190 - }, - "static/media/portisIcon.b234b2bf.png": { - "filename": "static/media/portisIcon.b234b2bf.png", - "contenttype": "image/png", - "offset": 18718397, - "len": 13865 - }, - "static/media/question-mark.1ae4d9f4.svg": { - "filename": "static/media/question-mark.1ae4d9f4.svg", - "contenttype": "image/svg+xml", - "offset": 14726049, - "len": 818 - }, - "static/media/question.a46e8bc1.svg": { - "filename": "static/media/question.a46e8bc1.svg", - "contenttype": "image/svg+xml", - "offset": 19928856, - "len": 770 - }, - "static/media/spinner.be00fc4a.svg": { - "filename": "static/media/spinner.be00fc4a.svg", - "contenttype": "image/svg+xml", - "offset": 14382677, - "len": 694 - }, - "static/media/trustWallet.edcc1ab5.png": { - "filename": "static/media/trustWallet.edcc1ab5.png", - "contenttype": "image/png", - "offset": 14726867, - "len": 19602 - }, - "static/media/walletConnectIcon.8215855c.svg": { - "filename": "static/media/walletConnectIcon.8215855c.svg", - "contenttype": "image/svg+xml", - "offset": 14598459, - "len": 13373 - }, - "static/media/wordmark.b75565ae.svg": { - "filename": "static/media/wordmark.b75565ae.svg", - "contenttype": "image/svg+xml", - "offset": 18121862, - "len": 109099 - }, - "static/media/wordmark_white.9914390f.svg": { - "filename": "static/media/wordmark_white.9914390f.svg", - "contenttype": "image/svg+xml", - "offset": 17906378, - "len": 109201 - }, - "static/media/x.5b8e2186.svg": { - "filename": "static/media/x.5b8e2186.svg", - "contenttype": "image/svg+xml", - "offset": 14746659, - "len": 299 - } - }, - "defaultpath": "/index.html" -} diff --git a/src/index.js b/src/index.js index 6aafd96..61ad96d 100644 --- a/src/index.js +++ b/src/index.js @@ -1,3 +1,7 @@ +const express = require("express"); +const { isPortalModuleEnabled } = require("./utils"); +const db = require("./db"); + process.env.NODE_ENV = process.env.NODE_ENV || "development"; // when portal domain is not provided @@ -5,8 +9,7 @@ if (!process.env.PORTAL_DOMAIN) { throw new Error("PORTAL_DOMAIN environment variable cannot be empty"); } -// when accounts module is enabled -if (process.env.ACCOUNTS_ENABLED === "true") { +if (isPortalModuleEnabled("a")) { // when portal is set to allow only authenticated requests if (["authenticated", "subscription"].includes(process.env.ACCOUNTS_LIMIT_ACCESS)) { // when test api key is not provided @@ -16,26 +19,37 @@ if (process.env.ACCOUNTS_ENABLED === "true") { } } -const express = require("express"); -const db = require("./db"); - -const host = process.env.HOSTNAME || "0.0.0.0"; -const port = Number(process.env.PORT) || 3100; - +// prepare express server instance const server = express(); +// install built in middleware for parsing incoming requests with urlencoded payloads server.use(express.urlencoded({ extended: false })); +// install built in middleware for parsing application/json server.use(express.json()); +// middleware to reload db in memory on every request server.use((req, res, next) => { db.read(); next(); }); +// display current health check status (shows only failed checks if any) +// note: response code will be 200 when status is up and 503 otherwise server.get("/health-check", require("./api/index")); + +// display critical checks (last 24 hours) server.get("/health-check/critical", require("./api/critical")); + +// display extended checks (last 24 hours) server.get("/health-check/extended", require("./api/extended")); + +// display information whether server is set to disabled server.get("/health-check/disabled", require("./api/disabled")); +// prepare express server configuration options +const host = process.env.HOSTNAME || "0.0.0.0"; +const port = Number(process.env.PORT) || 3100; + +// start express server server.listen(port, host, (error) => { if (error) throw error; diff --git a/src/utils-registry.js b/src/utils-registry.js new file mode 100644 index 0000000..0e37c32 --- /dev/null +++ b/src/utils-registry.js @@ -0,0 +1,228 @@ +/** + * MAINTAINER NOTE + * + * Most of this code has been ported from skynet-js to decouple the skynet-js sdk from health checks + * and prepare this repository to migration to es modules (skynet-js is not compatible with es modules). + * + * source: https://github.com/SkynetLabs/skynet-js/blob/master/src/registry.ts + */ + +const { randomBytes } = require("node:crypto"); +const { blake2bFinal, blake2bInit, blake2bUpdate } = require("blakejs"); +const got = require("got"); +const pbkdf2Hmac = require("pbkdf2-hmac"); +const { sign } = require("tweetnacl"); +const e = require("express"); + +/** + * Converts a hex encoded string to a uint8 array. + * + * @param str - The string to convert. + * @returns - The uint8 array. + * @throws - Will throw if the input is not a valid hex-encoded string or is an empty string. + */ +function hexToUint8Array(str) { + return new Uint8Array(str.match(/.{1,2}/g).map((byte) => parseInt(byte, 16))); +} + +/** + * Converts the given number into a uint8 array. Uses little-endian encoding. + * + * @param num - Number to encode. + * @returns - Number encoded as a byte array. + */ +function encodeNumber(num) { + const encoded = new Uint8Array(8); + for (let index = 0; index < encoded.length; index++) { + const byte = num & 0xff; + encoded[index] = byte; + num = num >> 8; + } + return encoded; +} + +/** + * Converts a UTF-8 string to a uint8 array containing valid UTF-8 bytes. + * + * @param str - The string to convert. + * @returns - The uint8 array. + * @throws - Will throw if the input is not a string. + */ +function stringToUint8ArrayUtf8(str) { + return Uint8Array.from(Buffer.from(str, "utf-8")); +} + +/** + * Encodes the given UTF-8 string into a uint8 array containing the string length and the string. + * + * @param str - String to encode. + * @returns - String encoded as a byte array. + */ +function encodeUtf8String(str) { + const byteArray = stringToUint8ArrayUtf8(str); + const encoded = new Uint8Array(8 + byteArray.length); + encoded.set(encodeNumber(byteArray.length)); + encoded.set(byteArray, 8); + return encoded; +} + +/** + * Hash the given data key. + * + * @param dataKey - Data key to hash. + * @returns - Hash of the data key. + */ +function hashDataKey(dataKey) { + return hashAll(encodeUtf8String(dataKey)); +} + +/** + * Encodes the uint8array, prefixed by its length. + * + * @param bytes - The input array. + * @returns - The encoded byte array. + */ +function encodePrefixedBytes(bytes) { + const len = bytes.length; + const buf = new ArrayBuffer(8 + len); + const view = new DataView(buf); + + // Sia uses setUint64 which is unavailable in JS. + view.setUint32(0, len, true); + const uint8Bytes = new Uint8Array(buf); + uint8Bytes.set(bytes, 8); + + return uint8Bytes; +} + +/** + * Takes all given arguments and hashes them. + * + * @param parts - Byte arrays to hash. + * @returns - The final hash as a byte array. + */ +function hashAll(...parts) { + const hasher = blake2bInit(32); + parts.forEach((arg) => blake2bUpdate(hasher, arg)); + return blake2bFinal(hasher); +} + +/** + * Encodes the given bigint into a uint8 array. Uses little-endian encoding. + * + * @param int - Bigint to encode. + * @returns - Bigint encoded as a byte array. + * @throws - Will throw if the int does not fit in 64 bits. + */ +function encodeBigintAsUint64(int) { + const encoded = new Uint8Array(8); + for (let index = 0; index < encoded.length; index++) { + const byte = int & BigInt(0xff); + encoded[index] = Number(byte); + int = int >> BigInt(8); + } + return encoded; +} + +/** + * Hashes the given registry entry. + * + * @param registryEntry - Registry entry to hash. + * @param hashedDataKeyHex - Whether the data key is already hashed and in hex format. If not, we hash the data key. + * @returns - Hash of the registry entry. + */ +function hashRegistryEntry(registryEntry, hashedDataKeyHex) { + let dataKeyBytes; + if (hashedDataKeyHex) { + dataKeyBytes = hexToUint8Array(registryEntry.dataKey); + } else { + dataKeyBytes = hashDataKey(registryEntry.dataKey); + } + + const dataBytes = encodePrefixedBytes(registryEntry.data); + + return hashAll(dataKeyBytes, dataBytes, encodeBigintAsUint64(registryEntry.revision)); +} + +/** + * Generates key pair and seed for signing skynet registry requests + */ +async function genKeyPairAndSeed() { + const seed = randomBytes(64).toString("hex"); + const derivedKey = await pbkdf2Hmac(seed, "", 1000, 32, "SHA-256"); + const { publicKey, secretKey } = sign.keyPair.fromSeed(new Uint8Array(derivedKey)); + + return { + seed, + publicKey: Buffer.from(publicKey).toString("hex"), + privateKey: Buffer.from(secretKey).toString("hex"), + }; +} + +/** + * Convert a byte array to a hex string. + * + * @param byteArray - The byte array to convert. + * @returns - The hex string. + * @see {@link https://stackoverflow.com/a/44608819|Stack Overflow} + */ +function toHexString(byteArray) { + let s = ""; + byteArray.forEach(function (byte) { + s += ("0" + (byte & 0xff).toString(16)).slice(-2); + }); + return s; +} + +/** + * Sets the registry entry. + * + * @param privateKey - The user private key. + * @param publicKey - The user public key. + * @param entry - The entry to set. + */ +async function setRegistryEntry(privateKey, publicKey, entry) { + const signature = sign.detached(hashRegistryEntry(entry, false), hexToUint8Array(privateKey)); + const json = { + publickey: { + algorithm: "ed25519", + key: Array.from(hexToUint8Array(publicKey)), + }, + datakey: toHexString(hashDataKey(entry.dataKey)), + // Set the revision as a string here. The value may be up to 64 bits and the limit for a JS number is 53 bits. + // We remove the quotes later in transformRequest, as JSON does support 64 bit numbers. + revision: Number(entry.revision), + data: Array.from(entry.data), + signature: Array.from(signature), + }; + + // send read request to /skynet/registry endpoint + const endpoint = `https://${process.env.PORTAL_DOMAIN}/skynet/registry`; + await got.post(endpoint, { + headers: { "Skynet-Api-Key": process.env.ACCOUNTS_TEST_USER_API_KEY }, + json, + }); +} + +/** + * Gets the registry entry corresponding to the publicKey and dataKey. + * + * @param publicKey - The user public key. + * @param dataKey - The key of the data to fetch for the given user. + */ +async function getRegistryEntry(publicKey, dataKey) { + // send read request to /skynet/registry endpoint + const endpoint = `https://${process.env.PORTAL_DOMAIN}/skynet/registry`; + const { body: entry } = await got( + `${endpoint}?publickey=ed25519%3A${publicKey}&datakey=${toHexString(hashDataKey(dataKey))}&timeout=5`, + { + responseType: "json", + headers: { "Skynet-Api-Key": process.env.ACCOUNTS_TEST_USER_API_KEY }, + } + ); + + // return entry with skynet-js schema + return { dataKey, data: hexToUint8Array(entry.data), revision: BigInt(entry.revision) }; +} + +module.exports = { genKeyPairAndSeed, getRegistryEntry, setRegistryEntry }; diff --git a/src/utils.js b/src/utils.js index 775a4c0..2037ac1 100644 --- a/src/utils.js +++ b/src/utils.js @@ -68,6 +68,33 @@ function getDisabledServerReason(manualDisabledReason) { return manualDisabledReason; } +/** + * Parse header string, to check whether it contains an object, return the header string otherwise + */ +function parseHeaderString(header) { + try { + return JSON.parse(header); + } catch { + return header; + } +} + +/** + * Get response data from axios error response object + */ +function getResponseErrorData(error) { + return { + // try response object first, otherwise use statusCode or status props + statusCode: error.response?.statusCode ?? error.statusCode ?? error.status, + // error message is always available + errorMessage: error.message, + // check error response body for additional error message context + errorResponseContent: getResponseContent(error.response), + // ip is not always available when no response was received + ip: error?.response?.ip ?? null, + }; +} + module.exports = { calculateElapsedTime, getYesterdayISOString, @@ -77,4 +104,6 @@ module.exports = { getDisabledServerReason, ipCheckService, ipRegex, + parseHeaderString, + getResponseErrorData, }; diff --git a/yarn.lock b/yarn.lock index 897ead7..73ed76a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -17,49 +17,49 @@ dependencies: "@babel/highlight" "^7.18.6" -"@babel/compat-data@^7.18.8": - version "7.18.8" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.8.tgz#2483f565faca607b8535590e84e7de323f27764d" - integrity sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ== +"@babel/compat-data@^7.19.3": + version "7.19.3" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.19.3.tgz#707b939793f867f5a73b2666e6d9a3396eb03151" + integrity sha512-prBHMK4JYYK+wDjJF1q99KK4JLL+egWS4nmNqdlMUgCExMZ+iZW0hGhyC3VEbsPjvaN0TBhW//VIFwBrk8sEiw== "@babel/core@^7.11.6", "@babel/core@^7.12.3": - version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.10.tgz#39ad504991d77f1f3da91be0b8b949a5bc466fb8" - integrity sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw== + version "7.19.3" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.19.3.tgz#2519f62a51458f43b682d61583c3810e7dcee64c" + integrity sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ== dependencies: "@ampproject/remapping" "^2.1.0" "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.18.10" - "@babel/helper-compilation-targets" "^7.18.9" - "@babel/helper-module-transforms" "^7.18.9" - "@babel/helpers" "^7.18.9" - "@babel/parser" "^7.18.10" + "@babel/generator" "^7.19.3" + "@babel/helper-compilation-targets" "^7.19.3" + "@babel/helper-module-transforms" "^7.19.0" + "@babel/helpers" "^7.19.0" + "@babel/parser" "^7.19.3" "@babel/template" "^7.18.10" - "@babel/traverse" "^7.18.10" - "@babel/types" "^7.18.10" + "@babel/traverse" "^7.19.3" + "@babel/types" "^7.19.3" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.1" semver "^6.3.0" -"@babel/generator@^7.18.10", "@babel/generator@^7.7.2": - version "7.18.12" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.12.tgz#fa58daa303757bd6f5e4bbca91b342040463d9f4" - integrity sha512-dfQ8ebCN98SvyL7IxNMCUtZQSq5R7kxgN+r8qYTGDmmSion1hX2C0zq2yo1bsCDhXixokv1SAWTZUMYbO/V5zg== +"@babel/generator@^7.19.3", "@babel/generator@^7.7.2": + version "7.19.3" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.19.3.tgz#d7f4d1300485b4547cb6f94b27d10d237b42bf59" + integrity sha512-fqVZnmp1ncvZU757UzDheKZpfPgatqY59XtW2/j/18H7u76akb8xqvjw82f+i2UKd/ksYsSick/BCLQUUtJ/qQ== dependencies: - "@babel/types" "^7.18.10" + "@babel/types" "^7.19.3" "@jridgewell/gen-mapping" "^0.3.2" jsesc "^2.5.1" -"@babel/helper-compilation-targets@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz#69e64f57b524cde3e5ff6cc5a9f4a387ee5563bf" - integrity sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg== +"@babel/helper-compilation-targets@^7.19.3": + version "7.19.3" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz#a10a04588125675d7c7ae299af86fa1b2ee038ca" + integrity sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg== dependencies: - "@babel/compat-data" "^7.18.8" + "@babel/compat-data" "^7.19.3" "@babel/helper-validator-option" "^7.18.6" - browserslist "^4.20.2" + browserslist "^4.21.3" semver "^6.3.0" "@babel/helper-environment-visitor@^7.18.9": @@ -67,13 +67,13 @@ resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== -"@babel/helper-function-name@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz#940e6084a55dee867d33b4e487da2676365e86b0" - integrity sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A== +"@babel/helper-function-name@^7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c" + integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w== dependencies: - "@babel/template" "^7.18.6" - "@babel/types" "^7.18.9" + "@babel/template" "^7.18.10" + "@babel/types" "^7.19.0" "@babel/helper-hoist-variables@^7.18.6": version "7.18.6" @@ -89,24 +89,24 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-module-transforms@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz#5a1079c005135ed627442df31a42887e80fcb712" - integrity sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g== +"@babel/helper-module-transforms@^7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz#309b230f04e22c58c6a2c0c0c7e50b216d350c30" + integrity sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ== dependencies: "@babel/helper-environment-visitor" "^7.18.9" "@babel/helper-module-imports" "^7.18.6" "@babel/helper-simple-access" "^7.18.6" "@babel/helper-split-export-declaration" "^7.18.6" "@babel/helper-validator-identifier" "^7.18.6" - "@babel/template" "^7.18.6" - "@babel/traverse" "^7.18.9" - "@babel/types" "^7.18.9" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.19.0" + "@babel/types" "^7.19.0" "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.8.0": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz#4b8aea3b069d8cb8a72cdfe28ddf5ceca695ef2f" - integrity sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w== + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz#4796bb14961521f0f8715990bee2fb6e51ce21bf" + integrity sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw== "@babel/helper-simple-access@^7.18.6": version "7.18.6" @@ -127,24 +127,24 @@ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz#181f22d28ebe1b3857fa575f5c290b1aaf659b56" integrity sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw== -"@babel/helper-validator-identifier@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" - integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== +"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" + integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== "@babel/helper-validator-option@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== -"@babel/helpers@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.18.9.tgz#4bef3b893f253a1eced04516824ede94dcfe7ff9" - integrity sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ== +"@babel/helpers@^7.19.0": + version "7.19.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.19.0.tgz#f30534657faf246ae96551d88dd31e9d1fa1fc18" + integrity sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg== dependencies: - "@babel/template" "^7.18.6" - "@babel/traverse" "^7.18.9" - "@babel/types" "^7.18.9" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.19.0" + "@babel/types" "^7.19.0" "@babel/highlight@^7.18.6": version "7.18.6" @@ -155,10 +155,10 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.10", "@babel/parser@^7.18.11": - version "7.18.11" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.11.tgz#68bb07ab3d380affa9a3f96728df07969645d2d9" - integrity sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.10", "@babel/parser@^7.19.3": + version "7.19.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.19.3.tgz#8dd36d17c53ff347f9e55c328710321b49479a9a" + integrity sha512-pJ9xOlNWHiy9+FuFP09DEAFbAn4JskgRsVcc169w2xRBC3FRGuQEwjeIMMND9L2zc0iEhO/tGv4Zq+km+hxNpQ== "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -258,7 +258,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/template@^7.18.10", "@babel/template@^7.18.6", "@babel/template@^7.3.3": +"@babel/template@^7.18.10", "@babel/template@^7.3.3": version "7.18.10" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA== @@ -267,29 +267,29 @@ "@babel/parser" "^7.18.10" "@babel/types" "^7.18.10" -"@babel/traverse@^7.18.10", "@babel/traverse@^7.18.9", "@babel/traverse@^7.7.2": - version "7.18.11" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.11.tgz#3d51f2afbd83ecf9912bcbb5c4d94e3d2ddaa16f" - integrity sha512-TG9PiM2R/cWCAy6BPJKeHzNbu4lPzOSZpeMfeNErskGpTJx6trEvFaVCbDvpcxwy49BKWmEPwiW8mrysNiDvIQ== +"@babel/traverse@^7.19.0", "@babel/traverse@^7.19.3", "@babel/traverse@^7.7.2": + version "7.19.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.19.3.tgz#3a3c5348d4988ba60884e8494b0592b2f15a04b4" + integrity sha512-qh5yf6149zhq2sgIXmwjnsvmnNQC2iw70UFjp4olxucKrWd/dvlUsBI88VSLUsnMNF7/vnOiA+nk1+yLoCqROQ== dependencies: "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.18.10" + "@babel/generator" "^7.19.3" "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.18.9" + "@babel/helper-function-name" "^7.19.0" "@babel/helper-hoist-variables" "^7.18.6" "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.18.11" - "@babel/types" "^7.18.10" + "@babel/parser" "^7.19.3" + "@babel/types" "^7.19.3" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.3.0", "@babel/types@^7.3.3": - version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.10.tgz#4908e81b6b339ca7c6b7a555a5fc29446f26dde6" - integrity sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ== +"@babel/types@^7.0.0", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.19.0", "@babel/types@^7.19.3", "@babel/types@^7.3.0", "@babel/types@^7.3.3": + version "7.19.3" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.19.3.tgz#fc420e6bbe54880bce6779ffaf315f5e43ec9624" + integrity sha512-hGCaQzIY22DJlDh9CH7NOxgKkFjBk0Cw9xDO1Xmh2151ti7wiGfQ3LauXzL4HP1fmFlTX6XjpRETTpUcv7wQLw== dependencies: "@babel/helper-string-parser" "^7.18.10" - "@babel/helper-validator-identifier" "^7.18.6" + "@babel/helper-validator-identifier" "^7.19.1" to-fast-properties "^2.0.0" "@bcoe/v8-coverage@^0.2.3": @@ -313,28 +313,28 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== -"@jest/console@^29.0.1": - version "29.0.1" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.0.1.tgz#e0e429cfc89900e3a46ce27f493bf488395ade39" - integrity sha512-SxLvSKf9gk4Rvt3p2KRQWVQ3sVj7S37rjlCHwp2+xNcRO/X+Uw0idbkfOtciUpjghHIxyggqcrrKhThQ+vClLQ== +"@jest/console@^29.1.2": + version "29.1.2" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.1.2.tgz#0ae975a70004696f8320490fcaa1a4152f7b62e4" + integrity sha512-ujEBCcYs82BTmRxqfHMQggSlkUZP63AE5YEaTPj7eFyJOzukkTorstOUC7L6nE3w5SYadGVAnTsQ/ZjTGL0qYQ== dependencies: - "@jest/types" "^29.0.1" + "@jest/types" "^29.1.2" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^29.0.1" - jest-util "^29.0.1" + jest-message-util "^29.1.2" + jest-util "^29.1.2" slash "^3.0.0" -"@jest/core@^29.0.1": - version "29.0.1" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.0.1.tgz#a49517795f692a510b6fae55a9c09e659826c472" - integrity sha512-EcFrXkYh8I1GYHRH9V4TU7jr4P6ckaPqGo/z4AIJjHDZxicjYgWB6fx1xFb5bhEM87eUjCF4FAY5t+RamLWQmA== +"@jest/core@^29.1.2": + version "29.1.2" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.1.2.tgz#e5ce7a71e7da45156a96fb5eeed11d18b67bd112" + integrity sha512-sCO2Va1gikvQU2ynDN8V4+6wB7iVrD2CvT0zaRst4rglf56yLly0NQ9nuRRAWFeimRf+tCdFsb1Vk1N9LrrMPA== dependencies: - "@jest/console" "^29.0.1" - "@jest/reporters" "^29.0.1" - "@jest/test-result" "^29.0.1" - "@jest/transform" "^29.0.1" - "@jest/types" "^29.0.1" + "@jest/console" "^29.1.2" + "@jest/reporters" "^29.1.2" + "@jest/test-result" "^29.1.2" + "@jest/transform" "^29.1.2" + "@jest/types" "^29.1.2" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" @@ -342,80 +342,80 @@ exit "^0.1.2" graceful-fs "^4.2.9" jest-changed-files "^29.0.0" - jest-config "^29.0.1" - jest-haste-map "^29.0.1" - jest-message-util "^29.0.1" + jest-config "^29.1.2" + jest-haste-map "^29.1.2" + jest-message-util "^29.1.2" jest-regex-util "^29.0.0" - jest-resolve "^29.0.1" - jest-resolve-dependencies "^29.0.1" - jest-runner "^29.0.1" - jest-runtime "^29.0.1" - jest-snapshot "^29.0.1" - jest-util "^29.0.1" - jest-validate "^29.0.1" - jest-watcher "^29.0.1" + jest-resolve "^29.1.2" + jest-resolve-dependencies "^29.1.2" + jest-runner "^29.1.2" + jest-runtime "^29.1.2" + jest-snapshot "^29.1.2" + jest-util "^29.1.2" + jest-validate "^29.1.2" + jest-watcher "^29.1.2" micromatch "^4.0.4" - pretty-format "^29.0.1" + pretty-format "^29.1.2" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^29.0.1": - version "29.0.1" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.0.1.tgz#d236ce9e906744ac58bfc59ae6f7c9882ace7927" - integrity sha512-iLcFfoq2K6DAB+Mc+2VNLzZVmHdwQFeSqvoM/X8SMON6s/+yEi1iuRX3snx/JfwSnvmiMXjSr0lktxNxOcqXYA== +"@jest/environment@^29.1.2": + version "29.1.2" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.1.2.tgz#bb51a43fce9f960ba9a48f0b5b556f30618ebc0a" + integrity sha512-rG7xZ2UeOfvOVzoLIJ0ZmvPl4tBEQ2n73CZJSlzUjPw4or1oSWC0s0Rk0ZX+pIBJ04aVr6hLWFn1DFtrnf8MhQ== dependencies: - "@jest/fake-timers" "^29.0.1" - "@jest/types" "^29.0.1" + "@jest/fake-timers" "^29.1.2" + "@jest/types" "^29.1.2" "@types/node" "*" - jest-mock "^29.0.1" + jest-mock "^29.1.2" -"@jest/expect-utils@^29.0.1": - version "29.0.1" - resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.0.1.tgz#c1a84ee66caaef537f351dd82f7c63d559cf78d5" - integrity sha512-Tw5kUUOKmXGQDmQ9TSgTraFFS7HMC1HG/B7y0AN2G2UzjdAXz9BzK2rmNpCSDl7g7y0Gf/VLBm//blonvhtOTQ== +"@jest/expect-utils@^29.1.2": + version "29.1.2" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.1.2.tgz#66dbb514d38f7d21456bc774419c9ae5cca3f88d" + integrity sha512-4a48bhKfGj/KAH39u0ppzNTABXQ8QPccWAFUFobWBaEMSMp+sB31Z2fK/l47c4a/Mu1po2ffmfAIPxXbVTXdtg== dependencies: jest-get-type "^29.0.0" -"@jest/expect@^29.0.1": - version "29.0.1" - resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.0.1.tgz#0ffde7f5b4c87f1dd6f8664726bd53f6cd1f7014" - integrity sha512-qKB3q52XDV8VUEiqKKLgLrJx7puQ8sYVqIDlul6n7SIXWS97DOK3KqbR2rDDaMtmenRHqEUl2fI+aFzx0oSemA== +"@jest/expect@^29.1.2": + version "29.1.2" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.1.2.tgz#334a86395f621f1ab63ad95b06a588b9114d7b7a" + integrity sha512-FXw/UmaZsyfRyvZw3M6POgSNqwmuOXJuzdNiMWW9LCYo0GRoRDhg+R5iq5higmRTHQY7hx32+j7WHwinRmoILQ== dependencies: - expect "^29.0.1" - jest-snapshot "^29.0.1" + expect "^29.1.2" + jest-snapshot "^29.1.2" -"@jest/fake-timers@^29.0.1": - version "29.0.1" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.0.1.tgz#51ba7a82431db479d4b828576c139c4c0dc5e409" - integrity sha512-XZ+kAhLChVQ+KJNa5034p7O1Mz3vtWrelxDcMoxhZkgqmWDaEQAW9qJeutaeCfPvwaEwKYVyKDYfWpcyT8RiMw== +"@jest/fake-timers@^29.1.2": + version "29.1.2" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.1.2.tgz#f157cdf23b4da48ce46cb00fea28ed1b57fc271a" + integrity sha512-GppaEqS+QQYegedxVMpCe2xCXxxeYwQ7RsNx55zc8f+1q1qevkZGKequfTASI7ejmg9WwI+SJCrHe9X11bLL9Q== dependencies: - "@jest/types" "^29.0.1" + "@jest/types" "^29.1.2" "@sinonjs/fake-timers" "^9.1.2" "@types/node" "*" - jest-message-util "^29.0.1" - jest-mock "^29.0.1" - jest-util "^29.0.1" + jest-message-util "^29.1.2" + jest-mock "^29.1.2" + jest-util "^29.1.2" -"@jest/globals@^29.0.1": - version "29.0.1" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.0.1.tgz#764135ad31408fb632b3126793ab3aaed933095f" - integrity sha512-BtZWrVrKRKNUt7T1H2S8Mz31PN7ItROCmH+V5pn10hJDUfjOCTIUwb0WtLZzm0f1tJ3Uvx+5lVZrF/VTKqNaFg== +"@jest/globals@^29.1.2": + version "29.1.2" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.1.2.tgz#826ede84bc280ae7f789cb72d325c48cd048b9d3" + integrity sha512-uMgfERpJYoQmykAd0ffyMq8wignN4SvLUG6orJQRe9WAlTRc9cdpCaE/29qurXixYJVZWUqIBXhSk8v5xN1V9g== dependencies: - "@jest/environment" "^29.0.1" - "@jest/expect" "^29.0.1" - "@jest/types" "^29.0.1" - jest-mock "^29.0.1" + "@jest/environment" "^29.1.2" + "@jest/expect" "^29.1.2" + "@jest/types" "^29.1.2" + jest-mock "^29.1.2" -"@jest/reporters@^29.0.1": - version "29.0.1" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.0.1.tgz#82a491657031c1cc278bf659905e5094973309ad" - integrity sha512-dM3L8JmYYOsdeXUUVZClQy67Tz/v1sMo9h4AQv2U+716VLHV0zdA6Hh4FQNAHMhYw/95dbZbPX8Q+TRR7Rw+wA== +"@jest/reporters@^29.1.2": + version "29.1.2" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.1.2.tgz#5520898ed0a4ecf69d8b671e1dc8465d0acdfa6e" + integrity sha512-X4fiwwyxy9mnfpxL0g9DD0KcTmEIqP0jUdnc2cfa9riHy+I6Gwwp5vOZiwyg0vZxfSDxrOlK9S4+340W4d+DAA== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^29.0.1" - "@jest/test-result" "^29.0.1" - "@jest/transform" "^29.0.1" - "@jest/types" "^29.0.1" + "@jest/console" "^29.1.2" + "@jest/test-result" "^29.1.2" + "@jest/transform" "^29.1.2" + "@jest/types" "^29.1.2" "@jridgewell/trace-mapping" "^0.3.15" "@types/node" "*" chalk "^4.0.0" @@ -428,9 +428,9 @@ istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.1.3" - jest-message-util "^29.0.1" - jest-util "^29.0.1" - jest-worker "^29.0.1" + jest-message-util "^29.1.2" + jest-util "^29.1.2" + jest-worker "^29.1.2" slash "^3.0.0" string-length "^4.0.1" strip-ansi "^6.0.0" @@ -453,51 +453,51 @@ callsites "^3.0.0" graceful-fs "^4.2.9" -"@jest/test-result@^29.0.1": - version "29.0.1" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.0.1.tgz#97ac334e4c6f7d016c341cdd500aa423a38e4cdd" - integrity sha512-XCA4whh/igxjBaR/Hg8qwFd/uTsauoD7QAdAYUjV2CSGx0+iunhjoCRRWTwqjQrETRqOJABx6kNfw0+C0vMSgQ== +"@jest/test-result@^29.1.2": + version "29.1.2" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.1.2.tgz#6a8d006eb2b31ce0287d1fc10d12b8ff8504f3c8" + integrity sha512-jjYYjjumCJjH9hHCoMhA8PCl1OxNeGgAoZ7yuGYILRJX9NjgzTN0pCT5qAoYR4jfOP8htIByvAlz9vfNSSBoVg== dependencies: - "@jest/console" "^29.0.1" - "@jest/types" "^29.0.1" + "@jest/console" "^29.1.2" + "@jest/types" "^29.1.2" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^29.0.1": - version "29.0.1" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.0.1.tgz#7074b5f89ce30941b5b0fb493a19308d441a30b8" - integrity sha512-3GhSBMCRcWXGluP2Dw7CLP6mNke/t+EcftF5YjzhX1BJmqcatMbtZVwjuCfZy0TCME1GevXy3qTyV5PLpwIFKQ== +"@jest/test-sequencer@^29.1.2": + version "29.1.2" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.1.2.tgz#10bfd89c08bfdba382eb05cc79c1d23a01238a93" + integrity sha512-fU6dsUqqm8sA+cd85BmeF7Gu9DsXVWFdGn9taxM6xN1cKdcP/ivSgXh5QucFRFz1oZxKv3/9DYYbq0ULly3P/Q== dependencies: - "@jest/test-result" "^29.0.1" + "@jest/test-result" "^29.1.2" graceful-fs "^4.2.9" - jest-haste-map "^29.0.1" + jest-haste-map "^29.1.2" slash "^3.0.0" -"@jest/transform@^29.0.1": - version "29.0.1" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.0.1.tgz#fdaa5d9e135c9bd7addbe65bedd1f15ad028cc7e" - integrity sha512-6UxXtqrPScFdDhoip8ys60dQAIYppQinyR87n9nlasR/ZnFfJohKToqzM29KK4gb9gHRv5oDFChdqZKE0SIhsg== +"@jest/transform@^29.1.2": + version "29.1.2" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.1.2.tgz#20f814696e04f090421f6d505c14bbfe0157062a" + integrity sha512-2uaUuVHTitmkx1tHF+eBjb4p7UuzBG7SXIaA/hNIkaMP6K+gXYGxP38ZcrofzqN0HeZ7A90oqsOa97WU7WZkSw== dependencies: "@babel/core" "^7.11.6" - "@jest/types" "^29.0.1" + "@jest/types" "^29.1.2" "@jridgewell/trace-mapping" "^0.3.15" babel-plugin-istanbul "^6.1.1" chalk "^4.0.0" convert-source-map "^1.4.0" fast-json-stable-stringify "^2.1.0" graceful-fs "^4.2.9" - jest-haste-map "^29.0.1" + jest-haste-map "^29.1.2" jest-regex-util "^29.0.0" - jest-util "^29.0.1" + jest-util "^29.1.2" micromatch "^4.0.4" pirates "^4.0.4" slash "^3.0.0" write-file-atomic "^4.0.1" -"@jest/types@^29.0.1": - version "29.0.1" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.0.1.tgz#1985650acf137bdb81710ff39a4689ec071dd86a" - integrity sha512-ft01rxzVsbh9qZPJ6EFgAIj3PT9FCRfBF9Xljo2/33VDOUjLZr0ZJ2oKANqh9S/K0/GERCsHDAQlBwj7RxA+9g== +"@jest/types@^29.1.2": + version "29.1.2" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.1.2.tgz#7442d32b16bcd7592d9614173078b8c334ec730a" + integrity sha512-DcXGtoTykQB5jiwCmVr8H4vdg2OJhQex3qPkG+ISyDO7xQXbt/4R6dowcRyPemRnkH7JoHvZuxPBdlq+9JxFCg== dependencies: "@jest/schemas" "^29.0.0" "@types/istanbul-lib-coverage" "^2.0.0" @@ -547,9 +547,9 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@sinclair/typebox@^0.24.1": - version "0.24.28" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.28.tgz#15aa0b416f82c268b1573ab653e4413c965fe794" - integrity sha512-dgJd3HLOkLmz4Bw50eZx/zJwtBq65nms3N9VBYu5LTjJ883oBFkTyXRlCB/ZGGwqYpJJHA5zW2Ibhl5ngITfow== + version "0.24.44" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.44.tgz#0a0aa3bf4a155a678418527342a3ee84bd8caa5c" + integrity sha512-ka0W0KN5i6LfrSocduwliMMpqVgohtPFidKdMEOUjoOFCHcOOYkKsPRxfs5f15oPNHTm6ERAm0GV/+/LTKeiWg== "@sindresorhus/is@^4.0.0": version "4.6.0" @@ -570,19 +570,6 @@ dependencies: "@sinonjs/commons" "^1.7.0" -"@skynetlabs/tus-js-client@^2.4.1": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@skynetlabs/tus-js-client/-/tus-js-client-2.4.1.tgz#01e70e8c92fb3ec043b0c7da5206d7b96149c162" - integrity sha512-cc//2XeIqfZQ7rC182MbMwx/xTh1Cw1mQb2BmeHh6rO+coioyUSX71znPCsvijdKM+3NYXbhg5r/ZV5028OXfg== - dependencies: - buffer-from "^1.1.2" - combine-errors "^3.0.3" - is-stream "^2.0.0" - js-base64 "^2.6.1" - lodash.throttle "^4.1.1" - proper-lockfile "^2.0.1" - url-parse "^1.5.7" - "@szmarczak/http-timer@^4.0.5": version "4.0.6" resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" @@ -617,9 +604,9 @@ "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.18.0" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.18.0.tgz#8134fd78cb39567465be65b9fdc16d378095f41f" - integrity sha512-v4Vwdko+pgymgS+A2UIaJru93zQd85vIGWObM5ekZNdXCKtDYqATlEYnWgfo86Q6I1Lh0oXnksDnMU1cwmlPDw== + version "7.18.2" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.18.2.tgz#235bf339d17185bdec25e024ca19cce257cc7309" + integrity sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg== dependencies: "@babel/types" "^7.3.0" @@ -664,11 +651,6 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/json-buffer@~3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/json-buffer/-/json-buffer-3.0.0.tgz#85c1ff0f0948fc159810d4b5be35bf8c20875f64" - integrity sha512-3YP80IxxFJB4b5tYC2SUPwkg0XQLiu0nWvhRgEatgjf+29IcWO9X1k8xRv5DGssJ/lCrjYTjQPcobJr2yWIVuQ== - "@types/keyv@*": version "3.1.4" resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" @@ -677,14 +659,14 @@ "@types/node" "*" "@types/node@*": - version "18.7.6" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.6.tgz#31743bc5772b6ac223845e18c3fc26f042713c83" - integrity sha512-EdxgKRXgYsNITy5mjjXjVE/CS8YENSdhiagGrLqjG0pvA2owgJ6i4l7wy/PFZGC0B1/H20lWKN7ONVDNYDZm7A== + version "18.8.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.8.2.tgz#17d42c6322d917764dd3d2d3a10d7884925de067" + integrity sha512-cRMwIgdDN43GO4xMWAfJAecYn8wV4JbsOGHNfNUIDiuYkUYAR5ec4Rj7IO2SAhFPEfpPtLtUTbbny/TCT7aDwA== "@types/prettier@^2.1.5": - version "2.7.0" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.0.tgz#ea03e9f0376a4446f44797ca19d9c46c36e352dc" - integrity sha512-RI1L7N4JnW5gQw2spvL7Sllfuf1SaHdrZpCHiBlCXjIlufi1SMNnbu2teze3/QE67Fg2tBlH7W+mi4hVNk4p0A== + version "2.7.1" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.1.tgz#dfd20e2dc35f027cdd6c1908e80a5ddc7499670e" + integrity sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow== "@types/responselike@*", "@types/responselike@^1.0.0": version "1.0.0" @@ -704,9 +686,9 @@ integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== "@types/yargs@^17.0.8": - version "17.0.11" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.11.tgz#5e10ca33e219807c0eee0f08b5efcba9b6a42c06" - integrity sha512-aB4y9UDUXTSMxmM4MH+YnuR0g5Cph3FLQBoWoMB21DSvFVAxRVEHEMx3TLh+zUZYMCQtKiqazz0Q4Rre31f/OA== + version "17.0.13" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.13.tgz#34cced675ca1b1d51fcf4d34c3c6f0fa142a5c76" + integrity sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg== dependencies: "@types/yargs-parser" "*" @@ -769,35 +751,20 @@ array-flatten@1.1.1: resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== -async-mutex@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/async-mutex/-/async-mutex-0.3.2.tgz#1485eda5bda1b0ec7c8df1ac2e815757ad1831df" - integrity sha512-HuTK7E7MT7jZEh1P9GtRW9+aTWiDWWi9InbZ5hjxrnRa39KS4BW04+xLBhYNS2aXhHUIKZSw3gj4Pn1pj+qGAA== - dependencies: - tslib "^2.3.1" - asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== -axios@^0.27.2: - version "0.27.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972" - integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ== - dependencies: - follow-redirects "^1.14.9" - form-data "^4.0.0" - -babel-jest@^29.0.1: - version "29.0.1" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.0.1.tgz#db50de501fc8727e768f5aa417496cb871ee1ba0" - integrity sha512-wyI9r8tqwsZEMWiIaYjdUJ6ztZIO4DMWpGq7laW34wR71WtRS+D/iBEtXOP5W2aSYCVUQMsypRl/xiJYZznnTg== +babel-jest@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.1.2.tgz#540d3241925c55240fb0c742e3ffc5f33a501978" + integrity sha512-IuG+F3HTHryJb7gacC7SQ59A9kO56BctUsT67uJHp1mMCHUOMXpDwOHWGifWqdWVknN2WNkCVQELPjXx0aLJ9Q== dependencies: - "@jest/transform" "^29.0.1" + "@jest/transform" "^29.1.2" "@types/babel__core" "^7.1.14" babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^29.0.0" + babel-preset-jest "^29.0.2" chalk "^4.0.0" graceful-fs "^4.2.9" slash "^3.0.0" @@ -813,10 +780,10 @@ babel-plugin-istanbul@^6.1.1: istanbul-lib-instrument "^5.0.4" test-exclude "^6.0.0" -babel-plugin-jest-hoist@^29.0.0: - version "29.0.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.0.0.tgz#ae4873399a199ede93697a15919d3d0f614a2eb1" - integrity sha512-B9oaXrlxXHFWeWqhDPg03iqQd2UN/mg/VdZOsLaqAVBkztru3ctTryAI4zisxLEEgmcUnLTKewqx0gGifoXD3A== +babel-plugin-jest-hoist@^29.0.2: + version "29.0.2" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.0.2.tgz#ae61483a829a021b146c016c6ad39b8bcc37c2c8" + integrity sha512-eBr2ynAEFjcebVvu8Ktx580BD1QKCrBG1XwEUTXJe285p9HA/4hOhfWCFRQhTKSyBV0VzjhG7H91Eifz9s29hg== dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" @@ -841,12 +808,12 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-jest@^29.0.0: - version "29.0.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.0.0.tgz#52d7f1afe3a15d14a3c5ab4349cbd388d98d330b" - integrity sha512-B5Ke47Xcs8rDF3p1korT3LoilpADCwbG93ALqtvqu6Xpf4d8alKkrCBTExbNzdHJcIuEPpfYvEaFFRGee2kUgQ== +babel-preset-jest@^29.0.2: + version "29.0.2" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.0.2.tgz#e14a7124e22b161551818d89e5bdcfb3b2b0eac7" + integrity sha512-BeVXp7rH5TK96ofyEnHjznjLMQ2nAeDJ+QzxKnHAAMs0RgrQsCywjAN8m4mOm5Di0pxU//3AoEeJJrerMH5UeA== dependencies: - babel-plugin-jest-hoist "^29.0.0" + babel-plugin-jest-hoist "^29.0.2" babel-preset-current-node-syntax "^1.0.0" balanced-match@^1.0.0: @@ -854,24 +821,7 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base32-decode@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/base32-decode/-/base32-decode-1.0.0.tgz#2a821d6a664890c872f20aa9aca95a4b4b80e2a7" - integrity sha512-KNWUX/R7wKenwE/G/qFMzGScOgVntOmbE27vvc6GrniDGYb6a5+qWcuoXl8WIOQL7q0TpK7nZDm1Y04Yi3Yn5g== - -base32-encode@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/base32-encode/-/base32-encode-1.2.0.tgz#e150573a5e431af0a998e32bdfde7045725ca453" - integrity sha512-cHFU8XeRyx0GgmoWi5qHMCVRiqU6J3MHWxVgun7jggCBUpVzm1Ir7M9dYr2whjSNc3tFeXfQ/oZjQu/4u55h9A== - dependencies: - to-data-view "^1.1.0" - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -blakejs@^1.1.0: +blakejs@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== @@ -909,15 +859,15 @@ braces@^3.0.2: dependencies: fill-range "^7.0.1" -browserslist@^4.20.2: - version "4.21.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.3.tgz#5df277694eb3c48bc5c4b05af3e8b7e09c5a6d1a" - integrity sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ== +browserslist@^4.21.3: + version "4.21.4" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987" + integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== dependencies: - caniuse-lite "^1.0.30001370" - electron-to-chromium "^1.4.202" + caniuse-lite "^1.0.30001400" + electron-to-chromium "^1.4.251" node-releases "^2.0.6" - update-browserslist-db "^1.0.5" + update-browserslist-db "^1.0.9" bser@2.1.1: version "2.1.1" @@ -931,14 +881,6 @@ buffer-from@^1.0.0, buffer-from@^1.1.2: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -buffer@^6.0.1: - version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - bytes@3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" @@ -985,10 +927,10 @@ camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001370: - version "1.0.30001378" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001378.tgz#3d2159bf5a8f9ca093275b0d3ecc717b00f27b67" - integrity sha512-JVQnfoO7FK7WvU4ZkBRbPjaot4+YqxogSDosHv0Hv5mWpUESmN+UubMU6L/hGz8QlQ2aY5U0vR6MOs6j/CXpNA== +caniuse-lite@^1.0.30001400: + version "1.0.30001416" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001416.tgz#29692af8a6a11412f2d3cf9a59d588fcdd21ce4c" + integrity sha512-06wzzdAkCPZO+Qm4e/eNghZBDfVNDsCgw33T27OwBH9unE9S478OYw//Q2L7Npf/zBzs7rjZOszIFQkwQKAEqA== chalk@^2.0.0: version "2.4.2" @@ -1013,22 +955,22 @@ char-regex@^1.0.2: integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== ci-info@^3.2.0: - version "3.3.2" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.2.tgz#6d2967ffa407466481c6c90b6e16b3098f080128" - integrity sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg== + version "3.4.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.4.0.tgz#b28484fd436cbc267900364f096c9dc185efb251" + integrity sha512-t5QdPT5jq3o262DOQ8zA6E1tlH2upmUc4Hlvrbx1pGYJuiiHl7O7rvVNI+l8HTVhd/q3Qc9vqimkNk5yiXsAug== cjs-module-lexer@^1.0.0: version "1.2.2" resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== dependencies: string-width "^4.2.0" - strip-ansi "^6.0.0" + strip-ansi "^6.0.1" wrap-ansi "^7.0.0" clone-response@^1.0.2: @@ -1087,14 +1029,6 @@ combined-stream@^1.0.8: dependencies: delayed-stream "~1.0.0" -compress-brotli@^1.3.8: - version "1.3.8" - resolved "https://registry.yarnpkg.com/compress-brotli/-/compress-brotli-1.3.8.tgz#0c0a60c97a989145314ec381e84e26682e7b38db" - integrity sha512-lVcQsjhxhIXsuupfy9fmZUFtAIdBmXA7EGY6GBdgZ++qkM9zG4YFT8iU7FoBxzryNDMOpD1HIFHUSX4D87oqhQ== - dependencies: - "@types/json-buffer" "~3.0.0" - json-buffer "~3.0.1" - concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -1214,10 +1148,10 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.4.202: - version "1.4.225" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.225.tgz#3e27bdd157cbaf19768141f2e0f0f45071e52338" - integrity sha512-ICHvGaCIQR3P88uK8aRtx8gmejbVJyC6bB4LEC3anzBrIzdzC7aiZHY4iFfXhN4st6I7lMO0x4sgBHf/7kBvRw== +electron-to-chromium@^1.4.251: + version "1.4.272" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.272.tgz#cedebaeec5d9879da85b127e65a55c6b4c58344e" + integrity sha512-KS6gPPGNrzpVv9HzFVq+Etd0AjZEPr5pvaTBn2yD6KV4+cKW4I0CJoJNgmTG6gUQPAMZ4wIPtcOuoou3qFAZCA== emittery@^0.10.2: version "0.10.2" @@ -1298,16 +1232,16 @@ exit@^0.1.2: resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== -expect@^29.0.1: - version "29.0.1" - resolved "https://registry.yarnpkg.com/expect/-/expect-29.0.1.tgz#a2fa64a59cffe4b4007877e730bc82be3d1742bb" - integrity sha512-yQgemsjLU+1S8t2A7pXT3Sn/v5/37LY8J+tocWtKEA0iEYYc6gfKbbJJX2fxHZmd7K9WpdbQqXUpmYkq1aewYg== +expect@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.1.2.tgz#82f8f28d7d408c7c68da3a386a490ee683e1eced" + integrity sha512-AuAGn1uxva5YBbBlXb+2JPxJRuemZsmlGcapPXWNSBNsQtAULfjioREGBWuI0EOvYUKjDnrCy8PW5Zlr1md5mw== dependencies: - "@jest/expect-utils" "^29.0.1" + "@jest/expect-utils" "^29.1.2" jest-get-type "^29.0.0" - jest-matcher-utils "^29.0.1" - jest-message-util "^29.0.1" - jest-util "^29.0.1" + jest-matcher-utils "^29.1.2" + jest-message-util "^29.1.2" + jest-util "^29.1.2" express@^4.18.1: version "4.18.1" @@ -1352,9 +1286,9 @@ fast-json-stable-stringify@^2.1.0: integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fb-watchman@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" - integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== + version "2.0.2" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" + integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== dependencies: bser "2.1.1" @@ -1386,11 +1320,6 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" -follow-redirects@^1.14.9: - version "1.15.1" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" - integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== - form-data@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" @@ -1436,9 +1365,9 @@ get-caller-file@^2.0.5: integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== get-intrinsic@^1.0.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.2.tgz#336975123e05ad0b7ba41f152ee4aadbea6cf598" - integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA== + version "1.1.3" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" + integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== dependencies: function-bind "^1.1.1" has "^1.0.3" @@ -1478,7 +1407,7 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -got@^11.8.2: +got@^11.8.3: version "11.8.5" resolved "https://registry.yarnpkg.com/got/-/got-11.8.5.tgz#ce77d045136de56e8f024bebb82ea349bc730046" integrity sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ== @@ -1495,7 +1424,7 @@ got@^11.8.2: p-cancelable "^2.0.0" responselike "^2.0.0" -graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.2.10, graceful-fs@^4.2.4, graceful-fs@^4.2.9: +graceful-fs@^4.1.3, graceful-fs@^4.2.10, graceful-fs@^4.2.4, graceful-fs@^4.2.9: version "4.2.10" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== @@ -1576,11 +1505,6 @@ iconv-lite@0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" -ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - import-local@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" @@ -1704,86 +1628,86 @@ jest-changed-files@^29.0.0: execa "^5.0.0" p-limit "^3.1.0" -jest-circus@^29.0.1: - version "29.0.1" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.0.1.tgz#7ecb4913e134fb4addc03655fb36c9398014fa07" - integrity sha512-I5J4LyK3qPo8EnqPmxsMAVR+2SFx7JOaZsbqW9xQmk4UDmTCD92EQgS162Ey3Jq6CfpKJKFDhzhG3QqiE0fRbw== +jest-circus@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.1.2.tgz#4551068e432f169a53167fe1aef420cf51c8a735" + integrity sha512-ajQOdxY6mT9GtnfJRZBRYS7toNIJayiiyjDyoZcnvPRUPwJ58JX0ci0PKAKUo2C1RyzlHw0jabjLGKksO42JGA== dependencies: - "@jest/environment" "^29.0.1" - "@jest/expect" "^29.0.1" - "@jest/test-result" "^29.0.1" - "@jest/types" "^29.0.1" + "@jest/environment" "^29.1.2" + "@jest/expect" "^29.1.2" + "@jest/test-result" "^29.1.2" + "@jest/types" "^29.1.2" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" dedent "^0.7.0" is-generator-fn "^2.0.0" - jest-each "^29.0.1" - jest-matcher-utils "^29.0.1" - jest-message-util "^29.0.1" - jest-runtime "^29.0.1" - jest-snapshot "^29.0.1" - jest-util "^29.0.1" + jest-each "^29.1.2" + jest-matcher-utils "^29.1.2" + jest-message-util "^29.1.2" + jest-runtime "^29.1.2" + jest-snapshot "^29.1.2" + jest-util "^29.1.2" p-limit "^3.1.0" - pretty-format "^29.0.1" + pretty-format "^29.1.2" slash "^3.0.0" stack-utils "^2.0.3" -jest-cli@^29.0.1: - version "29.0.1" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.0.1.tgz#6633c2ab97337ac5207910bd6b0aba2ef0900110" - integrity sha512-XozBHtoJCS6mnjCxNESyGm47Y4xSWzNlBJj4tix9nGrG6m068B83lrTWKtjYAenYSfOqyYVpQCkyqUp35IT+qA== +jest-cli@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.1.2.tgz#423b9c5d3ea20a50b1354b8bf3f2a20e72110e89" + integrity sha512-vsvBfQ7oS2o4MJdAH+4u9z76Vw5Q8WBQF5MchDbkylNknZdrPTX1Ix7YRJyTlOWqRaS7ue/cEAn+E4V1MWyMzw== dependencies: - "@jest/core" "^29.0.1" - "@jest/test-result" "^29.0.1" - "@jest/types" "^29.0.1" + "@jest/core" "^29.1.2" + "@jest/test-result" "^29.1.2" + "@jest/types" "^29.1.2" chalk "^4.0.0" exit "^0.1.2" graceful-fs "^4.2.9" import-local "^3.0.2" - jest-config "^29.0.1" - jest-util "^29.0.1" - jest-validate "^29.0.1" + jest-config "^29.1.2" + jest-util "^29.1.2" + jest-validate "^29.1.2" prompts "^2.0.1" yargs "^17.3.1" -jest-config@^29.0.1: - version "29.0.1" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.0.1.tgz#bccc2aedc3bafb6cb08bad23e5f0fcc3b1959268" - integrity sha512-3duIx5ucEPIsUOESDTuasMfqHonD0oZRjqHycIMHSC4JwbvHDjAWNKN/NiM0ZxHXjAYrMTLt2QxSQ+IqlbYE5A== +jest-config@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.1.2.tgz#7d004345ca4c09f5d8f802355f54494e90842f4d" + integrity sha512-EC3Zi86HJUOz+2YWQcJYQXlf0zuBhJoeyxLM6vb6qJsVmpP7KcCP1JnyF0iaqTaXdBP8Rlwsvs7hnKWQWWLwwA== dependencies: "@babel/core" "^7.11.6" - "@jest/test-sequencer" "^29.0.1" - "@jest/types" "^29.0.1" - babel-jest "^29.0.1" + "@jest/test-sequencer" "^29.1.2" + "@jest/types" "^29.1.2" + babel-jest "^29.1.2" chalk "^4.0.0" ci-info "^3.2.0" deepmerge "^4.2.2" glob "^7.1.3" graceful-fs "^4.2.9" - jest-circus "^29.0.1" - jest-environment-node "^29.0.1" + jest-circus "^29.1.2" + jest-environment-node "^29.1.2" jest-get-type "^29.0.0" jest-regex-util "^29.0.0" - jest-resolve "^29.0.1" - jest-runner "^29.0.1" - jest-util "^29.0.1" - jest-validate "^29.0.1" + jest-resolve "^29.1.2" + jest-runner "^29.1.2" + jest-util "^29.1.2" + jest-validate "^29.1.2" micromatch "^4.0.4" parse-json "^5.2.0" - pretty-format "^29.0.1" + pretty-format "^29.1.2" slash "^3.0.0" strip-json-comments "^3.1.1" -jest-diff@^29.0.1: - version "29.0.1" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.0.1.tgz#d14e900a38ee4798d42feaaf0c61cb5b98e4c028" - integrity sha512-l8PYeq2VhcdxG9tl5cU78ClAlg/N7RtVSp0v3MlXURR0Y99i6eFnegmasOandyTmO6uEdo20+FByAjBFEO9nuw== +jest-diff@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.1.2.tgz#bb7aaf5353227d6f4f96c5e7e8713ce576a607dc" + integrity sha512-4GQts0aUopVvecIT4IwD/7xsBaMhKTYoM4/njE/aVw9wpw+pIUVp8Vab/KnSzSilr84GnLBkaP3JLDnQYCKqVQ== dependencies: chalk "^4.0.0" diff-sequences "^29.0.0" jest-get-type "^29.0.0" - pretty-format "^29.0.1" + pretty-format "^29.1.2" jest-docblock@^29.0.0: version "29.0.0" @@ -1792,93 +1716,94 @@ jest-docblock@^29.0.0: dependencies: detect-newline "^3.0.0" -jest-each@^29.0.1: - version "29.0.1" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.0.1.tgz#c17da68a7073440122dbd47dca3941351ee0cbe5" - integrity sha512-UmCZYU9LPvRfSDoCrKJqrCNmgTYGGb3Ga6IVsnnVjedBTRRR9GJMca7UmDKRrJ1s+U632xrVtiRD27BxaG1aaQ== +jest-each@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.1.2.tgz#d4c8532c07a846e79f194f7007ce7cb1987d1cd0" + integrity sha512-AmTQp9b2etNeEwMyr4jc0Ql/LIX/dhbgP21gHAizya2X6rUspHn2gysMXaj6iwWuOJ2sYRgP8c1P4cXswgvS1A== dependencies: - "@jest/types" "^29.0.1" + "@jest/types" "^29.1.2" chalk "^4.0.0" jest-get-type "^29.0.0" - jest-util "^29.0.1" - pretty-format "^29.0.1" + jest-util "^29.1.2" + pretty-format "^29.1.2" -jest-environment-node@^29.0.1: - version "29.0.1" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.0.1.tgz#b09db2a1b8439aace11a6805719d92498a64987e" - integrity sha512-PcIRBrEBFAPBqkbL53ZpEvTptcAnOW6/lDfqBfACMm3vkVT0N7DcfkH/hqNSbDmSxzGr0FtJI6Ej3TPhveWCMA== +jest-environment-node@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.1.2.tgz#005e05cc6ea4b9b5ba55906ab1ce53c82f6907a7" + integrity sha512-C59yVbdpY8682u6k/lh8SUMDJPbOyCHOTgLVVi1USWFxtNV+J8fyIwzkg+RJIVI30EKhKiAGNxYaFr3z6eyNhQ== dependencies: - "@jest/environment" "^29.0.1" - "@jest/fake-timers" "^29.0.1" - "@jest/types" "^29.0.1" + "@jest/environment" "^29.1.2" + "@jest/fake-timers" "^29.1.2" + "@jest/types" "^29.1.2" "@types/node" "*" - jest-mock "^29.0.1" - jest-util "^29.0.1" + jest-mock "^29.1.2" + jest-util "^29.1.2" jest-get-type@^29.0.0: version "29.0.0" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.0.0.tgz#843f6c50a1b778f7325df1129a0fd7aa713aef80" integrity sha512-83X19z/HuLKYXYHskZlBAShO7UfLFXu/vWajw9ZNJASN32li8yHMaVGAQqxFW1RCFOkB7cubaL6FaJVQqqJLSw== -jest-haste-map@^29.0.1: - version "29.0.1" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.0.1.tgz#472212f93ef44309bf97d191f93ddd2e41169615" - integrity sha512-gcKOAydafpGoSBvcj/mGCfhOKO8fRLkAeee1KXGdcJ1Pb9O2nnOl4I8bQSIID2MaZeMHtLLgNboukh/pUGkBtg== +jest-haste-map@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.1.2.tgz#93f3634aa921b6b654e7c94137b24e02e7ca6ac9" + integrity sha512-xSjbY8/BF11Jh3hGSPfYTa/qBFrm3TPM7WU8pU93m2gqzORVLkHFWvuZmFsTEBPRKndfewXhMOuzJNHyJIZGsw== dependencies: - "@jest/types" "^29.0.1" + "@jest/types" "^29.1.2" "@types/graceful-fs" "^4.1.3" "@types/node" "*" anymatch "^3.0.3" fb-watchman "^2.0.0" graceful-fs "^4.2.9" jest-regex-util "^29.0.0" - jest-util "^29.0.1" - jest-worker "^29.0.1" + jest-util "^29.1.2" + jest-worker "^29.1.2" micromatch "^4.0.4" walker "^1.0.8" optionalDependencies: fsevents "^2.3.2" -jest-leak-detector@^29.0.1: - version "29.0.1" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.0.1.tgz#1a7cf8475d85e7b2bd53efa5adc5195828a12c33" - integrity sha512-5tISHJphB+sCmKXtVHJGQGltj7ksrLLb9vkuNWwFR86Of1tfzjskvrrrZU1gSzEfWC+qXIn4tuh8noKHYGMIPA== +jest-leak-detector@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.1.2.tgz#4c846db14c58219430ccbc4f01a1ec52ebee4fc2" + integrity sha512-TG5gAZJpgmZtjb6oWxBLf2N6CfQ73iwCe6cofu/Uqv9iiAm6g502CAnGtxQaTfpHECBdVEMRBhomSXeLnoKjiQ== dependencies: jest-get-type "^29.0.0" - pretty-format "^29.0.1" + pretty-format "^29.1.2" -jest-matcher-utils@^29.0.1: - version "29.0.1" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.0.1.tgz#eaa92dd5405c2df9d31d45ec4486361d219de3e9" - integrity sha512-/e6UbCDmprRQFnl7+uBKqn4G22c/OmwriE5KCMVqxhElKCQUDcFnq5XM9iJeKtzy4DUjxT27y9VHmKPD8BQPaw== +jest-matcher-utils@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.1.2.tgz#e68c4bcc0266e70aa1a5c13fb7b8cd4695e318a1" + integrity sha512-MV5XrD3qYSW2zZSHRRceFzqJ39B2z11Qv0KPyZYxnzDHFeYZGJlgGi0SW+IXSJfOewgJp/Km/7lpcFT+cgZypw== dependencies: chalk "^4.0.0" - jest-diff "^29.0.1" + jest-diff "^29.1.2" jest-get-type "^29.0.0" - pretty-format "^29.0.1" + pretty-format "^29.1.2" -jest-message-util@^29.0.1: - version "29.0.1" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.0.1.tgz#85c4b5b90296c228da158e168eaa5b079f2ab879" - integrity sha512-wRMAQt3HrLpxSubdnzOo68QoTfQ+NLXFzU0Heb18ZUzO2S9GgaXNEdQ4rpd0fI9dq2NXkpCk1IUWSqzYKji64A== +jest-message-util@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.1.2.tgz#c21a33c25f9dc1ebfcd0f921d89438847a09a501" + integrity sha512-9oJ2Os+Qh6IlxLpmvshVbGUiSkZVc2FK+uGOm6tghafnB2RyjKAxMZhtxThRMxfX1J1SOMhTn9oK3/MutRWQJQ== dependencies: "@babel/code-frame" "^7.12.13" - "@jest/types" "^29.0.1" + "@jest/types" "^29.1.2" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" graceful-fs "^4.2.9" micromatch "^4.0.4" - pretty-format "^29.0.1" + pretty-format "^29.1.2" slash "^3.0.0" stack-utils "^2.0.3" -jest-mock@^29.0.1: - version "29.0.1" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.0.1.tgz#12e1b137035365b022ccdb8fd67d476cd4d4bfad" - integrity sha512-i1yTceg2GKJwUNZFjIzrH7Y74fN1SKJWxQX/Vu3LT4TiJerFARH5l+4URNyapZ+DNpchHYrGOP2deVbn3ma8JA== +jest-mock@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.1.2.tgz#de47807edbb9d4abf8423f1d8d308d670105678c" + integrity sha512-PFDAdjjWbjPUtQPkQufvniXIS3N9Tv7tbibePEjIIprzjgo0qQlyUiVMrT4vL8FaSJo1QXifQUOuPH3HQC/aMA== dependencies: - "@jest/types" "^29.0.1" + "@jest/types" "^29.1.2" "@types/node" "*" + jest-util "^29.1.2" jest-pnp-resolver@^1.2.2: version "1.2.2" @@ -1890,88 +1815,88 @@ jest-regex-util@^29.0.0: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.0.0.tgz#b442987f688289df8eb6c16fa8df488b4cd007de" integrity sha512-BV7VW7Sy0fInHWN93MMPtlClweYv2qrSCwfeFWmpribGZtQPWNvRSq9XOVgOEjU1iBGRKXUZil0o2AH7Iy9Lug== -jest-resolve-dependencies@^29.0.1: - version "29.0.1" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.0.1.tgz#c41b88380c8ea178ce72a750029b5f3d5f65cb94" - integrity sha512-fUGcYlSc1NzNz+tsHDjjG0rclw6blJcFZsLEsezxm/n54bAm9HFvJxgBuCV1CJQoPtIx6AfR+tXkR9lpWJs2LQ== +jest-resolve-dependencies@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.1.2.tgz#a6919e58a0c7465582cb8ec2d745b4e64ae8647f" + integrity sha512-44yYi+yHqNmH3OoWZvPgmeeiwKxhKV/0CfrzaKLSkZG9gT973PX8i+m8j6pDrTYhhHoiKfF3YUFg/6AeuHw4HQ== dependencies: jest-regex-util "^29.0.0" - jest-snapshot "^29.0.1" + jest-snapshot "^29.1.2" -jest-resolve@^29.0.1: - version "29.0.1" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.0.1.tgz#4f1338eee2ccc7319ffce850e13eb118a9e93ce5" - integrity sha512-dwb5Z0lLZbptlBtPExqsHfdDamXeiRLv4vdkfPrN84vBwLSWHWcXjlM2JXD/KLSQfljBcXbzI/PDvUJuTQ84Nw== +jest-resolve@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.1.2.tgz#9dd8c2fc83e59ee7d676b14bd45a5f89e877741d" + integrity sha512-7fcOr+k7UYSVRJYhSmJHIid3AnDBcLQX3VmT9OSbPWsWz1MfT7bcoerMhADKGvKCoMpOHUQaDHtQoNp/P9JMGg== dependencies: chalk "^4.0.0" graceful-fs "^4.2.9" - jest-haste-map "^29.0.1" + jest-haste-map "^29.1.2" jest-pnp-resolver "^1.2.2" - jest-util "^29.0.1" - jest-validate "^29.0.1" + jest-util "^29.1.2" + jest-validate "^29.1.2" resolve "^1.20.0" resolve.exports "^1.1.0" slash "^3.0.0" -jest-runner@^29.0.1: - version "29.0.1" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.0.1.tgz#15bacd13170f3d786168ef8548fdeb96933ea643" - integrity sha512-XeFfPmHtO7HyZyD1uJeO4Oqa8PyTbDHzS1YdGrvsFXk/A5eXinbqA5a42VUEqvsKQgNnKTl5NJD0UtDWg7cQ2A== +jest-runner@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.1.2.tgz#f18b2b86101341e047de8c2f51a5fdc4e97d053a" + integrity sha512-yy3LEWw8KuBCmg7sCGDIqKwJlULBuNIQa2eFSVgVASWdXbMYZ9H/X0tnXt70XFoGf92W2sOQDOIFAA6f2BG04Q== dependencies: - "@jest/console" "^29.0.1" - "@jest/environment" "^29.0.1" - "@jest/test-result" "^29.0.1" - "@jest/transform" "^29.0.1" - "@jest/types" "^29.0.1" + "@jest/console" "^29.1.2" + "@jest/environment" "^29.1.2" + "@jest/test-result" "^29.1.2" + "@jest/transform" "^29.1.2" + "@jest/types" "^29.1.2" "@types/node" "*" chalk "^4.0.0" emittery "^0.10.2" graceful-fs "^4.2.9" jest-docblock "^29.0.0" - jest-environment-node "^29.0.1" - jest-haste-map "^29.0.1" - jest-leak-detector "^29.0.1" - jest-message-util "^29.0.1" - jest-resolve "^29.0.1" - jest-runtime "^29.0.1" - jest-util "^29.0.1" - jest-watcher "^29.0.1" - jest-worker "^29.0.1" + jest-environment-node "^29.1.2" + jest-haste-map "^29.1.2" + jest-leak-detector "^29.1.2" + jest-message-util "^29.1.2" + jest-resolve "^29.1.2" + jest-runtime "^29.1.2" + jest-util "^29.1.2" + jest-watcher "^29.1.2" + jest-worker "^29.1.2" p-limit "^3.1.0" source-map-support "0.5.13" -jest-runtime@^29.0.1: - version "29.0.1" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.0.1.tgz#cafdc10834c45c50105eecb0ded8677ce741e2af" - integrity sha512-yDgz5OE0Rm44PUAfTqwA6cDFnTYnVcYbRpPECsokSASQ0I5RXpnKPVr2g0CYZWKzbsXqqtmM7TIk7CAutZJ7gQ== +jest-runtime@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.1.2.tgz#dbcd57103d61115479108d5864bdcd661d9c6783" + integrity sha512-jr8VJLIf+cYc+8hbrpt412n5jX3tiXmpPSYTGnwcvNemY+EOuLNiYnHJ3Kp25rkaAcTWOEI4ZdOIQcwYcXIAZw== dependencies: - "@jest/environment" "^29.0.1" - "@jest/fake-timers" "^29.0.1" - "@jest/globals" "^29.0.1" + "@jest/environment" "^29.1.2" + "@jest/fake-timers" "^29.1.2" + "@jest/globals" "^29.1.2" "@jest/source-map" "^29.0.0" - "@jest/test-result" "^29.0.1" - "@jest/transform" "^29.0.1" - "@jest/types" "^29.0.1" + "@jest/test-result" "^29.1.2" + "@jest/transform" "^29.1.2" + "@jest/types" "^29.1.2" "@types/node" "*" chalk "^4.0.0" cjs-module-lexer "^1.0.0" collect-v8-coverage "^1.0.0" glob "^7.1.3" graceful-fs "^4.2.9" - jest-haste-map "^29.0.1" - jest-message-util "^29.0.1" - jest-mock "^29.0.1" + jest-haste-map "^29.1.2" + jest-message-util "^29.1.2" + jest-mock "^29.1.2" jest-regex-util "^29.0.0" - jest-resolve "^29.0.1" - jest-snapshot "^29.0.1" - jest-util "^29.0.1" + jest-resolve "^29.1.2" + jest-snapshot "^29.1.2" + jest-util "^29.1.2" slash "^3.0.0" strip-bom "^4.0.0" -jest-snapshot@^29.0.1: - version "29.0.1" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.0.1.tgz#ed455cb7e56fb43e2d451edd902d622349d6afed" - integrity sha512-OuYGp+lsh7RhB3DDX36z/pzrGm2F740e5ERG9PQpJyDknCRtWdhaehBQyMqDnsQdKkvC2zOcetcxskiHjO7e8Q== +jest-snapshot@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.1.2.tgz#7dd277e88c45f2d2ff5888de1612e63c7ceb575b" + integrity sha512-rYFomGpVMdBlfwTYxkUp3sjD6usptvZcONFYNqVlaz4EpHPnDvlWjvmOQ9OCSNKqYZqLM2aS3wq01tWujLg7gg== dependencies: "@babel/core" "^7.11.6" "@babel/generator" "^7.7.2" @@ -1979,86 +1904,82 @@ jest-snapshot@^29.0.1: "@babel/plugin-syntax-typescript" "^7.7.2" "@babel/traverse" "^7.7.2" "@babel/types" "^7.3.3" - "@jest/expect-utils" "^29.0.1" - "@jest/transform" "^29.0.1" - "@jest/types" "^29.0.1" + "@jest/expect-utils" "^29.1.2" + "@jest/transform" "^29.1.2" + "@jest/types" "^29.1.2" "@types/babel__traverse" "^7.0.6" "@types/prettier" "^2.1.5" babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^29.0.1" + expect "^29.1.2" graceful-fs "^4.2.9" - jest-diff "^29.0.1" + jest-diff "^29.1.2" jest-get-type "^29.0.0" - jest-haste-map "^29.0.1" - jest-matcher-utils "^29.0.1" - jest-message-util "^29.0.1" - jest-util "^29.0.1" + jest-haste-map "^29.1.2" + jest-matcher-utils "^29.1.2" + jest-message-util "^29.1.2" + jest-util "^29.1.2" natural-compare "^1.4.0" - pretty-format "^29.0.1" + pretty-format "^29.1.2" semver "^7.3.5" -jest-util@^29.0.1: - version "29.0.1" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.0.1.tgz#f854a4a8877c7817316c4afbc2a851ceb2e71598" - integrity sha512-GIWkgNfkeA9d84rORDHPGGTFBrRD13A38QVSKE0bVrGSnoR1KDn8Kqz+0yI5kezMgbT/7zrWaruWP1Kbghlb2A== +jest-util@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.1.2.tgz#ac5798e93cb6a6703084e194cfa0898d66126df1" + integrity sha512-vPCk9F353i0Ymx3WQq3+a4lZ07NXu9Ca8wya6o4Fe4/aO1e1awMMprZ3woPFpKwghEOW+UXgd15vVotuNN9ONQ== dependencies: - "@jest/types" "^29.0.1" + "@jest/types" "^29.1.2" "@types/node" "*" chalk "^4.0.0" ci-info "^3.2.0" graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-validate@^29.0.1: - version "29.0.1" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.0.1.tgz#8de8ff9d65507c0477964fd39c5b0a1778e3103d" - integrity sha512-mS4q7F738YXZFWBPqE+NjHU/gEOs7IBIFQ8i9zq5EO691cLrUbLhFq4larf8/lNcmauRO71tn/+DTW2y+MrLow== +jest-validate@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.1.2.tgz#83a728b8f6354da2e52346878c8bc7383516ca51" + integrity sha512-k71pOslNlV8fVyI+mEySy2pq9KdXdgZtm7NHrBX8LghJayc3wWZH0Yr0mtYNGaCU4F1OLPXRkwZR0dBm/ClshA== dependencies: - "@jest/types" "^29.0.1" + "@jest/types" "^29.1.2" camelcase "^6.2.0" chalk "^4.0.0" jest-get-type "^29.0.0" leven "^3.1.0" - pretty-format "^29.0.1" + pretty-format "^29.1.2" -jest-watcher@^29.0.1: - version "29.0.1" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.0.1.tgz#63adeb8887a0562ed8f990f413b830ef48a8db94" - integrity sha512-0LBWDL3sZ+vyHRYxjqm2irhfwhUXHonjLSbd0oDeGq44U1e1uUh3icWNXYF8HO/UEnOoa6+OJDncLUXP2Hdg9A== +jest-watcher@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.1.2.tgz#de21439b7d889e2fcf62cc2a4779ef1a3f1f3c62" + integrity sha512-6JUIUKVdAvcxC6bM8/dMgqY2N4lbT+jZVsxh0hCJRbwkIEnbr/aPjMQ28fNDI5lB51Klh00MWZZeVf27KBUj5w== dependencies: - "@jest/test-result" "^29.0.1" - "@jest/types" "^29.0.1" + "@jest/test-result" "^29.1.2" + "@jest/types" "^29.1.2" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" emittery "^0.10.2" - jest-util "^29.0.1" + jest-util "^29.1.2" string-length "^4.0.1" -jest-worker@^29.0.1: - version "29.0.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.0.1.tgz#fb42ff7e05e0573f330ec0cf781fc545dcd11a31" - integrity sha512-+B/2/8WW7goit7qVezG9vnI1QP3dlmuzi2W0zxazAQQ8dcDIA63dDn6j4pjOGBARha/ZevcwYQtNIzCySbS7fQ== +jest-worker@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.1.2.tgz#a68302af61bce82b42a9a57285ca7499d29b2afc" + integrity sha512-AdTZJxKjTSPHbXT/AIOjQVmoFx0LHFcVabWu0sxI7PAy7rFf8c0upyvgBKgguVXdM4vY74JdwkyD4hSmpTW8jA== dependencies: "@types/node" "*" + jest-util "^29.1.2" merge-stream "^2.0.0" supports-color "^8.0.0" -jest@^29.0.1: - version "29.0.1" - resolved "https://registry.yarnpkg.com/jest/-/jest-29.0.1.tgz#4a1c48d79fada0a47c686a111ed9411fd41cd584" - integrity sha512-liHkwzaW6iwQyhRBFj0A4ZYKcsQ7ers1s62CCT95fPeNzoxT/vQRWwjTT4e7jpSCwrvPP2t1VESuy7GrXcr2ug== +jest@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/jest/-/jest-29.1.2.tgz#f821a1695ffd6cd0efc3b59d2dfcc70a98582499" + integrity sha512-5wEIPpCezgORnqf+rCaYD1SK+mNN7NsstWzIsuvsnrhR/hSxXWd82oI7DkrbJ+XTD28/eG8SmxdGvukrGGK6Tw== dependencies: - "@jest/core" "^29.0.1" - "@jest/types" "^29.0.1" + "@jest/core" "^29.1.2" + "@jest/types" "^29.1.2" import-local "^3.0.2" - jest-cli "^29.0.1" - -js-base64@^2.6.1: - version "2.6.4" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4" - integrity sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ== + jest-cli "^29.1.2" js-base64@^3.7.2: version "3.7.2" @@ -2083,7 +2004,7 @@ jsesc@^2.5.1: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== -json-buffer@3.0.1, json-buffer@~3.0.1: +json-buffer@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== @@ -2099,11 +2020,10 @@ json5@^2.2.1: integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== keyv@^4.0.0: - version "4.3.3" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.3.3.tgz#6c1bcda6353a9e96fc1b4e1aeb803a6e35090ba9" - integrity sha512-AcysI17RvakTh8ir03+a3zJr5r0ovnAH/XTXei/4HIv3bL2K/jzvgivLK9UuI/JbU1aJjM3NSAnVvVVd3n+4DQ== + version "4.5.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.0.tgz#dbce9ade79610b6e641a9a65f2f6499ba06b9bc6" + integrity sha512-2YvuMsA+jnFGtBareKqgANOEKe1mk3HKiXu2fRmAfyxG0MJAywNhi5ttWA3PMjl4NmpyjZNbFifR2vNjW1znfA== dependencies: - compress-brotli "^1.3.8" json-buffer "3.0.1" kleur@^3.0.3: @@ -2265,11 +2185,6 @@ mime@1.6.0: resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -mime@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7" - integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== - mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" @@ -2416,11 +2331,6 @@ parseurl@~1.3.3: resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== -path-browserify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" - integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== - path-exists@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" @@ -2446,6 +2356,11 @@ path-to-regexp@0.1.7: resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== +pbkdf2-hmac@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/pbkdf2-hmac/-/pbkdf2-hmac-1.0.4.tgz#1727169e1ce64d09362e929ce3f8dbcdb05b81bc" + integrity sha512-ho4th0+OBJ/c228Mdk/57w3xE5pD3qpJy8iXXodSe/PbX+6riT0iRJe3OOLPe53fHDRZ1k1lPfEx+eUb4374hw== + picocolors@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" @@ -2473,20 +2388,15 @@ pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" -post-me@^0.4.5: - version "0.4.5" - resolved "https://registry.yarnpkg.com/post-me/-/post-me-0.4.5.tgz#6171b721c7b86230c51cfbe48ddea047ef8831ce" - integrity sha512-XgPdktF/2M5jglgVDULr9NUb/QNv3bY3g6RG22iTb5MIMtB07/5FJB5fbVmu5Eaopowc6uZx7K3e7x1shPwnXw== - prettier@^2.7.1: version "2.7.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64" integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g== -pretty-format@^29.0.1: - version "29.0.1" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.0.1.tgz#2f8077114cdac92a59b464292972a106410c7ad0" - integrity sha512-iTHy3QZMzuL484mSTYbQIM1AHhEQsH8mXWS2/vd2yFBYnG3EBqGiMONo28PlPgrW7P/8s/1ISv+y7WH306l8cw== +pretty-format@^29.1.2: + version "29.1.2" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.1.2.tgz#b1f6b75be7d699be1a051f5da36e8ae9e76a8e6a" + integrity sha512-CGJ6VVGXVRP2o2Dorl4mAwwvDWT25luIsYhkyVQW32E4nL+TgW939J7LlKT/npq5Cpq6j3s+sy+13yk7xYpBmg== dependencies: "@jest/schemas" "^29.0.0" ansi-styles "^5.0.0" @@ -2500,14 +2410,6 @@ prompts@^2.0.1: kleur "^3.0.3" sisteransi "^1.0.5" -proper-lockfile@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/proper-lockfile/-/proper-lockfile-2.0.1.tgz#159fb06193d32003f4b3691dd2ec1a634aa80d1d" - integrity sha512-rjaeGbsmhNDcDInmwi4MuI6mRwJu6zq8GjYCLuSuE7GF+4UjgzkL69sVKKJ2T2xH61kK7rXvGYpvaTu909oXaQ== - dependencies: - graceful-fs "^4.1.2" - retry "^0.10.0" - proper-lockfile@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/proper-lockfile/-/proper-lockfile-4.1.2.tgz#c8b9de2af6b2f1601067f98e01ac66baa223141f" @@ -2550,13 +2452,6 @@ quick-lru@^5.1.1: resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" @@ -2625,17 +2520,12 @@ responselike@^2.0.0: dependencies: lowercase-keys "^2.0.0" -retry@^0.10.0: - version "0.10.1" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" - integrity sha512-ZXUSQYTHdl3uS7IuCehYfMzKyIDBNoAuUblvy5oGO5UJSUTmStUUVPXbA9Qxd173Bgre53yCQczQuHgRWAdvJQ== - retry@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== -safe-buffer@5.2.1, safe-buffer@^5.1.0: +safe-buffer@5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -2656,9 +2546,9 @@ semver@^6.0.0, semver@^6.3.0: integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== semver@^7.3.5: - version "7.3.7" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" - integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== + version "7.3.8" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== dependencies: lru-cache "^6.0.0" @@ -2727,41 +2617,6 @@ sisteransi@^1.0.5: resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== -sjcl@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/sjcl/-/sjcl-1.0.8.tgz#f2ec8d7dc1f0f21b069b8914a41a8f236b0e252a" - integrity sha512-LzIjEQ0S0DpIgnxMEayM1rq9aGwGRG4OnZhCdjx7glTaJtf4zRfpg87ImfjSJjoW9vKpagd82McDOwbRT5kQKQ== - -skynet-js@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/skynet-js/-/skynet-js-4.3.0.tgz#57d471dfb3ffc0f2e4c8d370a888b0498f8f6d4a" - integrity sha512-fkaKqHCheQ6tseL7keEU7v5IxwAlfROMMMYPcbo64n9SHfsVXjPmW5wowc6OgmpB5Mt5k4EMVlIrGqF2VbizIw== - dependencies: - "@skynetlabs/tus-js-client" "^2.4.1" - async-mutex "^0.3.2" - axios "^0.27.2" - base32-decode "^1.0.0" - base32-encode "^1.1.1" - base64-js "^1.3.1" - blakejs "^1.1.0" - buffer "^6.0.1" - mime "^3.0.0" - path-browserify "^1.0.1" - post-me "^0.4.5" - randombytes "^2.1.0" - sjcl "^1.0.8" - skynet-mysky-utils "^0.3.0" - tweetnacl "^1.0.3" - url-join "^4.0.1" - url-parse "^1.5.1" - -skynet-mysky-utils@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/skynet-mysky-utils/-/skynet-mysky-utils-0.3.1.tgz#58aa8f4caeca0ddea472211fb40f19bd6aa25b1e" - integrity sha512-UO9U1LUjwn+E8N1CV2iVJbl0VhVVKPwcOSTzgP9thX8Qp/zT+/+TVb1JTimqbd8+/gZhaP8BzrnmgRs6EVtFxA== - dependencies: - post-me "^0.4.5" - slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" @@ -2865,9 +2720,9 @@ supports-color@^8.0.0: has-flag "^4.0.0" supports-hyperlinks@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" - integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== + version "2.3.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" + integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== dependencies: has-flag "^4.0.0" supports-color "^7.0.0" @@ -2899,11 +2754,6 @@ tmpl@1.0.5: resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== -to-data-view@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/to-data-view/-/to-data-view-1.1.0.tgz#08d6492b0b8deb9b29bdf1f61c23eadfa8994d00" - integrity sha512-1eAdufMg6mwgmlojAx3QeMnzB/BTVp7Tbndi3U7ftcT2zCZadjxkkmLmd97zmaxWi+sgGcgWrokmpEoy0Dn0vQ== - to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" @@ -2921,15 +2771,10 @@ toidentifier@1.0.1: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== -tslib@^2.3.1: - version "2.4.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" - integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== - -tus-js-client@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/tus-js-client/-/tus-js-client-3.0.0.tgz#19d42457bde3bbd2199059672ab86115966b4061" - integrity sha512-PHWI/K8YrCzpc83MqkLhqm89EGG+pPrkBaJ/0NQH0xQoqxfs7HKqAqfXrjmcw2CHZeGYaqxI6oVcolXThzYOSA== +tus-js-client@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/tus-js-client/-/tus-js-client-3.0.1.tgz#d81fea22b8fb23769f973aa49501afef0f97928a" + integrity sha512-2EZIUvswv1xG3KtzJO9FZ2wvTtVzltUN23Nse/nZwWE06dbn/8RBeRqi2clV/ilpEomOQOOMdHkIPUQmTum/xg== dependencies: buffer-from "^1.1.2" combine-errors "^3.0.3" @@ -2972,20 +2817,15 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== -update-browserslist-db@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz#be06a5eedd62f107b7c19eb5bcefb194411abf38" - integrity sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q== +update-browserslist-db@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.9.tgz#2924d3927367a38d5c555413a7ce138fc95fcb18" + integrity sha512-/xsqn21EGVdXI3EXSum1Yckj3ZVZugqyOZQ/CxYPBD/R+ko9NSUScf8tFF4dOKY+2pvSSJA/S+5B8s4Zr4kyvg== dependencies: escalade "^3.1.1" picocolors "^1.0.0" -url-join@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7" - integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA== - -url-parse@^1.5.1, url-parse@^1.5.7: +url-parse@^1.5.7: version "1.5.10" resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== @@ -3063,12 +2903,12 @@ yargs-parser@^21.0.0: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs@^17.3.1, yargs@^17.5.1: - version "17.5.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.5.1.tgz#e109900cab6fcb7fd44b1d8249166feb0b36e58e" - integrity sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA== +yargs@^17.3.1, yargs@^17.6.0: + version "17.6.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.6.0.tgz#e134900fc1f218bc230192bdec06a0a5f973e46c" + integrity sha512-8H/wTDqlSwoSnScvV2N/JHfLWOKuh5MVla9hqLjK3nsfyy6Y4kDSYSvkU5YCUEPOSnRXfIyx3Sq+B/IWudTo4g== dependencies: - cliui "^7.0.2" + cliui "^8.0.1" escalade "^3.1.1" get-caller-file "^2.0.5" require-directory "^2.1.1"