From dbde5bde1e54cfcb482b2cf8db2f7123e2b31946 Mon Sep 17 00:00:00 2001 From: Russell Dempsey <1173416+SgtPooki@users.noreply.github.com> Date: Thu, 15 Dec 2022 18:13:37 -0800 Subject: [PATCH 01/29] feat: add types for state --- add-on/src/lib/state.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/add-on/src/lib/state.js b/add-on/src/lib/state.js index dd84e126c..adb9ab05f 100644 --- a/add-on/src/lib/state.js +++ b/add-on/src/lib/state.js @@ -3,7 +3,29 @@ import { safeURL, isHostname } from './options.js' +/** + * @typedef {object} CompanionState + * @property {number} peerCount + * @property {URL} pubGwURL + * @property {string} pubGwURLString + * @property {URL} pubSubdomainGwURL + * @property {string} pubSubdomainGwURLString + * @property {boolean} redirect + * @property {URL} apiURL + * @property {string} apiURLString + * @property {URL} gwURL + * @property {string} gwURLString + * @property {boolean|string} dnslinkPolicy + * @property {(url: string|URL) => boolean} activeIntegrations + */ + export const offlinePeerCount = -1 +/** + * + * @param {typeof import('./options').optionDefaults} options + * @param {Partial} overrides + * @returns {CompanionState} + */ export function initState (options, overrides) { // we store options and some pregenerated values to avoid async storage // reads and minimize performance impact on overall browsing experience From 3e3dc163487212291dbd3e3c587904e2e2c86229 Mon Sep 17 00:00:00 2001 From: Russell Dempsey <1173416+SgtPooki@users.noreply.github.com> Date: Fri, 16 Dec 2022 12:34:31 -0800 Subject: [PATCH 02/29] tmp --- add-on/_locales/en/messages.json | 40 ++ add-on/src/lib/ipfs-companion.js | 7 + add-on/src/lib/options.js | 8 +- add-on/src/lib/state.js | 5 +- add-on/src/lib/telemetry.js | 40 ++ add-on/src/options/forms/telemetry-form.js | 63 +++ add-on/src/options/page.js | 2 + add-on/src/options/store.js | 2 + ipfs-shipyard-ignite-metrics-1.0.0.tgz | Bin 0 -> 46601 bytes package-lock.json | 536 +++++++++++++++++---- package.json | 1 + 11 files changed, 613 insertions(+), 91 deletions(-) create mode 100644 add-on/src/lib/telemetry.js create mode 100644 add-on/src/options/forms/telemetry-form.js create mode 100644 ipfs-shipyard-ignite-metrics-1.0.0.tgz diff --git a/add-on/_locales/en/messages.json b/add-on/_locales/en/messages.json index 83f433673..94ae2b437 100644 --- a/add-on/_locales/en/messages.json +++ b/add-on/_locales/en/messages.json @@ -726,5 +726,45 @@ "page_landingWelcome_projects_title": { "message": "Related Projects", "description": "Projects section title (page_landingWelcome_projects_title)" + }, + "option_header_telemetry": { + "message": "Telemetry", + "description": "A section header on the Preferences screen (option_header_telemetry)" + }, + "option_telemetry_disclaimer": { + "message": "We're collecting minimal telemetry data to improve and prioritize our work. Please consent to the collection of these metrics to assist in our efforts!", + "description": "Disclaimer about telemetry collection in the telemetry section on the Preferences screen (option_telemetry_disclaimer)" + }, + "option_telemetryGroupMinimal_title": { + "message": "Minimal title", + "description": "A title for the 'minimal' grouping of metrics we collect (option_telemetryGroupMinimal_title)" + }, + "option_telemetryGroupMinimal_description": { + "message": "Minimal description", + "description": "A description for the 'minimal' grouping of metrics we collect (option_telemetryGroupMinimal_description)" + }, + "option_telemetryGroupMarketing_title": { + "message": "Marketing title", + "description": "A title for the 'marketing' grouping of metrics we collect (option_telemetryGroupMarketing_title)" + }, + "option_telemetryGroupMarketing_description": { + "message": "Marketing description", + "description": "A description for the 'marketing' grouping of metrics we collect (option_telemetryGroupMarketing_description)" + }, + "option_telemetryGroupPerformance_title": { + "message": "Performance title", + "description": "A title for the 'performance' grouping of metrics we collect (option_telemetryGroupPerformance_title)" + }, + "option_telemetryGroupPerformance_description": { + "message": "Performance description", + "description": "A description for the 'performance' grouping of metrics we collect (option_telemetryGroupPerformance_description)" + }, + "option_telemetryGroupTracking_title": { + "message": "Tracking title", + "description": "A title for the 'tracking' grouping of metrics we collect (option_telemetryGroupTracking_title)" + }, + "option_telemetryGroupTracking_description": { + "message": "Tracking description", + "description": "A description for the 'tracking' grouping of metrics we collect (option_telemetryGroupTracking_description)" } } diff --git a/add-on/src/lib/ipfs-companion.js b/add-on/src/lib/ipfs-companion.js index fcc3eb0d9..4aa683a61 100644 --- a/add-on/src/lib/ipfs-companion.js +++ b/add-on/src/lib/ipfs-companion.js @@ -23,6 +23,7 @@ import createRuntimeChecks from './runtime-checks.js' import { createContextMenus, findValueForContext, contextMenuCopyAddressAtPublicGw, contextMenuCopyRawCid, contextMenuCopyCanonicalAddress, contextMenuViewOnGateway, contextMenuCopyPermalink, contextMenuCopyCidAddress } from './context-menus.js' import { registerSubdomainProxy } from './http-proxy.js' import { runPendingOnInstallTasks } from './on-installed.js' +import { initializeTelemetry } from './telemetry.js' const log = debug('ipfs-companion:main') log.error = debug('ipfs-companion:main:error') @@ -33,6 +34,7 @@ export default async function init () { // INIT // =================================================================== let ipfs // ipfs-api instance + /** @type {ReturnType} */ let state // avoid redundant API reads by utilizing local cache of various states let dnslinkResolver let ipfsPathValidator @@ -68,6 +70,11 @@ export default async function init () { ) } } + try { + await initializeTelemetry(getState) + } catch (err) { + log.error('Failed to initialize telemetry', err) + } dnslinkResolver = createDnslinkResolver(getState) ipfsPathValidator = createIpfsPathValidator(getState, getIpfs, dnslinkResolver) diff --git a/add-on/src/lib/options.js b/add-on/src/lib/options.js index a1acfa921..21383f6a9 100644 --- a/add-on/src/lib/options.js +++ b/add-on/src/lib/options.js @@ -3,6 +3,8 @@ import { isIPv4, isIPv6 } from 'is-ip' import isFQDN from 'is-fqdn' +// console.log('igniteMetrics: ', igniteMetrics) + export const optionDefaults = Object.freeze({ active: true, // global ON/OFF switch, overrides everything else ipfsNodeType: 'external', @@ -31,7 +33,11 @@ export const optionDefaults = Object.freeze({ importDir: '/ipfs-companion-imports/%Y-%M-%D_%h%m%s/', useLatestWebUI: false, dismissedUpdate: null, - openViaWebUI: true + openViaWebUI: true, + telemetryGroupMinimal: true, + telemetryGroupMarketing: false, + telemetryGroupPerformance: false, + telemetryGroupTracking: false }) function buildDefaultIpfsNodeConfig () { diff --git a/add-on/src/lib/state.js b/add-on/src/lib/state.js index adb9ab05f..f37ac5a4b 100644 --- a/add-on/src/lib/state.js +++ b/add-on/src/lib/state.js @@ -1,6 +1,6 @@ 'use strict' /* eslint-env browser, webextensions */ - +// @ts-check import { safeURL, isHostname } from './options.js' /** @@ -17,6 +17,9 @@ import { safeURL, isHostname } from './options.js' * @property {string} gwURLString * @property {boolean|string} dnslinkPolicy * @property {(url: string|URL) => boolean} activeIntegrations + * @property {boolean} localGwAvailable + * @property {string} webuiRootUrl + * @property {typeof import('./options').optionDefaults} options */ export const offlinePeerCount = -1 diff --git a/add-on/src/lib/telemetry.js b/add-on/src/lib/telemetry.js new file mode 100644 index 000000000..5dcb70858 --- /dev/null +++ b/add-on/src/lib/telemetry.js @@ -0,0 +1,40 @@ + +import { MetricsProvider } from '@ipfs-shipyard/ignite-metrics/vanilla' + +const metricsProvider = new MetricsProvider('393f72eb264c28a1b59973da1e0a3938d60dc38a') +/** + * @param {() => ReturnType} getState + * @returns {void} + */ +export async function initializeTelemetry (getState) { + // await metricsProvider.init() + // initCountlyMetrics('393f72eb264c28a1b59973da1e0a3938d60dc38a') + handleConsentFromState(getState()) +} + +/** + * @param {ReturnType['options']} state + * @returns {string[]} + */ +function mapStateToConsent (stateOptions) { + const obj = { + minimal: stateOptions.telemetryGroupMinimal, + marketing: stateOptions.telemetryGroupMarketing, + performance: stateOptions.telemetryGroupPerformance, + tracking: stateOptions.telemetryGroupTracking + } + + const enabledConsentGroups = Object.keys(obj).filter(key => obj[key] === true) + console.log('enabledConsentGroups: ', enabledConsentGroups) + return enabledConsentGroups +} +/** + * + * @param {ReturnType} state + * @returns {void} + */ +export function handleConsentFromState (state) { + const { options } = state + console.log('handleConsentFromState', options) + metricsProvider.updateConsent(mapStateToConsent(options)) +} diff --git a/add-on/src/options/forms/telemetry-form.js b/add-on/src/options/forms/telemetry-form.js new file mode 100644 index 000000000..4b080d847 --- /dev/null +++ b/add-on/src/options/forms/telemetry-form.js @@ -0,0 +1,63 @@ +'use strict' +/* eslint-env browser, webextensions */ + +import browser from 'webextension-polyfill' +import html from 'choo/html/index.js' +import switchToggle from '../../pages/components/switch-toggle.js' + +export default function telemetryForm ({ + onOptionChange, + stateOptions +}) { + return html` +
+
+

${browser.i18n.getMessage('option_header_telemetry')}

+
+

${browser.i18n.getMessage('option_telemetry_disclaimer')}

+

+ + ${browser.i18n.getMessage('option_legend_readMore')} + +

+
+
+ +
${switchToggle({ id: 'telemetryGroupMinimal', checked: stateOptions.telemetryGroupMinimal, onchange: onOptionChange('telemetryGroupMinimal') })}
+
+
+ +
${switchToggle({ id: 'telemetryGroupMarketing', checked: stateOptions.telemetryGroupMarketing, onchange: onOptionChange('telemetryGroupMarketing') })}
+
+
+ +
${switchToggle({ id: 'telemetryGroupPerformance', checked: stateOptions.telemetryGroupPerformance, onchange: onOptionChange('telemetryGroupPerformance') })}
+
+
+ +
${switchToggle({ id: 'telemetryGroupTracking', checked: stateOptions.telemetryGroupTracking, onchange: onOptionChange('telemetryGroupTracking') })}
+
+
+
+ ` +} diff --git a/add-on/src/options/page.js b/add-on/src/options/page.js index 5189fae13..6e0d6862e 100644 --- a/add-on/src/options/page.js +++ b/add-on/src/options/page.js @@ -9,6 +9,7 @@ import dnslinkForm from './forms/dnslink-form.js' import gatewaysForm from './forms/gateways-form.js' import apiForm from './forms/api-form.js' import experimentsForm from './forms/experiments-form.js' +import telemetryForm from './forms/telemetry-form.js' import resetForm from './forms/reset-form.js' // Render the options page: @@ -102,6 +103,7 @@ export default function optionsPage (state, emit) { logNamespaces: state.options.logNamespaces, onOptionChange })} + ${telemetryForm({ onOptionChange, stateOptions: state.options })} ${resetForm({ onOptionsReset })} diff --git a/add-on/src/options/store.js b/add-on/src/options/store.js index 0c879c98a..3c88c41ab 100644 --- a/add-on/src/options/store.js +++ b/add-on/src/options/store.js @@ -4,6 +4,7 @@ import browser from 'webextension-polyfill' import { optionDefaults } from '../lib/options.js' import createRuntimeChecks from '../lib/runtime-checks.js' +import { handleConsentFromState } from '../lib/telemetry.js' // The store contains and mutates the state for the app export default function optionStore (state, emitter) { @@ -13,6 +14,7 @@ export default function optionStore (state, emitter) { const runtime = await createRuntimeChecks(browser) state.withNodeFromBrave = runtime.brave && await runtime.brave.getIPFSEnabled() state.options = await getOptions() + handleConsentFromState(state) emitter.emit('render') } diff --git a/ipfs-shipyard-ignite-metrics-1.0.0.tgz b/ipfs-shipyard-ignite-metrics-1.0.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..938f8c3afa41d26fbe88c252e6d2cdd956872cc5 GIT binary patch literal 46601 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

2ahVHR(S#iuuSTDjTOfMOn@Q&Rf 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 literal 0 HcmV?d00001 diff --git a/package-lock.json b/package-lock.json index 169c5660d..642799be7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,6 +7,7 @@ "name": "ipfs-companion", "license": "CC0-1.0", "dependencies": { + "@ipfs-shipyard/ignite-metrics": "file:ipfs-shipyard-ignite-metrics-1.0.0.tgz", "@material/switch": "10.0.0", "assert": "2.0.0", "buffer": "6.0.3", @@ -181,7 +182,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, "dependencies": { "@babel/highlight": "^7.18.6" }, @@ -232,7 +232,6 @@ "version": "7.20.4", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.4.tgz", "integrity": "sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==", - "dev": true, "dependencies": { "@babel/types": "^7.20.2", "@jridgewell/gen-mapping": "^0.3.2", @@ -246,7 +245,6 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, "dependencies": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -260,7 +258,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "dev": true, "dependencies": { "@babel/types": "^7.18.6" }, @@ -357,7 +354,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -378,7 +374,6 @@ "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", - "dev": true, "dependencies": { "@babel/template": "^7.18.10", "@babel/types": "^7.19.0" @@ -391,7 +386,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dev": true, "dependencies": { "@babel/types": "^7.18.6" }, @@ -415,7 +409,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "dev": true, "dependencies": { "@babel/types": "^7.18.6" }, @@ -525,7 +518,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "dev": true, "dependencies": { "@babel/types": "^7.18.6" }, @@ -537,7 +529,6 @@ "version": "7.19.4", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -546,7 +537,6 @@ "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true, "engines": { "node": ">=6.9.0" } @@ -593,7 +583,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", @@ -607,7 +596,6 @@ "version": "7.20.3", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.3.tgz", "integrity": "sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==", - "dev": true, "bin": { "parser": "bin/babel-parser.js" }, @@ -1715,7 +1703,6 @@ "version": "7.18.10", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", - "dev": true, "dependencies": { "@babel/code-frame": "^7.18.6", "@babel/parser": "^7.18.10", @@ -1729,7 +1716,6 @@ "version": "7.20.1", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz", "integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==", - "dev": true, "dependencies": { "@babel/code-frame": "^7.18.6", "@babel/generator": "^7.20.1", @@ -1750,7 +1736,6 @@ "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.2.tgz", "integrity": "sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==", - "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.19.4", "@babel/helper-validator-identifier": "^7.19.1", @@ -1958,6 +1943,59 @@ "node": ">=10.0.0" } }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz", + "integrity": "sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg==", + "dependencies": { + "@emotion/memoize": "^0.8.0" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.0.tgz", + "integrity": "sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==" + }, + "node_modules/@emotion/stylis": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", + "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==" + }, + "node_modules/@emotion/unitless": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", + "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.7.tgz", + "integrity": "sha512-VUb9GK23z8jkosHU9yJNUgQpsfJn+7ZyBm6adi2Ec5/U241eR1tAn82QicnUzaFDaffeixiHwikjmnec/YXEZg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.7.tgz", + "integrity": "sha512-xi/tbqCqvPIzU+zJVyrpz12xqciTAPMi2fXEWGnapZymoGhuL2GIWIRXg4O2v5BXaYA5TSaiKYE14L0QhUTuQg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@eslint/eslintrc": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.3.0.tgz", @@ -2101,6 +2139,32 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, + "node_modules/@ipfs-shipyard/ignite-metrics": { + "version": "1.0.0", + "resolved": "file:ipfs-shipyard-ignite-metrics-1.0.0.tgz", + "integrity": "sha512-YSR9Q9si/5+KJl24KCWK/chXVzLSBgKGhUYqIADsESw4rjgBu0elnCNCxXYXLht4Uann1M62UnxGMiCnVSxE6Q==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "countly-sdk-web": "^22.6.4", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-router-dom": "^6.4.5", + "styled-components": "^5.3.6" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + }, + "optionalDependencies": { + "@esbuild/darwin-arm64": "^0.16.5", + "@esbuild/linux-x64": "^0.16.5", + "react-refresh": "^0.14.0" + }, + "peerDependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0" + } + }, "node_modules/@ipld/car": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/@ipld/car/-/car-5.0.1.tgz", @@ -2248,7 +2312,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, "engines": { "node": ">=6.0.0" } @@ -2257,7 +2320,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, "engines": { "node": ">=6.0.0" } @@ -2289,14 +2351,12 @@ "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.14", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.17", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "dev": true, "dependencies": { "@jridgewell/resolve-uri": "3.1.0", "@jridgewell/sourcemap-codec": "1.4.14" @@ -4095,6 +4155,14 @@ "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" }, + "node_modules/@remix-run/router": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.0.5.tgz", + "integrity": "sha512-my0Mycd+jruq/1lQuO5LBB6WTlL/e8DTCYWp44DfMTDcXz8DcTlgF0ISaLsGewt+ctHN+yA8xMq3q/N7uWJPug==", + "engines": { + "node": ">=14" + } + }, "node_modules/@samverschueren/stream-to-observable": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz", @@ -5600,7 +5668,6 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, "dependencies": { "color-convert": "^1.9.0" }, @@ -5939,12 +6006,32 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/babel-plugin-styled-components": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.0.7.tgz", + "integrity": "sha512-i7YhvPgVqRKfoQ66toiZ06jPNA3p6ierpfUuEWxNF+fV27Uv5gxBkf8KZLHUCc1nFA9j6+80pYoIpqCeyW3/bA==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.0", + "@babel/helper-module-imports": "^7.16.0", + "babel-plugin-syntax-jsx": "^6.18.0", + "lodash": "^4.17.11", + "picomatch": "^2.3.0" + }, + "peerDependencies": { + "styled-components": ">= 2" + } + }, "node_modules/babel-plugin-syntax-async-generators": { "version": "6.13.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz", "integrity": "sha512-EbciFN5Jb9iqU9bqaLmmFLx2G8pAUsvpWJ6OzOWBNrSY9qTohXj+7YfZx6Ug1Qqh7tCb1EA7Jvn9bMC1HBiucg==", "dev": true }, + "node_modules/babel-plugin-syntax-jsx": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", + "integrity": "sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw==" + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -6647,6 +6734,14 @@ "node": ">=0.10.0" } }, + "node_modules/camelize": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", + "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/caniuse-lite": { "version": "1.0.30001434", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001434.tgz", @@ -6722,7 +6817,6 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -7141,7 +7235,6 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, "dependencies": { "color-name": "1.1.3" } @@ -7149,8 +7242,7 @@ "node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "node_modules/colorette": { "version": "2.0.19", @@ -7355,6 +7447,11 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, + "node_modules/countly-sdk-web": { + "version": "22.6.4", + "resolved": "https://registry.npmjs.org/countly-sdk-web/-/countly-sdk-web-22.6.4.tgz", + "integrity": "sha512-G2JWVqFrRHoEU4/G7D1EPn16jKzSaJD/mpWNK73+8JNPjuRhnSsdotCtekZnOAcT1yDM0r+NoXA9BKn0R87Jsw==" + }, "node_modules/cross-env": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", @@ -7413,6 +7510,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/css-color-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", + "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", + "engines": { + "node": ">=4" + } + }, "node_modules/css-loader": { "version": "6.7.2", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.2.tgz", @@ -7482,6 +7587,16 @@ "url": "https://github.com/sponsors/fb55" } }, + "node_modules/css-to-react-native": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.0.0.tgz", + "integrity": "sha512-Ro1yETZA813eoyUp2GDBhG2j+YggidUmzO1/v9eYBKR2EHVEniE2MI/NqpTQ954BMpTPZFsGNPm46qFB9dpaPQ==", + "dependencies": { + "camelize": "^1.0.0", + "css-color-keywords": "^1.0.0", + "postcss-value-parser": "^4.0.2" + } + }, "node_modules/css-what": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", @@ -10567,7 +10682,6 @@ "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, "engines": { "node": ">=4" } @@ -10785,7 +10899,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, "engines": { "node": ">=4" } @@ -10886,6 +10999,14 @@ "he": "bin/he" } }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } + }, "node_modules/hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", @@ -13411,8 +13532,7 @@ "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "node_modules/js-yaml": { "version": "3.14.1", @@ -13436,7 +13556,6 @@ "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, "bin": { "jsesc": "bin/jsesc" }, @@ -14236,7 +14355,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, @@ -16673,7 +16791,6 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, "engines": { "node": ">=8.6" }, @@ -17069,8 +17186,7 @@ "node_modules/postcss-value-parser": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, "node_modules/postmsg-rpc": { "version": "2.4.0", @@ -17461,11 +17577,33 @@ "node": ">=0.10.0" } }, + "node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/react-native-fetch-api": { "version": "2.0.0", @@ -17483,6 +17621,45 @@ "node": ">=8" } }, + "node_modules/react-refresh": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", + "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-router": { + "version": "6.4.5", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.4.5.tgz", + "integrity": "sha512-1RQJ8bM70YEumHIlNUYc6mFfUDoWa5EgPDenK/fq0bxD8DYpQUi/S6Zoft+9DBrh2xmtg92N5HMAJgGWDhKJ5Q==", + "dependencies": { + "@remix-run/router": "1.0.5" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.4.5", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.4.5.tgz", + "integrity": "sha512-a7HsgikBR0wNfroBHcZUCd9+mLRqZS8R5U1Z1mzLWxFXEkUT3vR1XXmSIVoVpxVX8Bar0nQYYYc9Yipq8dWwAA==", + "dependencies": { + "@remix-run/router": "1.0.5", + "react-router": "6.4.5" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, "node_modules/read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", @@ -18189,6 +18366,14 @@ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, + "node_modules/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, "node_modules/schema-utils": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", @@ -18365,6 +18550,11 @@ "node": ">=8" } }, + "node_modules/shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -19181,6 +19371,36 @@ "webpack": "^5.0.0" } }, + "node_modules/styled-components": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.3.6.tgz", + "integrity": "sha512-hGTZquGAaTqhGWldX7hhfzjnIYBZ0IXQXkCYdvF1Sq3DsUaLx6+NTHC5Jj1ooM2F68sBiVz3lvhfwQs/S3l6qg==", + "hasInstallScript": true, + "dependencies": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/traverse": "^7.4.5", + "@emotion/is-prop-valid": "^1.1.0", + "@emotion/stylis": "^0.8.4", + "@emotion/unitless": "^0.7.4", + "babel-plugin-styled-components": ">= 1.12.0", + "css-to-react-native": "^3.0.0", + "hoist-non-react-statics": "^3.0.0", + "shallowequal": "^1.1.0", + "supports-color": "^5.5.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/styled-components" + }, + "peerDependencies": { + "react": ">= 16.8.0", + "react-dom": ">= 16.8.0", + "react-is": ">= 16.8.0" + } + }, "node_modules/super-regex": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/super-regex/-/super-regex-0.2.0.tgz", @@ -19294,7 +19514,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -19756,7 +19975,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, "engines": { "node": ">=4" } @@ -21789,7 +22007,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, "requires": { "@babel/highlight": "^7.18.6" } @@ -21827,7 +22044,6 @@ "version": "7.20.4", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.4.tgz", "integrity": "sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==", - "dev": true, "requires": { "@babel/types": "^7.20.2", "@jridgewell/gen-mapping": "^0.3.2", @@ -21838,7 +22054,6 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, "requires": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -21851,7 +22066,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "dev": true, "requires": { "@babel/types": "^7.18.6" } @@ -21920,8 +22134,7 @@ "@babel/helper-environment-visitor": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "dev": true + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==" }, "@babel/helper-explode-assignable-expression": { "version": "7.18.6", @@ -21936,7 +22149,6 @@ "version": "7.19.0", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", - "dev": true, "requires": { "@babel/template": "^7.18.10", "@babel/types": "^7.19.0" @@ -21946,7 +22158,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dev": true, "requires": { "@babel/types": "^7.18.6" } @@ -21964,7 +22175,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "dev": true, "requires": { "@babel/types": "^7.18.6" } @@ -22047,7 +22257,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "dev": true, "requires": { "@babel/types": "^7.18.6" } @@ -22055,14 +22264,12 @@ "@babel/helper-string-parser": { "version": "7.19.4", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", - "dev": true + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" }, "@babel/helper-validator-identifier": { "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" }, "@babel/helper-validator-option": { "version": "7.18.6", @@ -22097,7 +22304,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", @@ -22107,8 +22313,7 @@ "@babel/parser": { "version": "7.20.3", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.3.tgz", - "integrity": "sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==", - "dev": true + "integrity": "sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==" }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.18.6", @@ -22847,7 +23052,6 @@ "version": "7.18.10", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", - "dev": true, "requires": { "@babel/code-frame": "^7.18.6", "@babel/parser": "^7.18.10", @@ -22858,7 +23062,6 @@ "version": "7.20.1", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz", "integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==", - "dev": true, "requires": { "@babel/code-frame": "^7.18.6", "@babel/generator": "^7.20.1", @@ -22876,7 +23079,6 @@ "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.2.tgz", "integrity": "sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==", - "dev": true, "requires": { "@babel/helper-string-parser": "^7.19.4", "@babel/helper-validator-identifier": "^7.19.1", @@ -23045,6 +23247,41 @@ "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", "dev": true }, + "@emotion/is-prop-valid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz", + "integrity": "sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg==", + "requires": { + "@emotion/memoize": "^0.8.0" + } + }, + "@emotion/memoize": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.0.tgz", + "integrity": "sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==" + }, + "@emotion/stylis": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", + "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==" + }, + "@emotion/unitless": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", + "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" + }, + "@esbuild/darwin-arm64": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.7.tgz", + "integrity": "sha512-VUb9GK23z8jkosHU9yJNUgQpsfJn+7ZyBm6adi2Ec5/U241eR1tAn82QicnUzaFDaffeixiHwikjmnec/YXEZg==", + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.7.tgz", + "integrity": "sha512-xi/tbqCqvPIzU+zJVyrpz12xqciTAPMi2fXEWGnapZymoGhuL2GIWIRXg4O2v5BXaYA5TSaiKYE14L0QhUTuQg==", + "optional": true + }, "@eslint/eslintrc": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.3.0.tgz", @@ -23164,6 +23401,20 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, + "@ipfs-shipyard/ignite-metrics": { + "version": "file:ipfs-shipyard-ignite-metrics-1.0.0.tgz", + "integrity": "sha512-YSR9Q9si/5+KJl24KCWK/chXVzLSBgKGhUYqIADsESw4rjgBu0elnCNCxXYXLht4Uann1M62UnxGMiCnVSxE6Q==", + "requires": { + "@esbuild/darwin-arm64": "^0.16.5", + "@esbuild/linux-x64": "^0.16.5", + "countly-sdk-web": "^22.6.4", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-refresh": "^0.14.0", + "react-router-dom": "^6.4.5", + "styled-components": "^5.3.6" + } + }, "@ipld/car": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/@ipld/car/-/car-5.0.1.tgz", @@ -23274,14 +23525,12 @@ "@jridgewell/resolve-uri": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" }, "@jridgewell/set-array": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" }, "@jridgewell/source-map": { "version": "0.3.2", @@ -23309,14 +23558,12 @@ "@jridgewell/sourcemap-codec": { "version": "1.4.14", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "@jridgewell/trace-mapping": { "version": "0.3.17", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "dev": true, "requires": { "@jridgewell/resolve-uri": "3.1.0", "@jridgewell/sourcemap-codec": "1.4.14" @@ -24744,6 +24991,11 @@ "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" }, + "@remix-run/router": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.0.5.tgz", + "integrity": "sha512-my0Mycd+jruq/1lQuO5LBB6WTlL/e8DTCYWp44DfMTDcXz8DcTlgF0ISaLsGewt+ctHN+yA8xMq3q/N7uWJPug==" + }, "@samverschueren/stream-to-observable": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz", @@ -25947,7 +26199,6 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, "requires": { "color-convert": "^1.9.0" } @@ -26192,12 +26443,29 @@ "@babel/helper-define-polyfill-provider": "^0.3.3" } }, + "babel-plugin-styled-components": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.0.7.tgz", + "integrity": "sha512-i7YhvPgVqRKfoQ66toiZ06jPNA3p6ierpfUuEWxNF+fV27Uv5gxBkf8KZLHUCc1nFA9j6+80pYoIpqCeyW3/bA==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.0", + "@babel/helper-module-imports": "^7.16.0", + "babel-plugin-syntax-jsx": "^6.18.0", + "lodash": "^4.17.11", + "picomatch": "^2.3.0" + } + }, "babel-plugin-syntax-async-generators": { "version": "6.13.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz", "integrity": "sha512-EbciFN5Jb9iqU9bqaLmmFLx2G8pAUsvpWJ6OzOWBNrSY9qTohXj+7YfZx6Ug1Qqh7tCb1EA7Jvn9bMC1HBiucg==", "dev": true }, + "babel-plugin-syntax-jsx": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", + "integrity": "sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw==" + }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -26704,6 +26972,11 @@ } } }, + "camelize": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", + "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==" + }, "caniuse-lite": { "version": "1.0.30001434", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001434.tgz", @@ -26757,7 +27030,6 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -27066,7 +27338,6 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, "requires": { "color-name": "1.1.3" } @@ -27074,8 +27345,7 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "colorette": { "version": "2.0.19", @@ -27236,6 +27506,11 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, + "countly-sdk-web": { + "version": "22.6.4", + "resolved": "https://registry.npmjs.org/countly-sdk-web/-/countly-sdk-web-22.6.4.tgz", + "integrity": "sha512-G2JWVqFrRHoEU4/G7D1EPn16jKzSaJD/mpWNK73+8JNPjuRhnSsdotCtekZnOAcT1yDM0r+NoXA9BKn0R87Jsw==" + }, "cross-env": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", @@ -27272,6 +27547,11 @@ } } }, + "css-color-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", + "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==" + }, "css-loader": { "version": "6.7.2", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.2.tgz", @@ -27321,6 +27601,16 @@ "nth-check": "^2.0.1" } }, + "css-to-react-native": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.0.0.tgz", + "integrity": "sha512-Ro1yETZA813eoyUp2GDBhG2j+YggidUmzO1/v9eYBKR2EHVEniE2MI/NqpTQ954BMpTPZFsGNPm46qFB9dpaPQ==", + "requires": { + "camelize": "^1.0.0", + "css-color-keywords": "^1.0.0", + "postcss-value-parser": "^4.0.2" + } + }, "css-what": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", @@ -29642,8 +29932,7 @@ "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" }, "globby": { "version": "11.1.0", @@ -29806,8 +30095,7 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" }, "has-property-descriptors": { "version": "1.0.0", @@ -29875,6 +30163,14 @@ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, + "hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "requires": { + "react-is": "^16.7.0" + } + }, "hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", @@ -31725,8 +32021,7 @@ "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "js-yaml": { "version": "3.14.1", @@ -31746,8 +32041,7 @@ "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" }, "json": { "version": "11.0.0", @@ -32422,7 +32716,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, "requires": { "js-tokens": "^3.0.0 || ^4.0.0" } @@ -34239,8 +34532,7 @@ "picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" }, "pidtree": { "version": "0.3.1", @@ -34528,8 +34820,7 @@ "postcss-value-parser": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, "postmsg-rpc": { "version": "2.4.0", @@ -34830,11 +35121,27 @@ } } }, + "react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "requires": { + "loose-envify": "^1.1.0" + } + }, + "react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "requires": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + } + }, "react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "react-native-fetch-api": { "version": "2.0.0", @@ -34851,6 +35158,29 @@ } } }, + "react-refresh": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", + "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", + "optional": true + }, + "react-router": { + "version": "6.4.5", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.4.5.tgz", + "integrity": "sha512-1RQJ8bM70YEumHIlNUYc6mFfUDoWa5EgPDenK/fq0bxD8DYpQUi/S6Zoft+9DBrh2xmtg92N5HMAJgGWDhKJ5Q==", + "requires": { + "@remix-run/router": "1.0.5" + } + }, + "react-router-dom": { + "version": "6.4.5", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.4.5.tgz", + "integrity": "sha512-a7HsgikBR0wNfroBHcZUCd9+mLRqZS8R5U1Z1mzLWxFXEkUT3vR1XXmSIVoVpxVX8Bar0nQYYYc9Yipq8dWwAA==", + "requires": { + "@remix-run/router": "1.0.5", + "react-router": "6.4.5" + } + }, "read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", @@ -35375,6 +35705,14 @@ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, + "scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "requires": { + "loose-envify": "^1.1.0" + } + }, "schema-utils": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", @@ -35513,6 +35851,11 @@ "kind-of": "^6.0.2" } }, + "shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -36155,6 +36498,23 @@ "dev": true, "requires": {} }, + "styled-components": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.3.6.tgz", + "integrity": "sha512-hGTZquGAaTqhGWldX7hhfzjnIYBZ0IXQXkCYdvF1Sq3DsUaLx6+NTHC5Jj1ooM2F68sBiVz3lvhfwQs/S3l6qg==", + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/traverse": "^7.4.5", + "@emotion/is-prop-valid": "^1.1.0", + "@emotion/stylis": "^0.8.4", + "@emotion/unitless": "^0.7.4", + "babel-plugin-styled-components": ">= 1.12.0", + "css-to-react-native": "^3.0.0", + "hoist-non-react-statics": "^3.0.0", + "shallowequal": "^1.1.0", + "supports-color": "^5.5.0" + } + }, "super-regex": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/super-regex/-/super-regex-0.2.0.tgz", @@ -36239,7 +36599,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "requires": { "has-flag": "^3.0.0" } @@ -36589,8 +36948,7 @@ "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" }, "to-regex-range": { "version": "5.0.1", diff --git a/package.json b/package.json index 1925c0413..937808135 100644 --- a/package.json +++ b/package.json @@ -118,6 +118,7 @@ "webpack-merge": "5.8.0" }, "dependencies": { + "@ipfs-shipyard/ignite-metrics": "file:ipfs-shipyard-ignite-metrics-1.0.0.tgz", "@material/switch": "10.0.0", "assert": "2.0.0", "buffer": "6.0.3", From 829283ecc4ce51e0215343718b7b4a70a304ab37 Mon Sep 17 00:00:00 2001 From: Russell Dempsey <1173416+SgtPooki@users.noreply.github.com> Date: Fri, 16 Dec 2022 18:55:32 -0800 Subject: [PATCH 03/29] feat: ipfs-companion tracks views and sessions --- .gitignore | 3 + add-on/_locales/en/messages.json | 12 +- add-on/src/background/background.html | 1 + add-on/src/background/background.js | 2 + add-on/src/landing-pages/welcome/store.js | 2 + add-on/src/lib/ipfs-companion.js | 10 +- add-on/src/lib/state.js | 2 +- add-on/src/lib/telemetry.js | 52 +- add-on/src/options/forms/telemetry-form.js | 38 +- add-on/src/options/page.js | 9 +- add-on/src/options/store.js | 7 +- add-on/src/popup/browser-action/store.js | 2 + add-on/src/popup/quick-import.js | 2 + ipfs-shipyard-ignite-metrics-1.0.0.tgz | Bin 46601 -> 0 bytes package-lock.json | 1025 +++++++++++++++++++- package.json | 2 +- 16 files changed, 1061 insertions(+), 108 deletions(-) delete mode 100644 ipfs-shipyard-ignite-metrics-1.0.0.tgz diff --git a/.gitignore b/.gitignore index 895dd6ff7..4558205d4 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,6 @@ /coverage /.nyc_output /add-on/manifest.json + +.DS_Store +.vscode diff --git a/add-on/_locales/en/messages.json b/add-on/_locales/en/messages.json index 94ae2b437..11e451ee9 100644 --- a/add-on/_locales/en/messages.json +++ b/add-on/_locales/en/messages.json @@ -736,13 +736,21 @@ "description": "Disclaimer about telemetry collection in the telemetry section on the Preferences screen (option_telemetry_disclaimer)" }, "option_telemetryGroupMinimal_title": { - "message": "Minimal title", + "message": "Minimal metrics: session & companion views", "description": "A title for the 'minimal' grouping of metrics we collect (option_telemetryGroupMinimal_title)" }, "option_telemetryGroupMinimal_description": { - "message": "Minimal description", + "message": "We send `session` and `view` events only if ipfs-companion is enabled and your browser is not idle.", "description": "A description for the 'minimal' grouping of metrics we collect (option_telemetryGroupMinimal_description)" }, + "option_telemetryGroupMinimal_session_description": { + "message": "A `session` event - every 60 seconds.", + "description": "An explanation of the `session` telemetry we collect (option_telemetryGroupMinimal_session_description)" + }, + "option_telemetryGroupMinimal_view_description": { + "message": "A `view` event - only for ipfs-companion pages.", + "description": "An explanation of the `session` telemetry we collect (option_telemetryGroupMinimal_session_description)" + }, "option_telemetryGroupMarketing_title": { "message": "Marketing title", "description": "A title for the 'marketing' grouping of metrics we collect (option_telemetryGroupMarketing_title)" diff --git a/add-on/src/background/background.html b/add-on/src/background/background.html index 097491878..e3ea3c511 100644 --- a/add-on/src/background/background.html +++ b/add-on/src/background/background.html @@ -2,3 +2,4 @@ + diff --git a/add-on/src/background/background.js b/add-on/src/background/background.js index fc5fc0a98..4bd876944 100644 --- a/add-on/src/background/background.js +++ b/add-on/src/background/background.js @@ -6,6 +6,7 @@ import { onInstalled } from '../lib/on-installed.js' import { getUninstallURL } from '../lib/on-uninstalled.js' import { optionDefaults } from '../lib/options.js' import createIpfsCompanion from '../lib/ipfs-companion.js' +import { trackView } from '../lib/telemetry.js' // register lifecycle hooks early, otherwise we miss first install event browser.runtime.onInstalled.addListener(onInstalled) @@ -13,6 +14,7 @@ browser.runtime.setUninstallURL(getUninstallURL(browser)) // init add-on after all libs are loaded document.addEventListener('DOMContentLoaded', async () => { + trackView('background') // setting debug namespaces require page reload to get applied const debugNs = (await browser.storage.local.get({ logNamespaces: optionDefaults.logNamespaces })).logNamespaces if (debugNs !== localStorage.debug) { diff --git a/add-on/src/landing-pages/welcome/store.js b/add-on/src/landing-pages/welcome/store.js index aaf32b6a1..d9498b85d 100644 --- a/add-on/src/landing-pages/welcome/store.js +++ b/add-on/src/landing-pages/welcome/store.js @@ -1,6 +1,7 @@ 'use strict' /* eslint-env browser, webextensions */ import browser from 'webextension-polyfill' +import { trackView } from '../../lib/telemetry.js' export default function createWelcomePageStore (i18n, runtime) { return function welcomePageStore (state, emitter) { @@ -9,6 +10,7 @@ export default function createWelcomePageStore (i18n, runtime) { state.webuiRootUrl = null let port emitter.on('DOMContentLoaded', async () => { + trackView('welcome') emitter.emit('render') port = runtime.connect({ name: 'browser-action-port' }) port.onMessage.addListener(async (message) => { diff --git a/add-on/src/lib/ipfs-companion.js b/add-on/src/lib/ipfs-companion.js index 4aa683a61..08ad9692c 100644 --- a/add-on/src/lib/ipfs-companion.js +++ b/add-on/src/lib/ipfs-companion.js @@ -23,7 +23,7 @@ import createRuntimeChecks from './runtime-checks.js' import { createContextMenus, findValueForContext, contextMenuCopyAddressAtPublicGw, contextMenuCopyRawCid, contextMenuCopyCanonicalAddress, contextMenuViewOnGateway, contextMenuCopyPermalink, contextMenuCopyCidAddress } from './context-menus.js' import { registerSubdomainProxy } from './http-proxy.js' import { runPendingOnInstallTasks } from './on-installed.js' -import { initializeTelemetry } from './telemetry.js' +import { handleConsentFromState, startSession, endSession } from './telemetry.js' const log = debug('ipfs-companion:main') log.error = debug('ipfs-companion:main:error') @@ -59,6 +59,7 @@ export default async function init () { notify = createNotifier(getState) if (state.active) { + startSession() // It's ok for this to fail, node might be unavailable or mis-configured try { ipfs = await initIpfsClient(browser, state) @@ -70,11 +71,6 @@ export default async function init () { ) } } - try { - await initializeTelemetry(getState) - } catch (err) { - log.error('Failed to initialize telemetry', err) - } dnslinkResolver = createDnslinkResolver(getState) ipfsPathValidator = createIpfsPathValidator(getState, getIpfs, dnslinkResolver) @@ -563,6 +559,7 @@ export default async function init () { await registerSubdomainProxy(getState, runtime) shouldRestartIpfsClient = true shouldStopIpfsClient = !state.active + state.active ? startSession() : endSession() break case 'ipfsNodeType': if (change.oldValue !== braveNodeType && change.newValue === braveNodeType) { @@ -629,6 +626,7 @@ export default async function init () { break } } + handleConsentFromState(state) if ((state.active && shouldRestartIpfsClient) || shouldStopIpfsClient) { try { diff --git a/add-on/src/lib/state.js b/add-on/src/lib/state.js index f37ac5a4b..1e72c0d5a 100644 --- a/add-on/src/lib/state.js +++ b/add-on/src/lib/state.js @@ -5,6 +5,7 @@ import { safeURL, isHostname } from './options.js' /** * @typedef {object} CompanionState + * @extends {typeof import('./options').optionDefaults} * @property {number} peerCount * @property {URL} pubGwURL * @property {string} pubGwURLString @@ -19,7 +20,6 @@ import { safeURL, isHostname } from './options.js' * @property {(url: string|URL) => boolean} activeIntegrations * @property {boolean} localGwAvailable * @property {string} webuiRootUrl - * @property {typeof import('./options').optionDefaults} options */ export const offlinePeerCount = -1 diff --git a/add-on/src/lib/telemetry.js b/add-on/src/lib/telemetry.js index 5dcb70858..dcb8ddb73 100644 --- a/add-on/src/lib/telemetry.js +++ b/add-on/src/lib/telemetry.js @@ -1,15 +1,14 @@ import { MetricsProvider } from '@ipfs-shipyard/ignite-metrics/vanilla' -const metricsProvider = new MetricsProvider('393f72eb264c28a1b59973da1e0a3938d60dc38a') -/** - * @param {() => ReturnType} getState - * @returns {void} - */ -export async function initializeTelemetry (getState) { - // await metricsProvider.init() - // initCountlyMetrics('393f72eb264c28a1b59973da1e0a3938d60dc38a') - handleConsentFromState(getState()) +let metricsProvider = null +export function getMetricsProviderInstance () { + if (metricsProvider != null) { + return metricsProvider + } + metricsProvider = new MetricsProvider({ appKey: '393f72eb264c28a1b59973da1e0a3938d60dc38a', autoTrack: false }) + + return metricsProvider } /** @@ -18,23 +17,44 @@ export async function initializeTelemetry (getState) { */ function mapStateToConsent (stateOptions) { const obj = { - minimal: stateOptions.telemetryGroupMinimal, - marketing: stateOptions.telemetryGroupMarketing, - performance: stateOptions.telemetryGroupPerformance, - tracking: stateOptions.telemetryGroupTracking + minimal: stateOptions?.telemetryGroupMinimal || false, + marketing: stateOptions?.telemetryGroupMarketing || false, + performance: stateOptions?.telemetryGroupPerformance || false, + tracking: stateOptions?.telemetryGroupTracking || false } const enabledConsentGroups = Object.keys(obj).filter(key => obj[key] === true) console.log('enabledConsentGroups: ', enabledConsentGroups) return enabledConsentGroups } +function logConsent () { + console.log('checkConsent(\'minimal\'): ', getMetricsProviderInstance().checkConsent('minimal')) + console.log('checkConsent(\'marketing\'): ', getMetricsProviderInstance().checkConsent('marketing')) + console.log('checkConsent(\'performance\'): ', getMetricsProviderInstance().checkConsent('performance')) + console.log('checkConsent(\'tracking\'): ', getMetricsProviderInstance().checkConsent('tracking')) +} /** * * @param {ReturnType} state * @returns {void} */ export function handleConsentFromState (state) { - const { options } = state - console.log('handleConsentFromState', options) - metricsProvider.updateConsent(mapStateToConsent(options)) + console.log('handleConsentFromState', state) + getMetricsProviderInstance().updateConsent(mapStateToConsent(state)) + logConsent() } + +export function handleConsentUpdate (consent) { + console.log('handleConsentUpdate', consent) + getMetricsProviderInstance().updateConsent(consent) +} + +// const ignoredViewsRegex = [/^ipfs:\/\/.*/] +const ignoredViewsRegex = [] +export function trackView (view) { + console.log('trackView called for view: ', view) + getMetricsProviderInstance().metricsService.track_pageview(view, ignoredViewsRegex) +} + +export const startSession = (...args) => getMetricsProviderInstance().startSession(...args) +export const endSession = (...args) => getMetricsProviderInstance().endSession(...args) diff --git a/add-on/src/options/forms/telemetry-form.js b/add-on/src/options/forms/telemetry-form.js index 4b080d847..3b588cdf4 100644 --- a/add-on/src/options/forms/telemetry-form.js +++ b/add-on/src/options/forms/telemetry-form.js @@ -7,8 +7,11 @@ import switchToggle from '../../pages/components/switch-toggle.js' export default function telemetryForm ({ onOptionChange, - stateOptions + ...stateOptions }) { + // const onTelemetryChange = (key) => { + + // } return html`

@@ -25,38 +28,15 @@ export default function telemetryForm ({
${switchToggle({ id: 'telemetryGroupMinimal', checked: stateOptions.telemetryGroupMinimal, onchange: onOptionChange('telemetryGroupMinimal') })}
-
- -
${switchToggle({ id: 'telemetryGroupMarketing', checked: stateOptions.telemetryGroupMarketing, onchange: onOptionChange('telemetryGroupMarketing') })}
-
-
- -
${switchToggle({ id: 'telemetryGroupPerformance', checked: stateOptions.telemetryGroupPerformance, onchange: onOptionChange('telemetryGroupPerformance') })}
-
-
- -
${switchToggle({ id: 'telemetryGroupTracking', checked: stateOptions.telemetryGroupTracking, onchange: onOptionChange('telemetryGroupTracking') })}
-
` diff --git a/add-on/src/options/page.js b/add-on/src/options/page.js index 6e0d6862e..f506c5635 100644 --- a/add-on/src/options/page.js +++ b/add-on/src/options/page.js @@ -11,6 +11,7 @@ import apiForm from './forms/api-form.js' import experimentsForm from './forms/experiments-form.js' import telemetryForm from './forms/telemetry-form.js' import resetForm from './forms/reset-form.js' +import { trackView } from '../lib/telemetry.js' // Render the options page: // Passed current app `state` from the store and `emit`, a function to create @@ -103,7 +104,13 @@ export default function optionsPage (state, emit) { logNamespaces: state.options.logNamespaces, onOptionChange })} - ${telemetryForm({ onOptionChange, stateOptions: state.options })} + ${telemetryForm({ + telemetryGroupMinimal: state.options.telemetryGroupMinimal, + telemetryGroupMarketing: state.options.telemetryGroupMarketing, + telemetryGroupPerformance: state.options.telemetryGroupPerformance, + telemetryGroupTracking: state.options.telemetryGroupTracking, + onOptionChange + })} ${resetForm({ onOptionsReset })} diff --git a/add-on/src/options/store.js b/add-on/src/options/store.js index 3c88c41ab..cc50a5931 100644 --- a/add-on/src/options/store.js +++ b/add-on/src/options/store.js @@ -4,7 +4,7 @@ import browser from 'webextension-polyfill' import { optionDefaults } from '../lib/options.js' import createRuntimeChecks from '../lib/runtime-checks.js' -import { handleConsentFromState } from '../lib/telemetry.js' +import { trackView } from '../lib/telemetry.js' // The store contains and mutates the state for the app export default function optionStore (state, emitter) { @@ -13,12 +13,15 @@ export default function optionStore (state, emitter) { const updateStateOptions = async () => { const runtime = await createRuntimeChecks(browser) state.withNodeFromBrave = runtime.brave && await runtime.brave.getIPFSEnabled() + /** + * FIXME: Why are we setting `state.options` when state is supposed to extend options? + */ state.options = await getOptions() - handleConsentFromState(state) emitter.emit('render') } emitter.on('DOMContentLoaded', async () => { + trackView('options') updateStateOptions() browser.storage.onChanged.addListener(updateStateOptions) }) diff --git a/add-on/src/popup/browser-action/store.js b/add-on/src/popup/browser-action/store.js index e2ea6a39b..220136b32 100644 --- a/add-on/src/popup/browser-action/store.js +++ b/add-on/src/popup/browser-action/store.js @@ -7,6 +7,7 @@ import { browserActionFilesCpImportCurrentTab } from '../../lib/ipfs-import.js' import { ipfsContentPath } from '../../lib/ipfs-path.js' import { welcomePage, optionsPage } from '../../lib/constants.js' import { contextMenuViewOnGateway, contextMenuCopyAddressAtPublicGw, contextMenuCopyPermalink, contextMenuCopyRawCid, contextMenuCopyCanonicalAddress, contextMenuCopyCidAddress } from '../../lib/context-menus.js' +import { trackView } from '../../lib/telemetry.js' // The store contains and mutates the state for the app export default (state, emitter) => { @@ -38,6 +39,7 @@ export default (state, emitter) => { let port emitter.on('DOMContentLoaded', async () => { + trackView('browser-action') // initial render with status stub emitter.emit('render') // initialize connection to the background script which will trigger UI updates diff --git a/add-on/src/popup/quick-import.js b/add-on/src/popup/quick-import.js index a98b54810..d3b7666b1 100644 --- a/add-on/src/popup/quick-import.js +++ b/add-on/src/popup/quick-import.js @@ -12,6 +12,7 @@ import { formatImportDirectory } from '../lib/ipfs-import.js' import all from 'it-all' import drop from 'drag-and-drop-files' import { filesize } from 'filesize' +import { trackView } from '../lib/telemetry.js' document.title = browser.i18n.getMessage('quickImport_page_title') @@ -48,6 +49,7 @@ function quickImportStore (state, emitter) { let port emitter.on('DOMContentLoaded', async () => { + trackView('quick-import') // initialize connection to the background script which will trigger UI updates port = browser.runtime.connect({ name: 'browser-action-port' }) port.onMessage.addListener(async (message) => { diff --git a/ipfs-shipyard-ignite-metrics-1.0.0.tgz b/ipfs-shipyard-ignite-metrics-1.0.0.tgz deleted file mode 100644 index 938f8c3afa41d26fbe88c252e6d2cdd956872cc5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46601 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

2ahVHR(S#iuuSTDjTOfMOn@Q&Rf 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 diff --git a/package-lock.json b/package-lock.json index 642799be7..1ff28a6b6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,7 +7,7 @@ "name": "ipfs-companion", "license": "CC0-1.0", "dependencies": { - "@ipfs-shipyard/ignite-metrics": "file:ipfs-shipyard-ignite-metrics-1.0.0.tgz", + "@ipfs-shipyard/ignite-metrics": "github:ipfs-shipyard/ignite-metrics#2546b8a7de9114f3e6903894d29f251276cef035", "@material/switch": "10.0.0", "assert": "2.0.0", "buffer": "6.0.3", @@ -1966,6 +1966,54 @@ "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" }, + "node_modules/@esbuild/android-arm": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.7.tgz", + "integrity": "sha512-yhzDbiVcmq6T1/XEvdcJIVcXHdLjDJ5cQ0Dp9R9p9ERMBTeO1dR5tc8YYv8zwDeBw1xZm+Eo3MRo8cwclhBS0g==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.7.tgz", + "integrity": "sha512-tYFw0lBJSEvLoGzzYh1kXuzoX1iPkbOk3O29VqzQb0HbOy7t/yw1hGkvwoJhXHwzQUPsShyYcTgRf6bDBcfnTw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.7.tgz", + "integrity": "sha512-3P2OuTxwAtM3k/yEWTNUJRjMPG1ce8rXs51GTtvEC5z1j8fC1plHeVVczdeHECU7aM2/Buc0MwZ6ciM/zysnWg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, "node_modules/@esbuild/darwin-arm64": { "version": "0.16.7", "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.7.tgz", @@ -1981,6 +2029,182 @@ "node": ">=12" } }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.7.tgz", + "integrity": "sha512-duterlv3tit3HI9vhzMWnSVaB1B6YsXpFq1Ntd6Fou82BB1l4tucYy3FI9dHv3tvtDuS0NiGf/k6XsdBqPZ01w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.7.tgz", + "integrity": "sha512-9kkycpBFes/vhi7B7o0cf+q2WdJi+EpVzpVTqtWFNiutARWDFFLcB93J8PR1cG228sucsl3B+7Ts27izE6qiaQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.7.tgz", + "integrity": "sha512-5Ahf6jzWXJ4J2uh9dpy5DKOO+PeRUE/9DMys6VuYfwgQzd6n5+pVFm58L2Z2gRe611RX6SdydnNaiIKM3svY7g==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.7.tgz", + "integrity": "sha512-QqJnyCfu5OF78Olt7JJSZ7OSv/B4Hf+ZJWp4kkq9xwMsgu7yWq3crIic8gGOpDYTqVKKMDAVDgRXy5Wd/nWZyQ==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.7.tgz", + "integrity": "sha512-2wv0xYDskk2+MzIm/AEprDip39a23Chptc4mL7hsHg26P0gD8RUhzmDu0KCH2vMThUI1sChXXoK9uH0KYQKaDg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.7.tgz", + "integrity": "sha512-APVYbEilKbD5ptmKdnIcXej2/+GdV65TfTjxR2Uk8t1EsOk49t6HapZW6DS/Bwlvh5hDwtLapdSumIVNGxgqLg==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.7.tgz", + "integrity": "sha512-5wPUAGclplQrAW7EFr3F84Y/d++7G0KykohaF4p54+iNWhUnMVU8Bh2sxiEOXUy4zKIdpHByMgJ5/Ko6QhtTUw==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.7.tgz", + "integrity": "sha512-hxzlXtWF6yWfkE/SMTscNiVqLOAn7fOuIF3q/kiZaXxftz1DhZW/HpnTmTTWrzrS7zJWQxHHT4QSxyAj33COmA==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.7.tgz", + "integrity": "sha512-WM83Dac0LdXty5xPhlOuCD5Egfk1xLND/oRLYeB7Jb/tY4kzFSDgLlq91wYbHua/s03tQGA9iXvyjgymMw62Vw==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.7.tgz", + "integrity": "sha512-3nkNnNg4Ax6MS/l8O8Ynq2lGEVJYyJ2EoY3PHjNJ4PuZ80EYLMrFTFZ4L/Hc16AxgtXKwmNP9TM0YKNiBzBiJQ==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.7.tgz", + "integrity": "sha512-3SA/2VJuv0o1uD7zuqxEP+RrAyRxnkGddq0bwHQ98v1KNlzXD/JvxwTO3T6GM5RH6JUd29RTVQTOJfyzMkkppA==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, "node_modules/@esbuild/linux-x64": { "version": "0.16.7", "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.7.tgz", @@ -1996,6 +2220,102 @@ "node": ">=12" } }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.7.tgz", + "integrity": "sha512-NUsYbq3B+JdNKn8SXkItFvdes9qTwEoS3aLALtiWciW/ystiCKM20Fgv9XQBOXfhUHyh5CLEeZDXzLOrwBXuCQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.7.tgz", + "integrity": "sha512-qjwzsgeve9I8Tbsko2FEkdSk2iiezuNGFgipQxY/736NePXDaDZRodIejYGWOlbYXugdxb0nif5yvypH6lKBmA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.7.tgz", + "integrity": "sha512-mFWDz4RoBTzPphTCkM7Kc7Qpa0o/Z01acajR+Ai7LdfKgcP/C6jYOaKwv7nKzD0+MjOT20j7You9g4ozYy1dKQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.7.tgz", + "integrity": "sha512-m39UmX19RvEIuC8sYZ0M+eQtdXw4IePDSZ78ZQmYyFaXY9krq4YzQCK2XWIJomNLtg4q+W5aXr8bW3AbqWNoVg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.7.tgz", + "integrity": "sha512-1cbzSEZA1fANwmT6rjJ4G1qQXHxCxGIcNYFYR9ctI82/prT38lnwSRZ0i5p/MVXksw9eMlHlet6pGu2/qkXFCg==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.7.tgz", + "integrity": "sha512-QaQ8IH0JLacfGf5cf0HCCPnQuCTd/dAI257vXBgb/cccKGbH/6pVtI1gwhdAQ0Y48QSpTIFrh9etVyNdZY+zzw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, "node_modules/@eslint/eslintrc": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.3.0.tgz", @@ -2141,11 +2461,12 @@ }, "node_modules/@ipfs-shipyard/ignite-metrics": { "version": "1.0.0", - "resolved": "file:ipfs-shipyard-ignite-metrics-1.0.0.tgz", - "integrity": "sha512-YSR9Q9si/5+KJl24KCWK/chXVzLSBgKGhUYqIADsESw4rjgBu0elnCNCxXYXLht4Uann1M62UnxGMiCnVSxE6Q==", + "resolved": "git+ssh://git@github.com/ipfs-shipyard/ignite-metrics.git#2546b8a7de9114f3e6903894d29f251276cef035", + "integrity": "sha512-4U+IdhyOmlNaYeo68clg34jLBxCoYSGCu7/NlqyFNJ87xSBg52YQFtvoowN4xbyrGvu+V8ijYelOV3/COoPEMQ==", "license": "Apache-2.0 OR MIT", "dependencies": { "countly-sdk-web": "^22.6.4", + "esbuild-css-modules-plugin": "^2.6.3", "react": "^18.2.0", "react-dom": "^18.2.0", "react-router-dom": "^6.4.5", @@ -7613,7 +7934,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, "bin": { "cssesc": "bin/cssesc" }, @@ -8166,6 +8486,17 @@ "node": ">=0.10" } }, + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/diff": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", @@ -8665,6 +8996,94 @@ "node": ">=6" } }, + "node_modules/esbuild": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.7.tgz", + "integrity": "sha512-P6OBFYFSQOGzfApqCeYKqfKRRbCIRsdppTXFo4aAvtiW3o8TTyiIplBvHJI171saPAiy3WlawJHCveJVIOIx1A==", + "hasInstallScript": true, + "peer": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.16.7", + "@esbuild/android-arm64": "0.16.7", + "@esbuild/android-x64": "0.16.7", + "@esbuild/darwin-arm64": "0.16.7", + "@esbuild/darwin-x64": "0.16.7", + "@esbuild/freebsd-arm64": "0.16.7", + "@esbuild/freebsd-x64": "0.16.7", + "@esbuild/linux-arm": "0.16.7", + "@esbuild/linux-arm64": "0.16.7", + "@esbuild/linux-ia32": "0.16.7", + "@esbuild/linux-loong64": "0.16.7", + "@esbuild/linux-mips64el": "0.16.7", + "@esbuild/linux-ppc64": "0.16.7", + "@esbuild/linux-riscv64": "0.16.7", + "@esbuild/linux-s390x": "0.16.7", + "@esbuild/linux-x64": "0.16.7", + "@esbuild/netbsd-x64": "0.16.7", + "@esbuild/openbsd-x64": "0.16.7", + "@esbuild/sunos-x64": "0.16.7", + "@esbuild/win32-arm64": "0.16.7", + "@esbuild/win32-ia32": "0.16.7", + "@esbuild/win32-x64": "0.16.7" + } + }, + "node_modules/esbuild-css-modules-plugin": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/esbuild-css-modules-plugin/-/esbuild-css-modules-plugin-2.6.3.tgz", + "integrity": "sha512-Bi0NHhoWwW002eTbD0HIO38M/gCE7UEfv0ncSvBjn8F+eGZRUPMdSCYof2jCxxWoerG0xR7bLwDpv/yoPjP7EA==", + "dependencies": { + "fs-extra": "^10.1.0", + "lightningcss": "^1.17.1", + "lodash": "^4.17.21", + "postcss": "^8.4.19", + "postcss-modules": "^6.0.0", + "tmp": "^0.2.1" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "esbuild": "*" + } + }, + "node_modules/esbuild-css-modules-plugin/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-css-modules-plugin/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/esbuild-css-modules-plugin/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -10031,8 +10450,7 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "node_modules/fsevents": { "version": "2.3.2", @@ -10151,6 +10569,22 @@ "which": "bin/which" } }, + "node_modules/generic-names": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-4.0.0.tgz", + "integrity": "sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==", + "dependencies": { + "loader-utils": "^3.2.0" + } + }, + "node_modules/generic-names/node_modules/loader-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", + "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", + "engines": { + "node": ">= 12.13.0" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -10611,7 +11045,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -11120,7 +11553,6 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, "engines": { "node": "^10 || ^12 || >= 14" }, @@ -11264,7 +11696,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -14010,6 +14441,183 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, + "node_modules/lightningcss": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.17.1.tgz", + "integrity": "sha512-DwwM/YYqGwLLP3he41wzDXT/m+8jdEZ80i9ViQNLRgyhey3Vm6N7XHn+4o3PY6wSnVT23WLuaROIpbpIVTNOjg==", + "dependencies": { + "detect-libc": "^1.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-darwin-arm64": "1.17.1", + "lightningcss-darwin-x64": "1.17.1", + "lightningcss-linux-arm-gnueabihf": "1.17.1", + "lightningcss-linux-arm64-gnu": "1.17.1", + "lightningcss-linux-arm64-musl": "1.17.1", + "lightningcss-linux-x64-gnu": "1.17.1", + "lightningcss-linux-x64-musl": "1.17.1", + "lightningcss-win32-x64-msvc": "1.17.1" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.17.1.tgz", + "integrity": "sha512-YTAHEy4XlzI3sMbUVjbPi9P7+N7lGcgl2JhCZhiQdRAEKnZLQch8kb5601sgESxdGXjgei7JZFqi/vVEk81wYg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.17.1.tgz", + "integrity": "sha512-UhXPUS2+yTTf5sXwUV0+8QY2x0bPGLgC/uhcknWSQMqWn1zGty4fFvH04D7f7ij0ujwSuN+Q0HtU7lgmMrPz0A==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.17.1.tgz", + "integrity": "sha512-alUZumuznB6K/9yZ0zuZkODXUm8uRnvs9t0CL46CXN16Y2h4gOx5ahUCMlelUb7inZEsgJIoepgLsJzBUrSsBw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.17.1.tgz", + "integrity": "sha512-/1XaH2cOjDt+ivmgfmVFUYCA0MtfNWwtC4P8qVi53zEQ7P8euyyZ1ynykZOyKXW9Q0DzrwcLTh6+hxVLcbtGBg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.17.1.tgz", + "integrity": "sha512-/IgE7lYWFHCCQFTMIwtt+fXLcVOha8rcrNze1JYGPWNorO6NBc6MJo5u5cwn5qMMSz9fZCCDIlBBU4mGwjQszQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.17.1.tgz", + "integrity": "sha512-OyE802IAp4DB9vZrHlOyWunbHLM9dN08tJIKN/HhzzLKIHizubOWX6NMzUXMZLsaUrYwVAHHdyEA+712p8mMzA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.17.1.tgz", + "integrity": "sha512-ydwGgV3Usba5P53RAOqCA9MsRsbb8jFIEVhf7/BXFjpKNoIQyijVTXhwIgQr/oGwUNOHfgQ3F8ruiUjX/p2YKw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.17.1.tgz", + "integrity": "sha512-Ngqtx9NazaiAOk71XWwSsqgAuwYF+8PO6UYsoU7hAukdrSS98kwaBMEDw1igeIiZy1XD/4kh5KVnkjNf7ZOxVQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -14201,6 +14809,11 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" + }, "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", @@ -16059,7 +16672,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "dependencies": { "wrappy": "1" } @@ -16699,7 +17311,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -16784,8 +17395,7 @@ "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, "node_modules/picomatch": { "version": "2.3.1", @@ -17091,7 +17701,6 @@ "version": "8.4.19", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz", "integrity": "sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==", - "dev": true, "funding": [ { "type": "opencollective", @@ -17111,11 +17720,28 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/postcss-modules": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-6.0.0.tgz", + "integrity": "sha512-7DGfnlyi/ju82BRzTIjWS5C4Tafmzl3R79YP/PASiocj+aa6yYphHhhKUOEoXQToId5rgyFgJ88+ccOUydjBXQ==", + "dependencies": { + "generic-names": "^4.0.0", + "icss-utils": "^5.1.0", + "lodash.camelcase": "^4.3.0", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "string-hash": "^1.1.1" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, "node_modules/postcss-modules-extract-imports": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, "engines": { "node": "^10 || ^12 || >= 14" }, @@ -17127,7 +17753,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", - "dev": true, "dependencies": { "icss-utils": "^5.0.0", "postcss-selector-parser": "^6.0.2", @@ -17144,7 +17769,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dev": true, "dependencies": { "postcss-selector-parser": "^6.0.4" }, @@ -17159,7 +17783,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, "dependencies": { "icss-utils": "^5.0.0" }, @@ -17174,7 +17797,6 @@ "version": "6.0.11", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", - "dev": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -18231,7 +18853,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, "dependencies": { "glob": "^7.1.3" }, @@ -18918,7 +19539,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -19167,6 +19787,11 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, + "node_modules/string-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", + "integrity": "sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==" + }, "node_modules/string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", @@ -19957,7 +20582,6 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, "dependencies": { "rimraf": "^3.0.0" }, @@ -21672,8 +22296,7 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/write-file-atomic": { "version": "3.0.3", @@ -23270,18 +23893,158 @@ "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" }, + "@esbuild/android-arm": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.7.tgz", + "integrity": "sha512-yhzDbiVcmq6T1/XEvdcJIVcXHdLjDJ5cQ0Dp9R9p9ERMBTeO1dR5tc8YYv8zwDeBw1xZm+Eo3MRo8cwclhBS0g==", + "optional": true, + "peer": true + }, + "@esbuild/android-arm64": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.7.tgz", + "integrity": "sha512-tYFw0lBJSEvLoGzzYh1kXuzoX1iPkbOk3O29VqzQb0HbOy7t/yw1hGkvwoJhXHwzQUPsShyYcTgRf6bDBcfnTw==", + "optional": true, + "peer": true + }, + "@esbuild/android-x64": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.7.tgz", + "integrity": "sha512-3P2OuTxwAtM3k/yEWTNUJRjMPG1ce8rXs51GTtvEC5z1j8fC1plHeVVczdeHECU7aM2/Buc0MwZ6ciM/zysnWg==", + "optional": true, + "peer": true + }, "@esbuild/darwin-arm64": { "version": "0.16.7", "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.7.tgz", "integrity": "sha512-VUb9GK23z8jkosHU9yJNUgQpsfJn+7ZyBm6adi2Ec5/U241eR1tAn82QicnUzaFDaffeixiHwikjmnec/YXEZg==", "optional": true }, + "@esbuild/darwin-x64": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.7.tgz", + "integrity": "sha512-duterlv3tit3HI9vhzMWnSVaB1B6YsXpFq1Ntd6Fou82BB1l4tucYy3FI9dHv3tvtDuS0NiGf/k6XsdBqPZ01w==", + "optional": true, + "peer": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.7.tgz", + "integrity": "sha512-9kkycpBFes/vhi7B7o0cf+q2WdJi+EpVzpVTqtWFNiutARWDFFLcB93J8PR1cG228sucsl3B+7Ts27izE6qiaQ==", + "optional": true, + "peer": true + }, + "@esbuild/freebsd-x64": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.7.tgz", + "integrity": "sha512-5Ahf6jzWXJ4J2uh9dpy5DKOO+PeRUE/9DMys6VuYfwgQzd6n5+pVFm58L2Z2gRe611RX6SdydnNaiIKM3svY7g==", + "optional": true, + "peer": true + }, + "@esbuild/linux-arm": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.7.tgz", + "integrity": "sha512-QqJnyCfu5OF78Olt7JJSZ7OSv/B4Hf+ZJWp4kkq9xwMsgu7yWq3crIic8gGOpDYTqVKKMDAVDgRXy5Wd/nWZyQ==", + "optional": true, + "peer": true + }, + "@esbuild/linux-arm64": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.7.tgz", + "integrity": "sha512-2wv0xYDskk2+MzIm/AEprDip39a23Chptc4mL7hsHg26P0gD8RUhzmDu0KCH2vMThUI1sChXXoK9uH0KYQKaDg==", + "optional": true, + "peer": true + }, + "@esbuild/linux-ia32": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.7.tgz", + "integrity": "sha512-APVYbEilKbD5ptmKdnIcXej2/+GdV65TfTjxR2Uk8t1EsOk49t6HapZW6DS/Bwlvh5hDwtLapdSumIVNGxgqLg==", + "optional": true, + "peer": true + }, + "@esbuild/linux-loong64": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.7.tgz", + "integrity": "sha512-5wPUAGclplQrAW7EFr3F84Y/d++7G0KykohaF4p54+iNWhUnMVU8Bh2sxiEOXUy4zKIdpHByMgJ5/Ko6QhtTUw==", + "optional": true, + "peer": true + }, + "@esbuild/linux-mips64el": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.7.tgz", + "integrity": "sha512-hxzlXtWF6yWfkE/SMTscNiVqLOAn7fOuIF3q/kiZaXxftz1DhZW/HpnTmTTWrzrS7zJWQxHHT4QSxyAj33COmA==", + "optional": true, + "peer": true + }, + "@esbuild/linux-ppc64": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.7.tgz", + "integrity": "sha512-WM83Dac0LdXty5xPhlOuCD5Egfk1xLND/oRLYeB7Jb/tY4kzFSDgLlq91wYbHua/s03tQGA9iXvyjgymMw62Vw==", + "optional": true, + "peer": true + }, + "@esbuild/linux-riscv64": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.7.tgz", + "integrity": "sha512-3nkNnNg4Ax6MS/l8O8Ynq2lGEVJYyJ2EoY3PHjNJ4PuZ80EYLMrFTFZ4L/Hc16AxgtXKwmNP9TM0YKNiBzBiJQ==", + "optional": true, + "peer": true + }, + "@esbuild/linux-s390x": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.7.tgz", + "integrity": "sha512-3SA/2VJuv0o1uD7zuqxEP+RrAyRxnkGddq0bwHQ98v1KNlzXD/JvxwTO3T6GM5RH6JUd29RTVQTOJfyzMkkppA==", + "optional": true, + "peer": true + }, "@esbuild/linux-x64": { "version": "0.16.7", "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.7.tgz", "integrity": "sha512-xi/tbqCqvPIzU+zJVyrpz12xqciTAPMi2fXEWGnapZymoGhuL2GIWIRXg4O2v5BXaYA5TSaiKYE14L0QhUTuQg==", "optional": true }, + "@esbuild/netbsd-x64": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.7.tgz", + "integrity": "sha512-NUsYbq3B+JdNKn8SXkItFvdes9qTwEoS3aLALtiWciW/ystiCKM20Fgv9XQBOXfhUHyh5CLEeZDXzLOrwBXuCQ==", + "optional": true, + "peer": true + }, + "@esbuild/openbsd-x64": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.7.tgz", + "integrity": "sha512-qjwzsgeve9I8Tbsko2FEkdSk2iiezuNGFgipQxY/736NePXDaDZRodIejYGWOlbYXugdxb0nif5yvypH6lKBmA==", + "optional": true, + "peer": true + }, + "@esbuild/sunos-x64": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.7.tgz", + "integrity": "sha512-mFWDz4RoBTzPphTCkM7Kc7Qpa0o/Z01acajR+Ai7LdfKgcP/C6jYOaKwv7nKzD0+MjOT20j7You9g4ozYy1dKQ==", + "optional": true, + "peer": true + }, + "@esbuild/win32-arm64": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.7.tgz", + "integrity": "sha512-m39UmX19RvEIuC8sYZ0M+eQtdXw4IePDSZ78ZQmYyFaXY9krq4YzQCK2XWIJomNLtg4q+W5aXr8bW3AbqWNoVg==", + "optional": true, + "peer": true + }, + "@esbuild/win32-ia32": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.7.tgz", + "integrity": "sha512-1cbzSEZA1fANwmT6rjJ4G1qQXHxCxGIcNYFYR9ctI82/prT38lnwSRZ0i5p/MVXksw9eMlHlet6pGu2/qkXFCg==", + "optional": true, + "peer": true + }, + "@esbuild/win32-x64": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.7.tgz", + "integrity": "sha512-QaQ8IH0JLacfGf5cf0HCCPnQuCTd/dAI257vXBgb/cccKGbH/6pVtI1gwhdAQ0Y48QSpTIFrh9etVyNdZY+zzw==", + "optional": true, + "peer": true + }, "@eslint/eslintrc": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.3.0.tgz", @@ -23402,12 +24165,14 @@ "dev": true }, "@ipfs-shipyard/ignite-metrics": { - "version": "file:ipfs-shipyard-ignite-metrics-1.0.0.tgz", - "integrity": "sha512-YSR9Q9si/5+KJl24KCWK/chXVzLSBgKGhUYqIADsESw4rjgBu0elnCNCxXYXLht4Uann1M62UnxGMiCnVSxE6Q==", + "version": "git+ssh://git@github.com/ipfs-shipyard/ignite-metrics.git#2546b8a7de9114f3e6903894d29f251276cef035", + "integrity": "sha512-4U+IdhyOmlNaYeo68clg34jLBxCoYSGCu7/NlqyFNJ87xSBg52YQFtvoowN4xbyrGvu+V8ijYelOV3/COoPEMQ==", + "from": "@ipfs-shipyard/ignite-metrics@ipfs-shipyard/ignite-metrics#2546b8a7de9114f3e6903894d29f251276cef035", "requires": { "@esbuild/darwin-arm64": "^0.16.5", "@esbuild/linux-x64": "^0.16.5", "countly-sdk-web": "^22.6.4", + "esbuild-css-modules-plugin": "^2.6.3", "react": "^18.2.0", "react-dom": "^18.2.0", "react-refresh": "^0.14.0", @@ -27620,8 +28385,7 @@ "cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" }, "currently-unhandled": { "version": "0.4.1", @@ -28050,6 +28814,11 @@ "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz", "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==" }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==" + }, "diff": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", @@ -28444,6 +29213,75 @@ "integrity": "sha512-ginqzK3J90Rd4/Yz7qRrqUeIpe3TwSXTPPZtPne7tGBPeAaQiU8qt4fpKApnxHcq1AwtUdHVg5P77x/yrggG8Q==", "dev": true }, + "esbuild": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.7.tgz", + "integrity": "sha512-P6OBFYFSQOGzfApqCeYKqfKRRbCIRsdppTXFo4aAvtiW3o8TTyiIplBvHJI171saPAiy3WlawJHCveJVIOIx1A==", + "peer": true, + "requires": { + "@esbuild/android-arm": "0.16.7", + "@esbuild/android-arm64": "0.16.7", + "@esbuild/android-x64": "0.16.7", + "@esbuild/darwin-arm64": "0.16.7", + "@esbuild/darwin-x64": "0.16.7", + "@esbuild/freebsd-arm64": "0.16.7", + "@esbuild/freebsd-x64": "0.16.7", + "@esbuild/linux-arm": "0.16.7", + "@esbuild/linux-arm64": "0.16.7", + "@esbuild/linux-ia32": "0.16.7", + "@esbuild/linux-loong64": "0.16.7", + "@esbuild/linux-mips64el": "0.16.7", + "@esbuild/linux-ppc64": "0.16.7", + "@esbuild/linux-riscv64": "0.16.7", + "@esbuild/linux-s390x": "0.16.7", + "@esbuild/linux-x64": "0.16.7", + "@esbuild/netbsd-x64": "0.16.7", + "@esbuild/openbsd-x64": "0.16.7", + "@esbuild/sunos-x64": "0.16.7", + "@esbuild/win32-arm64": "0.16.7", + "@esbuild/win32-ia32": "0.16.7", + "@esbuild/win32-x64": "0.16.7" + } + }, + "esbuild-css-modules-plugin": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/esbuild-css-modules-plugin/-/esbuild-css-modules-plugin-2.6.3.tgz", + "integrity": "sha512-Bi0NHhoWwW002eTbD0HIO38M/gCE7UEfv0ncSvBjn8F+eGZRUPMdSCYof2jCxxWoerG0xR7bLwDpv/yoPjP7EA==", + "requires": { + "fs-extra": "^10.1.0", + "lightningcss": "^1.17.1", + "lodash": "^4.17.21", + "postcss": "^8.4.19", + "postcss-modules": "^6.0.0", + "tmp": "^0.2.1" + }, + "dependencies": { + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + } + } + }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -29453,8 +30291,7 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "fsevents": { "version": "2.3.2", @@ -29544,6 +30381,21 @@ } } }, + "generic-names": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-4.0.0.tgz", + "integrity": "sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==", + "requires": { + "loader-utils": "^3.2.0" + }, + "dependencies": { + "loader-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", + "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==" + } + } + }, "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -29878,7 +30730,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -30260,7 +31111,6 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, "requires": {} }, "ieee754": { @@ -30351,7 +31201,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -32427,6 +33276,70 @@ } } }, + "lightningcss": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.17.1.tgz", + "integrity": "sha512-DwwM/YYqGwLLP3he41wzDXT/m+8jdEZ80i9ViQNLRgyhey3Vm6N7XHn+4o3PY6wSnVT23WLuaROIpbpIVTNOjg==", + "requires": { + "detect-libc": "^1.0.3", + "lightningcss-darwin-arm64": "1.17.1", + "lightningcss-darwin-x64": "1.17.1", + "lightningcss-linux-arm-gnueabihf": "1.17.1", + "lightningcss-linux-arm64-gnu": "1.17.1", + "lightningcss-linux-arm64-musl": "1.17.1", + "lightningcss-linux-x64-gnu": "1.17.1", + "lightningcss-linux-x64-musl": "1.17.1", + "lightningcss-win32-x64-msvc": "1.17.1" + } + }, + "lightningcss-darwin-arm64": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.17.1.tgz", + "integrity": "sha512-YTAHEy4XlzI3sMbUVjbPi9P7+N7lGcgl2JhCZhiQdRAEKnZLQch8kb5601sgESxdGXjgei7JZFqi/vVEk81wYg==", + "optional": true + }, + "lightningcss-darwin-x64": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.17.1.tgz", + "integrity": "sha512-UhXPUS2+yTTf5sXwUV0+8QY2x0bPGLgC/uhcknWSQMqWn1zGty4fFvH04D7f7ij0ujwSuN+Q0HtU7lgmMrPz0A==", + "optional": true + }, + "lightningcss-linux-arm-gnueabihf": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.17.1.tgz", + "integrity": "sha512-alUZumuznB6K/9yZ0zuZkODXUm8uRnvs9t0CL46CXN16Y2h4gOx5ahUCMlelUb7inZEsgJIoepgLsJzBUrSsBw==", + "optional": true + }, + "lightningcss-linux-arm64-gnu": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.17.1.tgz", + "integrity": "sha512-/1XaH2cOjDt+ivmgfmVFUYCA0MtfNWwtC4P8qVi53zEQ7P8euyyZ1ynykZOyKXW9Q0DzrwcLTh6+hxVLcbtGBg==", + "optional": true + }, + "lightningcss-linux-arm64-musl": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.17.1.tgz", + "integrity": "sha512-/IgE7lYWFHCCQFTMIwtt+fXLcVOha8rcrNze1JYGPWNorO6NBc6MJo5u5cwn5qMMSz9fZCCDIlBBU4mGwjQszQ==", + "optional": true + }, + "lightningcss-linux-x64-gnu": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.17.1.tgz", + "integrity": "sha512-OyE802IAp4DB9vZrHlOyWunbHLM9dN08tJIKN/HhzzLKIHizubOWX6NMzUXMZLsaUrYwVAHHdyEA+712p8mMzA==", + "optional": true + }, + "lightningcss-linux-x64-musl": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.17.1.tgz", + "integrity": "sha512-ydwGgV3Usba5P53RAOqCA9MsRsbb8jFIEVhf7/BXFjpKNoIQyijVTXhwIgQr/oGwUNOHfgQ3F8ruiUjX/p2YKw==", + "optional": true + }, + "lightningcss-win32-x64-msvc": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.17.1.tgz", + "integrity": "sha512-Ngqtx9NazaiAOk71XWwSsqgAuwYF+8PO6UYsoU7hAukdrSS98kwaBMEDw1igeIiZy1XD/4kh5KVnkjNf7ZOxVQ==", + "optional": true + }, "lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -32579,6 +33492,11 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" + }, "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", @@ -34014,7 +34932,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "requires": { "wrappy": "1" } @@ -34465,8 +35382,7 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" }, "path-key": { "version": "3.1.1", @@ -34526,8 +35442,7 @@ "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, "picomatch": { "version": "2.3.1", @@ -34764,25 +35679,37 @@ "version": "8.4.19", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz", "integrity": "sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==", - "dev": true, "requires": { "nanoid": "^3.3.4", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" } }, + "postcss-modules": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-6.0.0.tgz", + "integrity": "sha512-7DGfnlyi/ju82BRzTIjWS5C4Tafmzl3R79YP/PASiocj+aa6yYphHhhKUOEoXQToId5rgyFgJ88+ccOUydjBXQ==", + "requires": { + "generic-names": "^4.0.0", + "icss-utils": "^5.1.0", + "lodash.camelcase": "^4.3.0", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "string-hash": "^1.1.1" + } + }, "postcss-modules-extract-imports": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, "requires": {} }, "postcss-modules-local-by-default": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", - "dev": true, "requires": { "icss-utils": "^5.0.0", "postcss-selector-parser": "^6.0.2", @@ -34793,7 +35720,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dev": true, "requires": { "postcss-selector-parser": "^6.0.4" } @@ -34802,7 +35728,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, "requires": { "icss-utils": "^5.0.0" } @@ -34811,7 +35736,6 @@ "version": "6.0.11", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", - "dev": true, "requires": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -35627,7 +36551,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, "requires": { "glob": "^7.1.3" } @@ -36157,8 +37080,7 @@ "source-map-js": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" }, "source-map-support": { "version": "0.5.21", @@ -36352,6 +37274,11 @@ } } }, + "string-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", + "integrity": "sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==" + }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", @@ -36934,7 +37861,6 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, "requires": { "rimraf": "^3.0.0" } @@ -38201,8 +39127,7 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "write-file-atomic": { "version": "3.0.3", diff --git a/package.json b/package.json index 937808135..bfc4e7790 100644 --- a/package.json +++ b/package.json @@ -118,7 +118,7 @@ "webpack-merge": "5.8.0" }, "dependencies": { - "@ipfs-shipyard/ignite-metrics": "file:ipfs-shipyard-ignite-metrics-1.0.0.tgz", + "@ipfs-shipyard/ignite-metrics": "github:ipfs-shipyard/ignite-metrics#2546b8a7de9114f3e6903894d29f251276cef035", "@material/switch": "10.0.0", "assert": "2.0.0", "buffer": "6.0.3", From 2ab0bbea996e367c82987e92c2ec6298a951756e Mon Sep 17 00:00:00 2001 From: Russell Dempsey <1173416+SgtPooki@users.noreply.github.com> Date: Thu, 12 Jan 2023 12:33:48 -0800 Subject: [PATCH 04/29] Update add-on/src/lib/telemetry.js Co-authored-by: Nishant Arora <1895906+whizzzkid@users.noreply.github.com> --- add-on/src/lib/telemetry.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/add-on/src/lib/telemetry.js b/add-on/src/lib/telemetry.js index dcb8ddb73..758ea5927 100644 --- a/add-on/src/lib/telemetry.js +++ b/add-on/src/lib/telemetry.js @@ -3,10 +3,10 @@ import { MetricsProvider } from '@ipfs-shipyard/ignite-metrics/vanilla' let metricsProvider = null export function getMetricsProviderInstance () { - if (metricsProvider != null) { - return metricsProvider - } - metricsProvider = new MetricsProvider({ appKey: '393f72eb264c28a1b59973da1e0a3938d60dc38a', autoTrack: false }) + metricsProvider = metricsProvider ?? new MetricsProvider({ + appKey: '393f72eb264c28a1b59973da1e0a3938d60dc38a', + autoTrack: false + }) return metricsProvider } From 19344255a1bab449ef968b064b68209d9b7d1378 Mon Sep 17 00:00:00 2001 From: Russell Dempsey <1173416+SgtPooki@users.noreply.github.com> Date: Thu, 12 Jan 2023 12:33:55 -0800 Subject: [PATCH 05/29] Update add-on/src/lib/telemetry.js Co-authored-by: Nishant Arora <1895906+whizzzkid@users.noreply.github.com> --- add-on/src/lib/telemetry.js | 1 + 1 file changed, 1 insertion(+) diff --git a/add-on/src/lib/telemetry.js b/add-on/src/lib/telemetry.js index 758ea5927..fcc0e801b 100644 --- a/add-on/src/lib/telemetry.js +++ b/add-on/src/lib/telemetry.js @@ -27,6 +27,7 @@ function mapStateToConsent (stateOptions) { console.log('enabledConsentGroups: ', enabledConsentGroups) return enabledConsentGroups } + function logConsent () { console.log('checkConsent(\'minimal\'): ', getMetricsProviderInstance().checkConsent('minimal')) console.log('checkConsent(\'marketing\'): ', getMetricsProviderInstance().checkConsent('marketing')) From faf72a8f4fdf7eb1adb8ebbd3f9cb29a6e8f029a Mon Sep 17 00:00:00 2001 From: Russell Dempsey <1173416+SgtPooki@users.noreply.github.com> Date: Thu, 12 Jan 2023 12:34:03 -0800 Subject: [PATCH 06/29] Update add-on/src/lib/telemetry.js Co-authored-by: Nishant Arora <1895906+whizzzkid@users.noreply.github.com> --- add-on/src/lib/telemetry.js | 1 + 1 file changed, 1 insertion(+) diff --git a/add-on/src/lib/telemetry.js b/add-on/src/lib/telemetry.js index fcc0e801b..d9a8632cb 100644 --- a/add-on/src/lib/telemetry.js +++ b/add-on/src/lib/telemetry.js @@ -34,6 +34,7 @@ function logConsent () { console.log('checkConsent(\'performance\'): ', getMetricsProviderInstance().checkConsent('performance')) console.log('checkConsent(\'tracking\'): ', getMetricsProviderInstance().checkConsent('tracking')) } + /** * * @param {ReturnType} state From 3b83c17eba4ca2b857a24971760059724f5ae139 Mon Sep 17 00:00:00 2001 From: Russell Dempsey <1173416+SgtPooki@users.noreply.github.com> Date: Thu, 12 Jan 2023 12:44:46 -0800 Subject: [PATCH 07/29] Update add-on/_locales/en/messages.json Co-authored-by: Marcin Rataj --- add-on/_locales/en/messages.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/add-on/_locales/en/messages.json b/add-on/_locales/en/messages.json index 11e451ee9..637a0e469 100644 --- a/add-on/_locales/en/messages.json +++ b/add-on/_locales/en/messages.json @@ -736,7 +736,7 @@ "description": "Disclaimer about telemetry collection in the telemetry section on the Preferences screen (option_telemetry_disclaimer)" }, "option_telemetryGroupMinimal_title": { - "message": "Minimal metrics: session & companion views", + "message": "Feature Telemetry", "description": "A title for the 'minimal' grouping of metrics we collect (option_telemetryGroupMinimal_title)" }, "option_telemetryGroupMinimal_description": { From f6b6081533fec58bc6e14199bcc1b5656cd05e82 Mon Sep 17 00:00:00 2001 From: Russell Dempsey <1173416+SgtPooki@users.noreply.github.com> Date: Thu, 12 Jan 2023 12:44:53 -0800 Subject: [PATCH 08/29] Update add-on/_locales/en/messages.json Co-authored-by: Marcin Rataj --- add-on/_locales/en/messages.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/add-on/_locales/en/messages.json b/add-on/_locales/en/messages.json index 637a0e469..53848caa6 100644 --- a/add-on/_locales/en/messages.json +++ b/add-on/_locales/en/messages.json @@ -744,7 +744,7 @@ "description": "A description for the 'minimal' grouping of metrics we collect (option_telemetryGroupMinimal_description)" }, "option_telemetryGroupMinimal_session_description": { - "message": "A `session` event - every 60 seconds.", + "message": "A `session` event for every minute the extension was active.", "description": "An explanation of the `session` telemetry we collect (option_telemetryGroupMinimal_session_description)" }, "option_telemetryGroupMinimal_view_description": { From e372e740600818980c55cf46c43cd459b11e0564 Mon Sep 17 00:00:00 2001 From: Russell Dempsey <1173416+SgtPooki@users.noreply.github.com> Date: Thu, 12 Jan 2023 12:44:59 -0800 Subject: [PATCH 09/29] Update add-on/_locales/en/messages.json Co-authored-by: Marcin Rataj --- add-on/_locales/en/messages.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/add-on/_locales/en/messages.json b/add-on/_locales/en/messages.json index 53848caa6..b527b9a45 100644 --- a/add-on/_locales/en/messages.json +++ b/add-on/_locales/en/messages.json @@ -748,7 +748,7 @@ "description": "An explanation of the `session` telemetry we collect (option_telemetryGroupMinimal_session_description)" }, "option_telemetryGroupMinimal_view_description": { - "message": "A `view` event - only for ipfs-companion pages.", + "message": "A `view` event for every time a part of extension's user interface is visible.", "description": "An explanation of the `session` telemetry we collect (option_telemetryGroupMinimal_session_description)" }, "option_telemetryGroupMarketing_title": { From 11d3b9b87b2c8cb606ca6c6c36abc5e4f69f7f07 Mon Sep 17 00:00:00 2001 From: Russell Dempsey <1173416+SgtPooki@users.noreply.github.com> Date: Thu, 12 Jan 2023 12:45:11 -0800 Subject: [PATCH 10/29] Update add-on/_locales/en/messages.json Co-authored-by: Marcin Rataj --- add-on/_locales/en/messages.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/add-on/_locales/en/messages.json b/add-on/_locales/en/messages.json index b527b9a45..13fdc816b 100644 --- a/add-on/_locales/en/messages.json +++ b/add-on/_locales/en/messages.json @@ -740,7 +740,7 @@ "description": "A title for the 'minimal' grouping of metrics we collect (option_telemetryGroupMinimal_title)" }, "option_telemetryGroupMinimal_description": { - "message": "We send `session` and `view` events only if ipfs-companion is enabled and your browser is not idle.", + "message": "Collect basic feature and usage metrics to help maintainers to prioritize work on the most useful features.", "description": "A description for the 'minimal' grouping of metrics we collect (option_telemetryGroupMinimal_description)" }, "option_telemetryGroupMinimal_session_description": { From 4a0af8f236dae60d50330c391982d9e352dc898e Mon Sep 17 00:00:00 2001 From: Russell Dempsey <1173416+SgtPooki@users.noreply.github.com> Date: Thu, 12 Jan 2023 13:39:49 -0800 Subject: [PATCH 11/29] chore: fix options and state typings --- add-on/src/lib/options.js | 12 +- add-on/src/lib/state.js | 45 +- add-on/src/types.d.ts | 52 + package-lock.json | 2539 +++++++++++++++++++++++++++++++++++-- package.json | 9 +- tsconfig.json | 19 + 6 files changed, 2515 insertions(+), 161 deletions(-) create mode 100644 add-on/src/types.d.ts create mode 100644 tsconfig.json diff --git a/add-on/src/lib/options.js b/add-on/src/lib/options.js index 21383f6a9..e9d821631 100644 --- a/add-on/src/lib/options.js +++ b/add-on/src/lib/options.js @@ -1,10 +1,11 @@ 'use strict' -import { isIPv4, isIPv6 } from 'is-ip' import isFQDN from 'is-fqdn' +import { isIPv4, isIPv6 } from 'is-ip' -// console.log('igniteMetrics: ', igniteMetrics) - +/** + * @type {Readonly} + */ export const optionDefaults = Object.freeze({ active: true, // global ON/OFF switch, overrides everything else ipfsNodeType: 'external', @@ -35,9 +36,10 @@ export const optionDefaults = Object.freeze({ dismissedUpdate: null, openViaWebUI: true, telemetryGroupMinimal: true, - telemetryGroupMarketing: false, telemetryGroupPerformance: false, - telemetryGroupTracking: false + telemetryGroupUx: false, + telemetryGroupFeedback: false, + telemetryGroupLocation: false }) function buildDefaultIpfsNodeConfig () { diff --git a/add-on/src/lib/state.js b/add-on/src/lib/state.js index 1e72c0d5a..38de69d11 100644 --- a/add-on/src/lib/state.js +++ b/add-on/src/lib/state.js @@ -1,53 +1,38 @@ 'use strict' /* eslint-env browser, webextensions */ // @ts-check -import { safeURL, isHostname } from './options.js' - -/** - * @typedef {object} CompanionState - * @extends {typeof import('./options').optionDefaults} - * @property {number} peerCount - * @property {URL} pubGwURL - * @property {string} pubGwURLString - * @property {URL} pubSubdomainGwURL - * @property {string} pubSubdomainGwURLString - * @property {boolean} redirect - * @property {URL} apiURL - * @property {string} apiURLString - * @property {URL} gwURL - * @property {string} gwURLString - * @property {boolean|string} dnslinkPolicy - * @property {(url: string|URL) => boolean} activeIntegrations - * @property {boolean} localGwAvailable - * @property {string} webuiRootUrl - */ +import { isHostname, safeURL } from './options.js' export const offlinePeerCount = -1 + /** * - * @param {typeof import('./options').optionDefaults} options - * @param {Partial} overrides - * @returns {CompanionState} + * @param {import('../types.js').CompanionOptions} options + * @param {Partial} overrides + * @returns {import('../types.js').CompanionState} */ export function initState (options, overrides) { // we store options and some pregenerated values to avoid async storage // reads and minimize performance impact on overall browsing experience + /** + * @type {Partial} + */ const state = Object.assign({}, options) // generate some additional values state.peerCount = offlinePeerCount state.pubGwURL = safeURL(options.publicGatewayUrl) - state.pubGwURLString = state.pubGwURL.toString() + state.pubGwURLString = state.pubGwURL?.toString() delete state.publicGatewayUrl state.pubSubdomainGwURL = safeURL(options.publicSubdomainGatewayUrl) - state.pubSubdomainGwURLString = state.pubSubdomainGwURL.toString() + state.pubSubdomainGwURLString = state.pubSubdomainGwURL?.toString() delete state.publicSubdomainGatewayUrl state.redirect = options.useCustomGateway delete state.useCustomGateway state.apiURL = safeURL(options.ipfsApiUrl, { useLocalhostName: false }) // go-ipfs returns 403 if IP is beautified to 'localhost' - state.apiURLString = state.apiURL.toString() + state.apiURLString = state.apiURL?.toString() delete state.ipfsApiUrl state.gwURL = safeURL(options.customGatewayUrl, { useLocalhostName: state.useSubdomains }) - state.gwURLString = state.gwURL.toString() + state.gwURLString = state.gwURL?.toString() delete state.customGatewayUrl state.dnslinkPolicy = String(options.dnslinkPolicy) === 'false' ? false : options.dnslinkPolicy @@ -57,9 +42,9 @@ export function initState (options, overrides) { try { const hostname = isHostname(url) ? url : new URL(url).hostname // opt-out has more weight, we also match parent domains - const disabledDirectlyOrIndirectly = state.disabledOn.some(optout => hostname.endsWith(optout)) + const disabledDirectlyOrIndirectly = state.disabledOn?.some(optout => hostname.endsWith(optout)) // ..however direct opt-in should overwrite parent's opt-out - const enabledDirectly = state.enabledOn.some(optin => optin === hostname) + const enabledDirectly = state.enabledOn?.some(optin => optin === hostname) return !(disabledDirectlyOrIndirectly && !enabledDirectly) } catch (_) { return false @@ -80,5 +65,5 @@ export function initState (options, overrides) { }) // apply optional overrides if (overrides) Object.assign(state, overrides) - return state + return /** @type {import('../types.js').CompanionState} */(state) } diff --git a/add-on/src/types.d.ts b/add-on/src/types.d.ts new file mode 100644 index 000000000..eef26de67 --- /dev/null +++ b/add-on/src/types.d.ts @@ -0,0 +1,52 @@ + +export interface CompanionOptions { + active: boolean + ipfsNodeType: string + ipfsNodeConfig: string + publicGatewayUrl: string + publicSubdomainGatewayUrl: string + useCustomGateway: boolean + useSubdomains: boolean + enabledOn: string[] + disabledOn: string[] + automaticMode: boolean + linkify: boolean + dnslinkPolicy: boolean | string + dnslinkDataPreload: boolean + dnslinkRedirect: boolean + recoverFailedHttpRequests: boolean + detectIpfsPathHeader: boolean + preloadAtPublicGateway: boolean + catchUnhandledProtocols: boolean + displayNotifications: boolean + displayReleaseNotes: boolean + customGatewayUrl: string + ipfsApiUrl: string + ipfsApiPollMs: number + logNamespaces: string + importDir: string + useLatestWebUI: boolean + dismissedUpdate: null | string + openViaWebUI: boolean + telemetryGroupMinimal: boolean + telemetryGroupPerformance: boolean + telemetryGroupUx: boolean + telemetryGroupFeedback: boolean + telemetryGroupLocation: boolean +} + +export interface CompanionState extends Omit { + peerCount: number + pubGwURL: URL + pubGwURLString: string + pubSubdomainGwURL: URL + pubSubdomainGwURLString: string + redirect: boolean + apiURL: URL + apiURLString: string + gwURL: URL + gwURLString: string + activeIntegrations: (url: string) => boolean + localGwAvailable: boolean + webuiRootUrl: string +} diff --git a/package-lock.json b/package-lock.json index 1ff28a6b6..f40675e00 100644 --- a/package-lock.json +++ b/package-lock.json @@ -72,6 +72,8 @@ "terser": "5.15.1", "terser-webpack-plugin": "5.3.6", "transform-loader": "0.2.4", + "ts-standard": "^12.0.2", + "typescript": "^4.9.4", "url": "0.11.0", "web-ext": "7.3.1", "webpack": "5.75.0", @@ -4814,6 +4816,12 @@ "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz", "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==" }, + "node_modules/@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "dev": true + }, "node_modules/@types/yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", @@ -4823,6 +4831,310 @@ "@types/node": "*" } }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.48.1.tgz", + "integrity": "sha512-9nY5K1Rp2ppmpb9s9S2aBiF3xo5uExCehMDmYmmFqqyxgenbHJ3qbarcLt4ITgaD6r/2ypdlcFRdcuVPnks+fQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.48.1", + "@typescript-eslint/type-utils": "5.48.1", + "@typescript-eslint/utils": "5.48.1", + "debug": "^4.3.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.48.1.tgz", + "integrity": "sha512-4yg+FJR/V1M9Xoq56SF9Iygqm+r5LMXvheo6DQ7/yUWynQ4YfCRnsKuRgqH4EQ5Ya76rVwlEpw4Xu+TgWQUcdA==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.48.1", + "@typescript-eslint/types": "5.48.1", + "@typescript-eslint/typescript-estree": "5.48.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.48.1.tgz", + "integrity": "sha512-S035ueRrbxRMKvSTv9vJKIWgr86BD8s3RqoRZmsSh/s8HhIs90g6UlK8ZabUSjUZQkhVxt7nmZ63VJ9dcZhtDQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.48.1", + "@typescript-eslint/visitor-keys": "5.48.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.48.1.tgz", + "integrity": "sha512-Hyr8HU8Alcuva1ppmqSYtM/Gp0q4JOp1F+/JH5D1IZm/bUBrV0edoewQZiEc1r6I8L4JL21broddxK8HAcZiqQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.48.1", + "@typescript-eslint/utils": "5.48.1", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.48.1.tgz", + "integrity": "sha512-xHyDLU6MSuEEdIlzrrAerCGS3T7AA/L8Hggd0RCYBi0w3JMvGYxlLlXHeg50JI9Tfg5MrtsfuNxbS/3zF1/ATg==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.1.tgz", + "integrity": "sha512-Hut+Osk5FYr+sgFh8J/FHjqX6HFcDzTlWLrFqGoK5kVUN3VBHF/QzZmAsIXCQ8T/W9nQNBTqalxi1P3LSqWnRA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.48.1", + "@typescript-eslint/visitor-keys": "5.48.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.48.1.tgz", + "integrity": "sha512-SmQuSrCGUOdmGMwivW14Z0Lj8dxG1mOFZ7soeJ0TQZEJcs3n5Ndgkg0A4bcMFzBELqLJ6GTHnEU+iIoaD6hFGA==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.48.1", + "@typescript-eslint/types": "5.48.1", + "@typescript-eslint/typescript-estree": "5.48.1", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.1.tgz", + "integrity": "sha512-Ns0XBwmfuX7ZknznfXozgnydyR8F6ev/KEGePP4i74uL3ArsKbEhJ7raeKr1JSa997DBDwol/4a0Y+At82c9dA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.48.1", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "node_modules/@vascosantos/moving-average": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@vascosantos/moving-average/-/moving-average-1.1.0.tgz", @@ -6143,6 +6455,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", + "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.1.3" + } + }, "node_modules/arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", @@ -6806,6 +7131,42 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, + "node_modules/builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/builtins/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/builtins/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/bunyan": { "version": "1.8.15", "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz", @@ -9218,13 +9579,14 @@ } }, "node_modules/eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", + "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", "dev": true, "dependencies": { "debug": "^3.2.7", - "resolve": "^1.20.0" + "is-core-module": "^2.11.0", + "resolve": "^1.22.1" } }, "node_modules/eslint-import-resolver-node/node_modules/debug": { @@ -9417,6 +9779,128 @@ "node": ">=4" } }, + "node_modules/eslint-plugin-n": { + "version": "15.6.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.6.1.tgz", + "integrity": "sha512-R9xw9OtCRxxaxaszTQmQAlPgM+RdGjaL1akWuY/Fv9fRAi8Wj4CUKc6iYVG8QNRjRuo8/BqVYIpfqberJUEacA==", + "dev": true, + "dependencies": { + "builtins": "^5.0.1", + "eslint-plugin-es": "^4.1.0", + "eslint-utils": "^3.0.0", + "ignore": "^5.1.1", + "is-core-module": "^2.11.0", + "minimatch": "^3.1.2", + "resolve": "^1.22.1", + "semver": "^7.3.8" + }, + "engines": { + "node": ">=12.22.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-n/node_modules/eslint-plugin-es": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", + "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", + "dev": true, + "dependencies": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=4.19.1" + } + }, + "node_modules/eslint-plugin-n/node_modules/eslint-plugin-es/node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint-plugin-n/node_modules/eslint-plugin-es/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-plugin-n/node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-plugin-n/node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/eslint-plugin-n/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-plugin-n/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/eslint-plugin-no-unsanitized": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/eslint-plugin-no-unsanitized/-/eslint-plugin-no-unsanitized-4.0.1.tgz", @@ -16138,6 +16622,12 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, "node_modules/ncp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", @@ -20534,199 +21024,1064 @@ "xtend": "~4.0.1" } }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" - }, - "node_modules/time-span": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/time-span/-/time-span-5.1.0.tgz", - "integrity": "sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA==", + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" + }, + "node_modules/time-span": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/time-span/-/time-span-5.1.0.tgz", + "integrity": "sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA==", + "dependencies": { + "convert-hrtime": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/timeout-abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/timeout-abort-controller/-/timeout-abort-controller-3.0.0.tgz", + "integrity": "sha512-O3e+2B8BKrQxU2YRyEjC/2yFdb33slI22WRdUaDx6rvysfi9anloNZyR2q0l6LnePo5qH7gSM7uZtvvwZbc2yA==", + "dependencies": { + "retimer": "^3.0.0" + } + }, + "node_modules/timestamp-nano": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/timestamp-nano/-/timestamp-nano-1.0.0.tgz", + "integrity": "sha512-NO/1CZigzlCWQiWdIGv8ebXt6Uk77zdLz2NE7KcZRU5Egj2+947lzUpk30xQUQlq5dRY25j7ZulG4RfA2DHYfA==", + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/to-buffer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", + "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tosource": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tosource/-/tosource-1.0.0.tgz", + "integrity": "sha512-N6g8eQ1eerw6Y1pBhdgkubWIiPFwXa2POSUrlL8jth5CyyEWNWzoGKRkO3CaO7Jx27hlJP54muB3btIAbx4MPg==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/totalist": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", + "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/transform-ast": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/transform-ast/-/transform-ast-2.4.4.tgz", + "integrity": "sha512-AxjeZAcIOUO2lev2GDe3/xZ1Q0cVGjIMk5IsriTy8zbWlsEnjeB025AhkhBJHoy997mXpLd4R+kRbvnnQVuQHQ==", + "dependencies": { + "acorn-node": "^1.3.0", + "convert-source-map": "^1.5.1", + "dash-ast": "^1.0.0", + "is-buffer": "^2.0.0", + "magic-string": "^0.23.2", + "merge-source-map": "1.0.4", + "nanobench": "^2.1.1" + } + }, + "node_modules/transform-loader": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/transform-loader/-/transform-loader-0.2.4.tgz", + "integrity": "sha512-zdeb90cBkXoAwGvMRMYqS8lNNdZ9dYnEKxtXCi0ZmQ8OL1XF1b4BvuqjcVcm8ZJRsXSQCrSnGgd5gfaKTlGpcw==", + "dev": true, + "dependencies": { + "loader-utils": "^1.0.2" + } + }, + "node_modules/transform-loader/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/transform-loader/node_modules/loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha512-Nm4cF79FhSTzrLKGDMi3I4utBtFv8qKy4sq1enftf2gMdpqI8oVQTAfySkTz5r49giVzDj88SVZXP4CeYQwjaw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/trim-repeated": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", + "integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", + "dependencies": { + "utf8-byte-length": "^1.0.1" + } + }, + "node_modules/ts-standard": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/ts-standard/-/ts-standard-12.0.2.tgz", + "integrity": "sha512-XX2wrB9fKKTfBj4yD3ABm9iShzZcS2iWcPK8XzlBvuL20+wMiLgiz/k5tXgZwTaYq5wRhbks1Y9PelhujF/9ag==", + "dev": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "^5.0.0", + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^8.0.1", + "eslint-config-standard-jsx": "^11.0.0", + "eslint-config-standard-with-typescript": "^23.0.0", + "eslint-plugin-import": "^2.25.2", + "eslint-plugin-n": "^15.0.0", + "eslint-plugin-promise": "^6.0.0", + "eslint-plugin-react": "^7.28.0", + "minimist": "^1.2.6", + "pkg-conf": "^4.0.0", + "standard-engine": "^15.0.0" + }, + "bin": { + "ts-standard": "cli.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "typescript": "*" + } + }, + "node_modules/ts-standard/node_modules/@eslint/eslintrc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", + "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/ts-standard/node_modules/@humanwhocodes/config-array": { + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/ts-standard/node_modules/acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ts-standard/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ts-standard/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ts-standard/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/ts-standard/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ts-standard/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ts-standard/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/ts-standard/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ts-standard/node_modules/eslint": { + "version": "8.31.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.31.0.tgz", + "integrity": "sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA==", + "dev": true, + "dependencies": { + "@eslint/eslintrc": "^1.4.1", + "@humanwhocodes/config-array": "^0.11.8", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.4.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/ts-standard/node_modules/eslint-config-standard": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.0.0.tgz", + "integrity": "sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peerDependencies": { + "eslint": "^8.0.1", + "eslint-plugin-import": "^2.25.2", + "eslint-plugin-n": "^15.0.0", + "eslint-plugin-promise": "^6.0.0" + } + }, + "node_modules/ts-standard/node_modules/eslint-config-standard-jsx": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-11.0.0.tgz", + "integrity": "sha512-+1EV/R0JxEK1L0NGolAr8Iktm3Rgotx3BKwgaX+eAuSX8D952LULKtjgZD3F+e6SvibONnhLwoTi9DPxN5LvvQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peerDependencies": { + "eslint": "^8.8.0", + "eslint-plugin-react": "^7.28.0" + } + }, + "node_modules/ts-standard/node_modules/eslint-config-standard-with-typescript": { + "version": "23.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-23.0.0.tgz", + "integrity": "sha512-iaaWifImn37Z1OXbNW1es7KI+S7D408F9ys0bpaQf2temeBWlvb0Nc5qHkOgYaRb5QxTZT32GGeN1gtswASOXA==", + "dev": true, + "dependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint-config-standard": "17.0.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^5.0.0", + "eslint": "^8.0.1", + "eslint-plugin-import": "^2.25.2", + "eslint-plugin-n": "^15.0.0", + "eslint-plugin-promise": "^6.0.0", + "typescript": "*" + } + }, + "node_modules/ts-standard/node_modules/eslint-plugin-import": { + "version": "2.27.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.4.tgz", + "integrity": "sha512-Z1jVt1EGKia1X9CnBCkpAOhWy8FgQ7OmJ/IblEkT82yrFU/xJaxwujaTzLWqigewwynRQ9mmHfX9MtAfhxm0sA==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.0", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.7.4", + "has": "^1.0.3", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.6", + "resolve": "^1.22.1", + "semver": "^6.3.0", + "tsconfig-paths": "^3.14.1" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/ts-standard/node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/ts-standard/node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ts-standard/node_modules/eslint-plugin-promise": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", + "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, + "node_modules/ts-standard/node_modules/eslint-plugin-react": { + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.0.tgz", + "integrity": "sha512-vSBi1+SrPiLZCGvxpiZIa28fMEUaMjXtCplrvxcIxGzmFiYdsXQDwInEjuv5/i/2CTTxbkS87tE8lsQ0Qxinbw==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", + "doctrine": "^2.1.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.4", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.8" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/ts-standard/node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ts-standard/node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ts-standard/node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/ts-standard/node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/ts-standard/node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/ts-standard/node_modules/espree": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "dev": true, + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/ts-standard/node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/ts-standard/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ts-standard/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/ts-standard/node_modules/globals": { + "version": "13.19.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", + "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ts-standard/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ts-standard/node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/ts-standard/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/ts-standard/node_modules/load-json-file": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-7.0.1.tgz", + "integrity": "sha512-Gnxj3ev3mB5TkVBGad0JM6dmLiQL+o0t23JPBZ9sd+yvSLk05mFoqKBw5N8gbbkU4TNXyqCgIrl/VM17OgUIgQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ts-standard/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ts-standard/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ts-standard/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, "dependencies": { - "convert-hrtime": "^5.0.0" + "p-limit": "^3.0.2" }, "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/timed-out": { + "node_modules/ts-standard/node_modules/pify": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/timeout-abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/timeout-abort-controller/-/timeout-abort-controller-3.0.0.tgz", - "integrity": "sha512-O3e+2B8BKrQxU2YRyEjC/2yFdb33slI22WRdUaDx6rvysfi9anloNZyR2q0l6LnePo5qH7gSM7uZtvvwZbc2yA==", + "node_modules/ts-standard/node_modules/pkg-conf": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-4.0.0.tgz", + "integrity": "sha512-7dmgi4UY4qk+4mj5Cd8v/GExPo0K+SlY+hulOSdfZ/T6jVH6//y7NtzZo5WrfhDBxuQ0jCa7fLZmNaNh7EWL/w==", + "dev": true, "dependencies": { - "retimer": "^3.0.0" + "find-up": "^6.0.0", + "load-json-file": "^7.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/timestamp-nano": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/timestamp-nano/-/timestamp-nano-1.0.0.tgz", - "integrity": "sha512-NO/1CZigzlCWQiWdIGv8ebXt6Uk77zdLz2NE7KcZRU5Egj2+947lzUpk30xQUQlq5dRY25j7ZulG4RfA2DHYfA==", + "node_modules/ts-standard/node_modules/pkg-conf/node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, "engines": { - "node": ">= 4.5.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "node_modules/ts-standard/node_modules/pkg-conf/node_modules/locate-path": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.1.1.tgz", + "integrity": "sha512-vJXaRMJgRVD3+cUZs3Mncj2mxpt5mP0EmNOsxRSZRMlbqjvxzDEOIUWXGmavo0ZC9+tNZCBLQ66reA11nbpHZg==", + "dev": true, "dependencies": { - "rimraf": "^3.0.0" + "p-locate": "^6.0.0" }, "engines": { - "node": ">=8.17.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/to-buffer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", - "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "node_modules/ts-standard/node_modules/pkg-conf/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^1.0.0" + }, "engines": { - "node": ">=4" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "node_modules/ts-standard/node_modules/pkg-conf/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", "dev": true, "dependencies": { - "is-number": "^7.0.0" + "p-limit": "^4.0.0" }, "engines": { - "node": ">=8.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/tosource": { + "node_modules/ts-standard/node_modules/pkg-conf/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/ts-standard/node_modules/pkg-conf/node_modules/yocto-queue": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/tosource/-/tosource-1.0.0.tgz", - "integrity": "sha512-N6g8eQ1eerw6Y1pBhdgkubWIiPFwXa2POSUrlL8jth5CyyEWNWzoGKRkO3CaO7Jx27hlJP54muB3btIAbx4MPg==", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", "dev": true, "engines": { - "node": ">=0.4.0" + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/totalist": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", - "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", + "node_modules/ts-standard/node_modules/standard-engine": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-15.0.0.tgz", + "integrity": "sha512-4xwUhJNo1g/L2cleysUqUv7/btn7GEbYJvmgKrQ2vd/8pkTmN8cpqAZg+BT8Z1hNeEH787iWUdOpL8fmApLtxA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "get-stdin": "^8.0.0", + "minimist": "^1.2.6", + "pkg-conf": "^3.1.0", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/ts-standard/node_modules/standard-engine/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, "engines": { "node": ">=6" } }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "node_modules/ts-standard/node_modules/standard-engine/node_modules/load-json-file": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-5.3.0.tgz", + "integrity": "sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw==", "dev": true, "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" + "graceful-fs": "^4.1.15", + "parse-json": "^4.0.0", + "pify": "^4.0.1", + "strip-bom": "^3.0.0", + "type-fest": "^0.3.0" }, "engines": { - "node": ">=0.8" + "node": ">=6" } }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/transform-ast": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/transform-ast/-/transform-ast-2.4.4.tgz", - "integrity": "sha512-AxjeZAcIOUO2lev2GDe3/xZ1Q0cVGjIMk5IsriTy8zbWlsEnjeB025AhkhBJHoy997mXpLd4R+kRbvnnQVuQHQ==", + "node_modules/ts-standard/node_modules/standard-engine/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, "dependencies": { - "acorn-node": "^1.3.0", - "convert-source-map": "^1.5.1", - "dash-ast": "^1.0.0", - "is-buffer": "^2.0.0", - "magic-string": "^0.23.2", - "merge-source-map": "1.0.4", - "nanobench": "^2.1.1" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/transform-loader": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/transform-loader/-/transform-loader-0.2.4.tgz", - "integrity": "sha512-zdeb90cBkXoAwGvMRMYqS8lNNdZ9dYnEKxtXCi0ZmQ8OL1XF1b4BvuqjcVcm8ZJRsXSQCrSnGgd5gfaKTlGpcw==", + "node_modules/ts-standard/node_modules/standard-engine/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "dependencies": { - "loader-utils": "^1.0.2" + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/transform-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "node_modules/ts-standard/node_modules/standard-engine/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "dependencies": { - "minimist": "^1.2.0" + "p-limit": "^2.0.0" }, - "bin": { - "json5": "lib/cli.js" + "engines": { + "node": ">=6" } }, - "node_modules/transform-loader/node_modules/loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "node_modules/ts-standard/node_modules/standard-engine/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ts-standard/node_modules/standard-engine/node_modules/pkg-conf": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-3.1.0.tgz", + "integrity": "sha512-m0OTbR/5VPNPqO1ph6Fqbj7Hv6QU7gR/tQW40ZqrL1rjgCU85W6C1bJn0BItuJqnR98PWzw7Z8hHeChD1WrgdQ==", "dev": true, "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "find-up": "^3.0.0", + "load-json-file": "^5.2.0" }, "engines": { - "node": ">=4.0.0" + "node": ">=6" } }, - "node_modules/trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha512-Nm4cF79FhSTzrLKGDMi3I4utBtFv8qKy4sq1enftf2gMdpqI8oVQTAfySkTz5r49giVzDj88SVZXP4CeYQwjaw==", + "node_modules/ts-standard/node_modules/standard-engine/node_modules/type-fest": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", + "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/trim-repeated": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", - "integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==", + "node_modules/ts-standard/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { - "escape-string-regexp": "^1.0.2" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/truncate-utf8-bytes": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", - "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", + "node_modules/ts-standard/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { - "utf8-byte-length": "^1.0.1" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ts-standard/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/tsconfig-paths": { @@ -20758,6 +22113,21 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, "node_modules/tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -20824,6 +22194,19 @@ "is-typedarray": "^1.0.0" } }, + "node_modules/typescript": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", + "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, "node_modules/uint8-varint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/uint8-varint/-/uint8-varint-1.0.4.tgz", @@ -24167,7 +25550,7 @@ "@ipfs-shipyard/ignite-metrics": { "version": "git+ssh://git@github.com/ipfs-shipyard/ignite-metrics.git#2546b8a7de9114f3e6903894d29f251276cef035", "integrity": "sha512-4U+IdhyOmlNaYeo68clg34jLBxCoYSGCu7/NlqyFNJ87xSBg52YQFtvoowN4xbyrGvu+V8ijYelOV3/COoPEMQ==", - "from": "@ipfs-shipyard/ignite-metrics@ipfs-shipyard/ignite-metrics#2546b8a7de9114f3e6903894d29f251276cef035", + "from": "@ipfs-shipyard/ignite-metrics@github:ipfs-shipyard/ignite-metrics#2546b8a7de9114f3e6903894d29f251276cef035", "requires": { "@esbuild/darwin-arm64": "^0.16.5", "@esbuild/linux-x64": "^0.16.5", @@ -26073,6 +27456,12 @@ "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz", "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==" }, + "@types/semver": { + "version": "7.3.13", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", + "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "dev": true + }, "@types/yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", @@ -26082,6 +27471,187 @@ "@types/node": "*" } }, + "@typescript-eslint/eslint-plugin": { + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.48.1.tgz", + "integrity": "sha512-9nY5K1Rp2ppmpb9s9S2aBiF3xo5uExCehMDmYmmFqqyxgenbHJ3qbarcLt4ITgaD6r/2ypdlcFRdcuVPnks+fQ==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.48.1", + "@typescript-eslint/type-utils": "5.48.1", + "@typescript-eslint/utils": "5.48.1", + "debug": "^4.3.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/parser": { + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.48.1.tgz", + "integrity": "sha512-4yg+FJR/V1M9Xoq56SF9Iygqm+r5LMXvheo6DQ7/yUWynQ4YfCRnsKuRgqH4EQ5Ya76rVwlEpw4Xu+TgWQUcdA==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.48.1", + "@typescript-eslint/types": "5.48.1", + "@typescript-eslint/typescript-estree": "5.48.1", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.48.1.tgz", + "integrity": "sha512-S035ueRrbxRMKvSTv9vJKIWgr86BD8s3RqoRZmsSh/s8HhIs90g6UlK8ZabUSjUZQkhVxt7nmZ63VJ9dcZhtDQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.48.1", + "@typescript-eslint/visitor-keys": "5.48.1" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.48.1.tgz", + "integrity": "sha512-Hyr8HU8Alcuva1ppmqSYtM/Gp0q4JOp1F+/JH5D1IZm/bUBrV0edoewQZiEc1r6I8L4JL21broddxK8HAcZiqQ==", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "5.48.1", + "@typescript-eslint/utils": "5.48.1", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/types": { + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.48.1.tgz", + "integrity": "sha512-xHyDLU6MSuEEdIlzrrAerCGS3T7AA/L8Hggd0RCYBi0w3JMvGYxlLlXHeg50JI9Tfg5MrtsfuNxbS/3zF1/ATg==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.1.tgz", + "integrity": "sha512-Hut+Osk5FYr+sgFh8J/FHjqX6HFcDzTlWLrFqGoK5kVUN3VBHF/QzZmAsIXCQ8T/W9nQNBTqalxi1P3LSqWnRA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.48.1", + "@typescript-eslint/visitor-keys": "5.48.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/utils": { + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.48.1.tgz", + "integrity": "sha512-SmQuSrCGUOdmGMwivW14Z0Lj8dxG1mOFZ7soeJ0TQZEJcs3n5Ndgkg0A4bcMFzBELqLJ6GTHnEU+iIoaD6hFGA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.48.1", + "@typescript-eslint/types": "5.48.1", + "@typescript-eslint/typescript-estree": "5.48.1", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0", + "semver": "^7.3.7" + }, + "dependencies": { + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.1.tgz", + "integrity": "sha512-Ns0XBwmfuX7ZknznfXozgnydyR8F6ev/KEGePP4i74uL3ArsKbEhJ7raeKr1JSa997DBDwol/4a0Y+At82c9dA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.48.1", + "eslint-visitor-keys": "^3.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + } + } + }, "@vascosantos/moving-average": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@vascosantos/moving-average/-/moving-average-1.1.0.tgz", @@ -27070,6 +28640,19 @@ "es-shim-unscopables": "^1.0.0" } }, + "array.prototype.tosorted": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", + "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.1.3" + } + }, "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", @@ -27561,6 +29144,35 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, + "builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "requires": { + "semver": "^7.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, "bunyan": { "version": "1.8.15", "resolved": "https://registry.npmjs.org/bunyan/-/bunyan-1.8.15.tgz", @@ -29458,13 +31070,14 @@ "requires": {} }, "eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", + "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", "dev": true, "requires": { "debug": "^3.2.7", - "resolve": "^1.20.0" + "is-core-module": "^2.11.0", + "resolve": "^1.22.1" }, "dependencies": { "debug": { @@ -29616,6 +31229,84 @@ } } }, + "eslint-plugin-n": { + "version": "15.6.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.6.1.tgz", + "integrity": "sha512-R9xw9OtCRxxaxaszTQmQAlPgM+RdGjaL1akWuY/Fv9fRAi8Wj4CUKc6iYVG8QNRjRuo8/BqVYIpfqberJUEacA==", + "dev": true, + "requires": { + "builtins": "^5.0.1", + "eslint-plugin-es": "^4.1.0", + "eslint-utils": "^3.0.0", + "ignore": "^5.1.1", + "is-core-module": "^2.11.0", + "minimatch": "^3.1.2", + "resolve": "^1.22.1", + "semver": "^7.3.8" + }, + "dependencies": { + "eslint-plugin-es": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", + "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", + "dev": true, + "requires": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "dependencies": { + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + } + }, + "ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, "eslint-plugin-no-unsanitized": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/eslint-plugin-no-unsanitized/-/eslint-plugin-no-unsanitized-4.0.1.tgz", @@ -34537,6 +36228,12 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, + "natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, "ncp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", @@ -37980,6 +39677,585 @@ "utf8-byte-length": "^1.0.1" } }, + "ts-standard": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/ts-standard/-/ts-standard-12.0.2.tgz", + "integrity": "sha512-XX2wrB9fKKTfBj4yD3ABm9iShzZcS2iWcPK8XzlBvuL20+wMiLgiz/k5tXgZwTaYq5wRhbks1Y9PelhujF/9ag==", + "dev": true, + "requires": { + "@typescript-eslint/eslint-plugin": "^5.0.0", + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^8.0.1", + "eslint-config-standard-jsx": "^11.0.0", + "eslint-config-standard-with-typescript": "^23.0.0", + "eslint-plugin-import": "^2.25.2", + "eslint-plugin-n": "^15.0.0", + "eslint-plugin-promise": "^6.0.0", + "eslint-plugin-react": "^7.28.0", + "minimist": "^1.2.6", + "pkg-conf": "^4.0.0", + "standard-engine": "^15.0.0" + }, + "dependencies": { + "@eslint/eslintrc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", + "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + } + }, + "@humanwhocodes/config-array": { + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + } + }, + "acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint": { + "version": "8.31.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.31.0.tgz", + "integrity": "sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA==", + "dev": true, + "requires": { + "@eslint/eslintrc": "^1.4.1", + "@humanwhocodes/config-array": "^0.11.8", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.4.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + } + } + }, + "eslint-config-standard": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.0.0.tgz", + "integrity": "sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg==", + "dev": true, + "requires": {} + }, + "eslint-config-standard-jsx": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-11.0.0.tgz", + "integrity": "sha512-+1EV/R0JxEK1L0NGolAr8Iktm3Rgotx3BKwgaX+eAuSX8D952LULKtjgZD3F+e6SvibONnhLwoTi9DPxN5LvvQ==", + "dev": true, + "requires": {} + }, + "eslint-config-standard-with-typescript": { + "version": "23.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-23.0.0.tgz", + "integrity": "sha512-iaaWifImn37Z1OXbNW1es7KI+S7D408F9ys0bpaQf2temeBWlvb0Nc5qHkOgYaRb5QxTZT32GGeN1gtswASOXA==", + "dev": true, + "requires": { + "@typescript-eslint/parser": "^5.0.0", + "eslint-config-standard": "17.0.0" + } + }, + "eslint-plugin-import": { + "version": "2.27.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.4.tgz", + "integrity": "sha512-Z1jVt1EGKia1X9CnBCkpAOhWy8FgQ7OmJ/IblEkT82yrFU/xJaxwujaTzLWqigewwynRQ9mmHfX9MtAfhxm0sA==", + "dev": true, + "requires": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.0", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.7.4", + "has": "^1.0.3", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.6", + "resolve": "^1.22.1", + "semver": "^6.3.0", + "tsconfig-paths": "^3.14.1" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + } + } + }, + "eslint-plugin-promise": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", + "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", + "dev": true, + "requires": {} + }, + "eslint-plugin-react": { + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.0.tgz", + "integrity": "sha512-vSBi1+SrPiLZCGvxpiZIa28fMEUaMjXtCplrvxcIxGzmFiYdsXQDwInEjuv5/i/2CTTxbkS87tE8lsQ0Qxinbw==", + "dev": true, + "requires": { + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", + "array.prototype.tosorted": "^1.1.1", + "doctrine": "^2.1.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", + "object.hasown": "^1.1.2", + "object.values": "^1.1.6", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.4", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.8" + }, + "dependencies": { + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "resolve": { + "version": "2.0.0-next.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", + "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + } + } + }, + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + } + }, + "espree": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "dev": true, + "requires": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + } + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "13.19.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", + "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "load-json-file": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-7.0.1.tgz", + "integrity": "sha512-Gnxj3ev3mB5TkVBGad0JM6dmLiQL+o0t23JPBZ9sd+yvSLk05mFoqKBw5N8gbbkU4TNXyqCgIrl/VM17OgUIgQ==", + "dev": true + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "pkg-conf": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-4.0.0.tgz", + "integrity": "sha512-7dmgi4UY4qk+4mj5Cd8v/GExPo0K+SlY+hulOSdfZ/T6jVH6//y7NtzZo5WrfhDBxuQ0jCa7fLZmNaNh7EWL/w==", + "dev": true, + "requires": { + "find-up": "^6.0.0", + "load-json-file": "^7.0.0" + }, + "dependencies": { + "find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "requires": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + } + }, + "locate-path": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.1.1.tgz", + "integrity": "sha512-vJXaRMJgRVD3+cUZs3Mncj2mxpt5mP0EmNOsxRSZRMlbqjvxzDEOIUWXGmavo0ZC9+tNZCBLQ66reA11nbpHZg==", + "dev": true, + "requires": { + "p-locate": "^6.0.0" + } + }, + "p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "requires": { + "yocto-queue": "^1.0.0" + } + }, + "p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "requires": { + "p-limit": "^4.0.0" + } + }, + "path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true + }, + "yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true + } + } + }, + "standard-engine": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-15.0.0.tgz", + "integrity": "sha512-4xwUhJNo1g/L2cleysUqUv7/btn7GEbYJvmgKrQ2vd/8pkTmN8cpqAZg+BT8Z1hNeEH787iWUdOpL8fmApLtxA==", + "dev": true, + "requires": { + "get-stdin": "^8.0.0", + "minimist": "^1.2.6", + "pkg-conf": "^3.1.0", + "xdg-basedir": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "load-json-file": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-5.3.0.tgz", + "integrity": "sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.15", + "parse-json": "^4.0.0", + "pify": "^4.0.1", + "strip-bom": "^3.0.0", + "type-fest": "^0.3.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true + }, + "pkg-conf": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-3.1.0.tgz", + "integrity": "sha512-m0OTbR/5VPNPqO1ph6Fqbj7Hv6QU7gR/tQW40ZqrL1rjgCU85W6C1bJn0BItuJqnR98PWzw7Z8hHeChD1WrgdQ==", + "dev": true, + "requires": { + "find-up": "^3.0.0", + "load-json-file": "^5.2.0" + } + }, + "type-fest": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", + "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", + "dev": true + } + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + } + } + }, "tsconfig-paths": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", @@ -38008,6 +40284,15 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -38059,6 +40344,12 @@ "is-typedarray": "^1.0.0" } }, + "typescript": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", + "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", + "dev": true + }, "uint8-varint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/uint8-varint/-/uint8-varint-1.0.4.tgz", diff --git a/package.json b/package.json index bfc4e7790..3330428a0 100644 --- a/package.json +++ b/package.json @@ -40,10 +40,10 @@ "test": "run-s test:*", "test:functional": "c8 mocha --timeout 5000 --exit --require ignore-styles \"test/functional/**/*.test.js\"", "lint": "run-s lint:*", - "lint:standard": "standard -v \"*.js\" \"add-on/src/**/*.js\" \"test/**/*.js\" \"scripts/**/*.js\"", + "lint:standard": "ts-standard -v \"*.js\" \"add-on/src/**/*.js\" \"add-on/src/**/*.ts\" \"test/**/*.js\" \"scripts/**/*.js\"", "lint:web-ext": "web-ext lint", "fix:lint": "run-s fix:lint:*", - "fix:lint:standard": "standard -v --fix \"*.js\" \"add-on/src/**/*.js\" \"test/**/*.js\" \"scripts/**/*.js\"", + "fix:lint:standard": "ts-standard -v --fix \"*.js\" \"add-on/src/**/*.js\" \"add-on/src/**/*.ts\" \"test/**/*.js\" \"scripts/**/*.js\"", "precommit": "run-s lint:standard", "prepush": "run-s clean build lint test", "chromium": "run-s bundle:chromium && web-ext run --no-reload --target chromium", @@ -110,6 +110,8 @@ "terser": "5.15.1", "terser-webpack-plugin": "5.3.6", "transform-loader": "0.2.4", + "ts-standard": "^12.0.2", + "typescript": "^4.9.4", "url": "0.11.0", "web-ext": "7.3.1", "webpack": "5.75.0", @@ -164,5 +166,8 @@ "engines": { "node": ">=18.12.1", "npm": ">=8.19.2" + }, + "ts-standard": { + "project": "./tsconfig.json" } } diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 000000000..75e9f1ef2 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "target": "es2016", + "allowJs": true, + "checkJs": true, + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + + /* Type Checking */ + "strict": true, + "skipLibCheck": false, + "emitDeclarationOnly": true, + "declaration": true, + "moduleResolution": "nodenext", + "noImplicitAny": false + }, + "include": ["add-on/src/**/*.js", "add-on/src/**/*.ts"] +} From a256e05e34c7ca01960b99f82891533fac87a519 Mon Sep 17 00:00:00 2001 From: Russell Dempsey <1173416+SgtPooki@users.noreply.github.com> Date: Thu, 12 Jan 2023 13:52:04 -0800 Subject: [PATCH 12/29] chore: use debug logger --- add-on/src/lib/telemetry.js | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/add-on/src/lib/telemetry.js b/add-on/src/lib/telemetry.js index d9a8632cb..4f2095ccc 100644 --- a/add-on/src/lib/telemetry.js +++ b/add-on/src/lib/telemetry.js @@ -1,5 +1,8 @@ import { MetricsProvider } from '@ipfs-shipyard/ignite-metrics/vanilla' +import debug from 'debug' + +const log = debug('ipfs-companion:telemetry') let metricsProvider = null export function getMetricsProviderInstance () { @@ -12,27 +15,28 @@ export function getMetricsProviderInstance () { } /** - * @param {ReturnType['options']} state + * @param {ReturnType['options']} stateOptions * @returns {string[]} */ function mapStateToConsent (stateOptions) { const obj = { minimal: stateOptions?.telemetryGroupMinimal || false, - marketing: stateOptions?.telemetryGroupMarketing || false, performance: stateOptions?.telemetryGroupPerformance || false, - tracking: stateOptions?.telemetryGroupTracking || false + ux: stateOptions?.telemetryGroupUx || false, + feedback: stateOptions?.telemetryGroupFeedback || false, + location: stateOptions?.telemetryGroupLocation || false } const enabledConsentGroups = Object.keys(obj).filter(key => obj[key] === true) - console.log('enabledConsentGroups: ', enabledConsentGroups) + log('enabledConsentGroups: ', enabledConsentGroups) return enabledConsentGroups } function logConsent () { - console.log('checkConsent(\'minimal\'): ', getMetricsProviderInstance().checkConsent('minimal')) - console.log('checkConsent(\'marketing\'): ', getMetricsProviderInstance().checkConsent('marketing')) - console.log('checkConsent(\'performance\'): ', getMetricsProviderInstance().checkConsent('performance')) - console.log('checkConsent(\'tracking\'): ', getMetricsProviderInstance().checkConsent('tracking')) + log('checkConsent(\'minimal\'): ', getMetricsProviderInstance().checkConsent('minimal')) + log('checkConsent(\'performance\'): ', getMetricsProviderInstance().checkConsent('performance')) + log('checkConsent(\'marketing\'): ', getMetricsProviderInstance().checkConsent('marketing')) + log('checkConsent(\'tracking\'): ', getMetricsProviderInstance().checkConsent('tracking')) } /** @@ -41,20 +45,20 @@ function logConsent () { * @returns {void} */ export function handleConsentFromState (state) { - console.log('handleConsentFromState', state) + log('handleConsentFromState', state) getMetricsProviderInstance().updateConsent(mapStateToConsent(state)) logConsent() } export function handleConsentUpdate (consent) { - console.log('handleConsentUpdate', consent) + log('handleConsentUpdate', consent) getMetricsProviderInstance().updateConsent(consent) } // const ignoredViewsRegex = [/^ipfs:\/\/.*/] const ignoredViewsRegex = [] export function trackView (view) { - console.log('trackView called for view: ', view) + log('trackView called for view: ', view) getMetricsProviderInstance().metricsService.track_pageview(view, ignoredViewsRegex) } From 798c5fe72dc7e5bc794bed697e044805ecb91d77 Mon Sep 17 00:00:00 2001 From: Russell Dempsey <1173416+SgtPooki@users.noreply.github.com> Date: Thu, 12 Jan 2023 13:53:16 -0800 Subject: [PATCH 13/29] fix(lint): remove unused method --- add-on/src/options/page.js | 1 - 1 file changed, 1 deletion(-) diff --git a/add-on/src/options/page.js b/add-on/src/options/page.js index f506c5635..bf656c6e6 100644 --- a/add-on/src/options/page.js +++ b/add-on/src/options/page.js @@ -11,7 +11,6 @@ import apiForm from './forms/api-form.js' import experimentsForm from './forms/experiments-form.js' import telemetryForm from './forms/telemetry-form.js' import resetForm from './forms/reset-form.js' -import { trackView } from '../lib/telemetry.js' // Render the options page: // Passed current app `state` from the store and `emit`, a function to create From 8d4d6c8bd6ddab888f74d828745bb4a0a8635479 Mon Sep 17 00:00:00 2001 From: Russell Dempsey <1173416+SgtPooki@users.noreply.github.com> Date: Thu, 12 Jan 2023 13:54:13 -0800 Subject: [PATCH 14/29] fix(lint): run 'npm run fix:lint' --- add-on/src/landing-pages/welcome/page.js | 2 +- add-on/src/lib/ipfs-client/brave.js | 66 ++++++++++++------------ add-on/src/lib/ipfs-companion.js | 8 +-- add-on/src/lib/notifier.js | 4 +- 4 files changed, 40 insertions(+), 40 deletions(-) diff --git a/add-on/src/landing-pages/welcome/page.js b/add-on/src/landing-pages/welcome/page.js index 816503f59..a83722aeb 100644 --- a/add-on/src/landing-pages/welcome/page.js +++ b/add-on/src/landing-pages/welcome/page.js @@ -55,7 +55,7 @@ const renderCompanionLogo = (i18n, isIpfsOnline) => { return html`

- ${logo({ path: logoPath, size: logoSize, isIpfsOnline: isIpfsOnline })} + ${logo({ path: logoPath, size: logoSize, isIpfsOnline })}

${i18n.getMessage('page_landingWelcome_logo_title')}

` diff --git a/add-on/src/lib/ipfs-client/brave.js b/add-on/src/lib/ipfs-client/brave.js index 491cbdb84..e683274ba 100644 --- a/add-on/src/lib/ipfs-client/brave.js +++ b/add-on/src/lib/ipfs-client/brave.js @@ -16,39 +16,39 @@ const waitFor = (f, t) => pWaitFor(f, { interval: tickMs, timeout: t || Infinity // wrapper for chrome.ipfs.* that gets us closer to ergonomics of promise-based browser.* export const brave = hasBraveChromeIpfs() ? Object.freeze({ - // This is the main check - returns true only in Brave and only when - // feature flag is enabled brave://flags and can be used for high level UI - // decisions such as showing custom node type on Preferences - getIPFSEnabled: async () => - Boolean(await promisifyBraveCheck(chrome.ipfs.getIPFSEnabled)), - - // Obtains a string representation of the resolve method - // method is one of the following strings: - // "ask" uses a gateway but also prompts them to install a local node - // "gateway" uses a gateway but also prompts them to install a local node - // "local" uses a gateway but also prompts them to install a local node - // "disabled" disabled by the user - // "undefined" everything else (IPFS feature flag is not enabled, error etc) - getResolveMethodType: async () => - String(await promisifyBraveCheck(chrome.ipfs.getResolveMethodType)), - - // Obtains the config contents of the local IPFS node - // Returns undefined if missing for any reason - getConfig: async () => - await promisifyBraveCheck(chrome.ipfs.getConfig), - - // Returns true if binary is present - getExecutableAvailable: async () => - Boolean(await promisifyBraveCheck(chrome.ipfs.getExecutableAvailable)), - - // Attempts to start the daemon and returns true if finished - launch: async () => - Boolean(await promisifyBraveCheck(chrome.ipfs.launch)), - - // Attempts to stop the daemon and returns true if finished - shutdown: async () => - Boolean(await promisifyBraveCheck(chrome.ipfs.shutdown)) - }) + // This is the main check - returns true only in Brave and only when + // feature flag is enabled brave://flags and can be used for high level UI + // decisions such as showing custom node type on Preferences + getIPFSEnabled: async () => + Boolean(await promisifyBraveCheck(chrome.ipfs.getIPFSEnabled)), + + // Obtains a string representation of the resolve method + // method is one of the following strings: + // "ask" uses a gateway but also prompts them to install a local node + // "gateway" uses a gateway but also prompts them to install a local node + // "local" uses a gateway but also prompts them to install a local node + // "disabled" disabled by the user + // "undefined" everything else (IPFS feature flag is not enabled, error etc) + getResolveMethodType: async () => + String(await promisifyBraveCheck(chrome.ipfs.getResolveMethodType)), + + // Obtains the config contents of the local IPFS node + // Returns undefined if missing for any reason + getConfig: async () => + await promisifyBraveCheck(chrome.ipfs.getConfig), + + // Returns true if binary is present + getExecutableAvailable: async () => + Boolean(await promisifyBraveCheck(chrome.ipfs.getExecutableAvailable)), + + // Attempts to start the daemon and returns true if finished + launch: async () => + Boolean(await promisifyBraveCheck(chrome.ipfs.launch)), + + // Attempts to stop the daemon and returns true if finished + shutdown: async () => + Boolean(await promisifyBraveCheck(chrome.ipfs.shutdown)) + }) : undefined export async function init (browser, opts) { diff --git a/add-on/src/lib/ipfs-companion.js b/add-on/src/lib/ipfs-companion.js index 08ad9692c..7e480d0a1 100644 --- a/add-on/src/lib/ipfs-companion.js +++ b/add-on/src/lib/ipfs-companion.js @@ -369,11 +369,11 @@ export default async function init () { // https://github.com/ipfs-shipyard/ipfs-companion/issues/398 if (runtime.isFirefox && ipfsPathValidator.isIpfsPageActionsContext(url)) { if (sameGateway(url, state.gwURL) || sameGateway(url, state.apiURL)) { - await browser.pageAction.setIcon({ tabId: tabId, path: '/icons/ipfs-logo-on.svg' }) - await browser.pageAction.setTitle({ tabId: tabId, title: browser.i18n.getMessage('pageAction_titleIpfsAtCustomGateway') }) + await browser.pageAction.setIcon({ tabId, path: '/icons/ipfs-logo-on.svg' }) + await browser.pageAction.setTitle({ tabId, title: browser.i18n.getMessage('pageAction_titleIpfsAtCustomGateway') }) } else { - await browser.pageAction.setIcon({ tabId: tabId, path: '/icons/ipfs-logo-off.svg' }) - await browser.pageAction.setTitle({ tabId: tabId, title: browser.i18n.getMessage('pageAction_titleIpfsAtPublicGateway') }) + await browser.pageAction.setIcon({ tabId, path: '/icons/ipfs-logo-off.svg' }) + await browser.pageAction.setTitle({ tabId, title: browser.i18n.getMessage('pageAction_titleIpfsAtPublicGateway') }) } await browser.pageAction.show(tabId) } diff --git a/add-on/src/lib/notifier.js b/add-on/src/lib/notifier.js index 6a5c18704..032082725 100644 --- a/add-on/src/lib/notifier.js +++ b/add-on/src/lib/notifier.js @@ -21,8 +21,8 @@ export default function createNotifier (getState) { return await browser.notifications.create({ type: 'basic', iconUrl: browser.runtime.getURL('icons/ipfs-logo-on.svg'), - title: title, - message: message + title, + message }) } catch (err) { log.error('failed to create a notification', err) From 4058da2a331ca0ecd23e4c60321e17902ec03dc9 Mon Sep 17 00:00:00 2001 From: Russell Dempsey <1173416+SgtPooki@users.noreply.github.com> Date: Thu, 12 Jan 2023 14:47:16 -0800 Subject: [PATCH 15/29] chore: build and lint success --- add-on/src/lib/telemetry.js | 4 +- package-lock.json | 123 +++++++++++++++++++++++++----------- package.json | 2 +- 3 files changed, 88 insertions(+), 41 deletions(-) diff --git a/add-on/src/lib/telemetry.js b/add-on/src/lib/telemetry.js index 4f2095ccc..526e2cdd0 100644 --- a/add-on/src/lib/telemetry.js +++ b/add-on/src/lib/telemetry.js @@ -15,7 +15,7 @@ export function getMetricsProviderInstance () { } /** - * @param {ReturnType['options']} stateOptions + * @param {import('../types.js').CompanionState} stateOptions * @returns {string[]} */ function mapStateToConsent (stateOptions) { @@ -41,7 +41,7 @@ function logConsent () { /** * - * @param {ReturnType} state + * @param {import('../types.js').CompanionState} state * @returns {void} */ export function handleConsentFromState (state) { diff --git a/package-lock.json b/package-lock.json index f40675e00..522dcee30 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,7 +7,7 @@ "name": "ipfs-companion", "license": "CC0-1.0", "dependencies": { - "@ipfs-shipyard/ignite-metrics": "github:ipfs-shipyard/ignite-metrics#2546b8a7de9114f3e6903894d29f251276cef035", + "@ipfs-shipyard/ignite-metrics": "file:ipfs-shipyard-ignite-metrics-1.0.0.tgz", "@material/switch": "10.0.0", "assert": "2.0.0", "buffer": "6.0.3", @@ -2027,6 +2027,7 @@ "os": [ "darwin" ], + "peer": true, "engines": { "node": ">=12" } @@ -2218,6 +2219,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=12" } @@ -2463,15 +2465,15 @@ }, "node_modules/@ipfs-shipyard/ignite-metrics": { "version": "1.0.0", - "resolved": "git+ssh://git@github.com/ipfs-shipyard/ignite-metrics.git#2546b8a7de9114f3e6903894d29f251276cef035", - "integrity": "sha512-4U+IdhyOmlNaYeo68clg34jLBxCoYSGCu7/NlqyFNJ87xSBg52YQFtvoowN4xbyrGvu+V8ijYelOV3/COoPEMQ==", + "resolved": "file:ipfs-shipyard-ignite-metrics-1.0.0.tgz", + "integrity": "sha512-PFcIu7R/zWpisc0Anr/ALlxCJaDQ/QDe1OPTZqqtfzmiE6b7jnGYAWOtR0HOYBeRih2azT7GFINqwywSuRpxiw==", "license": "Apache-2.0 OR MIT", "dependencies": { "countly-sdk-web": "^22.6.4", "esbuild-css-modules-plugin": "^2.6.3", "react": "^18.2.0", "react-dom": "^18.2.0", - "react-router-dom": "^6.4.5", + "react-router-dom": "^6.5.0", "styled-components": "^5.3.6" }, "engines": { @@ -2479,8 +2481,8 @@ "npm": ">=7.0.0" }, "optionalDependencies": { - "@esbuild/darwin-arm64": "^0.16.5", - "@esbuild/linux-x64": "^0.16.5", + "@esbuild/darwin-arm64": "^0.16.8", + "@esbuild/linux-x64": "^0.16.8", "react-refresh": "^0.14.0" }, "peerDependencies": { @@ -2488,6 +2490,36 @@ "react-dom": "^18.2.0" } }, + "node_modules/@ipfs-shipyard/ignite-metrics/node_modules/@esbuild/darwin-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz", + "integrity": "sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@ipfs-shipyard/ignite-metrics/node_modules/@esbuild/linux-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz", + "integrity": "sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@ipld/car": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/@ipld/car/-/car-5.0.1.tgz", @@ -4479,9 +4511,9 @@ "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" }, "node_modules/@remix-run/router": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.0.5.tgz", - "integrity": "sha512-my0Mycd+jruq/1lQuO5LBB6WTlL/e8DTCYWp44DfMTDcXz8DcTlgF0ISaLsGewt+ctHN+yA8xMq3q/N7uWJPug==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.2.1.tgz", + "integrity": "sha512-XiY0IsyHR+DXYS5vBxpoBe/8veTeoRpMHP+vDosLZxL5bnpetzI0igkxkLZS235ldLzyfkxF+2divEwWHP3vMQ==", "engines": { "node": ">=14" } @@ -18743,11 +18775,11 @@ } }, "node_modules/react-router": { - "version": "6.4.5", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.4.5.tgz", - "integrity": "sha512-1RQJ8bM70YEumHIlNUYc6mFfUDoWa5EgPDenK/fq0bxD8DYpQUi/S6Zoft+9DBrh2xmtg92N5HMAJgGWDhKJ5Q==", + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.6.2.tgz", + "integrity": "sha512-uJPG55Pek3orClbURDvfljhqFvMgJRo59Pktywkk8hUUkTY2aRfza8Yhl/vZQXs+TNQyr6tu+uqz/fLxPICOGQ==", "dependencies": { - "@remix-run/router": "1.0.5" + "@remix-run/router": "1.2.1" }, "engines": { "node": ">=14" @@ -18757,12 +18789,12 @@ } }, "node_modules/react-router-dom": { - "version": "6.4.5", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.4.5.tgz", - "integrity": "sha512-a7HsgikBR0wNfroBHcZUCd9+mLRqZS8R5U1Z1mzLWxFXEkUT3vR1XXmSIVoVpxVX8Bar0nQYYYc9Yipq8dWwAA==", + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.6.2.tgz", + "integrity": "sha512-6SCDXxRQqW5af8ImOqKza7icmQ47/EMbz572uFjzvcArg3lZ+04PxSPp8qGs+p2Y+q+b+S/AjXv8m8dyLndIIA==", "dependencies": { - "@remix-run/router": "1.0.5", - "react-router": "6.4.5" + "@remix-run/router": "1.2.1", + "react-router": "6.6.2" }, "engines": { "node": ">=14" @@ -25301,7 +25333,8 @@ "version": "0.16.7", "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.7.tgz", "integrity": "sha512-VUb9GK23z8jkosHU9yJNUgQpsfJn+7ZyBm6adi2Ec5/U241eR1tAn82QicnUzaFDaffeixiHwikjmnec/YXEZg==", - "optional": true + "optional": true, + "peer": true }, "@esbuild/darwin-x64": { "version": "0.16.7", @@ -25384,7 +25417,8 @@ "version": "0.16.7", "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.7.tgz", "integrity": "sha512-xi/tbqCqvPIzU+zJVyrpz12xqciTAPMi2fXEWGnapZymoGhuL2GIWIRXg4O2v5BXaYA5TSaiKYE14L0QhUTuQg==", - "optional": true + "optional": true, + "peer": true }, "@esbuild/netbsd-x64": { "version": "0.16.7", @@ -25548,19 +25582,32 @@ "dev": true }, "@ipfs-shipyard/ignite-metrics": { - "version": "git+ssh://git@github.com/ipfs-shipyard/ignite-metrics.git#2546b8a7de9114f3e6903894d29f251276cef035", - "integrity": "sha512-4U+IdhyOmlNaYeo68clg34jLBxCoYSGCu7/NlqyFNJ87xSBg52YQFtvoowN4xbyrGvu+V8ijYelOV3/COoPEMQ==", - "from": "@ipfs-shipyard/ignite-metrics@github:ipfs-shipyard/ignite-metrics#2546b8a7de9114f3e6903894d29f251276cef035", + "version": "file:ipfs-shipyard-ignite-metrics-1.0.0.tgz", + "integrity": "sha512-PFcIu7R/zWpisc0Anr/ALlxCJaDQ/QDe1OPTZqqtfzmiE6b7jnGYAWOtR0HOYBeRih2azT7GFINqwywSuRpxiw==", "requires": { - "@esbuild/darwin-arm64": "^0.16.5", - "@esbuild/linux-x64": "^0.16.5", + "@esbuild/darwin-arm64": "^0.16.8", + "@esbuild/linux-x64": "^0.16.8", "countly-sdk-web": "^22.6.4", "esbuild-css-modules-plugin": "^2.6.3", "react": "^18.2.0", "react-dom": "^18.2.0", "react-refresh": "^0.14.0", - "react-router-dom": "^6.4.5", + "react-router-dom": "^6.5.0", "styled-components": "^5.3.6" + }, + "dependencies": { + "@esbuild/darwin-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz", + "integrity": "sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==", + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz", + "integrity": "sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==", + "optional": true + } } }, "@ipld/car": { @@ -27140,9 +27187,9 @@ "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" }, "@remix-run/router": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.0.5.tgz", - "integrity": "sha512-my0Mycd+jruq/1lQuO5LBB6WTlL/e8DTCYWp44DfMTDcXz8DcTlgF0ISaLsGewt+ctHN+yA8xMq3q/N7uWJPug==" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.2.1.tgz", + "integrity": "sha512-XiY0IsyHR+DXYS5vBxpoBe/8veTeoRpMHP+vDosLZxL5bnpetzI0igkxkLZS235ldLzyfkxF+2divEwWHP3vMQ==" }, "@samverschueren/stream-to-observable": { "version": "0.3.1", @@ -37786,20 +37833,20 @@ "optional": true }, "react-router": { - "version": "6.4.5", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.4.5.tgz", - "integrity": "sha512-1RQJ8bM70YEumHIlNUYc6mFfUDoWa5EgPDenK/fq0bxD8DYpQUi/S6Zoft+9DBrh2xmtg92N5HMAJgGWDhKJ5Q==", + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.6.2.tgz", + "integrity": "sha512-uJPG55Pek3orClbURDvfljhqFvMgJRo59Pktywkk8hUUkTY2aRfza8Yhl/vZQXs+TNQyr6tu+uqz/fLxPICOGQ==", "requires": { - "@remix-run/router": "1.0.5" + "@remix-run/router": "1.2.1" } }, "react-router-dom": { - "version": "6.4.5", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.4.5.tgz", - "integrity": "sha512-a7HsgikBR0wNfroBHcZUCd9+mLRqZS8R5U1Z1mzLWxFXEkUT3vR1XXmSIVoVpxVX8Bar0nQYYYc9Yipq8dWwAA==", + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.6.2.tgz", + "integrity": "sha512-6SCDXxRQqW5af8ImOqKza7icmQ47/EMbz572uFjzvcArg3lZ+04PxSPp8qGs+p2Y+q+b+S/AjXv8m8dyLndIIA==", "requires": { - "@remix-run/router": "1.0.5", - "react-router": "6.4.5" + "@remix-run/router": "1.2.1", + "react-router": "6.6.2" } }, "read-pkg": { diff --git a/package.json b/package.json index 3330428a0..59cb8276d 100644 --- a/package.json +++ b/package.json @@ -120,7 +120,7 @@ "webpack-merge": "5.8.0" }, "dependencies": { - "@ipfs-shipyard/ignite-metrics": "github:ipfs-shipyard/ignite-metrics#2546b8a7de9114f3e6903894d29f251276cef035", + "@ipfs-shipyard/ignite-metrics": "file:ipfs-shipyard-ignite-metrics-1.0.0.tgz", "@material/switch": "10.0.0", "assert": "2.0.0", "buffer": "6.0.3", From 0e66ea961447eb4bda15c3f5e6afeac821375176 Mon Sep 17 00:00:00 2001 From: Russell Dempsey <1173416+SgtPooki@users.noreply.github.com> Date: Thu, 12 Jan 2023 15:11:01 -0800 Subject: [PATCH 16/29] chore(types): fix type errors --- add-on/src/background/background.js | 1 + add-on/src/lib/ipfs-companion.js | 2 +- add-on/src/lib/state.js | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/add-on/src/background/background.js b/add-on/src/background/background.js index 4bd876944..a33d2f014 100644 --- a/add-on/src/background/background.js +++ b/add-on/src/background/background.js @@ -22,5 +22,6 @@ document.addEventListener('DOMContentLoaded', async () => { window.location.reload() } // init inlined to read updated localStorage.debug + // @ts-expect-error - TS does not know about window.ipfsCompanion window.ipfsCompanion = await createIpfsCompanion() }) diff --git a/add-on/src/lib/ipfs-companion.js b/add-on/src/lib/ipfs-companion.js index 7e480d0a1..7faca9cd3 100644 --- a/add-on/src/lib/ipfs-companion.js +++ b/add-on/src/lib/ipfs-companion.js @@ -34,7 +34,7 @@ export default async function init () { // INIT // =================================================================== let ipfs // ipfs-api instance - /** @type {ReturnType} */ + /** @type {import('../types.js').CompanionState} */ let state // avoid redundant API reads by utilizing local cache of various states let dnslinkResolver let ipfsPathValidator diff --git a/add-on/src/lib/state.js b/add-on/src/lib/state.js index 38de69d11..6ba34cb24 100644 --- a/add-on/src/lib/state.js +++ b/add-on/src/lib/state.js @@ -8,7 +8,7 @@ export const offlinePeerCount = -1 /** * * @param {import('../types.js').CompanionOptions} options - * @param {Partial} overrides + * @param {Partial} [overrides] * @returns {import('../types.js').CompanionState} */ export function initState (options, overrides) { From 090d700aa6c123d0cb9b553df6a2de6eed694cea Mon Sep 17 00:00:00 2001 From: Russell Dempsey <1173416+SgtPooki@users.noreply.github.com> Date: Thu, 12 Jan 2023 15:11:45 -0800 Subject: [PATCH 17/29] chore: add docs/telemetry/COLLECTED_DATA.md see https://github.com/ipfs-shipyard/ignite-metrics/pull/35 --- docs/telemetry/COLLECTED_DATA.md | 40 ++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 docs/telemetry/COLLECTED_DATA.md diff --git a/docs/telemetry/COLLECTED_DATA.md b/docs/telemetry/COLLECTED_DATA.md new file mode 100644 index 000000000..224b45b07 --- /dev/null +++ b/docs/telemetry/COLLECTED_DATA.md @@ -0,0 +1,40 @@ +# Collected telemetry data + +Copied from https://github.com/ipfs-shipyard/ignite-metrics/blob/main/docs/telemetry/COLLECTED_DATA.template.md + +## What metrics data do we NOT collect + +We do not collect any of the below listed items in our metric data: + +1. User identifiable data (names, email addresses, aliases, handles, etc.) +2. CIDs +3. IP addresses + +Telemetry is sent to Countly instance at `countly.ipfs.tech`. You can read how they protect your data at [Security, Privacy, and Access FAQ](https://support.count.ly/hc/en-us/articles/360037501372-Security-Privacy-and-Access-FAQ) + +## What metrics data DO we collect + +As a general rule, we collect only application data; no user data. Some examples of application data we collect are: + +| Metric data name | Metric feature name | Metric trigger | Analytics use | Notes | +|:-------------------:|---------------------|---------------------------------------------------------|-------------------------------------------------------------------|---------------| +| begin_session | sessions | At the start of the extension being active and enabled | Count unique active users (daily/weekly/monthly) & session length | see [Countly's session flow documentation](https://support.count.ly/hc/en-us/articles/360037753291-SDK-development-guide#session-flow) | +| end_session | sessions | Whenever extension is disabled or idle | Count unique active users (daily/weekly/monthly) & session length | see [Countly's session flow documentation](https://support.count.ly/hc/en-us/articles/360037753291-SDK-development-guide#session-flow) | +| session_duration | sessions | At the end of the extension being active and enabled | Count unique active users (daily/weekly/monthly) & session length | see [Countly's session flow documentation](https://support.count.ly/hc/en-us/articles/360037753291-SDK-development-guide#session-flow) | +| view:background | views | When the background view is shown | View count | | +| view:welcome | views | When the welcome view is shown | View count | | +| view:options | views | When the options view is shown | View count | | +| view:quick-import | views | When the quick-import view is shown | View count | | +| view:browser-action | views | When the browser-action view is shown | View count | | + +* "Metric data name" - The app-specific metric/event name we're using for this metric data. (e.g. APP_BOOTSTRAP_START) +* "Metric feature name" - The metric feature the event/metric data correlates to. The group the metric feature belongs to is defined in our [COLLECTION_POLICY](https://github.com/ipfs-shipyard/ignite-metrics/blob/main/docs/telemetry/COLLECTION_POLICY.md#metric-features-and-their-groupings). (e.g. Minimal) +* "Metric trigger" - An explanation covering when this metric data is triggered. (e.g. On Application init) +* "Analytics use" - An explanation about how this metric data is used for analytics. (e.g. Input to load time calculations) +* "Notes" - Any additional notes. (e.g. Used as a timestamp identifier for when an application is first loaded) + +## Other related documents + +* [COLLECTION_POLICY](https://github.com/ipfs-shipyard/ignite-metrics/blob/main/docs/telemetry/COLLECTION_POLICY.md) +* [PRIVACY_POLICY](https://github.com/ipfs-shipyard/ignite-metrics/blob/main/docs/telemetry/PRIVACY_POLICY.md) +* [FAQs](https://github.com/ipfs-shipyard/ignite-metrics/blob/main/docs/telemetry/FAQs.md) From d83de1a360418f7027b0a8e64943ee6d8d2c87a4 Mon Sep 17 00:00:00 2001 From: Russell Dempsey <1173416+SgtPooki@users.noreply.github.com> Date: Thu, 12 Jan 2023 15:13:22 -0800 Subject: [PATCH 18/29] chore: update old metric group names in logConsent --- add-on/src/lib/telemetry.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/add-on/src/lib/telemetry.js b/add-on/src/lib/telemetry.js index 526e2cdd0..8b8d1f2cc 100644 --- a/add-on/src/lib/telemetry.js +++ b/add-on/src/lib/telemetry.js @@ -35,8 +35,9 @@ function mapStateToConsent (stateOptions) { function logConsent () { log('checkConsent(\'minimal\'): ', getMetricsProviderInstance().checkConsent('minimal')) log('checkConsent(\'performance\'): ', getMetricsProviderInstance().checkConsent('performance')) - log('checkConsent(\'marketing\'): ', getMetricsProviderInstance().checkConsent('marketing')) - log('checkConsent(\'tracking\'): ', getMetricsProviderInstance().checkConsent('tracking')) + log('checkConsent(\'ux\'): ', getMetricsProviderInstance().checkConsent('ux')) + log('checkConsent(\'feedback\'): ', getMetricsProviderInstance().checkConsent('feedback')) + log('checkConsent(\'location\'): ', getMetricsProviderInstance().checkConsent('location')) } /** From ceb65b6429bd5d4ac0172da4fb449ec9b27c4832 Mon Sep 17 00:00:00 2001 From: Russell Dempsey <1173416+SgtPooki@users.noreply.github.com> Date: Thu, 12 Jan 2023 16:58:38 -0800 Subject: [PATCH 19/29] chore: clean up UI --- add-on/_locales/en/messages.json | 8 -------- add-on/src/options/forms/telemetry-form.js | 9 ++------- 2 files changed, 2 insertions(+), 15 deletions(-) diff --git a/add-on/_locales/en/messages.json b/add-on/_locales/en/messages.json index 13fdc816b..e5b05449b 100644 --- a/add-on/_locales/en/messages.json +++ b/add-on/_locales/en/messages.json @@ -743,14 +743,6 @@ "message": "Collect basic feature and usage metrics to help maintainers to prioritize work on the most useful features.", "description": "A description for the 'minimal' grouping of metrics we collect (option_telemetryGroupMinimal_description)" }, - "option_telemetryGroupMinimal_session_description": { - "message": "A `session` event for every minute the extension was active.", - "description": "An explanation of the `session` telemetry we collect (option_telemetryGroupMinimal_session_description)" - }, - "option_telemetryGroupMinimal_view_description": { - "message": "A `view` event for every time a part of extension's user interface is visible.", - "description": "An explanation of the `session` telemetry we collect (option_telemetryGroupMinimal_session_description)" - }, "option_telemetryGroupMarketing_title": { "message": "Marketing title", "description": "A title for the 'marketing' grouping of metrics we collect (option_telemetryGroupMarketing_title)" diff --git a/add-on/src/options/forms/telemetry-form.js b/add-on/src/options/forms/telemetry-form.js index 3b588cdf4..7a3601dba 100644 --- a/add-on/src/options/forms/telemetry-form.js +++ b/add-on/src/options/forms/telemetry-form.js @@ -1,17 +1,14 @@ 'use strict' /* eslint-env browser, webextensions */ -import browser from 'webextension-polyfill' import html from 'choo/html/index.js' +import browser from 'webextension-polyfill' import switchToggle from '../../pages/components/switch-toggle.js' export default function telemetryForm ({ onOptionChange, ...stateOptions }) { - // const onTelemetryChange = (key) => { - - // } return html`
@@ -19,7 +16,7 @@ export default function telemetryForm ({

${browser.i18n.getMessage('option_telemetry_disclaimer')}

- + ${browser.i18n.getMessage('option_legend_readMore')}

@@ -30,8 +27,6 @@ export default function telemetryForm ({
${browser.i18n.getMessage('option_telemetryGroupMinimal_title')}

${browser.i18n.getMessage('option_telemetryGroupMinimal_description')}

-

${browser.i18n.getMessage('option_telemetryGroupMinimal_session_description')}

-

${browser.i18n.getMessage('option_telemetryGroupMinimal_view_description')}

From 9db9b6e588dc0a4028d8953bce2cbfe4db09db75 Mon Sep 17 00:00:00 2001 From: Russell Dempsey <1173416+SgtPooki@users.noreply.github.com> Date: Thu, 12 Jan 2023 17:00:12 -0800 Subject: [PATCH 20/29] chore: use ignite-metrics from npm --- package-lock.json | 22 +++++++++++----------- package.json | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index 522dcee30..a1778606f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,7 +7,7 @@ "name": "ipfs-companion", "license": "CC0-1.0", "dependencies": { - "@ipfs-shipyard/ignite-metrics": "file:ipfs-shipyard-ignite-metrics-1.0.0.tgz", + "@ipfs-shipyard/ignite-metrics": "1.0.1", "@material/switch": "10.0.0", "assert": "2.0.0", "buffer": "6.0.3", @@ -2464,10 +2464,9 @@ "dev": true }, "node_modules/@ipfs-shipyard/ignite-metrics": { - "version": "1.0.0", - "resolved": "file:ipfs-shipyard-ignite-metrics-1.0.0.tgz", - "integrity": "sha512-PFcIu7R/zWpisc0Anr/ALlxCJaDQ/QDe1OPTZqqtfzmiE6b7jnGYAWOtR0HOYBeRih2azT7GFINqwywSuRpxiw==", - "license": "Apache-2.0 OR MIT", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@ipfs-shipyard/ignite-metrics/-/ignite-metrics-1.0.1.tgz", + "integrity": "sha512-NDTHkOglmYqJCexYmhjU0bYrbPZNF6Z3AjMZuiaFQN9Ua6nQusFGHUp3/tAUuM08GY3LpzkPY0+9y4bpe7Ud5g==", "dependencies": { "countly-sdk-web": "^22.6.4", "esbuild-css-modules-plugin": "^2.6.3", @@ -2481,8 +2480,8 @@ "npm": ">=7.0.0" }, "optionalDependencies": { - "@esbuild/darwin-arm64": "^0.16.8", - "@esbuild/linux-x64": "^0.16.8", + "@esbuild/darwin-arm64": "^0.16.17", + "@esbuild/linux-x64": "^0.16.16", "react-refresh": "^0.14.0" }, "peerDependencies": { @@ -25582,11 +25581,12 @@ "dev": true }, "@ipfs-shipyard/ignite-metrics": { - "version": "file:ipfs-shipyard-ignite-metrics-1.0.0.tgz", - "integrity": "sha512-PFcIu7R/zWpisc0Anr/ALlxCJaDQ/QDe1OPTZqqtfzmiE6b7jnGYAWOtR0HOYBeRih2azT7GFINqwywSuRpxiw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@ipfs-shipyard/ignite-metrics/-/ignite-metrics-1.0.1.tgz", + "integrity": "sha512-NDTHkOglmYqJCexYmhjU0bYrbPZNF6Z3AjMZuiaFQN9Ua6nQusFGHUp3/tAUuM08GY3LpzkPY0+9y4bpe7Ud5g==", "requires": { - "@esbuild/darwin-arm64": "^0.16.8", - "@esbuild/linux-x64": "^0.16.8", + "@esbuild/darwin-arm64": "^0.16.17", + "@esbuild/linux-x64": "^0.16.16", "countly-sdk-web": "^22.6.4", "esbuild-css-modules-plugin": "^2.6.3", "react": "^18.2.0", diff --git a/package.json b/package.json index 59cb8276d..41742fc99 100644 --- a/package.json +++ b/package.json @@ -120,7 +120,7 @@ "webpack-merge": "5.8.0" }, "dependencies": { - "@ipfs-shipyard/ignite-metrics": "file:ipfs-shipyard-ignite-metrics-1.0.0.tgz", + "@ipfs-shipyard/ignite-metrics": "1.0.1", "@material/switch": "10.0.0", "assert": "2.0.0", "buffer": "6.0.3", From 15ab2076ccda627ee06f2ced29e2094a0097f381 Mon Sep 17 00:00:00 2001 From: Russell Dempsey <1173416+SgtPooki@users.noreply.github.com> Date: Fri, 13 Jan 2023 16:03:33 -0800 Subject: [PATCH 21/29] chore: update ignite-metrics and some types --- add-on/src/lib/telemetry.js | 2 +- add-on/src/options/forms/telemetry-form.js | 7 ++++++- add-on/src/pages/components/switch-toggle.js | 4 ++++ add-on/src/types.d.ts | 9 +++++++++ package-lock.json | 14 +++++++------- package.json | 2 +- 6 files changed, 28 insertions(+), 10 deletions(-) diff --git a/add-on/src/lib/telemetry.js b/add-on/src/lib/telemetry.js index 8b8d1f2cc..a45f40575 100644 --- a/add-on/src/lib/telemetry.js +++ b/add-on/src/lib/telemetry.js @@ -1,5 +1,5 @@ -import { MetricsProvider } from '@ipfs-shipyard/ignite-metrics/vanilla' +import MetricsProvider from '@ipfs-shipyard/ignite-metrics/vanilla' import debug from 'debug' const log = debug('ipfs-companion:telemetry') diff --git a/add-on/src/options/forms/telemetry-form.js b/add-on/src/options/forms/telemetry-form.js index 7a3601dba..f46467fd5 100644 --- a/add-on/src/options/forms/telemetry-form.js +++ b/add-on/src/options/forms/telemetry-form.js @@ -9,6 +9,7 @@ export default function telemetryForm ({ onOptionChange, ...stateOptions }) { + // @ts-expect-error - TS doesn't like the `html` template tag return html`
@@ -30,7 +31,11 @@ export default function telemetryForm ({ -
${switchToggle({ id: 'telemetryGroupMinimal', checked: stateOptions.telemetryGroupMinimal, onchange: onOptionChange('telemetryGroupMinimal') })}
+
${switchToggle({ + id: 'telemetryGroupMinimal', + checked: stateOptions.telemetryGroupMinimal, + onchange: onOptionChange('telemetryGroupMinimal') + })}
diff --git a/add-on/src/pages/components/switch-toggle.js b/add-on/src/pages/components/switch-toggle.js index c285e2c23..962b4abdd 100644 --- a/add-on/src/pages/components/switch-toggle.js +++ b/add-on/src/pages/components/switch-toggle.js @@ -3,6 +3,9 @@ import html from 'choo/html/index.js' +/** + * @type {import('../../types.js').SwitchToggle} + */ export default function switchToggle ({ checked, disabled, @@ -11,6 +14,7 @@ export default function switchToggle ({ style }) { if (typeof checked === 'undefined') return + // @ts-expect-error - TS doesn't like the `html` template tag return html`
diff --git a/add-on/src/types.d.ts b/add-on/src/types.d.ts index eef26de67..753c2545c 100644 --- a/add-on/src/types.d.ts +++ b/add-on/src/types.d.ts @@ -50,3 +50,12 @@ export interface CompanionState extends Omit void + checked?: boolean + disabled?: boolean + style?: string +} +export function SwitchToggle (args: SwitchToggleArguments): undefined | HTMLElement diff --git a/package-lock.json b/package-lock.json index a1778606f..e0f6d92e1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,7 +7,7 @@ "name": "ipfs-companion", "license": "CC0-1.0", "dependencies": { - "@ipfs-shipyard/ignite-metrics": "1.0.1", + "@ipfs-shipyard/ignite-metrics": "1.0.3", "@material/switch": "10.0.0", "assert": "2.0.0", "buffer": "6.0.3", @@ -2464,9 +2464,9 @@ "dev": true }, "node_modules/@ipfs-shipyard/ignite-metrics": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@ipfs-shipyard/ignite-metrics/-/ignite-metrics-1.0.1.tgz", - "integrity": "sha512-NDTHkOglmYqJCexYmhjU0bYrbPZNF6Z3AjMZuiaFQN9Ua6nQusFGHUp3/tAUuM08GY3LpzkPY0+9y4bpe7Ud5g==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@ipfs-shipyard/ignite-metrics/-/ignite-metrics-1.0.3.tgz", + "integrity": "sha512-2G3UW1A3E8wh7xnHcI3gJU6qEDse+epQRLKeLyVOq1O2P7r+f/07ofnsbfjpsP9bu8sDWBuW9ajrIByu0w5RBg==", "dependencies": { "countly-sdk-web": "^22.6.4", "esbuild-css-modules-plugin": "^2.6.3", @@ -25581,9 +25581,9 @@ "dev": true }, "@ipfs-shipyard/ignite-metrics": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@ipfs-shipyard/ignite-metrics/-/ignite-metrics-1.0.1.tgz", - "integrity": "sha512-NDTHkOglmYqJCexYmhjU0bYrbPZNF6Z3AjMZuiaFQN9Ua6nQusFGHUp3/tAUuM08GY3LpzkPY0+9y4bpe7Ud5g==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@ipfs-shipyard/ignite-metrics/-/ignite-metrics-1.0.3.tgz", + "integrity": "sha512-2G3UW1A3E8wh7xnHcI3gJU6qEDse+epQRLKeLyVOq1O2P7r+f/07ofnsbfjpsP9bu8sDWBuW9ajrIByu0w5RBg==", "requires": { "@esbuild/darwin-arm64": "^0.16.17", "@esbuild/linux-x64": "^0.16.16", diff --git a/package.json b/package.json index 41742fc99..8e1c9b22e 100644 --- a/package.json +++ b/package.json @@ -120,7 +120,7 @@ "webpack-merge": "5.8.0" }, "dependencies": { - "@ipfs-shipyard/ignite-metrics": "1.0.1", + "@ipfs-shipyard/ignite-metrics": "1.0.3", "@material/switch": "10.0.0", "assert": "2.0.0", "buffer": "6.0.3", From fa915c3097a7004231318e242237073e1f71d33f Mon Sep 17 00:00:00 2001 From: Russell Dempsey <1173416+SgtPooki@users.noreply.github.com> Date: Tue, 17 Jan 2023 19:40:30 -0800 Subject: [PATCH 22/29] fix(tests): tests dont fail on countly-sdk-web import --- add-on/src/lib/telemetry.js | 2 +- package-lock.json | 551 ++++++++++++++++++------------------ package.json | 2 +- 3 files changed, 283 insertions(+), 272 deletions(-) diff --git a/add-on/src/lib/telemetry.js b/add-on/src/lib/telemetry.js index a45f40575..9c4bf974a 100644 --- a/add-on/src/lib/telemetry.js +++ b/add-on/src/lib/telemetry.js @@ -1,5 +1,5 @@ -import MetricsProvider from '@ipfs-shipyard/ignite-metrics/vanilla' +import MetricsProvider from '@ipfs-shipyard/ignite-metrics/NodeMetrics' import debug from 'debug' const log = debug('ipfs-companion:telemetry') diff --git a/package-lock.json b/package-lock.json index e0f6d92e1..422739a40 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,7 +7,7 @@ "name": "ipfs-companion", "license": "CC0-1.0", "dependencies": { - "@ipfs-shipyard/ignite-metrics": "1.0.3", + "@ipfs-shipyard/ignite-metrics": "github:ipfs-shipyard/ignite-metrics#fix-dep-import-with-dist", "@material/switch": "10.0.0", "assert": "2.0.0", "buffer": "6.0.3", @@ -1969,9 +1969,9 @@ "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" }, "node_modules/@esbuild/android-arm": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.7.tgz", - "integrity": "sha512-yhzDbiVcmq6T1/XEvdcJIVcXHdLjDJ5cQ0Dp9R9p9ERMBTeO1dR5tc8YYv8zwDeBw1xZm+Eo3MRo8cwclhBS0g==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.2.tgz", + "integrity": "sha512-Art7v3xYfqH1gEMUSP0Nx67pNAlC/Y3qSg3mOw8Wg7MP9bJLXL0DrmJaV1Qz1o4FwagtvDgkVOeBDpZgxdj13Q==", "cpu": [ "arm" ], @@ -1985,9 +1985,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.7.tgz", - "integrity": "sha512-tYFw0lBJSEvLoGzzYh1kXuzoX1iPkbOk3O29VqzQb0HbOy7t/yw1hGkvwoJhXHwzQUPsShyYcTgRf6bDBcfnTw==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.2.tgz", + "integrity": "sha512-QSkmYISXr2uFoR+NdmmKyR5svYb0cXDCfzwNblLsrC8wTpx/I1L7u/zrjrf4aLoHoRTycZFIewJwBiUrO5DWtQ==", "cpu": [ "arm64" ], @@ -2001,9 +2001,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.7.tgz", - "integrity": "sha512-3P2OuTxwAtM3k/yEWTNUJRjMPG1ce8rXs51GTtvEC5z1j8fC1plHeVVczdeHECU7aM2/Buc0MwZ6ciM/zysnWg==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.2.tgz", + "integrity": "sha512-5VOaFBI0RK8jJVDHdeU1YJmpxXoOf1RPoiOBhk/Tvpulw7R1SwCsxHvC3eDQcoF0gV7YM4V2wJO0PR9tem6gCQ==", "cpu": [ "x64" ], @@ -2017,9 +2017,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.7.tgz", - "integrity": "sha512-VUb9GK23z8jkosHU9yJNUgQpsfJn+7ZyBm6adi2Ec5/U241eR1tAn82QicnUzaFDaffeixiHwikjmnec/YXEZg==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.2.tgz", + "integrity": "sha512-iQJu1Zn1Wi91D5x/sslEn/jwae1tgSAEHK0R/kYzIr5jO992IJwDDuWhSGll23jHt18RECxahhGG0BWY/bVUTw==", "cpu": [ "arm64" ], @@ -2033,9 +2033,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.7.tgz", - "integrity": "sha512-duterlv3tit3HI9vhzMWnSVaB1B6YsXpFq1Ntd6Fou82BB1l4tucYy3FI9dHv3tvtDuS0NiGf/k6XsdBqPZ01w==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.2.tgz", + "integrity": "sha512-j750nyrwoRZd3VnPo5sd12/5U27TxFGmvmoDv93G2jiaGJPYKJ/+5IfRAvHahGePTUIRPyOlE5YLFw9MlzuBnw==", "cpu": [ "x64" ], @@ -2049,9 +2049,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.7.tgz", - "integrity": "sha512-9kkycpBFes/vhi7B7o0cf+q2WdJi+EpVzpVTqtWFNiutARWDFFLcB93J8PR1cG228sucsl3B+7Ts27izE6qiaQ==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.2.tgz", + "integrity": "sha512-ti7GU+/KUQQXEPmSUep7efZpA3KR2SkKsVuSL2FE7Yxka9apuqKfymAgQmVPMxstzAgCRBIu8uEu0KFmTfs3/Q==", "cpu": [ "arm64" ], @@ -2065,9 +2065,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.7.tgz", - "integrity": "sha512-5Ahf6jzWXJ4J2uh9dpy5DKOO+PeRUE/9DMys6VuYfwgQzd6n5+pVFm58L2Z2gRe611RX6SdydnNaiIKM3svY7g==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.2.tgz", + "integrity": "sha512-NgooSKWSnrNKRuiumY1dg7KAGpsyXIMcwyOXN9imnqe8VFjqqrEOMqZRik0C1wlfLjiSCuMsj+YUSmBMAJMt0A==", "cpu": [ "x64" ], @@ -2081,9 +2081,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.7.tgz", - "integrity": "sha512-QqJnyCfu5OF78Olt7JJSZ7OSv/B4Hf+ZJWp4kkq9xwMsgu7yWq3crIic8gGOpDYTqVKKMDAVDgRXy5Wd/nWZyQ==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.2.tgz", + "integrity": "sha512-8dfrRTd39n+THdAetwQKNwK6zBPR5oPjMtgRNXvRq8gsn/J5o69zTaOWVi3QO09BljqdShxU2dxDA09lDhdIqQ==", "cpu": [ "arm" ], @@ -2097,9 +2097,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.7.tgz", - "integrity": "sha512-2wv0xYDskk2+MzIm/AEprDip39a23Chptc4mL7hsHg26P0gD8RUhzmDu0KCH2vMThUI1sChXXoK9uH0KYQKaDg==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.2.tgz", + "integrity": "sha512-jcJ4cxwQyqEqgDwkqj7820nKx9cM5WBPCCU4oUXvTeG+DkkJE6/P75od0VPHmItFfEJu+/2vV85ebvFVomZcBg==", "cpu": [ "arm64" ], @@ -2113,9 +2113,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.7.tgz", - "integrity": "sha512-APVYbEilKbD5ptmKdnIcXej2/+GdV65TfTjxR2Uk8t1EsOk49t6HapZW6DS/Bwlvh5hDwtLapdSumIVNGxgqLg==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.2.tgz", + "integrity": "sha512-dXZ3m++zaRVD2fqOUPP8QTh1Lfg6WO6uZDo/QJ3KdfnIR7dDToDtaA12AgKYvCed9Nuzf/gpKs/7/f6I02b/sg==", "cpu": [ "ia32" ], @@ -2129,9 +2129,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.7.tgz", - "integrity": "sha512-5wPUAGclplQrAW7EFr3F84Y/d++7G0KykohaF4p54+iNWhUnMVU8Bh2sxiEOXUy4zKIdpHByMgJ5/Ko6QhtTUw==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.2.tgz", + "integrity": "sha512-/vntXkzSe9TUp0Rh35Wgye1EOhDtmIMjwC4rtahHcALmDXL+iuQGvwGFvXrP+sBigia/ltLryMAvCiqGV6plqw==", "cpu": [ "loong64" ], @@ -2145,9 +2145,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.7.tgz", - "integrity": "sha512-hxzlXtWF6yWfkE/SMTscNiVqLOAn7fOuIF3q/kiZaXxftz1DhZW/HpnTmTTWrzrS7zJWQxHHT4QSxyAj33COmA==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.2.tgz", + "integrity": "sha512-guYcNHjMRO1BMxWAeb8LDfgQaU8oeUO65xtlclwBD+hX3163KBifEHyao1hK96J10BP9n0UmZug6GhtGZaNm2Q==", "cpu": [ "mips64el" ], @@ -2161,9 +2161,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.7.tgz", - "integrity": "sha512-WM83Dac0LdXty5xPhlOuCD5Egfk1xLND/oRLYeB7Jb/tY4kzFSDgLlq91wYbHua/s03tQGA9iXvyjgymMw62Vw==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.2.tgz", + "integrity": "sha512-fzHTnIGIVqgUGZcFnnisguKD4UneF4uwWwkG+i8kBspMDdU1wJ0jha1VdtxWP7Ob1KGxuXcoUlrQkCVO+Z5iOw==", "cpu": [ "ppc64" ], @@ -2177,9 +2177,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.7.tgz", - "integrity": "sha512-3nkNnNg4Ax6MS/l8O8Ynq2lGEVJYyJ2EoY3PHjNJ4PuZ80EYLMrFTFZ4L/Hc16AxgtXKwmNP9TM0YKNiBzBiJQ==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.2.tgz", + "integrity": "sha512-Sa+z7csvNVeAsTD83tVSggOb8CAU7EdDuihC8WhtoJfuDVkF5+Vi0imaiCjXQ7Ci5rz/a8IJ1H1MWX3eI9AmuQ==", "cpu": [ "riscv64" ], @@ -2193,9 +2193,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.7.tgz", - "integrity": "sha512-3SA/2VJuv0o1uD7zuqxEP+RrAyRxnkGddq0bwHQ98v1KNlzXD/JvxwTO3T6GM5RH6JUd29RTVQTOJfyzMkkppA==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.2.tgz", + "integrity": "sha512-jUFCO+/VA1Y/oeauSNBubp2UtGu4xjBUEFVgMPm0qLuw6xw18yOagKwBOPVmyE3ZSFqGd9BAPZM/JrtadgBryA==", "cpu": [ "s390x" ], @@ -2209,9 +2209,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.7.tgz", - "integrity": "sha512-xi/tbqCqvPIzU+zJVyrpz12xqciTAPMi2fXEWGnapZymoGhuL2GIWIRXg4O2v5BXaYA5TSaiKYE14L0QhUTuQg==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.2.tgz", + "integrity": "sha512-naygxkSmr6x9tuvpa8iGefnXo3Rc3Noz7c4+Dn0MSfSWJwLaN2YR686e7HkI09irfjDdU5UAq9wcxUwjkYQNUA==", "cpu": [ "x64" ], @@ -2225,9 +2225,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.7.tgz", - "integrity": "sha512-NUsYbq3B+JdNKn8SXkItFvdes9qTwEoS3aLALtiWciW/ystiCKM20Fgv9XQBOXfhUHyh5CLEeZDXzLOrwBXuCQ==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.2.tgz", + "integrity": "sha512-Hagbdq4EpiG9XXJY6Ozfrl2RN5jkXZXd6BD39f43tWz0d8yyOrRZlofM1eA6JYQbdv6c8BUsUOcgopavIqwx4Q==", "cpu": [ "x64" ], @@ -2241,9 +2241,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.7.tgz", - "integrity": "sha512-qjwzsgeve9I8Tbsko2FEkdSk2iiezuNGFgipQxY/736NePXDaDZRodIejYGWOlbYXugdxb0nif5yvypH6lKBmA==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.2.tgz", + "integrity": "sha512-Pkby+VEXY7+aWP8J2RUCfqWbbZz2M1GavRGGnE2kEPzwarba/BOk3B45PSaKwc3iKdK2rgCPCTjC/p9JoKNejA==", "cpu": [ "x64" ], @@ -2257,9 +2257,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.7.tgz", - "integrity": "sha512-mFWDz4RoBTzPphTCkM7Kc7Qpa0o/Z01acajR+Ai7LdfKgcP/C6jYOaKwv7nKzD0+MjOT20j7You9g4ozYy1dKQ==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.2.tgz", + "integrity": "sha512-WAyg4dBTUsAPJ9cRnuQ23cwJWYRhP4e4y0M/l2+EpRjWW+g1MNAXKQQNNhRQ71zc8UixRVrqj+43ReHeZC8mJQ==", "cpu": [ "x64" ], @@ -2273,9 +2273,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.7.tgz", - "integrity": "sha512-m39UmX19RvEIuC8sYZ0M+eQtdXw4IePDSZ78ZQmYyFaXY9krq4YzQCK2XWIJomNLtg4q+W5aXr8bW3AbqWNoVg==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.2.tgz", + "integrity": "sha512-rMbO3gPpxuENd+AnZLgo4J/g+BkwxT3NK7nYpSZ0KlYtSdlxYMIMG5pznX7a1ISZKo67aGStne+K41jdkBywpA==", "cpu": [ "arm64" ], @@ -2289,9 +2289,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.7.tgz", - "integrity": "sha512-1cbzSEZA1fANwmT6rjJ4G1qQXHxCxGIcNYFYR9ctI82/prT38lnwSRZ0i5p/MVXksw9eMlHlet6pGu2/qkXFCg==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.2.tgz", + "integrity": "sha512-73dWKDMhFk+4owS19OjEVbEDGFPRS1fyga3qOu5HPd5eTxJTjtlVTT/fG/S7AchA0vXS7hOqY70AAir1CkmICg==", "cpu": [ "ia32" ], @@ -2305,9 +2305,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.7.tgz", - "integrity": "sha512-QaQ8IH0JLacfGf5cf0HCCPnQuCTd/dAI257vXBgb/cccKGbH/6pVtI1gwhdAQ0Y48QSpTIFrh9etVyNdZY+zzw==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.2.tgz", + "integrity": "sha512-QFJlhf73HCBjTqAWWSIlD8JQBtmue0Dd6UV+KGccycJ3HKj1dCkXdRKJGwc5bZWiI9hrxcWsVEa1kVFaltC4vQ==", "cpu": [ "x64" ], @@ -2465,14 +2465,15 @@ }, "node_modules/@ipfs-shipyard/ignite-metrics": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@ipfs-shipyard/ignite-metrics/-/ignite-metrics-1.0.3.tgz", - "integrity": "sha512-2G3UW1A3E8wh7xnHcI3gJU6qEDse+epQRLKeLyVOq1O2P7r+f/07ofnsbfjpsP9bu8sDWBuW9ajrIByu0w5RBg==", + "resolved": "git+ssh://git@github.com/ipfs-shipyard/ignite-metrics.git#e43c2cf6c5296314a8ab2399d8374af5693fa75c", + "license": "Apache-2.0 OR MIT", "dependencies": { + "countly-sdk-nodejs": "^22.6.0", "countly-sdk-web": "^22.6.4", - "esbuild-css-modules-plugin": "^2.6.3", + "esbuild-css-modules-plugin": "^2.7.0", "react": "^18.2.0", "react-dom": "^18.2.0", - "react-router-dom": "^6.5.0", + "react-router-dom": "^6.6.2", "styled-components": "^5.3.6" }, "engines": { @@ -2481,7 +2482,7 @@ }, "optionalDependencies": { "@esbuild/darwin-arm64": "^0.16.17", - "@esbuild/linux-x64": "^0.16.16", + "@esbuild/linux-x64": "^0.16.17", "react-refresh": "^0.14.0" }, "peerDependencies": { @@ -8160,6 +8161,11 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, + "node_modules/countly-sdk-nodejs": { + "version": "22.6.0", + "resolved": "https://registry.npmjs.org/countly-sdk-nodejs/-/countly-sdk-nodejs-22.6.0.tgz", + "integrity": "sha512-vw6YRGJJu6sq9oZEz00SyAL7oyru+w1ct3P6TS0avMPRSZ/mqEXYq3l+Wtl89L/HwXcDymh8gY7JOOAPnI7vEg==" + }, "node_modules/countly-sdk-web": { "version": "22.6.4", "resolved": "https://registry.npmjs.org/countly-sdk-web/-/countly-sdk-web-22.6.4.tgz", @@ -9389,9 +9395,9 @@ } }, "node_modules/esbuild": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.7.tgz", - "integrity": "sha512-P6OBFYFSQOGzfApqCeYKqfKRRbCIRsdppTXFo4aAvtiW3o8TTyiIplBvHJI171saPAiy3WlawJHCveJVIOIx1A==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.2.tgz", + "integrity": "sha512-odaHSgtYafOXt2nSISwdWlfRkb4ceMX3akY1mWspQpT08jsqVYEK1XtVusr250Rmbx8AVNWjMPI/yyvKqxOKMw==", "hasInstallScript": true, "peer": true, "bin": { @@ -9401,34 +9407,34 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/android-arm": "0.16.7", - "@esbuild/android-arm64": "0.16.7", - "@esbuild/android-x64": "0.16.7", - "@esbuild/darwin-arm64": "0.16.7", - "@esbuild/darwin-x64": "0.16.7", - "@esbuild/freebsd-arm64": "0.16.7", - "@esbuild/freebsd-x64": "0.16.7", - "@esbuild/linux-arm": "0.16.7", - "@esbuild/linux-arm64": "0.16.7", - "@esbuild/linux-ia32": "0.16.7", - "@esbuild/linux-loong64": "0.16.7", - "@esbuild/linux-mips64el": "0.16.7", - "@esbuild/linux-ppc64": "0.16.7", - "@esbuild/linux-riscv64": "0.16.7", - "@esbuild/linux-s390x": "0.16.7", - "@esbuild/linux-x64": "0.16.7", - "@esbuild/netbsd-x64": "0.16.7", - "@esbuild/openbsd-x64": "0.16.7", - "@esbuild/sunos-x64": "0.16.7", - "@esbuild/win32-arm64": "0.16.7", - "@esbuild/win32-ia32": "0.16.7", - "@esbuild/win32-x64": "0.16.7" + "@esbuild/android-arm": "0.17.2", + "@esbuild/android-arm64": "0.17.2", + "@esbuild/android-x64": "0.17.2", + "@esbuild/darwin-arm64": "0.17.2", + "@esbuild/darwin-x64": "0.17.2", + "@esbuild/freebsd-arm64": "0.17.2", + "@esbuild/freebsd-x64": "0.17.2", + "@esbuild/linux-arm": "0.17.2", + "@esbuild/linux-arm64": "0.17.2", + "@esbuild/linux-ia32": "0.17.2", + "@esbuild/linux-loong64": "0.17.2", + "@esbuild/linux-mips64el": "0.17.2", + "@esbuild/linux-ppc64": "0.17.2", + "@esbuild/linux-riscv64": "0.17.2", + "@esbuild/linux-s390x": "0.17.2", + "@esbuild/linux-x64": "0.17.2", + "@esbuild/netbsd-x64": "0.17.2", + "@esbuild/openbsd-x64": "0.17.2", + "@esbuild/sunos-x64": "0.17.2", + "@esbuild/win32-arm64": "0.17.2", + "@esbuild/win32-ia32": "0.17.2", + "@esbuild/win32-x64": "0.17.2" } }, "node_modules/esbuild-css-modules-plugin": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/esbuild-css-modules-plugin/-/esbuild-css-modules-plugin-2.6.3.tgz", - "integrity": "sha512-Bi0NHhoWwW002eTbD0HIO38M/gCE7UEfv0ncSvBjn8F+eGZRUPMdSCYof2jCxxWoerG0xR7bLwDpv/yoPjP7EA==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/esbuild-css-modules-plugin/-/esbuild-css-modules-plugin-2.7.0.tgz", + "integrity": "sha512-WtPtkJ/78yrP8UAJ6WRe0sX5GuMVzAz7K9ELqGi6Car5AEfJMD9IM1GqOcwUGCWeTFvyfxlV+3JgPznPFfd0kQ==", "dependencies": { "fs-extra": "^10.1.0", "lightningcss": "^1.17.1", @@ -14957,9 +14963,9 @@ "dev": true }, "node_modules/lightningcss": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.17.1.tgz", - "integrity": "sha512-DwwM/YYqGwLLP3he41wzDXT/m+8jdEZ80i9ViQNLRgyhey3Vm6N7XHn+4o3PY6wSnVT23WLuaROIpbpIVTNOjg==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.18.0.tgz", + "integrity": "sha512-uk10tNxi5fhZqU93vtYiQgx/8a9f0Kvtj5AXIm+VlOXY+t/DWDmCZWJEkZJmmALgvbS6aAW8or+Kq85eJ6TDTw==", "dependencies": { "detect-libc": "^1.0.3" }, @@ -14971,20 +14977,20 @@ "url": "https://opencollective.com/parcel" }, "optionalDependencies": { - "lightningcss-darwin-arm64": "1.17.1", - "lightningcss-darwin-x64": "1.17.1", - "lightningcss-linux-arm-gnueabihf": "1.17.1", - "lightningcss-linux-arm64-gnu": "1.17.1", - "lightningcss-linux-arm64-musl": "1.17.1", - "lightningcss-linux-x64-gnu": "1.17.1", - "lightningcss-linux-x64-musl": "1.17.1", - "lightningcss-win32-x64-msvc": "1.17.1" + "lightningcss-darwin-arm64": "1.18.0", + "lightningcss-darwin-x64": "1.18.0", + "lightningcss-linux-arm-gnueabihf": "1.18.0", + "lightningcss-linux-arm64-gnu": "1.18.0", + "lightningcss-linux-arm64-musl": "1.18.0", + "lightningcss-linux-x64-gnu": "1.18.0", + "lightningcss-linux-x64-musl": "1.18.0", + "lightningcss-win32-x64-msvc": "1.18.0" } }, "node_modules/lightningcss-darwin-arm64": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.17.1.tgz", - "integrity": "sha512-YTAHEy4XlzI3sMbUVjbPi9P7+N7lGcgl2JhCZhiQdRAEKnZLQch8kb5601sgESxdGXjgei7JZFqi/vVEk81wYg==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.18.0.tgz", + "integrity": "sha512-OqjydwtiNPgdH1ByIjA1YzqvDG/OMR6L3LPN6wRl1729LB0y4Mik7L06kmZaTb+pvUHr+NmDd2KCwnlrQ4zO3w==", "cpu": [ "arm64" ], @@ -15001,9 +15007,9 @@ } }, "node_modules/lightningcss-darwin-x64": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.17.1.tgz", - "integrity": "sha512-UhXPUS2+yTTf5sXwUV0+8QY2x0bPGLgC/uhcknWSQMqWn1zGty4fFvH04D7f7ij0ujwSuN+Q0HtU7lgmMrPz0A==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.18.0.tgz", + "integrity": "sha512-mNiuPHj89/JHZmJMp+5H8EZSt6EL5DZRWJ31O6k3DrLLnRIQjXuXdDdN8kP7LoIkeWI5xvyD60CsReJm+YWYAw==", "cpu": [ "x64" ], @@ -15020,9 +15026,9 @@ } }, "node_modules/lightningcss-linux-arm-gnueabihf": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.17.1.tgz", - "integrity": "sha512-alUZumuznB6K/9yZ0zuZkODXUm8uRnvs9t0CL46CXN16Y2h4gOx5ahUCMlelUb7inZEsgJIoepgLsJzBUrSsBw==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.18.0.tgz", + "integrity": "sha512-S+25JjI6601HiAVoTDXW6SqH+E94a+FHA7WQqseyNHunOgVWKcAkNEc2LJvVxgwTq6z41sDIb9/M3Z9wa9lk4A==", "cpu": [ "arm" ], @@ -15039,9 +15045,9 @@ } }, "node_modules/lightningcss-linux-arm64-gnu": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.17.1.tgz", - "integrity": "sha512-/1XaH2cOjDt+ivmgfmVFUYCA0MtfNWwtC4P8qVi53zEQ7P8euyyZ1ynykZOyKXW9Q0DzrwcLTh6+hxVLcbtGBg==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.18.0.tgz", + "integrity": "sha512-JSqh4+21dCgBecIQUet35dtE4PhhSEMyqe3y0ZNQrAJQ5kyUPSQHiw81WXnPJcOSTTpG0TyMLiC8K//+BsFGQA==", "cpu": [ "arm64" ], @@ -15058,9 +15064,9 @@ } }, "node_modules/lightningcss-linux-arm64-musl": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.17.1.tgz", - "integrity": "sha512-/IgE7lYWFHCCQFTMIwtt+fXLcVOha8rcrNze1JYGPWNorO6NBc6MJo5u5cwn5qMMSz9fZCCDIlBBU4mGwjQszQ==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.18.0.tgz", + "integrity": "sha512-2FWHa8iUhShnZnqhn2wfIcK5adJat9hAAaX7etNsoXJymlliDIOFuBQEsba2KBAZSM4QqfQtvRdR7m8i0I7ybQ==", "cpu": [ "arm64" ], @@ -15077,9 +15083,9 @@ } }, "node_modules/lightningcss-linux-x64-gnu": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.17.1.tgz", - "integrity": "sha512-OyE802IAp4DB9vZrHlOyWunbHLM9dN08tJIKN/HhzzLKIHizubOWX6NMzUXMZLsaUrYwVAHHdyEA+712p8mMzA==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.18.0.tgz", + "integrity": "sha512-plCPGQJtDZHcLVKVRLnQVF2XRsIC32WvuJhQ7fJ7F6BV98b/VZX0OlX05qUaOESD9dCDHjYSfxsgcvOKgCWh7A==", "cpu": [ "x64" ], @@ -15096,9 +15102,9 @@ } }, "node_modules/lightningcss-linux-x64-musl": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.17.1.tgz", - "integrity": "sha512-ydwGgV3Usba5P53RAOqCA9MsRsbb8jFIEVhf7/BXFjpKNoIQyijVTXhwIgQr/oGwUNOHfgQ3F8ruiUjX/p2YKw==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.18.0.tgz", + "integrity": "sha512-na+BGtVU6fpZvOHKhnlA0XHeibkT3/46nj6vLluG3kzdJYoBKU6dIl7DSOk++8jv4ybZyFJ0aOFMMSc8g2h58A==", "cpu": [ "x64" ], @@ -15115,9 +15121,9 @@ } }, "node_modules/lightningcss-win32-x64-msvc": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.17.1.tgz", - "integrity": "sha512-Ngqtx9NazaiAOk71XWwSsqgAuwYF+8PO6UYsoU7hAukdrSS98kwaBMEDw1igeIiZy1XD/4kh5KVnkjNf7ZOxVQ==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.18.0.tgz", + "integrity": "sha512-5qeAH4RMNy2yMNEl7e5TI6upt/7xD2ZpHWH4RkT8iJ7/6POS5mjHbXWUO9Q1hhDhqkdzGa76uAdMzEouIeCyNw==", "cpu": [ "x64" ], @@ -25308,156 +25314,156 @@ "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" }, "@esbuild/android-arm": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.7.tgz", - "integrity": "sha512-yhzDbiVcmq6T1/XEvdcJIVcXHdLjDJ5cQ0Dp9R9p9ERMBTeO1dR5tc8YYv8zwDeBw1xZm+Eo3MRo8cwclhBS0g==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.2.tgz", + "integrity": "sha512-Art7v3xYfqH1gEMUSP0Nx67pNAlC/Y3qSg3mOw8Wg7MP9bJLXL0DrmJaV1Qz1o4FwagtvDgkVOeBDpZgxdj13Q==", "optional": true, "peer": true }, "@esbuild/android-arm64": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.7.tgz", - "integrity": "sha512-tYFw0lBJSEvLoGzzYh1kXuzoX1iPkbOk3O29VqzQb0HbOy7t/yw1hGkvwoJhXHwzQUPsShyYcTgRf6bDBcfnTw==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.2.tgz", + "integrity": "sha512-QSkmYISXr2uFoR+NdmmKyR5svYb0cXDCfzwNblLsrC8wTpx/I1L7u/zrjrf4aLoHoRTycZFIewJwBiUrO5DWtQ==", "optional": true, "peer": true }, "@esbuild/android-x64": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.7.tgz", - "integrity": "sha512-3P2OuTxwAtM3k/yEWTNUJRjMPG1ce8rXs51GTtvEC5z1j8fC1plHeVVczdeHECU7aM2/Buc0MwZ6ciM/zysnWg==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.2.tgz", + "integrity": "sha512-5VOaFBI0RK8jJVDHdeU1YJmpxXoOf1RPoiOBhk/Tvpulw7R1SwCsxHvC3eDQcoF0gV7YM4V2wJO0PR9tem6gCQ==", "optional": true, "peer": true }, "@esbuild/darwin-arm64": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.7.tgz", - "integrity": "sha512-VUb9GK23z8jkosHU9yJNUgQpsfJn+7ZyBm6adi2Ec5/U241eR1tAn82QicnUzaFDaffeixiHwikjmnec/YXEZg==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.2.tgz", + "integrity": "sha512-iQJu1Zn1Wi91D5x/sslEn/jwae1tgSAEHK0R/kYzIr5jO992IJwDDuWhSGll23jHt18RECxahhGG0BWY/bVUTw==", "optional": true, "peer": true }, "@esbuild/darwin-x64": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.7.tgz", - "integrity": "sha512-duterlv3tit3HI9vhzMWnSVaB1B6YsXpFq1Ntd6Fou82BB1l4tucYy3FI9dHv3tvtDuS0NiGf/k6XsdBqPZ01w==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.2.tgz", + "integrity": "sha512-j750nyrwoRZd3VnPo5sd12/5U27TxFGmvmoDv93G2jiaGJPYKJ/+5IfRAvHahGePTUIRPyOlE5YLFw9MlzuBnw==", "optional": true, "peer": true }, "@esbuild/freebsd-arm64": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.7.tgz", - "integrity": "sha512-9kkycpBFes/vhi7B7o0cf+q2WdJi+EpVzpVTqtWFNiutARWDFFLcB93J8PR1cG228sucsl3B+7Ts27izE6qiaQ==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.2.tgz", + "integrity": "sha512-ti7GU+/KUQQXEPmSUep7efZpA3KR2SkKsVuSL2FE7Yxka9apuqKfymAgQmVPMxstzAgCRBIu8uEu0KFmTfs3/Q==", "optional": true, "peer": true }, "@esbuild/freebsd-x64": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.7.tgz", - "integrity": "sha512-5Ahf6jzWXJ4J2uh9dpy5DKOO+PeRUE/9DMys6VuYfwgQzd6n5+pVFm58L2Z2gRe611RX6SdydnNaiIKM3svY7g==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.2.tgz", + "integrity": "sha512-NgooSKWSnrNKRuiumY1dg7KAGpsyXIMcwyOXN9imnqe8VFjqqrEOMqZRik0C1wlfLjiSCuMsj+YUSmBMAJMt0A==", "optional": true, "peer": true }, "@esbuild/linux-arm": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.7.tgz", - "integrity": "sha512-QqJnyCfu5OF78Olt7JJSZ7OSv/B4Hf+ZJWp4kkq9xwMsgu7yWq3crIic8gGOpDYTqVKKMDAVDgRXy5Wd/nWZyQ==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.2.tgz", + "integrity": "sha512-8dfrRTd39n+THdAetwQKNwK6zBPR5oPjMtgRNXvRq8gsn/J5o69zTaOWVi3QO09BljqdShxU2dxDA09lDhdIqQ==", "optional": true, "peer": true }, "@esbuild/linux-arm64": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.7.tgz", - "integrity": "sha512-2wv0xYDskk2+MzIm/AEprDip39a23Chptc4mL7hsHg26P0gD8RUhzmDu0KCH2vMThUI1sChXXoK9uH0KYQKaDg==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.2.tgz", + "integrity": "sha512-jcJ4cxwQyqEqgDwkqj7820nKx9cM5WBPCCU4oUXvTeG+DkkJE6/P75od0VPHmItFfEJu+/2vV85ebvFVomZcBg==", "optional": true, "peer": true }, "@esbuild/linux-ia32": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.7.tgz", - "integrity": "sha512-APVYbEilKbD5ptmKdnIcXej2/+GdV65TfTjxR2Uk8t1EsOk49t6HapZW6DS/Bwlvh5hDwtLapdSumIVNGxgqLg==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.2.tgz", + "integrity": "sha512-dXZ3m++zaRVD2fqOUPP8QTh1Lfg6WO6uZDo/QJ3KdfnIR7dDToDtaA12AgKYvCed9Nuzf/gpKs/7/f6I02b/sg==", "optional": true, "peer": true }, "@esbuild/linux-loong64": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.7.tgz", - "integrity": "sha512-5wPUAGclplQrAW7EFr3F84Y/d++7G0KykohaF4p54+iNWhUnMVU8Bh2sxiEOXUy4zKIdpHByMgJ5/Ko6QhtTUw==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.2.tgz", + "integrity": "sha512-/vntXkzSe9TUp0Rh35Wgye1EOhDtmIMjwC4rtahHcALmDXL+iuQGvwGFvXrP+sBigia/ltLryMAvCiqGV6plqw==", "optional": true, "peer": true }, "@esbuild/linux-mips64el": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.7.tgz", - "integrity": "sha512-hxzlXtWF6yWfkE/SMTscNiVqLOAn7fOuIF3q/kiZaXxftz1DhZW/HpnTmTTWrzrS7zJWQxHHT4QSxyAj33COmA==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.2.tgz", + "integrity": "sha512-guYcNHjMRO1BMxWAeb8LDfgQaU8oeUO65xtlclwBD+hX3163KBifEHyao1hK96J10BP9n0UmZug6GhtGZaNm2Q==", "optional": true, "peer": true }, "@esbuild/linux-ppc64": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.7.tgz", - "integrity": "sha512-WM83Dac0LdXty5xPhlOuCD5Egfk1xLND/oRLYeB7Jb/tY4kzFSDgLlq91wYbHua/s03tQGA9iXvyjgymMw62Vw==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.2.tgz", + "integrity": "sha512-fzHTnIGIVqgUGZcFnnisguKD4UneF4uwWwkG+i8kBspMDdU1wJ0jha1VdtxWP7Ob1KGxuXcoUlrQkCVO+Z5iOw==", "optional": true, "peer": true }, "@esbuild/linux-riscv64": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.7.tgz", - "integrity": "sha512-3nkNnNg4Ax6MS/l8O8Ynq2lGEVJYyJ2EoY3PHjNJ4PuZ80EYLMrFTFZ4L/Hc16AxgtXKwmNP9TM0YKNiBzBiJQ==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.2.tgz", + "integrity": "sha512-Sa+z7csvNVeAsTD83tVSggOb8CAU7EdDuihC8WhtoJfuDVkF5+Vi0imaiCjXQ7Ci5rz/a8IJ1H1MWX3eI9AmuQ==", "optional": true, "peer": true }, "@esbuild/linux-s390x": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.7.tgz", - "integrity": "sha512-3SA/2VJuv0o1uD7zuqxEP+RrAyRxnkGddq0bwHQ98v1KNlzXD/JvxwTO3T6GM5RH6JUd29RTVQTOJfyzMkkppA==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.2.tgz", + "integrity": "sha512-jUFCO+/VA1Y/oeauSNBubp2UtGu4xjBUEFVgMPm0qLuw6xw18yOagKwBOPVmyE3ZSFqGd9BAPZM/JrtadgBryA==", "optional": true, "peer": true }, "@esbuild/linux-x64": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.7.tgz", - "integrity": "sha512-xi/tbqCqvPIzU+zJVyrpz12xqciTAPMi2fXEWGnapZymoGhuL2GIWIRXg4O2v5BXaYA5TSaiKYE14L0QhUTuQg==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.2.tgz", + "integrity": "sha512-naygxkSmr6x9tuvpa8iGefnXo3Rc3Noz7c4+Dn0MSfSWJwLaN2YR686e7HkI09irfjDdU5UAq9wcxUwjkYQNUA==", "optional": true, "peer": true }, "@esbuild/netbsd-x64": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.7.tgz", - "integrity": "sha512-NUsYbq3B+JdNKn8SXkItFvdes9qTwEoS3aLALtiWciW/ystiCKM20Fgv9XQBOXfhUHyh5CLEeZDXzLOrwBXuCQ==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.2.tgz", + "integrity": "sha512-Hagbdq4EpiG9XXJY6Ozfrl2RN5jkXZXd6BD39f43tWz0d8yyOrRZlofM1eA6JYQbdv6c8BUsUOcgopavIqwx4Q==", "optional": true, "peer": true }, "@esbuild/openbsd-x64": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.7.tgz", - "integrity": "sha512-qjwzsgeve9I8Tbsko2FEkdSk2iiezuNGFgipQxY/736NePXDaDZRodIejYGWOlbYXugdxb0nif5yvypH6lKBmA==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.2.tgz", + "integrity": "sha512-Pkby+VEXY7+aWP8J2RUCfqWbbZz2M1GavRGGnE2kEPzwarba/BOk3B45PSaKwc3iKdK2rgCPCTjC/p9JoKNejA==", "optional": true, "peer": true }, "@esbuild/sunos-x64": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.7.tgz", - "integrity": "sha512-mFWDz4RoBTzPphTCkM7Kc7Qpa0o/Z01acajR+Ai7LdfKgcP/C6jYOaKwv7nKzD0+MjOT20j7You9g4ozYy1dKQ==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.2.tgz", + "integrity": "sha512-WAyg4dBTUsAPJ9cRnuQ23cwJWYRhP4e4y0M/l2+EpRjWW+g1MNAXKQQNNhRQ71zc8UixRVrqj+43ReHeZC8mJQ==", "optional": true, "peer": true }, "@esbuild/win32-arm64": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.7.tgz", - "integrity": "sha512-m39UmX19RvEIuC8sYZ0M+eQtdXw4IePDSZ78ZQmYyFaXY9krq4YzQCK2XWIJomNLtg4q+W5aXr8bW3AbqWNoVg==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.2.tgz", + "integrity": "sha512-rMbO3gPpxuENd+AnZLgo4J/g+BkwxT3NK7nYpSZ0KlYtSdlxYMIMG5pznX7a1ISZKo67aGStne+K41jdkBywpA==", "optional": true, "peer": true }, "@esbuild/win32-ia32": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.7.tgz", - "integrity": "sha512-1cbzSEZA1fANwmT6rjJ4G1qQXHxCxGIcNYFYR9ctI82/prT38lnwSRZ0i5p/MVXksw9eMlHlet6pGu2/qkXFCg==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.2.tgz", + "integrity": "sha512-73dWKDMhFk+4owS19OjEVbEDGFPRS1fyga3qOu5HPd5eTxJTjtlVTT/fG/S7AchA0vXS7hOqY70AAir1CkmICg==", "optional": true, "peer": true }, "@esbuild/win32-x64": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.7.tgz", - "integrity": "sha512-QaQ8IH0JLacfGf5cf0HCCPnQuCTd/dAI257vXBgb/cccKGbH/6pVtI1gwhdAQ0Y48QSpTIFrh9etVyNdZY+zzw==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.2.tgz", + "integrity": "sha512-QFJlhf73HCBjTqAWWSIlD8JQBtmue0Dd6UV+KGccycJ3HKj1dCkXdRKJGwc5bZWiI9hrxcWsVEa1kVFaltC4vQ==", "optional": true, "peer": true }, @@ -25581,18 +25587,18 @@ "dev": true }, "@ipfs-shipyard/ignite-metrics": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@ipfs-shipyard/ignite-metrics/-/ignite-metrics-1.0.3.tgz", - "integrity": "sha512-2G3UW1A3E8wh7xnHcI3gJU6qEDse+epQRLKeLyVOq1O2P7r+f/07ofnsbfjpsP9bu8sDWBuW9ajrIByu0w5RBg==", + "version": "git+ssh://git@github.com/ipfs-shipyard/ignite-metrics.git#e43c2cf6c5296314a8ab2399d8374af5693fa75c", + "from": "@ipfs-shipyard/ignite-metrics@ipfs-shipyard/ignite-metrics#fix-dep-import-with-dist", "requires": { "@esbuild/darwin-arm64": "^0.16.17", - "@esbuild/linux-x64": "^0.16.16", + "@esbuild/linux-x64": "^0.16.17", + "countly-sdk-nodejs": "^22.6.0", "countly-sdk-web": "^22.6.4", - "esbuild-css-modules-plugin": "^2.6.3", + "esbuild-css-modules-plugin": "^2.7.0", "react": "^18.2.0", "react-dom": "^18.2.0", "react-refresh": "^0.14.0", - "react-router-dom": "^6.5.0", + "react-router-dom": "^6.6.2", "styled-components": "^5.3.6" }, "dependencies": { @@ -29930,6 +29936,11 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, + "countly-sdk-nodejs": { + "version": "22.6.0", + "resolved": "https://registry.npmjs.org/countly-sdk-nodejs/-/countly-sdk-nodejs-22.6.0.tgz", + "integrity": "sha512-vw6YRGJJu6sq9oZEz00SyAL7oyru+w1ct3P6TS0avMPRSZ/mqEXYq3l+Wtl89L/HwXcDymh8gY7JOOAPnI7vEg==" + }, "countly-sdk-web": { "version": "22.6.4", "resolved": "https://registry.npmjs.org/countly-sdk-web/-/countly-sdk-web-22.6.4.tgz", @@ -30873,39 +30884,39 @@ "dev": true }, "esbuild": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.7.tgz", - "integrity": "sha512-P6OBFYFSQOGzfApqCeYKqfKRRbCIRsdppTXFo4aAvtiW3o8TTyiIplBvHJI171saPAiy3WlawJHCveJVIOIx1A==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.2.tgz", + "integrity": "sha512-odaHSgtYafOXt2nSISwdWlfRkb4ceMX3akY1mWspQpT08jsqVYEK1XtVusr250Rmbx8AVNWjMPI/yyvKqxOKMw==", "peer": true, "requires": { - "@esbuild/android-arm": "0.16.7", - "@esbuild/android-arm64": "0.16.7", - "@esbuild/android-x64": "0.16.7", - "@esbuild/darwin-arm64": "0.16.7", - "@esbuild/darwin-x64": "0.16.7", - "@esbuild/freebsd-arm64": "0.16.7", - "@esbuild/freebsd-x64": "0.16.7", - "@esbuild/linux-arm": "0.16.7", - "@esbuild/linux-arm64": "0.16.7", - "@esbuild/linux-ia32": "0.16.7", - "@esbuild/linux-loong64": "0.16.7", - "@esbuild/linux-mips64el": "0.16.7", - "@esbuild/linux-ppc64": "0.16.7", - "@esbuild/linux-riscv64": "0.16.7", - "@esbuild/linux-s390x": "0.16.7", - "@esbuild/linux-x64": "0.16.7", - "@esbuild/netbsd-x64": "0.16.7", - "@esbuild/openbsd-x64": "0.16.7", - "@esbuild/sunos-x64": "0.16.7", - "@esbuild/win32-arm64": "0.16.7", - "@esbuild/win32-ia32": "0.16.7", - "@esbuild/win32-x64": "0.16.7" + "@esbuild/android-arm": "0.17.2", + "@esbuild/android-arm64": "0.17.2", + "@esbuild/android-x64": "0.17.2", + "@esbuild/darwin-arm64": "0.17.2", + "@esbuild/darwin-x64": "0.17.2", + "@esbuild/freebsd-arm64": "0.17.2", + "@esbuild/freebsd-x64": "0.17.2", + "@esbuild/linux-arm": "0.17.2", + "@esbuild/linux-arm64": "0.17.2", + "@esbuild/linux-ia32": "0.17.2", + "@esbuild/linux-loong64": "0.17.2", + "@esbuild/linux-mips64el": "0.17.2", + "@esbuild/linux-ppc64": "0.17.2", + "@esbuild/linux-riscv64": "0.17.2", + "@esbuild/linux-s390x": "0.17.2", + "@esbuild/linux-x64": "0.17.2", + "@esbuild/netbsd-x64": "0.17.2", + "@esbuild/openbsd-x64": "0.17.2", + "@esbuild/sunos-x64": "0.17.2", + "@esbuild/win32-arm64": "0.17.2", + "@esbuild/win32-ia32": "0.17.2", + "@esbuild/win32-x64": "0.17.2" } }, "esbuild-css-modules-plugin": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/esbuild-css-modules-plugin/-/esbuild-css-modules-plugin-2.6.3.tgz", - "integrity": "sha512-Bi0NHhoWwW002eTbD0HIO38M/gCE7UEfv0ncSvBjn8F+eGZRUPMdSCYof2jCxxWoerG0xR7bLwDpv/yoPjP7EA==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/esbuild-css-modules-plugin/-/esbuild-css-modules-plugin-2.7.0.tgz", + "integrity": "sha512-WtPtkJ/78yrP8UAJ6WRe0sX5GuMVzAz7K9ELqGi6Car5AEfJMD9IM1GqOcwUGCWeTFvyfxlV+3JgPznPFfd0kQ==", "requires": { "fs-extra": "^10.1.0", "lightningcss": "^1.17.1", @@ -35015,67 +35026,67 @@ } }, "lightningcss": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.17.1.tgz", - "integrity": "sha512-DwwM/YYqGwLLP3he41wzDXT/m+8jdEZ80i9ViQNLRgyhey3Vm6N7XHn+4o3PY6wSnVT23WLuaROIpbpIVTNOjg==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.18.0.tgz", + "integrity": "sha512-uk10tNxi5fhZqU93vtYiQgx/8a9f0Kvtj5AXIm+VlOXY+t/DWDmCZWJEkZJmmALgvbS6aAW8or+Kq85eJ6TDTw==", "requires": { "detect-libc": "^1.0.3", - "lightningcss-darwin-arm64": "1.17.1", - "lightningcss-darwin-x64": "1.17.1", - "lightningcss-linux-arm-gnueabihf": "1.17.1", - "lightningcss-linux-arm64-gnu": "1.17.1", - "lightningcss-linux-arm64-musl": "1.17.1", - "lightningcss-linux-x64-gnu": "1.17.1", - "lightningcss-linux-x64-musl": "1.17.1", - "lightningcss-win32-x64-msvc": "1.17.1" + "lightningcss-darwin-arm64": "1.18.0", + "lightningcss-darwin-x64": "1.18.0", + "lightningcss-linux-arm-gnueabihf": "1.18.0", + "lightningcss-linux-arm64-gnu": "1.18.0", + "lightningcss-linux-arm64-musl": "1.18.0", + "lightningcss-linux-x64-gnu": "1.18.0", + "lightningcss-linux-x64-musl": "1.18.0", + "lightningcss-win32-x64-msvc": "1.18.0" } }, "lightningcss-darwin-arm64": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.17.1.tgz", - "integrity": "sha512-YTAHEy4XlzI3sMbUVjbPi9P7+N7lGcgl2JhCZhiQdRAEKnZLQch8kb5601sgESxdGXjgei7JZFqi/vVEk81wYg==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.18.0.tgz", + "integrity": "sha512-OqjydwtiNPgdH1ByIjA1YzqvDG/OMR6L3LPN6wRl1729LB0y4Mik7L06kmZaTb+pvUHr+NmDd2KCwnlrQ4zO3w==", "optional": true }, "lightningcss-darwin-x64": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.17.1.tgz", - "integrity": "sha512-UhXPUS2+yTTf5sXwUV0+8QY2x0bPGLgC/uhcknWSQMqWn1zGty4fFvH04D7f7ij0ujwSuN+Q0HtU7lgmMrPz0A==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.18.0.tgz", + "integrity": "sha512-mNiuPHj89/JHZmJMp+5H8EZSt6EL5DZRWJ31O6k3DrLLnRIQjXuXdDdN8kP7LoIkeWI5xvyD60CsReJm+YWYAw==", "optional": true }, "lightningcss-linux-arm-gnueabihf": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.17.1.tgz", - "integrity": "sha512-alUZumuznB6K/9yZ0zuZkODXUm8uRnvs9t0CL46CXN16Y2h4gOx5ahUCMlelUb7inZEsgJIoepgLsJzBUrSsBw==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.18.0.tgz", + "integrity": "sha512-S+25JjI6601HiAVoTDXW6SqH+E94a+FHA7WQqseyNHunOgVWKcAkNEc2LJvVxgwTq6z41sDIb9/M3Z9wa9lk4A==", "optional": true }, "lightningcss-linux-arm64-gnu": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.17.1.tgz", - "integrity": "sha512-/1XaH2cOjDt+ivmgfmVFUYCA0MtfNWwtC4P8qVi53zEQ7P8euyyZ1ynykZOyKXW9Q0DzrwcLTh6+hxVLcbtGBg==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.18.0.tgz", + "integrity": "sha512-JSqh4+21dCgBecIQUet35dtE4PhhSEMyqe3y0ZNQrAJQ5kyUPSQHiw81WXnPJcOSTTpG0TyMLiC8K//+BsFGQA==", "optional": true }, "lightningcss-linux-arm64-musl": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.17.1.tgz", - "integrity": "sha512-/IgE7lYWFHCCQFTMIwtt+fXLcVOha8rcrNze1JYGPWNorO6NBc6MJo5u5cwn5qMMSz9fZCCDIlBBU4mGwjQszQ==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.18.0.tgz", + "integrity": "sha512-2FWHa8iUhShnZnqhn2wfIcK5adJat9hAAaX7etNsoXJymlliDIOFuBQEsba2KBAZSM4QqfQtvRdR7m8i0I7ybQ==", "optional": true }, "lightningcss-linux-x64-gnu": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.17.1.tgz", - "integrity": "sha512-OyE802IAp4DB9vZrHlOyWunbHLM9dN08tJIKN/HhzzLKIHizubOWX6NMzUXMZLsaUrYwVAHHdyEA+712p8mMzA==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.18.0.tgz", + "integrity": "sha512-plCPGQJtDZHcLVKVRLnQVF2XRsIC32WvuJhQ7fJ7F6BV98b/VZX0OlX05qUaOESD9dCDHjYSfxsgcvOKgCWh7A==", "optional": true }, "lightningcss-linux-x64-musl": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.17.1.tgz", - "integrity": "sha512-ydwGgV3Usba5P53RAOqCA9MsRsbb8jFIEVhf7/BXFjpKNoIQyijVTXhwIgQr/oGwUNOHfgQ3F8ruiUjX/p2YKw==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.18.0.tgz", + "integrity": "sha512-na+BGtVU6fpZvOHKhnlA0XHeibkT3/46nj6vLluG3kzdJYoBKU6dIl7DSOk++8jv4ybZyFJ0aOFMMSc8g2h58A==", "optional": true }, "lightningcss-win32-x64-msvc": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.17.1.tgz", - "integrity": "sha512-Ngqtx9NazaiAOk71XWwSsqgAuwYF+8PO6UYsoU7hAukdrSS98kwaBMEDw1igeIiZy1XD/4kh5KVnkjNf7ZOxVQ==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.18.0.tgz", + "integrity": "sha512-5qeAH4RMNy2yMNEl7e5TI6upt/7xD2ZpHWH4RkT8iJ7/6POS5mjHbXWUO9Q1hhDhqkdzGa76uAdMzEouIeCyNw==", "optional": true }, "lines-and-columns": { diff --git a/package.json b/package.json index 8e1c9b22e..4de7887ae 100644 --- a/package.json +++ b/package.json @@ -120,7 +120,7 @@ "webpack-merge": "5.8.0" }, "dependencies": { - "@ipfs-shipyard/ignite-metrics": "1.0.3", + "@ipfs-shipyard/ignite-metrics": "github:ipfs-shipyard/ignite-metrics#fix-dep-import-with-dist", "@material/switch": "10.0.0", "assert": "2.0.0", "buffer": "6.0.3", From c19ba88b13cd178bb97f1a3ff26628d50106d6c0 Mon Sep 17 00:00:00 2001 From: Russell Dempsey <1173416+SgtPooki@users.noreply.github.com> Date: Tue, 17 Jan 2023 20:08:29 -0800 Subject: [PATCH 23/29] fix: build --- add-on/src/lib/telemetry.js | 3 +-- package-lock.json | 4 ++-- webpack.config.js | 1 + 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/add-on/src/lib/telemetry.js b/add-on/src/lib/telemetry.js index 9c4bf974a..2ba564c84 100644 --- a/add-on/src/lib/telemetry.js +++ b/add-on/src/lib/telemetry.js @@ -1,5 +1,4 @@ - -import MetricsProvider from '@ipfs-shipyard/ignite-metrics/NodeMetrics' +import MetricsProvider from '@ipfs-shipyard/ignite-metrics/vanilla' import debug from 'debug' const log = debug('ipfs-companion:telemetry') diff --git a/package-lock.json b/package-lock.json index 422739a40..48c31dd42 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2465,7 +2465,7 @@ }, "node_modules/@ipfs-shipyard/ignite-metrics": { "version": "1.0.3", - "resolved": "git+ssh://git@github.com/ipfs-shipyard/ignite-metrics.git#e43c2cf6c5296314a8ab2399d8374af5693fa75c", + "resolved": "git+ssh://git@github.com/ipfs-shipyard/ignite-metrics.git#aa6af283ef33e12830b58794072510ebf92c67b0", "license": "Apache-2.0 OR MIT", "dependencies": { "countly-sdk-nodejs": "^22.6.0", @@ -25587,7 +25587,7 @@ "dev": true }, "@ipfs-shipyard/ignite-metrics": { - "version": "git+ssh://git@github.com/ipfs-shipyard/ignite-metrics.git#e43c2cf6c5296314a8ab2399d8374af5693fa75c", + "version": "git+ssh://git@github.com/ipfs-shipyard/ignite-metrics.git#aa6af283ef33e12830b58794072510ebf92c67b0", "from": "@ipfs-shipyard/ignite-metrics@ipfs-shipyard/ignite-metrics#fix-dep-import-with-dist", "requires": { "@esbuild/darwin-arm64": "^0.16.17", diff --git a/webpack.config.js b/webpack.config.js index 1eac06f08..ee715af0f 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -76,6 +76,7 @@ const commonConfig = { ] }, resolve: { + conditionNames: ['browser', 'import'], mainFields: ['browser', 'main'], extensions: ['.js', '.json'], alias: { From 089b0d0454f01ddcfd9675acb3ae0445c511079c Mon Sep 17 00:00:00 2001 From: Russell Dempsey <1173416+SgtPooki@users.noreply.github.com> Date: Fri, 20 Jan 2023 10:48:59 -0800 Subject: [PATCH 24/29] chore: temporarily use updated ignite-metrics --- package-lock.json | 10 +++++----- package.json | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0c283593d..13f6c720c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,7 +7,7 @@ "name": "ipfs-companion", "license": "CC0-1.0", "dependencies": { - "@ipfs-shipyard/ignite-metrics": "github:ipfs-shipyard/ignite-metrics#fix-dep-import-with-dist", + "@ipfs-shipyard/ignite-metrics": "github:ipfs-shipyard/ignite-metrics#feat/useStorageForBrowsers-with-dist", "@material/switch": "10.0.0", "assert": "2.0.0", "buffer": "6.0.3", @@ -2483,8 +2483,8 @@ "dev": true }, "node_modules/@ipfs-shipyard/ignite-metrics": { - "version": "1.0.3", - "resolved": "git+ssh://git@github.com/ipfs-shipyard/ignite-metrics.git#aa6af283ef33e12830b58794072510ebf92c67b0", + "version": "1.1.1", + "resolved": "git+ssh://git@github.com/ipfs-shipyard/ignite-metrics.git#16c31d7b91c6036ee5aad8553f73c79eaf73906d", "license": "Apache-2.0 OR MIT", "dependencies": { "countly-sdk-nodejs": "^22.6.0", @@ -26439,8 +26439,8 @@ "dev": true }, "@ipfs-shipyard/ignite-metrics": { - "version": "git+ssh://git@github.com/ipfs-shipyard/ignite-metrics.git#aa6af283ef33e12830b58794072510ebf92c67b0", - "from": "@ipfs-shipyard/ignite-metrics@ipfs-shipyard/ignite-metrics#fix-dep-import-with-dist", + "version": "git+ssh://git@github.com/ipfs-shipyard/ignite-metrics.git#16c31d7b91c6036ee5aad8553f73c79eaf73906d", + "from": "@ipfs-shipyard/ignite-metrics@https://github.com/ipfs-shipyard/ignite-metrics#feat/useStorageForBrowsers-with-dist", "requires": { "@esbuild/darwin-arm64": "^0.16.17", "@esbuild/linux-x64": "^0.16.17", diff --git a/package.json b/package.json index c0236295d..62b85f885 100644 --- a/package.json +++ b/package.json @@ -131,7 +131,7 @@ "webpack-merge": "5.8.0" }, "dependencies": { - "@ipfs-shipyard/ignite-metrics": "github:ipfs-shipyard/ignite-metrics#fix-dep-import-with-dist", + "@ipfs-shipyard/ignite-metrics": "github:ipfs-shipyard/ignite-metrics#feat/useStorageForBrowsers-with-dist", "@material/switch": "10.0.0", "assert": "2.0.0", "buffer": "6.0.3", From ee060c22778517a24ba10c82417e59b39b0ee714 Mon Sep 17 00:00:00 2001 From: Russell Dempsey <1173416+SgtPooki@users.noreply.github.com> Date: Fri, 20 Jan 2023 13:21:43 -0800 Subject: [PATCH 25/29] chore: use deployed ignite-metrics version --- package-lock.json | 45 ++++++++++++++++----------------------------- package.json | 2 +- 2 files changed, 17 insertions(+), 30 deletions(-) diff --git a/package-lock.json b/package-lock.json index 13f6c720c..7b229c7f5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,7 +7,7 @@ "name": "ipfs-companion", "license": "CC0-1.0", "dependencies": { - "@ipfs-shipyard/ignite-metrics": "github:ipfs-shipyard/ignite-metrics#feat/useStorageForBrowsers-with-dist", + "@ipfs-shipyard/ignite-metrics": "^1.1.0", "@material/switch": "10.0.0", "assert": "2.0.0", "buffer": "6.0.3", @@ -2483,9 +2483,9 @@ "dev": true }, "node_modules/@ipfs-shipyard/ignite-metrics": { - "version": "1.1.1", - "resolved": "git+ssh://git@github.com/ipfs-shipyard/ignite-metrics.git#16c31d7b91c6036ee5aad8553f73c79eaf73906d", - "license": "Apache-2.0 OR MIT", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@ipfs-shipyard/ignite-metrics/-/ignite-metrics-1.1.0.tgz", + "integrity": "sha512-QibTiZ6YtGBYQNKkocxg81QUTmUXdIbe2T1gpHbgdgN+lpFpXnIw675CfoSyj0dHXw/JlN3moyithwcytVTrdw==", "dependencies": { "countly-sdk-nodejs": "^22.6.0", "countly-sdk-web": "^22.6.4", @@ -6900,8 +6900,7 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/base64-js": { "version": "1.5.1", @@ -7221,7 +7220,6 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -8249,8 +8247,7 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "node_modules/concat-stream": { "version": "1.6.2", @@ -11982,8 +11979,7 @@ "node_modules/graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, "node_modules/graceful-readlink": { "version": "1.0.1", @@ -15776,8 +15772,7 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "node_modules/lodash.camelcase": { "version": "4.3.0", @@ -16275,7 +16270,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -17038,7 +17032,6 @@ "version": "3.3.4", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "dev": true, "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -26439,8 +26432,9 @@ "dev": true }, "@ipfs-shipyard/ignite-metrics": { - "version": "git+ssh://git@github.com/ipfs-shipyard/ignite-metrics.git#16c31d7b91c6036ee5aad8553f73c79eaf73906d", - "from": "@ipfs-shipyard/ignite-metrics@https://github.com/ipfs-shipyard/ignite-metrics#feat/useStorageForBrowsers-with-dist", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@ipfs-shipyard/ignite-metrics/-/ignite-metrics-1.1.0.tgz", + "integrity": "sha512-QibTiZ6YtGBYQNKkocxg81QUTmUXdIbe2T1gpHbgdgN+lpFpXnIw675CfoSyj0dHXw/JlN3moyithwcytVTrdw==", "requires": { "@esbuild/darwin-arm64": "^0.16.17", "@esbuild/linux-x64": "^0.16.17", @@ -29890,8 +29884,7 @@ "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "base64-js": { "version": "1.5.1", @@ -30128,7 +30121,6 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -30888,8 +30880,7 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "concat-stream": { "version": "1.6.2", @@ -33693,8 +33684,7 @@ "graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, "graceful-readlink": { "version": "1.0.1", @@ -36510,8 +36500,7 @@ "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "lodash.camelcase": { "version": "4.3.0", @@ -36915,7 +36904,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -37498,8 +37486,7 @@ "nanoid": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "dev": true + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" }, "nanolru": { "version": "1.0.0", diff --git a/package.json b/package.json index 62b85f885..2b505a9e7 100644 --- a/package.json +++ b/package.json @@ -131,7 +131,7 @@ "webpack-merge": "5.8.0" }, "dependencies": { - "@ipfs-shipyard/ignite-metrics": "github:ipfs-shipyard/ignite-metrics#feat/useStorageForBrowsers-with-dist", + "@ipfs-shipyard/ignite-metrics": "^1.1.0", "@material/switch": "10.0.0", "assert": "2.0.0", "buffer": "6.0.3", From ea798df637f80f83a3e296f4b5d0729cf4d94607 Mon Sep 17 00:00:00 2001 From: Russell Dempsey <1173416+SgtPooki@users.noreply.github.com> Date: Fri, 27 Jan 2023 09:22:20 -0800 Subject: [PATCH 26/29] chore: address PR comments * use latest ignite-metrics library * don't use singleton function for grabbing metricsProvider * ensure metrics initialize and update properly --- add-on/src/lib/ipfs-companion.js | 4 ++++ add-on/src/lib/telemetry.js | 40 ++++++++++++++------------------ package-lock.json | 14 +++++------ package.json | 2 +- 4 files changed, 29 insertions(+), 31 deletions(-) diff --git a/add-on/src/lib/ipfs-companion.js b/add-on/src/lib/ipfs-companion.js index d87d8cd25..ad86112d4 100644 --- a/add-on/src/lib/ipfs-companion.js +++ b/add-on/src/lib/ipfs-companion.js @@ -57,6 +57,8 @@ export default async function init () { runtime = await createRuntimeChecks(browser) state = initState(options) notify = createNotifier(getState) + // ensure consent is set properly on app init + handleConsentFromState(state) if (state.active) { startSession() @@ -557,6 +559,7 @@ export default async function init () { await registerSubdomainProxy(getState, runtime) shouldRestartIpfsClient = true shouldStopIpfsClient = !state.active + // Any time the extension switches active state, start or stop the current session. state.active ? startSession() : endSession() break case 'ipfsNodeType': @@ -624,6 +627,7 @@ export default async function init () { break } } + // ensure consent is set properly on state changes handleConsentFromState(state) if ((state.active && shouldRestartIpfsClient) || shouldStopIpfsClient) { diff --git a/add-on/src/lib/telemetry.js b/add-on/src/lib/telemetry.js index 2ba564c84..a5558e2bc 100644 --- a/add-on/src/lib/telemetry.js +++ b/add-on/src/lib/telemetry.js @@ -1,17 +1,13 @@ -import MetricsProvider from '@ipfs-shipyard/ignite-metrics/vanilla' -import debug from 'debug' +import MetricsProvider from '@ipfs-shipyard/ignite-metrics/vanilla'; +import debug from 'debug'; const log = debug('ipfs-companion:telemetry') -let metricsProvider = null -export function getMetricsProviderInstance () { - metricsProvider = metricsProvider ?? new MetricsProvider({ - appKey: '393f72eb264c28a1b59973da1e0a3938d60dc38a', - autoTrack: false - }) - - return metricsProvider -} +const metricsProvider = new MetricsProvider({ + appKey: '393f72eb264c28a1b59973da1e0a3938d60dc38a', + autoTrack: false, + storageProvider: null, +}) /** * @param {import('../types.js').CompanionState} stateOptions @@ -32,11 +28,11 @@ function mapStateToConsent (stateOptions) { } function logConsent () { - log('checkConsent(\'minimal\'): ', getMetricsProviderInstance().checkConsent('minimal')) - log('checkConsent(\'performance\'): ', getMetricsProviderInstance().checkConsent('performance')) - log('checkConsent(\'ux\'): ', getMetricsProviderInstance().checkConsent('ux')) - log('checkConsent(\'feedback\'): ', getMetricsProviderInstance().checkConsent('feedback')) - log('checkConsent(\'location\'): ', getMetricsProviderInstance().checkConsent('location')) + log('checkConsent(\'minimal\'): ', metricsProvider.checkConsent('minimal')) + log('checkConsent(\'performance\'): ', metricsProvider.checkConsent('performance')) + log('checkConsent(\'ux\'): ', metricsProvider.checkConsent('ux')) + log('checkConsent(\'feedback\'): ', metricsProvider.checkConsent('feedback')) + log('checkConsent(\'location\'): ', metricsProvider.checkConsent('location')) } /** @@ -45,22 +41,20 @@ function logConsent () { * @returns {void} */ export function handleConsentFromState (state) { - log('handleConsentFromState', state) - getMetricsProviderInstance().updateConsent(mapStateToConsent(state)) + metricsProvider.updateConsent(mapStateToConsent(state)) logConsent() } export function handleConsentUpdate (consent) { log('handleConsentUpdate', consent) - getMetricsProviderInstance().updateConsent(consent) + metricsProvider.updateConsent(consent) } -// const ignoredViewsRegex = [/^ipfs:\/\/.*/] const ignoredViewsRegex = [] export function trackView (view) { log('trackView called for view: ', view) - getMetricsProviderInstance().metricsService.track_pageview(view, ignoredViewsRegex) + metricsProvider.metricsService.track_view(view, ignoredViewsRegex) } -export const startSession = (...args) => getMetricsProviderInstance().startSession(...args) -export const endSession = (...args) => getMetricsProviderInstance().endSession(...args) +export const startSession = (...args) => metricsProvider.startSession(...args) +export const endSession = (...args) => metricsProvider.endSession(...args) diff --git a/package-lock.json b/package-lock.json index 7b229c7f5..97610810a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,7 +7,7 @@ "name": "ipfs-companion", "license": "CC0-1.0", "dependencies": { - "@ipfs-shipyard/ignite-metrics": "^1.1.0", + "@ipfs-shipyard/ignite-metrics": "^1.3.0", "@material/switch": "10.0.0", "assert": "2.0.0", "buffer": "6.0.3", @@ -2483,9 +2483,9 @@ "dev": true }, "node_modules/@ipfs-shipyard/ignite-metrics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@ipfs-shipyard/ignite-metrics/-/ignite-metrics-1.1.0.tgz", - "integrity": "sha512-QibTiZ6YtGBYQNKkocxg81QUTmUXdIbe2T1gpHbgdgN+lpFpXnIw675CfoSyj0dHXw/JlN3moyithwcytVTrdw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ipfs-shipyard/ignite-metrics/-/ignite-metrics-1.3.0.tgz", + "integrity": "sha512-EKBgBHqIXIl82wlKN3pdIpOLC87cpIPtm7yrTGE8wSRsDe2ASEhu5wzbYYJ6InvtVA6AZsZ280VIuOubOG2usA==", "dependencies": { "countly-sdk-nodejs": "^22.6.0", "countly-sdk-web": "^22.6.4", @@ -26432,9 +26432,9 @@ "dev": true }, "@ipfs-shipyard/ignite-metrics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@ipfs-shipyard/ignite-metrics/-/ignite-metrics-1.1.0.tgz", - "integrity": "sha512-QibTiZ6YtGBYQNKkocxg81QUTmUXdIbe2T1gpHbgdgN+lpFpXnIw675CfoSyj0dHXw/JlN3moyithwcytVTrdw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ipfs-shipyard/ignite-metrics/-/ignite-metrics-1.3.0.tgz", + "integrity": "sha512-EKBgBHqIXIl82wlKN3pdIpOLC87cpIPtm7yrTGE8wSRsDe2ASEhu5wzbYYJ6InvtVA6AZsZ280VIuOubOG2usA==", "requires": { "@esbuild/darwin-arm64": "^0.16.17", "@esbuild/linux-x64": "^0.16.17", diff --git a/package.json b/package.json index 2b505a9e7..7d3daa8ba 100644 --- a/package.json +++ b/package.json @@ -131,7 +131,7 @@ "webpack-merge": "5.8.0" }, "dependencies": { - "@ipfs-shipyard/ignite-metrics": "^1.1.0", + "@ipfs-shipyard/ignite-metrics": "^1.3.0", "@material/switch": "10.0.0", "assert": "2.0.0", "buffer": "6.0.3", From dad1bfa95b43628afe8277eca22d222acfb3e027 Mon Sep 17 00:00:00 2001 From: Russell Dempsey <1173416+SgtPooki@users.noreply.github.com> Date: Fri, 27 Jan 2023 10:16:54 -0800 Subject: [PATCH 27/29] chore: pin ignite-metrics dependency --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7d3daa8ba..ab0dee153 100644 --- a/package.json +++ b/package.json @@ -131,7 +131,7 @@ "webpack-merge": "5.8.0" }, "dependencies": { - "@ipfs-shipyard/ignite-metrics": "^1.3.0", + "@ipfs-shipyard/ignite-metrics": "1.3.0", "@material/switch": "10.0.0", "assert": "2.0.0", "buffer": "6.0.3", From d2f9cabdc73227b34aa298fe23326f2434d2f8d3 Mon Sep 17 00:00:00 2001 From: Russell Dempsey <1173416+SgtPooki@users.noreply.github.com> Date: Fri, 27 Jan 2023 10:22:30 -0800 Subject: [PATCH 28/29] chore(lint): fix lint errors --- add-on/src/lib/telemetry.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/add-on/src/lib/telemetry.js b/add-on/src/lib/telemetry.js index a5558e2bc..8a212b74f 100644 --- a/add-on/src/lib/telemetry.js +++ b/add-on/src/lib/telemetry.js @@ -1,12 +1,12 @@ -import MetricsProvider from '@ipfs-shipyard/ignite-metrics/vanilla'; -import debug from 'debug'; +import MetricsProvider from '@ipfs-shipyard/ignite-metrics/vanilla' +import debug from 'debug' const log = debug('ipfs-companion:telemetry') const metricsProvider = new MetricsProvider({ appKey: '393f72eb264c28a1b59973da1e0a3938d60dc38a', autoTrack: false, - storageProvider: null, + storageProvider: null }) /** From 0810499c2020673b437bf4d971ed372435003796 Mon Sep 17 00:00:00 2001 From: Russell Dempsey <1173416+SgtPooki@users.noreply.github.com> Date: Fri, 27 Jan 2023 10:39:57 -0800 Subject: [PATCH 29/29] fix: use browser.runtime.sendMessage * Telemetry messages are passed between contexts using browser.runtime * Upgraded to @ipfs-shipyard/ignite-metrics@1.3.0 * Updated consent handling from state to be more explicit --- add-on/src/background/background.js | 3 +- add-on/src/landing-pages/welcome/store.js | 3 +- add-on/src/lib/ipfs-companion.js | 11 +- add-on/src/lib/telemetry.js | 51 +- add-on/src/options/store.js | 3 +- add-on/src/popup/browser-action/store.js | 4 +- add-on/src/popup/quick-import.js | 3 +- package-lock.json | 772 +++++++++++----------- webpack.config.js | 1 - 9 files changed, 419 insertions(+), 432 deletions(-) diff --git a/add-on/src/background/background.js b/add-on/src/background/background.js index a33d2f014..7b9fddfab 100644 --- a/add-on/src/background/background.js +++ b/add-on/src/background/background.js @@ -6,7 +6,6 @@ import { onInstalled } from '../lib/on-installed.js' import { getUninstallURL } from '../lib/on-uninstalled.js' import { optionDefaults } from '../lib/options.js' import createIpfsCompanion from '../lib/ipfs-companion.js' -import { trackView } from '../lib/telemetry.js' // register lifecycle hooks early, otherwise we miss first install event browser.runtime.onInstalled.addListener(onInstalled) @@ -14,7 +13,7 @@ browser.runtime.setUninstallURL(getUninstallURL(browser)) // init add-on after all libs are loaded document.addEventListener('DOMContentLoaded', async () => { - trackView('background') + browser.runtime.sendMessage({ telemetry: { trackView: 'background' } }) // setting debug namespaces require page reload to get applied const debugNs = (await browser.storage.local.get({ logNamespaces: optionDefaults.logNamespaces })).logNamespaces if (debugNs !== localStorage.debug) { diff --git a/add-on/src/landing-pages/welcome/store.js b/add-on/src/landing-pages/welcome/store.js index d9498b85d..83f733d10 100644 --- a/add-on/src/landing-pages/welcome/store.js +++ b/add-on/src/landing-pages/welcome/store.js @@ -1,7 +1,6 @@ 'use strict' /* eslint-env browser, webextensions */ import browser from 'webextension-polyfill' -import { trackView } from '../../lib/telemetry.js' export default function createWelcomePageStore (i18n, runtime) { return function welcomePageStore (state, emitter) { @@ -10,7 +9,7 @@ export default function createWelcomePageStore (i18n, runtime) { state.webuiRootUrl = null let port emitter.on('DOMContentLoaded', async () => { - trackView('welcome') + browser.runtime.sendMessage({ telemetry: { trackView: 'welcome' } }) emitter.emit('render') port = runtime.connect({ name: 'browser-action-port' }) port.onMessage.addListener(async (message) => { diff --git a/add-on/src/lib/ipfs-companion.js b/add-on/src/lib/ipfs-companion.js index ad86112d4..6a29da729 100644 --- a/add-on/src/lib/ipfs-companion.js +++ b/add-on/src/lib/ipfs-companion.js @@ -23,7 +23,7 @@ import createRuntimeChecks from './runtime-checks.js' import { createContextMenus, findValueForContext, contextMenuCopyAddressAtPublicGw, contextMenuCopyRawCid, contextMenuCopyCanonicalAddress, contextMenuViewOnGateway, contextMenuCopyPermalink, contextMenuCopyCidAddress } from './context-menus.js' import { registerSubdomainProxy } from './http-proxy.js' import { runPendingOnInstallTasks } from './on-installed.js' -import { handleConsentFromState, startSession, endSession } from './telemetry.js' +import { handleConsentFromState, startSession, endSession, trackView } from './telemetry.js' const log = debug('ipfs-companion:main') log.error = debug('ipfs-companion:main:error') @@ -172,6 +172,15 @@ export default async function init () { const result = validIpfsOrIpns(path) ? resolveToPublicUrl(path) : null return Promise.resolve({ pubGwUrlForIpfsOrIpnsPath: result }) } + if (request.telemetry) { + return Promise.resolve(onTelemetryMessage(request.telemetry, sender)) + } + } + + function onTelemetryMessage (request, sender) { + if (request.trackView) { + return trackView(request.trackView) + } } // PORTS (connection-based messaging) diff --git a/add-on/src/lib/telemetry.js b/add-on/src/lib/telemetry.js index 8a212b74f..f3e5a2b7c 100644 --- a/add-on/src/lib/telemetry.js +++ b/add-on/src/lib/telemetry.js @@ -9,51 +9,34 @@ const metricsProvider = new MetricsProvider({ storageProvider: null }) -/** - * @param {import('../types.js').CompanionState} stateOptions - * @returns {string[]} - */ -function mapStateToConsent (stateOptions) { - const obj = { - minimal: stateOptions?.telemetryGroupMinimal || false, - performance: stateOptions?.telemetryGroupPerformance || false, - ux: stateOptions?.telemetryGroupUx || false, - feedback: stateOptions?.telemetryGroupFeedback || false, - location: stateOptions?.telemetryGroupLocation || false - } - - const enabledConsentGroups = Object.keys(obj).filter(key => obj[key] === true) - log('enabledConsentGroups: ', enabledConsentGroups) - return enabledConsentGroups -} - -function logConsent () { - log('checkConsent(\'minimal\'): ', metricsProvider.checkConsent('minimal')) - log('checkConsent(\'performance\'): ', metricsProvider.checkConsent('performance')) - log('checkConsent(\'ux\'): ', metricsProvider.checkConsent('ux')) - log('checkConsent(\'feedback\'): ', metricsProvider.checkConsent('feedback')) - log('checkConsent(\'location\'): ', metricsProvider.checkConsent('location')) -} - /** * * @param {import('../types.js').CompanionState} state * @returns {void} */ export function handleConsentFromState (state) { - metricsProvider.updateConsent(mapStateToConsent(state)) - logConsent() -} - -export function handleConsentUpdate (consent) { - log('handleConsentUpdate', consent) - metricsProvider.updateConsent(consent) + const telemetryGroups = { + minimal: state?.telemetryGroupMinimal || false, + performance: state?.telemetryGroupPerformance || false, + ux: state?.telemetryGroupUx || false, + feedback: state?.telemetryGroupFeedback || false, + location: state?.telemetryGroupLocation || false + } + for (const [groupName, isEnabled] of Object.entries(telemetryGroups)) { + if (isEnabled) { + log(`Adding consent for '${groupName}'`) + metricsProvider.addConsent(groupName) + } else { + log(`Removing consent for '${groupName}'`) + metricsProvider.removeConsent(groupName) + } + } } const ignoredViewsRegex = [] export function trackView (view) { log('trackView called for view: ', view) - metricsProvider.metricsService.track_view(view, ignoredViewsRegex) + metricsProvider.trackView(view, ignoredViewsRegex) } export const startSession = (...args) => metricsProvider.startSession(...args) diff --git a/add-on/src/options/store.js b/add-on/src/options/store.js index cc50a5931..a5a3a0350 100644 --- a/add-on/src/options/store.js +++ b/add-on/src/options/store.js @@ -4,7 +4,6 @@ import browser from 'webextension-polyfill' import { optionDefaults } from '../lib/options.js' import createRuntimeChecks from '../lib/runtime-checks.js' -import { trackView } from '../lib/telemetry.js' // The store contains and mutates the state for the app export default function optionStore (state, emitter) { @@ -21,7 +20,7 @@ export default function optionStore (state, emitter) { } emitter.on('DOMContentLoaded', async () => { - trackView('options') + browser.runtime.sendMessage({ telemetry: { trackView: 'options' } }) updateStateOptions() browser.storage.onChanged.addListener(updateStateOptions) }) diff --git a/add-on/src/popup/browser-action/store.js b/add-on/src/popup/browser-action/store.js index 220136b32..35d11cddf 100644 --- a/add-on/src/popup/browser-action/store.js +++ b/add-on/src/popup/browser-action/store.js @@ -7,7 +7,6 @@ import { browserActionFilesCpImportCurrentTab } from '../../lib/ipfs-import.js' import { ipfsContentPath } from '../../lib/ipfs-path.js' import { welcomePage, optionsPage } from '../../lib/constants.js' import { contextMenuViewOnGateway, contextMenuCopyAddressAtPublicGw, contextMenuCopyPermalink, contextMenuCopyRawCid, contextMenuCopyCanonicalAddress, contextMenuCopyCidAddress } from '../../lib/context-menus.js' -import { trackView } from '../../lib/telemetry.js' // The store contains and mutates the state for the app export default (state, emitter) => { @@ -39,7 +38,8 @@ export default (state, emitter) => { let port emitter.on('DOMContentLoaded', async () => { - trackView('browser-action') + browser.runtime.sendMessage({ telemetry: { trackView: 'browser-action' } }) + // initial render with status stub emitter.emit('render') // initialize connection to the background script which will trigger UI updates diff --git a/add-on/src/popup/quick-import.js b/add-on/src/popup/quick-import.js index d3b7666b1..24c310d17 100644 --- a/add-on/src/popup/quick-import.js +++ b/add-on/src/popup/quick-import.js @@ -12,7 +12,6 @@ import { formatImportDirectory } from '../lib/ipfs-import.js' import all from 'it-all' import drop from 'drag-and-drop-files' import { filesize } from 'filesize' -import { trackView } from '../lib/telemetry.js' document.title = browser.i18n.getMessage('quickImport_page_title') @@ -49,7 +48,7 @@ function quickImportStore (state, emitter) { let port emitter.on('DOMContentLoaded', async () => { - trackView('quick-import') + browser.runtime.sendMessage({ telemetry: { trackView: 'quick-import' } }) // initialize connection to the background script which will trigger UI updates port = browser.runtime.connect({ name: 'browser-action-port' }) port.onMessage.addListener(async (message) => { diff --git a/package-lock.json b/package-lock.json index 97610810a..81413253c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,7 +7,7 @@ "name": "ipfs-companion", "license": "CC0-1.0", "dependencies": { - "@ipfs-shipyard/ignite-metrics": "^1.3.0", + "@ipfs-shipyard/ignite-metrics": "1.3.0", "@material/switch": "10.0.0", "assert": "2.0.0", "buffer": "6.0.3", @@ -1988,9 +1988,9 @@ "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" }, "node_modules/@esbuild/android-arm": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.2.tgz", - "integrity": "sha512-Art7v3xYfqH1gEMUSP0Nx67pNAlC/Y3qSg3mOw8Wg7MP9bJLXL0DrmJaV1Qz1o4FwagtvDgkVOeBDpZgxdj13Q==", + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.5.tgz", + "integrity": "sha512-crmPUzgCmF+qZXfl1YkiFoUta2XAfixR1tEnr/gXIixE+WL8Z0BGqfydP5oox0EUOgQMMRgtATtakyAcClQVqQ==", "cpu": [ "arm" ], @@ -2004,9 +2004,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.2.tgz", - "integrity": "sha512-QSkmYISXr2uFoR+NdmmKyR5svYb0cXDCfzwNblLsrC8wTpx/I1L7u/zrjrf4aLoHoRTycZFIewJwBiUrO5DWtQ==", + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.5.tgz", + "integrity": "sha512-KHWkDqYAMmKZjY4RAN1PR96q6UOtfkWlTS8uEwWxdLtkRt/0F/csUhXIrVfaSIFxnscIBMPynGfhsMwQDRIBQw==", "cpu": [ "arm64" ], @@ -2020,9 +2020,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.2.tgz", - "integrity": "sha512-5VOaFBI0RK8jJVDHdeU1YJmpxXoOf1RPoiOBhk/Tvpulw7R1SwCsxHvC3eDQcoF0gV7YM4V2wJO0PR9tem6gCQ==", + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.5.tgz", + "integrity": "sha512-8fI/AnIdmWz/+1iza2WrCw8kwXK9wZp/yZY/iS8ioC+U37yJCeppi9EHY05ewJKN64ASoBIseufZROtcFnX5GA==", "cpu": [ "x64" ], @@ -2036,9 +2036,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.2.tgz", - "integrity": "sha512-iQJu1Zn1Wi91D5x/sslEn/jwae1tgSAEHK0R/kYzIr5jO992IJwDDuWhSGll23jHt18RECxahhGG0BWY/bVUTw==", + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz", + "integrity": "sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==", "cpu": [ "arm64" ], @@ -2046,15 +2046,14 @@ "os": [ "darwin" ], - "peer": true, "engines": { "node": ">=12" } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.2.tgz", - "integrity": "sha512-j750nyrwoRZd3VnPo5sd12/5U27TxFGmvmoDv93G2jiaGJPYKJ/+5IfRAvHahGePTUIRPyOlE5YLFw9MlzuBnw==", + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.5.tgz", + "integrity": "sha512-ha7QCJh1fuSwwCgoegfdaljowwWozwTDjBgjD3++WAy/qwee5uUi1gvOg2WENJC6EUyHBOkcd3YmLDYSZ2TPPA==", "cpu": [ "x64" ], @@ -2068,9 +2067,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.2.tgz", - "integrity": "sha512-ti7GU+/KUQQXEPmSUep7efZpA3KR2SkKsVuSL2FE7Yxka9apuqKfymAgQmVPMxstzAgCRBIu8uEu0KFmTfs3/Q==", + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.5.tgz", + "integrity": "sha512-VbdXJkn2aI2pQ/wxNEjEcnEDwPpxt3CWWMFYmO7CcdFBoOsABRy2W8F3kjbF9F/pecEUDcI3b5i2w+By4VQFPg==", "cpu": [ "arm64" ], @@ -2084,9 +2083,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.2.tgz", - "integrity": "sha512-NgooSKWSnrNKRuiumY1dg7KAGpsyXIMcwyOXN9imnqe8VFjqqrEOMqZRik0C1wlfLjiSCuMsj+YUSmBMAJMt0A==", + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.5.tgz", + "integrity": "sha512-olgGYND1/XnnWxwhjtY3/ryjOG/M4WfcA6XH8dBTH1cxMeBemMODXSFhkw71Kf4TeZFFTN25YOomaNh0vq2iXg==", "cpu": [ "x64" ], @@ -2100,9 +2099,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.2.tgz", - "integrity": "sha512-8dfrRTd39n+THdAetwQKNwK6zBPR5oPjMtgRNXvRq8gsn/J5o69zTaOWVi3QO09BljqdShxU2dxDA09lDhdIqQ==", + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.5.tgz", + "integrity": "sha512-YBdCyQwA3OQupi6W2/WO4FnI+NWFWe79cZEtlbqSESOHEg7a73htBIRiE6uHPQe7Yp5E4aALv+JxkRLGEUL7tw==", "cpu": [ "arm" ], @@ -2116,9 +2115,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.2.tgz", - "integrity": "sha512-jcJ4cxwQyqEqgDwkqj7820nKx9cM5WBPCCU4oUXvTeG+DkkJE6/P75od0VPHmItFfEJu+/2vV85ebvFVomZcBg==", + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.5.tgz", + "integrity": "sha512-8a0bqSwu3OlLCfu2FBbDNgQyBYdPJh1B9PvNX7jMaKGC9/KopgHs37t+pQqeMLzcyRqG6z55IGNQAMSlCpBuqg==", "cpu": [ "arm64" ], @@ -2132,9 +2131,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.2.tgz", - "integrity": "sha512-dXZ3m++zaRVD2fqOUPP8QTh1Lfg6WO6uZDo/QJ3KdfnIR7dDToDtaA12AgKYvCed9Nuzf/gpKs/7/f6I02b/sg==", + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.5.tgz", + "integrity": "sha512-uCwm1r/+NdP7vndctgq3PoZrnmhmnecWAr114GWMRwg2QMFFX+kIWnp7IO220/JLgnXK/jP7VKAFBGmeOYBQYQ==", "cpu": [ "ia32" ], @@ -2148,9 +2147,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.2.tgz", - "integrity": "sha512-/vntXkzSe9TUp0Rh35Wgye1EOhDtmIMjwC4rtahHcALmDXL+iuQGvwGFvXrP+sBigia/ltLryMAvCiqGV6plqw==", + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.5.tgz", + "integrity": "sha512-3YxhSBl5Sb6TtBjJu+HP93poBruFzgXmf3PVfIe4xOXMj1XpxboYZyw3W8BhoX/uwxzZz4K1I99jTE/5cgDT1g==", "cpu": [ "loong64" ], @@ -2164,9 +2163,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.2.tgz", - "integrity": "sha512-guYcNHjMRO1BMxWAeb8LDfgQaU8oeUO65xtlclwBD+hX3163KBifEHyao1hK96J10BP9n0UmZug6GhtGZaNm2Q==", + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.5.tgz", + "integrity": "sha512-Hy5Z0YVWyYHdtQ5mfmfp8LdhVwGbwVuq8mHzLqrG16BaMgEmit2xKO+iDakHs+OetEx0EN/2mUzDdfdktI+Nmg==", "cpu": [ "mips64el" ], @@ -2180,9 +2179,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.2.tgz", - "integrity": "sha512-fzHTnIGIVqgUGZcFnnisguKD4UneF4uwWwkG+i8kBspMDdU1wJ0jha1VdtxWP7Ob1KGxuXcoUlrQkCVO+Z5iOw==", + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.5.tgz", + "integrity": "sha512-5dbQvBLbU/Y3Q4ABc9gi23hww1mQcM7KZ9KBqabB7qhJswYMf8WrDDOSw3gdf3p+ffmijMd28mfVMvFucuECyg==", "cpu": [ "ppc64" ], @@ -2196,9 +2195,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.2.tgz", - "integrity": "sha512-Sa+z7csvNVeAsTD83tVSggOb8CAU7EdDuihC8WhtoJfuDVkF5+Vi0imaiCjXQ7Ci5rz/a8IJ1H1MWX3eI9AmuQ==", + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.5.tgz", + "integrity": "sha512-fp/KUB/ZPzEWGTEUgz9wIAKCqu7CjH1GqXUO2WJdik1UNBQ7Xzw7myIajpxztE4Csb9504ERiFMxZg5KZ6HlZQ==", "cpu": [ "riscv64" ], @@ -2212,9 +2211,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.2.tgz", - "integrity": "sha512-jUFCO+/VA1Y/oeauSNBubp2UtGu4xjBUEFVgMPm0qLuw6xw18yOagKwBOPVmyE3ZSFqGd9BAPZM/JrtadgBryA==", + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.5.tgz", + "integrity": "sha512-kRV3yw19YDqHTp8SfHXfObUFXlaiiw4o2lvT1XjsPZ++22GqZwSsYWJLjMi1Sl7j9qDlDUduWDze/nQx0d6Lzw==", "cpu": [ "s390x" ], @@ -2228,9 +2227,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.2.tgz", - "integrity": "sha512-naygxkSmr6x9tuvpa8iGefnXo3Rc3Noz7c4+Dn0MSfSWJwLaN2YR686e7HkI09irfjDdU5UAq9wcxUwjkYQNUA==", + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz", + "integrity": "sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==", "cpu": [ "x64" ], @@ -2238,15 +2237,14 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=12" } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.2.tgz", - "integrity": "sha512-Hagbdq4EpiG9XXJY6Ozfrl2RN5jkXZXd6BD39f43tWz0d8yyOrRZlofM1eA6JYQbdv6c8BUsUOcgopavIqwx4Q==", + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.5.tgz", + "integrity": "sha512-cigBpdiSx/vPy7doUyImsQQBnBjV5f1M99ZUlaJckDAJjgXWl6y9W17FIfJTy8TxosEF6MXq+fpLsitMGts2nA==", "cpu": [ "x64" ], @@ -2260,9 +2258,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.2.tgz", - "integrity": "sha512-Pkby+VEXY7+aWP8J2RUCfqWbbZz2M1GavRGGnE2kEPzwarba/BOk3B45PSaKwc3iKdK2rgCPCTjC/p9JoKNejA==", + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.5.tgz", + "integrity": "sha512-VdqRqPVIjjZfkf40LrqOaVuhw9EQiAZ/GNCSM2UplDkaIzYVsSnycxcFfAnHdWI8Gyt6dO15KHikbpxwx+xHbw==", "cpu": [ "x64" ], @@ -2276,9 +2274,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.2.tgz", - "integrity": "sha512-WAyg4dBTUsAPJ9cRnuQ23cwJWYRhP4e4y0M/l2+EpRjWW+g1MNAXKQQNNhRQ71zc8UixRVrqj+43ReHeZC8mJQ==", + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.5.tgz", + "integrity": "sha512-ItxPaJ3MBLtI4nK+mALLEoUs6amxsx+J1ibnfcYMkqaCqHST1AkF4aENpBehty3czqw64r/XqL+W9WqU6kc2Qw==", "cpu": [ "x64" ], @@ -2292,9 +2290,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.2.tgz", - "integrity": "sha512-rMbO3gPpxuENd+AnZLgo4J/g+BkwxT3NK7nYpSZ0KlYtSdlxYMIMG5pznX7a1ISZKo67aGStne+K41jdkBywpA==", + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.5.tgz", + "integrity": "sha512-4u2Q6qsJTYNFdS9zHoAi80spzf78C16m2wla4eJPh4kSbRv+BpXIfl6TmBSWupD8e47B1NrTfrOlEuco7mYQtg==", "cpu": [ "arm64" ], @@ -2308,9 +2306,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.2.tgz", - "integrity": "sha512-73dWKDMhFk+4owS19OjEVbEDGFPRS1fyga3qOu5HPd5eTxJTjtlVTT/fG/S7AchA0vXS7hOqY70AAir1CkmICg==", + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.5.tgz", + "integrity": "sha512-KYlm+Xu9TXsfTWAcocLuISRtqxKp/Y9ZBVg6CEEj0O5J9mn7YvBKzAszo2j1ndyzUPk+op+Tie2PJeN+BnXGqQ==", "cpu": [ "ia32" ], @@ -2324,9 +2322,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.2.tgz", - "integrity": "sha512-QFJlhf73HCBjTqAWWSIlD8JQBtmue0Dd6UV+KGccycJ3HKj1dCkXdRKJGwc5bZWiI9hrxcWsVEa1kVFaltC4vQ==", + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.5.tgz", + "integrity": "sha512-XgA9qWRqby7xdYXuF6KALsn37QGBMHsdhmnpjfZtYxKxbTOwfnDM6MYi2WuUku5poNaX2n9XGVr20zgT/2QwCw==", "cpu": [ "x64" ], @@ -2509,36 +2507,6 @@ "react-dom": "^18.2.0" } }, - "node_modules/@ipfs-shipyard/ignite-metrics/node_modules/@esbuild/darwin-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz", - "integrity": "sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@ipfs-shipyard/ignite-metrics/node_modules/@esbuild/linux-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz", - "integrity": "sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/@ipld/car": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/@ipld/car/-/car-5.0.1.tgz", @@ -4663,9 +4631,9 @@ "dev": true }, "node_modules/@remix-run/router": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.2.1.tgz", - "integrity": "sha512-XiY0IsyHR+DXYS5vBxpoBe/8veTeoRpMHP+vDosLZxL5bnpetzI0igkxkLZS235ldLzyfkxF+2divEwWHP3vMQ==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.3.1.tgz", + "integrity": "sha512-+eun1Wtf72RNRSqgU7qM2AMX/oHp+dnx7BHk1qhK5ZHzdHTUU4LA1mGG1vT+jMc8sbhG3orvsfOmryjzx2PzQw==", "engines": { "node": ">=14" } @@ -5039,14 +5007,14 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.48.1.tgz", - "integrity": "sha512-9nY5K1Rp2ppmpb9s9S2aBiF3xo5uExCehMDmYmmFqqyxgenbHJ3qbarcLt4ITgaD6r/2ypdlcFRdcuVPnks+fQ==", + "version": "5.49.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.49.0.tgz", + "integrity": "sha512-IhxabIpcf++TBaBa1h7jtOWyon80SXPRLDq0dVz5SLFC/eW6tofkw/O7Ar3lkx5z5U6wzbKDrl2larprp5kk5Q==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.48.1", - "@typescript-eslint/type-utils": "5.48.1", - "@typescript-eslint/utils": "5.48.1", + "@typescript-eslint/scope-manager": "5.49.0", + "@typescript-eslint/type-utils": "5.49.0", + "@typescript-eslint/utils": "5.49.0", "debug": "^4.3.4", "ignore": "^5.2.0", "natural-compare-lite": "^1.4.0", @@ -5108,14 +5076,14 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.48.1.tgz", - "integrity": "sha512-4yg+FJR/V1M9Xoq56SF9Iygqm+r5LMXvheo6DQ7/yUWynQ4YfCRnsKuRgqH4EQ5Ya76rVwlEpw4Xu+TgWQUcdA==", + "version": "5.49.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.49.0.tgz", + "integrity": "sha512-veDlZN9mUhGqU31Qiv2qEp+XrJj5fgZpJ8PW30sHU+j/8/e5ruAhLaVDAeznS7A7i4ucb/s8IozpDtt9NqCkZg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.48.1", - "@typescript-eslint/types": "5.48.1", - "@typescript-eslint/typescript-estree": "5.48.1", + "@typescript-eslint/scope-manager": "5.49.0", + "@typescript-eslint/types": "5.49.0", + "@typescript-eslint/typescript-estree": "5.49.0", "debug": "^4.3.4" }, "engines": { @@ -5135,13 +5103,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.48.1.tgz", - "integrity": "sha512-S035ueRrbxRMKvSTv9vJKIWgr86BD8s3RqoRZmsSh/s8HhIs90g6UlK8ZabUSjUZQkhVxt7nmZ63VJ9dcZhtDQ==", + "version": "5.49.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.49.0.tgz", + "integrity": "sha512-clpROBOiMIzpbWNxCe1xDK14uPZh35u4QaZO1GddilEzoCLAEz4szb51rBpdgurs5k2YzPtJeTEN3qVbG+LRUQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.48.1", - "@typescript-eslint/visitor-keys": "5.48.1" + "@typescript-eslint/types": "5.49.0", + "@typescript-eslint/visitor-keys": "5.49.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -5152,13 +5120,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.48.1.tgz", - "integrity": "sha512-Hyr8HU8Alcuva1ppmqSYtM/Gp0q4JOp1F+/JH5D1IZm/bUBrV0edoewQZiEc1r6I8L4JL21broddxK8HAcZiqQ==", + "version": "5.49.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.49.0.tgz", + "integrity": "sha512-eUgLTYq0tR0FGU5g1YHm4rt5H/+V2IPVkP0cBmbhRyEmyGe4XvJ2YJ6sYTmONfjmdMqyMLad7SB8GvblbeESZA==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.48.1", - "@typescript-eslint/utils": "5.48.1", + "@typescript-eslint/typescript-estree": "5.49.0", + "@typescript-eslint/utils": "5.49.0", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -5179,9 +5147,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.48.1.tgz", - "integrity": "sha512-xHyDLU6MSuEEdIlzrrAerCGS3T7AA/L8Hggd0RCYBi0w3JMvGYxlLlXHeg50JI9Tfg5MrtsfuNxbS/3zF1/ATg==", + "version": "5.49.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.49.0.tgz", + "integrity": "sha512-7If46kusG+sSnEpu0yOz2xFv5nRz158nzEXnJFCGVEHWnuzolXKwrH5Bsf9zsNlOQkyZuk0BZKKoJQI+1JPBBg==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -5192,13 +5160,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.1.tgz", - "integrity": "sha512-Hut+Osk5FYr+sgFh8J/FHjqX6HFcDzTlWLrFqGoK5kVUN3VBHF/QzZmAsIXCQ8T/W9nQNBTqalxi1P3LSqWnRA==", + "version": "5.49.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.49.0.tgz", + "integrity": "sha512-PBdx+V7deZT/3GjNYPVQv1Nc0U46dAHbIuOG8AZ3on3vuEKiPDwFE/lG1snN2eUB9IhF7EyF7K1hmTcLztNIsA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.48.1", - "@typescript-eslint/visitor-keys": "5.48.1", + "@typescript-eslint/types": "5.49.0", + "@typescript-eslint/visitor-keys": "5.49.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -5246,16 +5214,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "5.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.48.1.tgz", - "integrity": "sha512-SmQuSrCGUOdmGMwivW14Z0Lj8dxG1mOFZ7soeJ0TQZEJcs3n5Ndgkg0A4bcMFzBELqLJ6GTHnEU+iIoaD6hFGA==", + "version": "5.49.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.49.0.tgz", + "integrity": "sha512-cPJue/4Si25FViIb74sHCLtM4nTSBXtLx1d3/QT6mirQ/c65bV8arBEebBJJizfq8W2YyMoPI/WWPFWitmNqnQ==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.48.1", - "@typescript-eslint/types": "5.48.1", - "@typescript-eslint/typescript-estree": "5.48.1", + "@typescript-eslint/scope-manager": "5.49.0", + "@typescript-eslint/types": "5.49.0", + "@typescript-eslint/typescript-estree": "5.49.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0", "semver": "^7.3.7" @@ -5317,12 +5285,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.1.tgz", - "integrity": "sha512-Ns0XBwmfuX7ZknznfXozgnydyR8F6ev/KEGePP4i74uL3ArsKbEhJ7raeKr1JSa997DBDwol/4a0Y+At82c9dA==", + "version": "5.49.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.49.0.tgz", + "integrity": "sha512-v9jBMjpNWyn8B6k/Mjt6VbUS4J1GvUlR4x3Y+ibnP1z7y7V4n0WRz+50DY6+Myj0UaXVSuUlHohO+eZ8IJEnkg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.48.1", + "@typescript-eslint/types": "5.49.0", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -8515,9 +8483,9 @@ } }, "node_modules/css-to-react-native": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.0.0.tgz", - "integrity": "sha512-Ro1yETZA813eoyUp2GDBhG2j+YggidUmzO1/v9eYBKR2EHVEniE2MI/NqpTQ954BMpTPZFsGNPm46qFB9dpaPQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.1.0.tgz", + "integrity": "sha512-AryfkFA29b4I3vG7N4kxFboq15DxwSXzhXM37XNEjwJMgjYIc8BcqfiprpAqX0zadI5PMByEIwAMzXxk5Vcc4g==", "dependencies": { "camelize": "^1.0.0", "css-color-keywords": "^1.0.0", @@ -9631,9 +9599,9 @@ } }, "node_modules/esbuild": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.2.tgz", - "integrity": "sha512-odaHSgtYafOXt2nSISwdWlfRkb4ceMX3akY1mWspQpT08jsqVYEK1XtVusr250Rmbx8AVNWjMPI/yyvKqxOKMw==", + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.5.tgz", + "integrity": "sha512-Bu6WLCc9NMsNoMJUjGl3yBzTjVLXdysMltxQWiLAypP+/vQrf+3L1Xe8fCXzxaECus2cEJ9M7pk4yKatEwQMqQ==", "hasInstallScript": true, "peer": true, "bin": { @@ -9643,44 +9611,44 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/android-arm": "0.17.2", - "@esbuild/android-arm64": "0.17.2", - "@esbuild/android-x64": "0.17.2", - "@esbuild/darwin-arm64": "0.17.2", - "@esbuild/darwin-x64": "0.17.2", - "@esbuild/freebsd-arm64": "0.17.2", - "@esbuild/freebsd-x64": "0.17.2", - "@esbuild/linux-arm": "0.17.2", - "@esbuild/linux-arm64": "0.17.2", - "@esbuild/linux-ia32": "0.17.2", - "@esbuild/linux-loong64": "0.17.2", - "@esbuild/linux-mips64el": "0.17.2", - "@esbuild/linux-ppc64": "0.17.2", - "@esbuild/linux-riscv64": "0.17.2", - "@esbuild/linux-s390x": "0.17.2", - "@esbuild/linux-x64": "0.17.2", - "@esbuild/netbsd-x64": "0.17.2", - "@esbuild/openbsd-x64": "0.17.2", - "@esbuild/sunos-x64": "0.17.2", - "@esbuild/win32-arm64": "0.17.2", - "@esbuild/win32-ia32": "0.17.2", - "@esbuild/win32-x64": "0.17.2" + "@esbuild/android-arm": "0.17.5", + "@esbuild/android-arm64": "0.17.5", + "@esbuild/android-x64": "0.17.5", + "@esbuild/darwin-arm64": "0.17.5", + "@esbuild/darwin-x64": "0.17.5", + "@esbuild/freebsd-arm64": "0.17.5", + "@esbuild/freebsd-x64": "0.17.5", + "@esbuild/linux-arm": "0.17.5", + "@esbuild/linux-arm64": "0.17.5", + "@esbuild/linux-ia32": "0.17.5", + "@esbuild/linux-loong64": "0.17.5", + "@esbuild/linux-mips64el": "0.17.5", + "@esbuild/linux-ppc64": "0.17.5", + "@esbuild/linux-riscv64": "0.17.5", + "@esbuild/linux-s390x": "0.17.5", + "@esbuild/linux-x64": "0.17.5", + "@esbuild/netbsd-x64": "0.17.5", + "@esbuild/openbsd-x64": "0.17.5", + "@esbuild/sunos-x64": "0.17.5", + "@esbuild/win32-arm64": "0.17.5", + "@esbuild/win32-ia32": "0.17.5", + "@esbuild/win32-x64": "0.17.5" } }, "node_modules/esbuild-css-modules-plugin": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/esbuild-css-modules-plugin/-/esbuild-css-modules-plugin-2.7.0.tgz", - "integrity": "sha512-WtPtkJ/78yrP8UAJ6WRe0sX5GuMVzAz7K9ELqGi6Car5AEfJMD9IM1GqOcwUGCWeTFvyfxlV+3JgPznPFfd0kQ==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/esbuild-css-modules-plugin/-/esbuild-css-modules-plugin-2.7.1.tgz", + "integrity": "sha512-lyz7oztJaqkSzXFTnMBW4nOqiXdw28DIpSZyOf73n9kxe3W5NV9VP/bJfg9ceX80B2xGhLYicb/n0oiGi0Mfnw==", "dependencies": { "fs-extra": "^10.1.0", - "lightningcss": "^1.17.1", + "lightningcss": "^1.18.0", "lodash": "^4.17.21", - "postcss": "^8.4.19", + "postcss": "^8.4.21", "postcss-modules": "^6.0.0", "tmp": "^0.2.1" }, "engines": { - "node": ">= 14" + "node": ">= 16" }, "peerDependencies": { "esbuild": "*" @@ -9718,6 +9686,38 @@ "node": ">= 10.0.0" } }, + "node_modules/esbuild/node_modules/@esbuild/darwin-arm64": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.5.tgz", + "integrity": "sha512-EAvaoyIySV6Iif3NQCglUNpnMfHSUgC5ugt2efl3+QDntucJe5spn0udNZjTgNi6tKVqSceOw9tQ32liNZc1Xw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild/node_modules/@esbuild/linux-x64": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.5.tgz", + "integrity": "sha512-vnxuhh9e4pbtABNLbT2ANW4uwQ/zvcHRCm1JxaYkzSehugoFd5iXyC4ci1nhXU13mxEwCnrnTIiiSGwa/uAF1g==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=12" + } + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -18956,9 +18956,9 @@ "dev": true }, "node_modules/postcss": { - "version": "8.4.19", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz", - "integrity": "sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==", + "version": "8.4.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", "funding": [ { "type": "opencollective", @@ -19525,11 +19525,11 @@ } }, "node_modules/react-router": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.6.2.tgz", - "integrity": "sha512-uJPG55Pek3orClbURDvfljhqFvMgJRo59Pktywkk8hUUkTY2aRfza8Yhl/vZQXs+TNQyr6tu+uqz/fLxPICOGQ==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.8.0.tgz", + "integrity": "sha512-760bk7y3QwabduExtudhWbd88IBbuD1YfwzpuDUAlJUJ7laIIcqhMvdhSVh1Fur1PE8cGl84L0dxhR3/gvHF7A==", "dependencies": { - "@remix-run/router": "1.2.1" + "@remix-run/router": "1.3.1" }, "engines": { "node": ">=14" @@ -19539,12 +19539,12 @@ } }, "node_modules/react-router-dom": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.6.2.tgz", - "integrity": "sha512-6SCDXxRQqW5af8ImOqKza7icmQ47/EMbz572uFjzvcArg3lZ+04PxSPp8qGs+p2Y+q+b+S/AjXv8m8dyLndIIA==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.8.0.tgz", + "integrity": "sha512-hQouduSTywGJndE86CXJ2h7YEy4HYC6C/uh19etM+79FfQ6cFFFHnHyDlzO4Pq0eBUI96E4qVE5yUjA00yJZGQ==", "dependencies": { - "@remix-run/router": "1.2.1", - "react-router": "6.6.2" + "@remix-run/router": "1.3.1", + "react-router": "6.8.0" }, "engines": { "node": ">=14" @@ -22127,9 +22127,9 @@ } }, "node_modules/ts-standard/node_modules/acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -22215,9 +22215,9 @@ } }, "node_modules/ts-standard/node_modules/eslint": { - "version": "8.31.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.31.0.tgz", - "integrity": "sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA==", + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.32.0.tgz", + "integrity": "sha512-nETVXpnthqKPFyuY2FNjz/bEd6nbosRgKbkgS/y1C7LJop96gYHWpiguLecMHQ2XCPxn77DS0P+68WzG6vkZSQ==", "dev": true, "dependencies": { "@eslint/eslintrc": "^1.4.1", @@ -22339,14 +22339,14 @@ } }, "node_modules/ts-standard/node_modules/eslint-plugin-import": { - "version": "2.27.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.4.tgz", - "integrity": "sha512-Z1jVt1EGKia1X9CnBCkpAOhWy8FgQ7OmJ/IblEkT82yrFU/xJaxwujaTzLWqigewwynRQ9mmHfX9MtAfhxm0sA==", + "version": "2.27.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", + "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", "dev": true, "dependencies": { "array-includes": "^3.1.6", "array.prototype.flat": "^1.3.1", - "array.prototype.flatmap": "^1.3.0", + "array.prototype.flatmap": "^1.3.1", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.7", @@ -22401,9 +22401,9 @@ } }, "node_modules/ts-standard/node_modules/eslint-plugin-react": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.0.tgz", - "integrity": "sha512-vSBi1+SrPiLZCGvxpiZIa28fMEUaMjXtCplrvxcIxGzmFiYdsXQDwInEjuv5/i/2CTTxbkS87tE8lsQ0Qxinbw==", + "version": "7.32.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.1.tgz", + "integrity": "sha512-vOjdgyd0ZHBXNsmvU+785xY8Bfe57EFbTYYk8XrROzWpr9QBvpjITvAXt9xqcE6+8cjR/g1+mfumPToxsl1www==", "dev": true, "dependencies": { "array-includes": "^3.1.6", @@ -26159,156 +26159,154 @@ "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" }, "@esbuild/android-arm": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.2.tgz", - "integrity": "sha512-Art7v3xYfqH1gEMUSP0Nx67pNAlC/Y3qSg3mOw8Wg7MP9bJLXL0DrmJaV1Qz1o4FwagtvDgkVOeBDpZgxdj13Q==", + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.5.tgz", + "integrity": "sha512-crmPUzgCmF+qZXfl1YkiFoUta2XAfixR1tEnr/gXIixE+WL8Z0BGqfydP5oox0EUOgQMMRgtATtakyAcClQVqQ==", "optional": true, "peer": true }, "@esbuild/android-arm64": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.2.tgz", - "integrity": "sha512-QSkmYISXr2uFoR+NdmmKyR5svYb0cXDCfzwNblLsrC8wTpx/I1L7u/zrjrf4aLoHoRTycZFIewJwBiUrO5DWtQ==", + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.5.tgz", + "integrity": "sha512-KHWkDqYAMmKZjY4RAN1PR96q6UOtfkWlTS8uEwWxdLtkRt/0F/csUhXIrVfaSIFxnscIBMPynGfhsMwQDRIBQw==", "optional": true, "peer": true }, "@esbuild/android-x64": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.2.tgz", - "integrity": "sha512-5VOaFBI0RK8jJVDHdeU1YJmpxXoOf1RPoiOBhk/Tvpulw7R1SwCsxHvC3eDQcoF0gV7YM4V2wJO0PR9tem6gCQ==", + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.5.tgz", + "integrity": "sha512-8fI/AnIdmWz/+1iza2WrCw8kwXK9wZp/yZY/iS8ioC+U37yJCeppi9EHY05ewJKN64ASoBIseufZROtcFnX5GA==", "optional": true, "peer": true }, "@esbuild/darwin-arm64": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.2.tgz", - "integrity": "sha512-iQJu1Zn1Wi91D5x/sslEn/jwae1tgSAEHK0R/kYzIr5jO992IJwDDuWhSGll23jHt18RECxahhGG0BWY/bVUTw==", - "optional": true, - "peer": true + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz", + "integrity": "sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==", + "optional": true }, "@esbuild/darwin-x64": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.2.tgz", - "integrity": "sha512-j750nyrwoRZd3VnPo5sd12/5U27TxFGmvmoDv93G2jiaGJPYKJ/+5IfRAvHahGePTUIRPyOlE5YLFw9MlzuBnw==", + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.5.tgz", + "integrity": "sha512-ha7QCJh1fuSwwCgoegfdaljowwWozwTDjBgjD3++WAy/qwee5uUi1gvOg2WENJC6EUyHBOkcd3YmLDYSZ2TPPA==", "optional": true, "peer": true }, "@esbuild/freebsd-arm64": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.2.tgz", - "integrity": "sha512-ti7GU+/KUQQXEPmSUep7efZpA3KR2SkKsVuSL2FE7Yxka9apuqKfymAgQmVPMxstzAgCRBIu8uEu0KFmTfs3/Q==", + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.5.tgz", + "integrity": "sha512-VbdXJkn2aI2pQ/wxNEjEcnEDwPpxt3CWWMFYmO7CcdFBoOsABRy2W8F3kjbF9F/pecEUDcI3b5i2w+By4VQFPg==", "optional": true, "peer": true }, "@esbuild/freebsd-x64": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.2.tgz", - "integrity": "sha512-NgooSKWSnrNKRuiumY1dg7KAGpsyXIMcwyOXN9imnqe8VFjqqrEOMqZRik0C1wlfLjiSCuMsj+YUSmBMAJMt0A==", + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.5.tgz", + "integrity": "sha512-olgGYND1/XnnWxwhjtY3/ryjOG/M4WfcA6XH8dBTH1cxMeBemMODXSFhkw71Kf4TeZFFTN25YOomaNh0vq2iXg==", "optional": true, "peer": true }, "@esbuild/linux-arm": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.2.tgz", - "integrity": "sha512-8dfrRTd39n+THdAetwQKNwK6zBPR5oPjMtgRNXvRq8gsn/J5o69zTaOWVi3QO09BljqdShxU2dxDA09lDhdIqQ==", + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.5.tgz", + "integrity": "sha512-YBdCyQwA3OQupi6W2/WO4FnI+NWFWe79cZEtlbqSESOHEg7a73htBIRiE6uHPQe7Yp5E4aALv+JxkRLGEUL7tw==", "optional": true, "peer": true }, "@esbuild/linux-arm64": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.2.tgz", - "integrity": "sha512-jcJ4cxwQyqEqgDwkqj7820nKx9cM5WBPCCU4oUXvTeG+DkkJE6/P75od0VPHmItFfEJu+/2vV85ebvFVomZcBg==", + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.5.tgz", + "integrity": "sha512-8a0bqSwu3OlLCfu2FBbDNgQyBYdPJh1B9PvNX7jMaKGC9/KopgHs37t+pQqeMLzcyRqG6z55IGNQAMSlCpBuqg==", "optional": true, "peer": true }, "@esbuild/linux-ia32": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.2.tgz", - "integrity": "sha512-dXZ3m++zaRVD2fqOUPP8QTh1Lfg6WO6uZDo/QJ3KdfnIR7dDToDtaA12AgKYvCed9Nuzf/gpKs/7/f6I02b/sg==", + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.5.tgz", + "integrity": "sha512-uCwm1r/+NdP7vndctgq3PoZrnmhmnecWAr114GWMRwg2QMFFX+kIWnp7IO220/JLgnXK/jP7VKAFBGmeOYBQYQ==", "optional": true, "peer": true }, "@esbuild/linux-loong64": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.2.tgz", - "integrity": "sha512-/vntXkzSe9TUp0Rh35Wgye1EOhDtmIMjwC4rtahHcALmDXL+iuQGvwGFvXrP+sBigia/ltLryMAvCiqGV6plqw==", + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.5.tgz", + "integrity": "sha512-3YxhSBl5Sb6TtBjJu+HP93poBruFzgXmf3PVfIe4xOXMj1XpxboYZyw3W8BhoX/uwxzZz4K1I99jTE/5cgDT1g==", "optional": true, "peer": true }, "@esbuild/linux-mips64el": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.2.tgz", - "integrity": "sha512-guYcNHjMRO1BMxWAeb8LDfgQaU8oeUO65xtlclwBD+hX3163KBifEHyao1hK96J10BP9n0UmZug6GhtGZaNm2Q==", + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.5.tgz", + "integrity": "sha512-Hy5Z0YVWyYHdtQ5mfmfp8LdhVwGbwVuq8mHzLqrG16BaMgEmit2xKO+iDakHs+OetEx0EN/2mUzDdfdktI+Nmg==", "optional": true, "peer": true }, "@esbuild/linux-ppc64": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.2.tgz", - "integrity": "sha512-fzHTnIGIVqgUGZcFnnisguKD4UneF4uwWwkG+i8kBspMDdU1wJ0jha1VdtxWP7Ob1KGxuXcoUlrQkCVO+Z5iOw==", + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.5.tgz", + "integrity": "sha512-5dbQvBLbU/Y3Q4ABc9gi23hww1mQcM7KZ9KBqabB7qhJswYMf8WrDDOSw3gdf3p+ffmijMd28mfVMvFucuECyg==", "optional": true, "peer": true }, "@esbuild/linux-riscv64": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.2.tgz", - "integrity": "sha512-Sa+z7csvNVeAsTD83tVSggOb8CAU7EdDuihC8WhtoJfuDVkF5+Vi0imaiCjXQ7Ci5rz/a8IJ1H1MWX3eI9AmuQ==", + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.5.tgz", + "integrity": "sha512-fp/KUB/ZPzEWGTEUgz9wIAKCqu7CjH1GqXUO2WJdik1UNBQ7Xzw7myIajpxztE4Csb9504ERiFMxZg5KZ6HlZQ==", "optional": true, "peer": true }, "@esbuild/linux-s390x": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.2.tgz", - "integrity": "sha512-jUFCO+/VA1Y/oeauSNBubp2UtGu4xjBUEFVgMPm0qLuw6xw18yOagKwBOPVmyE3ZSFqGd9BAPZM/JrtadgBryA==", + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.5.tgz", + "integrity": "sha512-kRV3yw19YDqHTp8SfHXfObUFXlaiiw4o2lvT1XjsPZ++22GqZwSsYWJLjMi1Sl7j9qDlDUduWDze/nQx0d6Lzw==", "optional": true, "peer": true }, "@esbuild/linux-x64": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.2.tgz", - "integrity": "sha512-naygxkSmr6x9tuvpa8iGefnXo3Rc3Noz7c4+Dn0MSfSWJwLaN2YR686e7HkI09irfjDdU5UAq9wcxUwjkYQNUA==", - "optional": true, - "peer": true + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz", + "integrity": "sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==", + "optional": true }, "@esbuild/netbsd-x64": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.2.tgz", - "integrity": "sha512-Hagbdq4EpiG9XXJY6Ozfrl2RN5jkXZXd6BD39f43tWz0d8yyOrRZlofM1eA6JYQbdv6c8BUsUOcgopavIqwx4Q==", + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.5.tgz", + "integrity": "sha512-cigBpdiSx/vPy7doUyImsQQBnBjV5f1M99ZUlaJckDAJjgXWl6y9W17FIfJTy8TxosEF6MXq+fpLsitMGts2nA==", "optional": true, "peer": true }, "@esbuild/openbsd-x64": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.2.tgz", - "integrity": "sha512-Pkby+VEXY7+aWP8J2RUCfqWbbZz2M1GavRGGnE2kEPzwarba/BOk3B45PSaKwc3iKdK2rgCPCTjC/p9JoKNejA==", + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.5.tgz", + "integrity": "sha512-VdqRqPVIjjZfkf40LrqOaVuhw9EQiAZ/GNCSM2UplDkaIzYVsSnycxcFfAnHdWI8Gyt6dO15KHikbpxwx+xHbw==", "optional": true, "peer": true }, "@esbuild/sunos-x64": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.2.tgz", - "integrity": "sha512-WAyg4dBTUsAPJ9cRnuQ23cwJWYRhP4e4y0M/l2+EpRjWW+g1MNAXKQQNNhRQ71zc8UixRVrqj+43ReHeZC8mJQ==", + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.5.tgz", + "integrity": "sha512-ItxPaJ3MBLtI4nK+mALLEoUs6amxsx+J1ibnfcYMkqaCqHST1AkF4aENpBehty3czqw64r/XqL+W9WqU6kc2Qw==", "optional": true, "peer": true }, "@esbuild/win32-arm64": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.2.tgz", - "integrity": "sha512-rMbO3gPpxuENd+AnZLgo4J/g+BkwxT3NK7nYpSZ0KlYtSdlxYMIMG5pznX7a1ISZKo67aGStne+K41jdkBywpA==", + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.5.tgz", + "integrity": "sha512-4u2Q6qsJTYNFdS9zHoAi80spzf78C16m2wla4eJPh4kSbRv+BpXIfl6TmBSWupD8e47B1NrTfrOlEuco7mYQtg==", "optional": true, "peer": true }, "@esbuild/win32-ia32": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.2.tgz", - "integrity": "sha512-73dWKDMhFk+4owS19OjEVbEDGFPRS1fyga3qOu5HPd5eTxJTjtlVTT/fG/S7AchA0vXS7hOqY70AAir1CkmICg==", + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.5.tgz", + "integrity": "sha512-KYlm+Xu9TXsfTWAcocLuISRtqxKp/Y9ZBVg6CEEj0O5J9mn7YvBKzAszo2j1ndyzUPk+op+Tie2PJeN+BnXGqQ==", "optional": true, "peer": true }, "@esbuild/win32-x64": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.2.tgz", - "integrity": "sha512-QFJlhf73HCBjTqAWWSIlD8JQBtmue0Dd6UV+KGccycJ3HKj1dCkXdRKJGwc5bZWiI9hrxcWsVEa1kVFaltC4vQ==", + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.5.tgz", + "integrity": "sha512-XgA9qWRqby7xdYXuF6KALsn37QGBMHsdhmnpjfZtYxKxbTOwfnDM6MYi2WuUku5poNaX2n9XGVr20zgT/2QwCw==", "optional": true, "peer": true }, @@ -26446,20 +26444,6 @@ "react-refresh": "^0.14.0", "react-router-dom": "^6.6.2", "styled-components": "^5.3.6" - }, - "dependencies": { - "@esbuild/darwin-arm64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz", - "integrity": "sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==", - "optional": true - }, - "@esbuild/linux-x64": { - "version": "0.16.17", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz", - "integrity": "sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==", - "optional": true - } } }, "@ipld/car": { @@ -28172,9 +28156,9 @@ "dev": true }, "@remix-run/router": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.2.1.tgz", - "integrity": "sha512-XiY0IsyHR+DXYS5vBxpoBe/8veTeoRpMHP+vDosLZxL5bnpetzI0igkxkLZS235ldLzyfkxF+2divEwWHP3vMQ==" + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.3.1.tgz", + "integrity": "sha512-+eun1Wtf72RNRSqgU7qM2AMX/oHp+dnx7BHk1qhK5ZHzdHTUU4LA1mGG1vT+jMc8sbhG3orvsfOmryjzx2PzQw==" }, "@samverschueren/stream-to-observable": { "version": "0.3.1", @@ -28527,14 +28511,14 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "5.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.48.1.tgz", - "integrity": "sha512-9nY5K1Rp2ppmpb9s9S2aBiF3xo5uExCehMDmYmmFqqyxgenbHJ3qbarcLt4ITgaD6r/2ypdlcFRdcuVPnks+fQ==", + "version": "5.49.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.49.0.tgz", + "integrity": "sha512-IhxabIpcf++TBaBa1h7jtOWyon80SXPRLDq0dVz5SLFC/eW6tofkw/O7Ar3lkx5z5U6wzbKDrl2larprp5kk5Q==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.48.1", - "@typescript-eslint/type-utils": "5.48.1", - "@typescript-eslint/utils": "5.48.1", + "@typescript-eslint/scope-manager": "5.49.0", + "@typescript-eslint/type-utils": "5.49.0", + "@typescript-eslint/utils": "5.49.0", "debug": "^4.3.4", "ignore": "^5.2.0", "natural-compare-lite": "^1.4.0", @@ -28570,53 +28554,53 @@ } }, "@typescript-eslint/parser": { - "version": "5.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.48.1.tgz", - "integrity": "sha512-4yg+FJR/V1M9Xoq56SF9Iygqm+r5LMXvheo6DQ7/yUWynQ4YfCRnsKuRgqH4EQ5Ya76rVwlEpw4Xu+TgWQUcdA==", + "version": "5.49.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.49.0.tgz", + "integrity": "sha512-veDlZN9mUhGqU31Qiv2qEp+XrJj5fgZpJ8PW30sHU+j/8/e5ruAhLaVDAeznS7A7i4ucb/s8IozpDtt9NqCkZg==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.48.1", - "@typescript-eslint/types": "5.48.1", - "@typescript-eslint/typescript-estree": "5.48.1", + "@typescript-eslint/scope-manager": "5.49.0", + "@typescript-eslint/types": "5.49.0", + "@typescript-eslint/typescript-estree": "5.49.0", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "5.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.48.1.tgz", - "integrity": "sha512-S035ueRrbxRMKvSTv9vJKIWgr86BD8s3RqoRZmsSh/s8HhIs90g6UlK8ZabUSjUZQkhVxt7nmZ63VJ9dcZhtDQ==", + "version": "5.49.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.49.0.tgz", + "integrity": "sha512-clpROBOiMIzpbWNxCe1xDK14uPZh35u4QaZO1GddilEzoCLAEz4szb51rBpdgurs5k2YzPtJeTEN3qVbG+LRUQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.48.1", - "@typescript-eslint/visitor-keys": "5.48.1" + "@typescript-eslint/types": "5.49.0", + "@typescript-eslint/visitor-keys": "5.49.0" } }, "@typescript-eslint/type-utils": { - "version": "5.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.48.1.tgz", - "integrity": "sha512-Hyr8HU8Alcuva1ppmqSYtM/Gp0q4JOp1F+/JH5D1IZm/bUBrV0edoewQZiEc1r6I8L4JL21broddxK8HAcZiqQ==", + "version": "5.49.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.49.0.tgz", + "integrity": "sha512-eUgLTYq0tR0FGU5g1YHm4rt5H/+V2IPVkP0cBmbhRyEmyGe4XvJ2YJ6sYTmONfjmdMqyMLad7SB8GvblbeESZA==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "5.48.1", - "@typescript-eslint/utils": "5.48.1", + "@typescript-eslint/typescript-estree": "5.49.0", + "@typescript-eslint/utils": "5.49.0", "debug": "^4.3.4", "tsutils": "^3.21.0" } }, "@typescript-eslint/types": { - "version": "5.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.48.1.tgz", - "integrity": "sha512-xHyDLU6MSuEEdIlzrrAerCGS3T7AA/L8Hggd0RCYBi0w3JMvGYxlLlXHeg50JI9Tfg5MrtsfuNxbS/3zF1/ATg==", + "version": "5.49.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.49.0.tgz", + "integrity": "sha512-7If46kusG+sSnEpu0yOz2xFv5nRz158nzEXnJFCGVEHWnuzolXKwrH5Bsf9zsNlOQkyZuk0BZKKoJQI+1JPBBg==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.1.tgz", - "integrity": "sha512-Hut+Osk5FYr+sgFh8J/FHjqX6HFcDzTlWLrFqGoK5kVUN3VBHF/QzZmAsIXCQ8T/W9nQNBTqalxi1P3LSqWnRA==", + "version": "5.49.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.49.0.tgz", + "integrity": "sha512-PBdx+V7deZT/3GjNYPVQv1Nc0U46dAHbIuOG8AZ3on3vuEKiPDwFE/lG1snN2eUB9IhF7EyF7K1hmTcLztNIsA==", "dev": true, "requires": { - "@typescript-eslint/types": "5.48.1", - "@typescript-eslint/visitor-keys": "5.48.1", + "@typescript-eslint/types": "5.49.0", + "@typescript-eslint/visitor-keys": "5.49.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -28645,16 +28629,16 @@ } }, "@typescript-eslint/utils": { - "version": "5.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.48.1.tgz", - "integrity": "sha512-SmQuSrCGUOdmGMwivW14Z0Lj8dxG1mOFZ7soeJ0TQZEJcs3n5Ndgkg0A4bcMFzBELqLJ6GTHnEU+iIoaD6hFGA==", + "version": "5.49.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.49.0.tgz", + "integrity": "sha512-cPJue/4Si25FViIb74sHCLtM4nTSBXtLx1d3/QT6mirQ/c65bV8arBEebBJJizfq8W2YyMoPI/WWPFWitmNqnQ==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.48.1", - "@typescript-eslint/types": "5.48.1", - "@typescript-eslint/typescript-estree": "5.48.1", + "@typescript-eslint/scope-manager": "5.49.0", + "@typescript-eslint/types": "5.49.0", + "@typescript-eslint/typescript-estree": "5.49.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0", "semver": "^7.3.7" @@ -28690,12 +28674,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "5.48.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.1.tgz", - "integrity": "sha512-Ns0XBwmfuX7ZknznfXozgnydyR8F6ev/KEGePP4i74uL3ArsKbEhJ7raeKr1JSa997DBDwol/4a0Y+At82c9dA==", + "version": "5.49.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.49.0.tgz", + "integrity": "sha512-v9jBMjpNWyn8B6k/Mjt6VbUS4J1GvUlR4x3Y+ibnP1z7y7V4n0WRz+50DY6+Myj0UaXVSuUlHohO+eZ8IJEnkg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.48.1", + "@typescript-eslint/types": "5.49.0", "eslint-visitor-keys": "^3.3.0" }, "dependencies": { @@ -31072,9 +31056,9 @@ } }, "css-to-react-native": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.0.0.tgz", - "integrity": "sha512-Ro1yETZA813eoyUp2GDBhG2j+YggidUmzO1/v9eYBKR2EHVEniE2MI/NqpTQ954BMpTPZFsGNPm46qFB9dpaPQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.1.0.tgz", + "integrity": "sha512-AryfkFA29b4I3vG7N4kxFboq15DxwSXzhXM37XNEjwJMgjYIc8BcqfiprpAqX0zadI5PMByEIwAMzXxk5Vcc4g==", "requires": { "camelize": "^1.0.0", "css-color-keywords": "^1.0.0", @@ -31947,44 +31931,60 @@ "dev": true }, "esbuild": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.2.tgz", - "integrity": "sha512-odaHSgtYafOXt2nSISwdWlfRkb4ceMX3akY1mWspQpT08jsqVYEK1XtVusr250Rmbx8AVNWjMPI/yyvKqxOKMw==", + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.5.tgz", + "integrity": "sha512-Bu6WLCc9NMsNoMJUjGl3yBzTjVLXdysMltxQWiLAypP+/vQrf+3L1Xe8fCXzxaECus2cEJ9M7pk4yKatEwQMqQ==", "peer": true, "requires": { - "@esbuild/android-arm": "0.17.2", - "@esbuild/android-arm64": "0.17.2", - "@esbuild/android-x64": "0.17.2", - "@esbuild/darwin-arm64": "0.17.2", - "@esbuild/darwin-x64": "0.17.2", - "@esbuild/freebsd-arm64": "0.17.2", - "@esbuild/freebsd-x64": "0.17.2", - "@esbuild/linux-arm": "0.17.2", - "@esbuild/linux-arm64": "0.17.2", - "@esbuild/linux-ia32": "0.17.2", - "@esbuild/linux-loong64": "0.17.2", - "@esbuild/linux-mips64el": "0.17.2", - "@esbuild/linux-ppc64": "0.17.2", - "@esbuild/linux-riscv64": "0.17.2", - "@esbuild/linux-s390x": "0.17.2", - "@esbuild/linux-x64": "0.17.2", - "@esbuild/netbsd-x64": "0.17.2", - "@esbuild/openbsd-x64": "0.17.2", - "@esbuild/sunos-x64": "0.17.2", - "@esbuild/win32-arm64": "0.17.2", - "@esbuild/win32-ia32": "0.17.2", - "@esbuild/win32-x64": "0.17.2" + "@esbuild/android-arm": "0.17.5", + "@esbuild/android-arm64": "0.17.5", + "@esbuild/android-x64": "0.17.5", + "@esbuild/darwin-arm64": "0.17.5", + "@esbuild/darwin-x64": "0.17.5", + "@esbuild/freebsd-arm64": "0.17.5", + "@esbuild/freebsd-x64": "0.17.5", + "@esbuild/linux-arm": "0.17.5", + "@esbuild/linux-arm64": "0.17.5", + "@esbuild/linux-ia32": "0.17.5", + "@esbuild/linux-loong64": "0.17.5", + "@esbuild/linux-mips64el": "0.17.5", + "@esbuild/linux-ppc64": "0.17.5", + "@esbuild/linux-riscv64": "0.17.5", + "@esbuild/linux-s390x": "0.17.5", + "@esbuild/linux-x64": "0.17.5", + "@esbuild/netbsd-x64": "0.17.5", + "@esbuild/openbsd-x64": "0.17.5", + "@esbuild/sunos-x64": "0.17.5", + "@esbuild/win32-arm64": "0.17.5", + "@esbuild/win32-ia32": "0.17.5", + "@esbuild/win32-x64": "0.17.5" + }, + "dependencies": { + "@esbuild/darwin-arm64": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.5.tgz", + "integrity": "sha512-EAvaoyIySV6Iif3NQCglUNpnMfHSUgC5ugt2efl3+QDntucJe5spn0udNZjTgNi6tKVqSceOw9tQ32liNZc1Xw==", + "optional": true, + "peer": true + }, + "@esbuild/linux-x64": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.5.tgz", + "integrity": "sha512-vnxuhh9e4pbtABNLbT2ANW4uwQ/zvcHRCm1JxaYkzSehugoFd5iXyC4ci1nhXU13mxEwCnrnTIiiSGwa/uAF1g==", + "optional": true, + "peer": true + } } }, "esbuild-css-modules-plugin": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/esbuild-css-modules-plugin/-/esbuild-css-modules-plugin-2.7.0.tgz", - "integrity": "sha512-WtPtkJ/78yrP8UAJ6WRe0sX5GuMVzAz7K9ELqGi6Car5AEfJMD9IM1GqOcwUGCWeTFvyfxlV+3JgPznPFfd0kQ==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/esbuild-css-modules-plugin/-/esbuild-css-modules-plugin-2.7.1.tgz", + "integrity": "sha512-lyz7oztJaqkSzXFTnMBW4nOqiXdw28DIpSZyOf73n9kxe3W5NV9VP/bJfg9ceX80B2xGhLYicb/n0oiGi0Mfnw==", "requires": { "fs-extra": "^10.1.0", - "lightningcss": "^1.17.1", + "lightningcss": "^1.18.0", "lodash": "^4.17.21", - "postcss": "^8.4.19", + "postcss": "^8.4.21", "postcss-modules": "^6.0.0", "tmp": "^0.2.1" }, @@ -38911,9 +38911,9 @@ "dev": true }, "postcss": { - "version": "8.4.19", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz", - "integrity": "sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==", + "version": "8.4.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", "requires": { "nanoid": "^3.3.4", "picocolors": "^1.0.0", @@ -39338,20 +39338,20 @@ "optional": true }, "react-router": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.6.2.tgz", - "integrity": "sha512-uJPG55Pek3orClbURDvfljhqFvMgJRo59Pktywkk8hUUkTY2aRfza8Yhl/vZQXs+TNQyr6tu+uqz/fLxPICOGQ==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.8.0.tgz", + "integrity": "sha512-760bk7y3QwabduExtudhWbd88IBbuD1YfwzpuDUAlJUJ7laIIcqhMvdhSVh1Fur1PE8cGl84L0dxhR3/gvHF7A==", "requires": { - "@remix-run/router": "1.2.1" + "@remix-run/router": "1.3.1" } }, "react-router-dom": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.6.2.tgz", - "integrity": "sha512-6SCDXxRQqW5af8ImOqKza7icmQ47/EMbz572uFjzvcArg3lZ+04PxSPp8qGs+p2Y+q+b+S/AjXv8m8dyLndIIA==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.8.0.tgz", + "integrity": "sha512-hQouduSTywGJndE86CXJ2h7YEy4HYC6C/uh19etM+79FfQ6cFFFHnHyDlzO4Pq0eBUI96E4qVE5yUjA00yJZGQ==", "requires": { - "@remix-run/router": "1.2.1", - "react-router": "6.6.2" + "@remix-run/router": "1.3.1", + "react-router": "6.8.0" } }, "read-pkg": { @@ -41322,9 +41322,9 @@ } }, "acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", "dev": true }, "ansi-regex": { @@ -41380,9 +41380,9 @@ "dev": true }, "eslint": { - "version": "8.31.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.31.0.tgz", - "integrity": "sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA==", + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.32.0.tgz", + "integrity": "sha512-nETVXpnthqKPFyuY2FNjz/bEd6nbosRgKbkgS/y1C7LJop96gYHWpiguLecMHQ2XCPxn77DS0P+68WzG6vkZSQ==", "dev": true, "requires": { "@eslint/eslintrc": "^1.4.1", @@ -41459,14 +41459,14 @@ } }, "eslint-plugin-import": { - "version": "2.27.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.4.tgz", - "integrity": "sha512-Z1jVt1EGKia1X9CnBCkpAOhWy8FgQ7OmJ/IblEkT82yrFU/xJaxwujaTzLWqigewwynRQ9mmHfX9MtAfhxm0sA==", + "version": "2.27.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", + "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", "dev": true, "requires": { "array-includes": "^3.1.6", "array.prototype.flat": "^1.3.1", - "array.prototype.flatmap": "^1.3.0", + "array.prototype.flatmap": "^1.3.1", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.7", @@ -41509,9 +41509,9 @@ "requires": {} }, "eslint-plugin-react": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.0.tgz", - "integrity": "sha512-vSBi1+SrPiLZCGvxpiZIa28fMEUaMjXtCplrvxcIxGzmFiYdsXQDwInEjuv5/i/2CTTxbkS87tE8lsQ0Qxinbw==", + "version": "7.32.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.1.tgz", + "integrity": "sha512-vOjdgyd0ZHBXNsmvU+785xY8Bfe57EFbTYYk8XrROzWpr9QBvpjITvAXt9xqcE6+8cjR/g1+mfumPToxsl1www==", "dev": true, "requires": { "array-includes": "^3.1.6", diff --git a/webpack.config.js b/webpack.config.js index c49ee490a..85a19ba3f 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -81,7 +81,6 @@ const commonConfig = { ] }, resolve: { - conditionNames: ['browser', 'import'], mainFields: ['browser', 'main'], extensions: ['.js', '.json'], alias: {