Page MenuHomePhabricator

No OneTemporary

This file is larger than 256 KB, so syntax highlighting was skipped.
diff --git a/cashtab/extension/public/manifest.json b/cashtab/extension/public/manifest.json
index 2ede222de..d58242e51 100644
--- a/cashtab/extension/public/manifest.json
+++ b/cashtab/extension/public/manifest.json
@@ -1,38 +1,38 @@
{
"manifest_version": 3,
"name": "Cashtab",
"description": "A browser-integrated eCash wallet from Bitcoin ABC",
- "version": "4.23.0",
+ "version": "4.24.0",
"content_scripts": [
{
"matches": ["file://*/*", "http://*/*", "https://*/*"],
"js": ["contentscript.js"],
"run_at": "document_idle",
"all_frames": true
}
],
"background": {
"service_worker": "service_worker.js"
},
"action": {
"default_popup": "index.html",
"default_title": "Cashtab"
},
"icons": {
"16": "ecash16.png",
"48": "ecash48.png",
"128": "ecash128.png",
"192": "ecash192.png",
"512": "ecash512.png"
},
"permissions": ["storage", "tabs"],
"content_security_policy": {
"extension_pages": "script-src 'self' 'wasm-unsafe-eval'; object-src 'self';"
},
"web_accessible_resources": [
{
"resources": ["script.js"],
"matches": ["<all_urls>"]
}
]
}
diff --git a/cashtab/package-lock.json b/cashtab/package-lock.json
index 57be154ff..da127d687 100644
--- a/cashtab/package-lock.json
+++ b/cashtab/package-lock.json
@@ -1,32259 +1,32259 @@
{
"name": "cashtab",
- "version": "3.23.0",
+ "version": "3.24.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "cashtab",
- "version": "3.23.0",
+ "version": "3.24.0",
"dependencies": {
"@zxing/browser": "^0.1.4",
"bignumber.js": "^9.1.2",
"bip39": "^3.0.2",
"bip66": "^1.1.5",
"chronik-client": "file:../modules/chronik-client",
"ecash-agora": "file:../modules/ecash-agora",
"ecash-lib": "file:../modules/ecash-lib",
"ecash-script": "file:../modules/ecash-script",
"ecashaddrjs": "file:../modules/ecashaddrjs",
"js-sha256": "^0.11.0",
"localforage": "^1.9.0",
"qrcode.react": "^3.1.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-easy-crop": "^5.0.6",
"react-ga": "^3.3.0",
"react-router-dom": "^6.22.0",
"react-toastify": "^11.0.2",
"react-tooltip": "^5.28.0",
"recaptcha-v3": "^1.11.3",
"swiper": "^11.1.14",
"wif": "^4.0.0"
},
"devDependencies": {
"@babel/core": "^7.16.0",
"@babel/plugin-proposal-private-property-in-object": "^7.21.11",
"@babel/preset-typescript": "^7.26.0",
"@pmmmwh/react-refresh-webpack-plugin": "^0.5.3",
"@svgr/webpack": "^6.3.1",
"@testing-library/jest-dom": "^6.4.2",
"@testing-library/react": "^16.0.1",
"@testing-library/user-event": "^14.5.2",
"@types/jest": "^29.5.14",
"@types/jest-when": "^3.5.5",
"@types/lodash.debounce": "^4.0.9",
"@types/randombytes": "^2.0.3",
"@types/react": "^18.3.12",
"@types/react-dom": "^18.3.1",
"@types/styled-components": "^5.1.34",
"@types/webpack-env": "^1.18.5",
"@types/wif": "^2.0.5",
"assert": "^2.0.0",
"babel-jest": "^29.7.0",
"babel-loader": "^8.2.3",
"babel-plugin-named-asset-import": "^0.3.8",
"babel-preset-react-app": "^10.0.1",
"bfj": "^7.0.2",
"browserslist": "^4.18.1",
"buffer": "^6.0.3",
"camelcase": "^6.2.1",
"case-sensitive-paths-webpack-plugin": "^2.4.0",
"crypto-browserify": "^3.12.1",
"css-loader": "^6.5.1",
"css-minimizer-webpack-plugin": "^3.2.0",
"dotenv": "^10.0.0",
"dotenv-expand": "^5.1.0",
"extensionizer": "^1.0.1",
"fake-indexeddb": "^5.0.2",
"file-loader": "^6.2.0",
"fs-extra": "^10.0.0",
"html-webpack-plugin": "^5.5.0",
"identity-obj-proxy": "^3.0.0",
"jest": "^29.7.0",
"jest-canvas-mock": "^2.5.2",
"jest-environment-jsdom": "^29.7.0",
"jest-junit": "^16.0.0",
"jest-watch-typeahead": "^2.2.2",
"jest-when": "^3.6.0",
"mini-css-extract-plugin": "^2.4.5",
"node-polyfill-webpack-plugin": "^4.0.0",
"postcss": "^8.4.4",
"postcss-flexbugs-fixes": "^5.0.2",
"postcss-loader": "^6.2.1",
"postcss-normalize": "^10.0.1",
"postcss-preset-env": "^7.0.1",
"prop-types": "^15.8.1",
"react-app-polyfill": "^3.0.0",
"react-dev-utils": "^12.0.0",
"react-refresh": "^0.11.0",
"resolve": "^1.20.0",
"resolve-url-loader": "^5.0.0",
"sass-loader": "^12.3.0",
"semver": "^7.3.5",
"source-map-loader": "^3.0.0",
"stream-browserify": "^3.0.0",
"style-loader": "^3.3.1",
"styled-components": "^4.4.0",
"tailwindcss": "^3.0.2",
"terser-webpack-plugin": "^5.2.5",
"util": "^0.12.5",
"web-vitals": "^2.1.4",
"webpack": "^5.90.1",
"webpack-dev-server": "^4.6.0",
"webpack-manifest-plugin": "^4.0.2",
"workbox-webpack-plugin": "^6.4.1"
}
},
"../modules/chronik-client": {
"version": "3.1.1",
"license": "MIT",
"dependencies": {
"@types/ws": "^8.2.1",
"axios": "^1.6.3",
"ecashaddrjs": "file:../ecashaddrjs",
"isomorphic-ws": "^4.0.1",
"protobufjs": "^6.8.8",
"ws": "^8.3.0"
},
"devDependencies": {
"@types/chai": "^4.2.22",
"@types/chai-as-promised": "^7.1.4",
"@types/mocha": "^9.0.0",
"@types/rewire": "^2.5.30",
"chai": "^4.3.4",
"chai-as-promised": "^7.1.1",
"mocha": "^9.1.3",
"mocha-junit-reporter": "^2.2.0",
"mocha-suppress-logs": "^0.3.1",
"prettier": "^2.5.1",
"prettier-plugin-organize-imports": "^2.3.4",
"rewire": "^7.0.0",
"ts-node": "^10.4.0",
"ts-proto": "^1.92.1",
"typedoc": "^0.22.10",
"typescript": "^4.5.2"
}
},
"../modules/chronik-client/node_modules/@cspotcode/source-map-support": {
"version": "0.8.1",
"dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/trace-mapping": "0.3.9"
},
"engines": {
"node": ">=12"
}
},
"../modules/chronik-client/node_modules/@jridgewell/resolve-uri": {
"version": "3.1.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.0.0"
}
},
"../modules/chronik-client/node_modules/@jridgewell/sourcemap-codec": {
"version": "1.4.15",
"dev": true,
"license": "MIT"
},
"../modules/chronik-client/node_modules/@jridgewell/trace-mapping": {
"version": "0.3.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/resolve-uri": "^3.0.3",
"@jridgewell/sourcemap-codec": "^1.4.10"
}
},
"../modules/chronik-client/node_modules/@protobufjs/aspromise": {
"version": "1.1.2",
"license": "BSD-3-Clause"
},
"../modules/chronik-client/node_modules/@protobufjs/base64": {
"version": "1.1.2",
"license": "BSD-3-Clause"
},
"../modules/chronik-client/node_modules/@protobufjs/codegen": {
"version": "2.0.4",
"license": "BSD-3-Clause"
},
"../modules/chronik-client/node_modules/@protobufjs/eventemitter": {
"version": "1.1.0",
"license": "BSD-3-Clause"
},
"../modules/chronik-client/node_modules/@protobufjs/fetch": {
"version": "1.1.0",
"license": "BSD-3-Clause",
"dependencies": {
"@protobufjs/aspromise": "^1.1.1",
"@protobufjs/inquire": "^1.1.0"
}
},
"../modules/chronik-client/node_modules/@protobufjs/float": {
"version": "1.0.2",
"license": "BSD-3-Clause"
},
"../modules/chronik-client/node_modules/@protobufjs/inquire": {
"version": "1.1.0",
"license": "BSD-3-Clause"
},
"../modules/chronik-client/node_modules/@protobufjs/path": {
"version": "1.1.2",
"license": "BSD-3-Clause"
},
"../modules/chronik-client/node_modules/@protobufjs/pool": {
"version": "1.1.0",
"license": "BSD-3-Clause"
},
"../modules/chronik-client/node_modules/@protobufjs/utf8": {
"version": "1.1.0",
"license": "BSD-3-Clause"
},
"../modules/chronik-client/node_modules/@tsconfig/node10": {
"version": "1.0.9",
"dev": true,
"license": "MIT"
},
"../modules/chronik-client/node_modules/@tsconfig/node12": {
"version": "1.0.11",
"dev": true,
"license": "MIT"
},
"../modules/chronik-client/node_modules/@tsconfig/node14": {
"version": "1.0.3",
"dev": true,
"license": "MIT"
},
"../modules/chronik-client/node_modules/@tsconfig/node16": {
"version": "1.0.4",
"dev": true,
"license": "MIT"
},
"../modules/chronik-client/node_modules/@types/chai": {
"version": "4.3.11",
"dev": true,
"license": "MIT"
},
"../modules/chronik-client/node_modules/@types/chai-as-promised": {
"version": "7.1.8",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/chai": "*"
}
},
"../modules/chronik-client/node_modules/@types/long": {
"version": "4.0.2",
"license": "MIT"
},
"../modules/chronik-client/node_modules/@types/mocha": {
"version": "9.1.1",
"dev": true,
"license": "MIT"
},
"../modules/chronik-client/node_modules/@types/node": {
"version": "20.11.16",
"license": "MIT",
"dependencies": {
"undici-types": "~5.26.4"
}
},
"../modules/chronik-client/node_modules/@types/ws": {
"version": "8.5.10",
"license": "MIT",
"dependencies": {
"@types/node": "*"
}
},
"../modules/chronik-client/node_modules/@ungap/promise-all-settled": {
"version": "1.1.2",
"dev": true,
"license": "ISC"
},
"../modules/chronik-client/node_modules/acorn": {
"version": "8.11.3",
"dev": true,
"license": "MIT",
"bin": {
"acorn": "bin/acorn"
},
"engines": {
"node": ">=0.4.0"
}
},
"../modules/chronik-client/node_modules/acorn-walk": {
"version": "8.3.2",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.4.0"
}
},
"../modules/chronik-client/node_modules/ansi-colors": {
"version": "4.1.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"../modules/chronik-client/node_modules/ansi-regex": {
"version": "5.0.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/chronik-client/node_modules/ansi-styles": {
"version": "4.3.0",
"dev": true,
"license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"../modules/chronik-client/node_modules/anymatch": {
"version": "3.1.3",
"dev": true,
"license": "ISC",
"dependencies": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
},
"engines": {
"node": ">= 8"
}
},
"../modules/chronik-client/node_modules/arg": {
"version": "4.1.3",
"dev": true,
"license": "MIT"
},
"../modules/chronik-client/node_modules/argparse": {
"version": "2.0.1",
"dev": true,
"license": "Python-2.0"
},
"../modules/chronik-client/node_modules/assertion-error": {
"version": "1.1.0",
"dev": true,
"license": "MIT",
"engines": {
"node": "*"
}
},
"../modules/chronik-client/node_modules/asynckit": {
"version": "0.4.0",
"license": "MIT"
},
"../modules/chronik-client/node_modules/axios": {
"version": "1.7.9",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz",
"integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==",
"license": "MIT",
"dependencies": {
"follow-redirects": "^1.15.6",
"form-data": "^4.0.0",
"proxy-from-env": "^1.1.0"
}
},
"../modules/chronik-client/node_modules/balanced-match": {
"version": "1.0.2",
"dev": true,
"license": "MIT"
},
"../modules/chronik-client/node_modules/binary-extensions": {
"version": "2.2.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/chronik-client/node_modules/brace-expansion": {
"version": "1.1.11",
"dev": true,
"license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"../modules/chronik-client/node_modules/braces": {
"version": "3.0.3",
"dev": true,
"license": "MIT",
"dependencies": {
"fill-range": "^7.1.1"
},
"engines": {
"node": ">=8"
}
},
"../modules/chronik-client/node_modules/browser-stdout": {
"version": "1.3.1",
"dev": true,
"license": "ISC"
},
"../modules/chronik-client/node_modules/camelcase": {
"version": "6.3.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/chronik-client/node_modules/case-anything": {
"version": "2.1.13",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=12.13"
},
"funding": {
"url": "https://github.com/sponsors/mesqueeb"
}
},
"../modules/chronik-client/node_modules/chai": {
"version": "4.4.1",
"dev": true,
"license": "MIT",
"dependencies": {
"assertion-error": "^1.1.0",
"check-error": "^1.0.3",
"deep-eql": "^4.1.3",
"get-func-name": "^2.0.2",
"loupe": "^2.3.6",
"pathval": "^1.1.1",
"type-detect": "^4.0.8"
},
"engines": {
"node": ">=4"
}
},
"../modules/chronik-client/node_modules/chai-as-promised": {
"version": "7.1.1",
"dev": true,
"license": "WTFPL",
"dependencies": {
"check-error": "^1.0.2"
},
"peerDependencies": {
"chai": ">= 2.1.2 < 5"
}
},
"../modules/chronik-client/node_modules/chalk": {
"version": "4.1.2",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
"../modules/chronik-client/node_modules/charenc": {
"version": "0.0.2",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": "*"
}
},
"../modules/chronik-client/node_modules/check-error": {
"version": "1.0.3",
"dev": true,
"license": "MIT",
"dependencies": {
"get-func-name": "^2.0.2"
},
"engines": {
"node": "*"
}
},
"../modules/chronik-client/node_modules/chokidar": {
"version": "3.5.3",
"dev": true,
"funding": [
{
"type": "individual",
"url": "https://paulmillr.com/funding/"
}
],
"license": "MIT",
"dependencies": {
"anymatch": "~3.1.2",
"braces": "~3.0.2",
"glob-parent": "~5.1.2",
"is-binary-path": "~2.1.0",
"is-glob": "~4.0.1",
"normalize-path": "~3.0.0",
"readdirp": "~3.6.0"
},
"engines": {
"node": ">= 8.10.0"
},
"optionalDependencies": {
"fsevents": "~2.3.2"
}
},
"../modules/chronik-client/node_modules/chokidar/node_modules/glob-parent": {
"version": "5.1.2",
"dev": true,
"license": "ISC",
"dependencies": {
"is-glob": "^4.0.1"
},
"engines": {
"node": ">= 6"
}
},
"../modules/chronik-client/node_modules/cliui": {
"version": "7.0.4",
"dev": true,
"license": "ISC",
"dependencies": {
"string-width": "^4.2.0",
"strip-ansi": "^6.0.0",
"wrap-ansi": "^7.0.0"
}
},
"../modules/chronik-client/node_modules/color-convert": {
"version": "2.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"color-name": "~1.1.4"
},
"engines": {
"node": ">=7.0.0"
}
},
"../modules/chronik-client/node_modules/color-name": {
"version": "1.1.4",
"dev": true,
"license": "MIT"
},
"../modules/chronik-client/node_modules/combined-stream": {
"version": "1.0.8",
"license": "MIT",
"dependencies": {
"delayed-stream": "~1.0.0"
},
"engines": {
"node": ">= 0.8"
}
},
"../modules/chronik-client/node_modules/concat-map": {
"version": "0.0.1",
"dev": true,
"license": "MIT"
},
"../modules/chronik-client/node_modules/create-require": {
"version": "1.1.1",
"dev": true,
"license": "MIT"
},
"../modules/chronik-client/node_modules/crypt": {
"version": "0.0.2",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": "*"
}
},
"../modules/chronik-client/node_modules/debug": {
"version": "4.3.4",
"dev": true,
"license": "MIT",
"dependencies": {
"ms": "2.1.2"
},
"engines": {
"node": ">=6.0"
},
"peerDependenciesMeta": {
"supports-color": {
"optional": true
}
}
},
"../modules/chronik-client/node_modules/decamelize": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/chronik-client/node_modules/deep-eql": {
"version": "4.1.3",
"dev": true,
"license": "MIT",
"dependencies": {
"type-detect": "^4.0.0"
},
"engines": {
"node": ">=6"
}
},
"../modules/chronik-client/node_modules/delayed-stream": {
"version": "1.0.0",
"license": "MIT",
"engines": {
"node": ">=0.4.0"
}
},
"../modules/chronik-client/node_modules/detect-libc": {
"version": "1.0.3",
"dev": true,
"license": "Apache-2.0",
"bin": {
"detect-libc": "bin/detect-libc.js"
},
"engines": {
"node": ">=0.10"
}
},
"../modules/chronik-client/node_modules/diff": {
"version": "5.0.0",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.3.1"
}
},
"../modules/chronik-client/node_modules/dprint-node": {
"version": "1.0.8",
"dev": true,
"license": "MIT",
"dependencies": {
"detect-libc": "^1.0.3"
}
},
"../modules/chronik-client/node_modules/ecashaddrjs": {
"resolved": "../modules/ecashaddrjs",
"link": true
},
"../modules/chronik-client/node_modules/emoji-regex": {
"version": "8.0.0",
"dev": true,
"license": "MIT"
},
"../modules/chronik-client/node_modules/escalade": {
"version": "3.1.2",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"../modules/chronik-client/node_modules/escape-string-regexp": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/chronik-client/node_modules/fill-range": {
"version": "7.1.1",
"dev": true,
"license": "MIT",
"dependencies": {
"to-regex-range": "^5.0.1"
},
"engines": {
"node": ">=8"
}
},
"../modules/chronik-client/node_modules/find-up": {
"version": "5.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"locate-path": "^6.0.0",
"path-exists": "^4.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/chronik-client/node_modules/flat": {
"version": "5.0.2",
"dev": true,
"license": "BSD-3-Clause",
"bin": {
"flat": "cli.js"
}
},
"../modules/chronik-client/node_modules/follow-redirects": {
"version": "1.15.6",
"funding": [
{
"type": "individual",
"url": "https://github.com/sponsors/RubenVerborgh"
}
],
"license": "MIT",
"engines": {
"node": ">=4.0"
},
"peerDependenciesMeta": {
"debug": {
"optional": true
}
}
},
"../modules/chronik-client/node_modules/form-data": {
"version": "4.0.0",
"license": "MIT",
"dependencies": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
"mime-types": "^2.1.12"
},
"engines": {
"node": ">= 6"
}
},
"../modules/chronik-client/node_modules/fs.realpath": {
"version": "1.0.0",
"dev": true,
"license": "ISC"
},
"../modules/chronik-client/node_modules/get-caller-file": {
"version": "2.0.5",
"dev": true,
"license": "ISC",
"engines": {
"node": "6.* || 8.* || >= 10.*"
}
},
"../modules/chronik-client/node_modules/get-func-name": {
"version": "2.0.2",
"dev": true,
"license": "MIT",
"engines": {
"node": "*"
}
},
"../modules/chronik-client/node_modules/glob": {
"version": "7.2.0",
"dev": true,
"license": "ISC",
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.0.4",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
},
"engines": {
"node": "*"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"../modules/chronik-client/node_modules/growl": {
"version": "1.10.5",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4.x"
}
},
"../modules/chronik-client/node_modules/has-flag": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/chronik-client/node_modules/he": {
"version": "1.2.0",
"dev": true,
"license": "MIT",
"bin": {
"he": "bin/he"
}
},
"../modules/chronik-client/node_modules/inflight": {
"version": "1.0.6",
"dev": true,
"license": "ISC",
"dependencies": {
"once": "^1.3.0",
"wrappy": "1"
}
},
"../modules/chronik-client/node_modules/inherits": {
"version": "2.0.4",
"dev": true,
"license": "ISC"
},
"../modules/chronik-client/node_modules/is-binary-path": {
"version": "2.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"binary-extensions": "^2.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/chronik-client/node_modules/is-buffer": {
"version": "1.1.6",
"dev": true,
"license": "MIT"
},
"../modules/chronik-client/node_modules/is-extglob": {
"version": "2.1.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"../modules/chronik-client/node_modules/is-fullwidth-code-point": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/chronik-client/node_modules/is-glob": {
"version": "4.0.3",
"dev": true,
"license": "MIT",
"dependencies": {
"is-extglob": "^2.1.1"
},
"engines": {
"node": ">=0.10.0"
}
},
"../modules/chronik-client/node_modules/is-number": {
"version": "7.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.12.0"
}
},
"../modules/chronik-client/node_modules/is-plain-obj": {
"version": "2.1.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/chronik-client/node_modules/is-unicode-supported": {
"version": "0.1.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/chronik-client/node_modules/isexe": {
"version": "2.0.0",
"dev": true,
"license": "ISC"
},
"../modules/chronik-client/node_modules/isomorphic-ws": {
"version": "4.0.1",
"license": "MIT",
"peerDependencies": {
"ws": "*"
}
},
"../modules/chronik-client/node_modules/js-yaml": {
"version": "4.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"argparse": "^2.0.1"
},
"bin": {
"js-yaml": "bin/js-yaml.js"
}
},
"../modules/chronik-client/node_modules/jsonc-parser": {
"version": "3.2.1",
"dev": true,
"license": "MIT"
},
"../modules/chronik-client/node_modules/locate-path": {
"version": "6.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-locate": "^5.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/chronik-client/node_modules/log-symbols": {
"version": "4.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"chalk": "^4.1.0",
"is-unicode-supported": "^0.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/chronik-client/node_modules/long": {
"version": "4.0.0",
"license": "Apache-2.0"
},
"../modules/chronik-client/node_modules/loupe": {
"version": "2.3.7",
"dev": true,
"license": "MIT",
"dependencies": {
"get-func-name": "^2.0.1"
}
},
"../modules/chronik-client/node_modules/lunr": {
"version": "2.3.9",
"dev": true,
"license": "MIT"
},
"../modules/chronik-client/node_modules/make-error": {
"version": "1.3.6",
"dev": true,
"license": "ISC"
},
"../modules/chronik-client/node_modules/marked": {
"version": "4.3.0",
"dev": true,
"license": "MIT",
"bin": {
"marked": "bin/marked.js"
},
"engines": {
"node": ">= 12"
}
},
"../modules/chronik-client/node_modules/md5": {
"version": "2.3.0",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"charenc": "0.0.2",
"crypt": "0.0.2",
"is-buffer": "~1.1.6"
}
},
"../modules/chronik-client/node_modules/mime-db": {
"version": "1.52.0",
"license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
"../modules/chronik-client/node_modules/mime-types": {
"version": "2.1.35",
"license": "MIT",
"dependencies": {
"mime-db": "1.52.0"
},
"engines": {
"node": ">= 0.6"
}
},
"../modules/chronik-client/node_modules/minimatch": {
"version": "3.1.2",
"dev": true,
"license": "ISC",
"dependencies": {
"brace-expansion": "^1.1.7"
},
"engines": {
"node": "*"
}
},
"../modules/chronik-client/node_modules/mkdirp": {
"version": "3.0.1",
"dev": true,
"license": "MIT",
"bin": {
"mkdirp": "dist/cjs/src/bin.js"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"../modules/chronik-client/node_modules/mocha": {
"version": "9.2.2",
"dev": true,
"license": "MIT",
"dependencies": {
"@ungap/promise-all-settled": "1.1.2",
"ansi-colors": "4.1.1",
"browser-stdout": "1.3.1",
"chokidar": "3.5.3",
"debug": "4.3.3",
"diff": "5.0.0",
"escape-string-regexp": "4.0.0",
"find-up": "5.0.0",
"glob": "7.2.0",
"growl": "1.10.5",
"he": "1.2.0",
"js-yaml": "4.1.0",
"log-symbols": "4.1.0",
"minimatch": "4.2.1",
"ms": "2.1.3",
"nanoid": "3.3.1",
"serialize-javascript": "6.0.0",
"strip-json-comments": "3.1.1",
"supports-color": "8.1.1",
"which": "2.0.2",
"workerpool": "6.2.0",
"yargs": "16.2.0",
"yargs-parser": "20.2.4",
"yargs-unparser": "2.0.0"
},
"bin": {
"_mocha": "bin/_mocha",
"mocha": "bin/mocha"
},
"engines": {
"node": ">= 12.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/mochajs"
}
},
"../modules/chronik-client/node_modules/mocha-junit-reporter": {
"version": "2.2.1",
"dev": true,
"license": "MIT",
"dependencies": {
"debug": "^4.3.4",
"md5": "^2.3.0",
"mkdirp": "^3.0.0",
"strip-ansi": "^6.0.1",
"xml": "^1.0.1"
},
"peerDependencies": {
"mocha": ">=2.2.5"
}
},
"../modules/chronik-client/node_modules/mocha-suppress-logs": {
"version": "0.3.1",
"dev": true,
"license": "MIT"
},
"../modules/chronik-client/node_modules/mocha/node_modules/debug": {
"version": "4.3.3",
"dev": true,
"license": "MIT",
"dependencies": {
"ms": "2.1.2"
},
"engines": {
"node": ">=6.0"
},
"peerDependenciesMeta": {
"supports-color": {
"optional": true
}
}
},
"../modules/chronik-client/node_modules/mocha/node_modules/debug/node_modules/ms": {
"version": "2.1.2",
"dev": true,
"license": "MIT"
},
"../modules/chronik-client/node_modules/mocha/node_modules/minimatch": {
"version": "4.2.1",
"dev": true,
"license": "ISC",
"dependencies": {
"brace-expansion": "^1.1.7"
},
"engines": {
"node": ">=10"
}
},
"../modules/chronik-client/node_modules/mocha/node_modules/ms": {
"version": "2.1.3",
"dev": true,
"license": "MIT"
},
"../modules/chronik-client/node_modules/mocha/node_modules/supports-color": {
"version": "8.1.1",
"dev": true,
"license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/supports-color?sponsor=1"
}
},
"../modules/chronik-client/node_modules/ms": {
"version": "2.1.2",
"dev": true,
"license": "MIT"
},
"../modules/chronik-client/node_modules/nanoid": {
"version": "3.3.1",
"dev": true,
"license": "MIT",
"bin": {
"nanoid": "bin/nanoid.cjs"
},
"engines": {
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
}
},
"../modules/chronik-client/node_modules/normalize-path": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"../modules/chronik-client/node_modules/once": {
"version": "1.4.0",
"dev": true,
"license": "ISC",
"dependencies": {
"wrappy": "1"
}
},
"../modules/chronik-client/node_modules/p-limit": {
"version": "3.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"yocto-queue": "^0.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/chronik-client/node_modules/p-locate": {
"version": "5.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-limit": "^3.0.2"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/chronik-client/node_modules/path-exists": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/chronik-client/node_modules/path-is-absolute": {
"version": "1.0.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"../modules/chronik-client/node_modules/pathval": {
"version": "1.1.1",
"dev": true,
"license": "MIT",
"engines": {
"node": "*"
}
},
"../modules/chronik-client/node_modules/picomatch": {
"version": "2.3.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8.6"
},
"funding": {
"url": "https://github.com/sponsors/jonschlinkert"
}
},
"../modules/chronik-client/node_modules/prettier": {
"version": "2.8.8",
"dev": true,
"license": "MIT",
"bin": {
"prettier": "bin-prettier.js"
},
"engines": {
"node": ">=10.13.0"
},
"funding": {
"url": "https://github.com/prettier/prettier?sponsor=1"
}
},
"../modules/chronik-client/node_modules/prettier-plugin-organize-imports": {
"version": "2.3.4",
"dev": true,
"license": "MIT",
"peerDependencies": {
"prettier": ">=2.0",
"typescript": ">=2.9"
}
},
"../modules/chronik-client/node_modules/protobufjs": {
"version": "6.11.4",
"hasInstallScript": true,
"license": "BSD-3-Clause",
"dependencies": {
"@protobufjs/aspromise": "^1.1.2",
"@protobufjs/base64": "^1.1.2",
"@protobufjs/codegen": "^2.0.4",
"@protobufjs/eventemitter": "^1.1.0",
"@protobufjs/fetch": "^1.1.0",
"@protobufjs/float": "^1.0.2",
"@protobufjs/inquire": "^1.1.0",
"@protobufjs/path": "^1.1.2",
"@protobufjs/pool": "^1.1.0",
"@protobufjs/utf8": "^1.1.0",
"@types/long": "^4.0.1",
"@types/node": ">=13.7.0",
"long": "^4.0.0"
},
"bin": {
"pbjs": "bin/pbjs",
"pbts": "bin/pbts"
}
},
"../modules/chronik-client/node_modules/proxy-from-env": {
"version": "1.1.0",
"license": "MIT"
},
"../modules/chronik-client/node_modules/randombytes": {
"version": "2.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"safe-buffer": "^5.1.0"
}
},
"../modules/chronik-client/node_modules/readdirp": {
"version": "3.6.0",
"dev": true,
"license": "MIT",
"dependencies": {
"picomatch": "^2.2.1"
},
"engines": {
"node": ">=8.10.0"
}
},
"../modules/chronik-client/node_modules/require-directory": {
"version": "2.1.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"../modules/chronik-client/node_modules/safe-buffer": {
"version": "5.2.1",
"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"
}
],
"license": "MIT"
},
"../modules/chronik-client/node_modules/serialize-javascript": {
"version": "6.0.0",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"randombytes": "^2.1.0"
}
},
"../modules/chronik-client/node_modules/shiki": {
"version": "0.10.1",
"dev": true,
"license": "MIT",
"dependencies": {
"jsonc-parser": "^3.0.0",
"vscode-oniguruma": "^1.6.1",
"vscode-textmate": "5.2.0"
}
},
"../modules/chronik-client/node_modules/string-width": {
"version": "4.2.3",
"dev": true,
"license": "MIT",
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
"strip-ansi": "^6.0.1"
},
"engines": {
"node": ">=8"
}
},
"../modules/chronik-client/node_modules/strip-ansi": {
"version": "6.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-regex": "^5.0.1"
},
"engines": {
"node": ">=8"
}
},
"../modules/chronik-client/node_modules/strip-json-comments": {
"version": "3.1.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/chronik-client/node_modules/supports-color": {
"version": "7.2.0",
"dev": true,
"license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/chronik-client/node_modules/to-regex-range": {
"version": "5.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"is-number": "^7.0.0"
},
"engines": {
"node": ">=8.0"
}
},
"../modules/chronik-client/node_modules/ts-node": {
"version": "10.9.2",
"dev": true,
"license": "MIT",
"dependencies": {
"@cspotcode/source-map-support": "^0.8.0",
"@tsconfig/node10": "^1.0.7",
"@tsconfig/node12": "^1.0.7",
"@tsconfig/node14": "^1.0.0",
"@tsconfig/node16": "^1.0.2",
"acorn": "^8.4.1",
"acorn-walk": "^8.1.1",
"arg": "^4.1.0",
"create-require": "^1.1.0",
"diff": "^4.0.1",
"make-error": "^1.1.1",
"v8-compile-cache-lib": "^3.0.1",
"yn": "3.1.1"
},
"bin": {
"ts-node": "dist/bin.js",
"ts-node-cwd": "dist/bin-cwd.js",
"ts-node-esm": "dist/bin-esm.js",
"ts-node-script": "dist/bin-script.js",
"ts-node-transpile-only": "dist/bin-transpile.js",
"ts-script": "dist/bin-script-deprecated.js"
},
"peerDependencies": {
"@swc/core": ">=1.2.50",
"@swc/wasm": ">=1.2.50",
"@types/node": "*",
"typescript": ">=2.7"
},
"peerDependenciesMeta": {
"@swc/core": {
"optional": true
},
"@swc/wasm": {
"optional": true
}
}
},
"../modules/chronik-client/node_modules/ts-node/node_modules/diff": {
"version": "4.0.2",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.3.1"
}
},
"../modules/chronik-client/node_modules/ts-poet": {
"version": "6.6.0",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"dprint-node": "^1.0.7"
}
},
"../modules/chronik-client/node_modules/ts-proto": {
"version": "1.167.3",
"dev": true,
"license": "ISC",
"dependencies": {
"case-anything": "^2.1.13",
"protobufjs": "^7.2.4",
"ts-poet": "^6.5.0",
"ts-proto-descriptors": "1.15.0"
},
"bin": {
"protoc-gen-ts_proto": "protoc-gen-ts_proto"
}
},
"../modules/chronik-client/node_modules/ts-proto-descriptors": {
"version": "1.15.0",
"dev": true,
"license": "ISC",
"dependencies": {
"long": "^5.2.3",
"protobufjs": "^7.2.4"
}
},
"../modules/chronik-client/node_modules/ts-proto-descriptors/node_modules/long": {
"version": "5.2.3",
"dev": true,
"license": "Apache-2.0"
},
"../modules/chronik-client/node_modules/ts-proto-descriptors/node_modules/protobufjs": {
"version": "7.2.6",
"dev": true,
"hasInstallScript": true,
"license": "BSD-3-Clause",
"dependencies": {
"@protobufjs/aspromise": "^1.1.2",
"@protobufjs/base64": "^1.1.2",
"@protobufjs/codegen": "^2.0.4",
"@protobufjs/eventemitter": "^1.1.0",
"@protobufjs/fetch": "^1.1.0",
"@protobufjs/float": "^1.0.2",
"@protobufjs/inquire": "^1.1.0",
"@protobufjs/path": "^1.1.2",
"@protobufjs/pool": "^1.1.0",
"@protobufjs/utf8": "^1.1.0",
"@types/node": ">=13.7.0",
"long": "^5.0.0"
},
"engines": {
"node": ">=12.0.0"
}
},
"../modules/chronik-client/node_modules/ts-proto/node_modules/long": {
"version": "5.2.3",
"dev": true,
"license": "Apache-2.0"
},
"../modules/chronik-client/node_modules/ts-proto/node_modules/protobufjs": {
"version": "7.2.6",
"dev": true,
"hasInstallScript": true,
"license": "BSD-3-Clause",
"dependencies": {
"@protobufjs/aspromise": "^1.1.2",
"@protobufjs/base64": "^1.1.2",
"@protobufjs/codegen": "^2.0.4",
"@protobufjs/eventemitter": "^1.1.0",
"@protobufjs/fetch": "^1.1.0",
"@protobufjs/float": "^1.0.2",
"@protobufjs/inquire": "^1.1.0",
"@protobufjs/path": "^1.1.2",
"@protobufjs/pool": "^1.1.0",
"@protobufjs/utf8": "^1.1.0",
"@types/node": ">=13.7.0",
"long": "^5.0.0"
},
"engines": {
"node": ">=12.0.0"
}
},
"../modules/chronik-client/node_modules/type-detect": {
"version": "4.0.8",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"../modules/chronik-client/node_modules/typedoc": {
"version": "0.22.18",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"glob": "^8.0.3",
"lunr": "^2.3.9",
"marked": "^4.0.16",
"minimatch": "^5.1.0",
"shiki": "^0.10.1"
},
"bin": {
"typedoc": "bin/typedoc"
},
"engines": {
"node": ">= 12.10.0"
},
"peerDependencies": {
"typescript": "4.0.x || 4.1.x || 4.2.x || 4.3.x || 4.4.x || 4.5.x || 4.6.x || 4.7.x"
}
},
"../modules/chronik-client/node_modules/typedoc/node_modules/brace-expansion": {
"version": "2.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0"
}
},
"../modules/chronik-client/node_modules/typedoc/node_modules/glob": {
"version": "8.1.0",
"dev": true,
"license": "ISC",
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^5.0.1",
"once": "^1.3.0"
},
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"../modules/chronik-client/node_modules/typedoc/node_modules/minimatch": {
"version": "5.1.6",
"dev": true,
"license": "ISC",
"dependencies": {
"brace-expansion": "^2.0.1"
},
"engines": {
"node": ">=10"
}
},
"../modules/chronik-client/node_modules/typescript": {
"version": "4.7.4",
"dev": true,
"license": "Apache-2.0",
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
},
"engines": {
"node": ">=4.2.0"
}
},
"../modules/chronik-client/node_modules/undici-types": {
"version": "5.26.5",
"license": "MIT"
},
"../modules/chronik-client/node_modules/v8-compile-cache-lib": {
"version": "3.0.1",
"dev": true,
"license": "MIT"
},
"../modules/chronik-client/node_modules/vscode-oniguruma": {
"version": "1.7.0",
"dev": true,
"license": "MIT"
},
"../modules/chronik-client/node_modules/vscode-textmate": {
"version": "5.2.0",
"dev": true,
"license": "MIT"
},
"../modules/chronik-client/node_modules/which": {
"version": "2.0.2",
"dev": true,
"license": "ISC",
"dependencies": {
"isexe": "^2.0.0"
},
"bin": {
"node-which": "bin/node-which"
},
"engines": {
"node": ">= 8"
}
},
"../modules/chronik-client/node_modules/workerpool": {
"version": "6.2.0",
"dev": true,
"license": "Apache-2.0"
},
"../modules/chronik-client/node_modules/wrap-ansi": {
"version": "7.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
"strip-ansi": "^6.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
"../modules/chronik-client/node_modules/wrappy": {
"version": "1.0.2",
"dev": true,
"license": "ISC"
},
"../modules/chronik-client/node_modules/ws": {
"version": "8.17.1",
"license": "MIT",
"engines": {
"node": ">=10.0.0"
},
"peerDependencies": {
"bufferutil": "^4.0.1",
"utf-8-validate": ">=5.0.2"
},
"peerDependenciesMeta": {
"bufferutil": {
"optional": true
},
"utf-8-validate": {
"optional": true
}
}
},
"../modules/chronik-client/node_modules/xml": {
"version": "1.0.1",
"dev": true,
"license": "MIT"
},
"../modules/chronik-client/node_modules/y18n": {
"version": "5.0.8",
"dev": true,
"license": "ISC",
"engines": {
"node": ">=10"
}
},
"../modules/chronik-client/node_modules/yargs": {
"version": "16.2.0",
"dev": true,
"license": "MIT",
"dependencies": {
"cliui": "^7.0.2",
"escalade": "^3.1.1",
"get-caller-file": "^2.0.5",
"require-directory": "^2.1.1",
"string-width": "^4.2.0",
"y18n": "^5.0.5",
"yargs-parser": "^20.2.2"
},
"engines": {
"node": ">=10"
}
},
"../modules/chronik-client/node_modules/yargs-parser": {
"version": "20.2.4",
"dev": true,
"license": "ISC",
"engines": {
"node": ">=10"
}
},
"../modules/chronik-client/node_modules/yargs-unparser": {
"version": "2.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"camelcase": "^6.0.0",
"decamelize": "^4.0.0",
"flat": "^5.0.2",
"is-plain-obj": "^2.1.0"
},
"engines": {
"node": ">=10"
}
},
"../modules/chronik-client/node_modules/yn": {
"version": "3.1.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"../modules/chronik-client/node_modules/yocto-queue": {
"version": "0.1.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-agora": {
"version": "2.0.1",
"license": "MIT",
"dependencies": {
"chronik-client": "file:../chronik-client",
"ecash-lib": "file:../ecash-lib"
},
"devDependencies": {
"@istanbuljs/nyc-config-typescript": "^1.0.2",
"@types/chai": "^4.3.14",
"@types/chai-as-promised": "^7.1.8",
"@types/mocha": "^10.0.6",
"@types/node": "^20.12.7",
"chai": "^4.4.1",
"chai-as-promised": "^7.1.1",
"mocha": "^10.4.0",
"mocha-junit-reporter": "^2.2.1",
"nyc": "^15.1.0",
"source-map-support": "^0.5.21",
"ts-node": "^10.9.2",
"tsx": "^4.7.2",
"typescript": "^5.4.3"
}
},
"../modules/ecash-agora/node_modules/@ampproject/remapping": {
"version": "2.3.0",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.24"
},
"engines": {
"node": ">=6.0.0"
}
},
"../modules/ecash-agora/node_modules/@ampproject/remapping/node_modules/@jridgewell/trace-mapping": {
"version": "0.3.25",
"dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/resolve-uri": "^3.1.0",
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
"../modules/ecash-agora/node_modules/@babel/code-frame": {
"version": "7.24.2",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/highlight": "^7.24.2",
"picocolors": "^1.0.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-agora/node_modules/@babel/compat-data": {
"version": "7.24.4",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-agora/node_modules/@babel/core": {
"version": "7.24.4",
"dev": true,
"license": "MIT",
"dependencies": {
"@ampproject/remapping": "^2.2.0",
"@babel/code-frame": "^7.24.2",
"@babel/generator": "^7.24.4",
"@babel/helper-compilation-targets": "^7.23.6",
"@babel/helper-module-transforms": "^7.23.3",
"@babel/helpers": "^7.24.4",
"@babel/parser": "^7.24.4",
"@babel/template": "^7.24.0",
"@babel/traverse": "^7.24.1",
"@babel/types": "^7.24.0",
"convert-source-map": "^2.0.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
"json5": "^2.2.3",
"semver": "^6.3.1"
},
"engines": {
"node": ">=6.9.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/babel"
}
},
"../modules/ecash-agora/node_modules/@babel/core/node_modules/convert-source-map": {
"version": "2.0.0",
"dev": true,
"license": "MIT"
},
"../modules/ecash-agora/node_modules/@babel/generator": {
"version": "7.24.4",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/types": "^7.24.0",
"@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.25",
"jsesc": "^2.5.1"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-agora/node_modules/@babel/generator/node_modules/@jridgewell/trace-mapping": {
"version": "0.3.25",
"dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/resolve-uri": "^3.1.0",
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
"../modules/ecash-agora/node_modules/@babel/helper-compilation-targets": {
"version": "7.23.6",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/compat-data": "^7.23.5",
"@babel/helper-validator-option": "^7.23.5",
"browserslist": "^4.22.2",
"lru-cache": "^5.1.1",
"semver": "^6.3.1"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-agora/node_modules/@babel/helper-environment-visitor": {
"version": "7.22.20",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-agora/node_modules/@babel/helper-function-name": {
"version": "7.23.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/template": "^7.22.15",
"@babel/types": "^7.23.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-agora/node_modules/@babel/helper-hoist-variables": {
"version": "7.22.5",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/types": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-agora/node_modules/@babel/helper-module-imports": {
"version": "7.24.3",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/types": "^7.24.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-agora/node_modules/@babel/helper-module-transforms": {
"version": "7.23.3",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-environment-visitor": "^7.22.20",
"@babel/helper-module-imports": "^7.22.15",
"@babel/helper-simple-access": "^7.22.5",
"@babel/helper-split-export-declaration": "^7.22.6",
"@babel/helper-validator-identifier": "^7.22.20"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0"
}
},
"../modules/ecash-agora/node_modules/@babel/helper-simple-access": {
"version": "7.22.5",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/types": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-agora/node_modules/@babel/helper-split-export-declaration": {
"version": "7.22.6",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/types": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-agora/node_modules/@babel/helper-string-parser": {
"version": "7.24.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-agora/node_modules/@babel/helper-validator-identifier": {
"version": "7.22.20",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-agora/node_modules/@babel/helper-validator-option": {
"version": "7.23.5",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-agora/node_modules/@babel/helpers": {
"version": "7.24.4",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/template": "^7.24.0",
"@babel/traverse": "^7.24.1",
"@babel/types": "^7.24.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-agora/node_modules/@babel/highlight": {
"version": "7.24.2",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-validator-identifier": "^7.22.20",
"chalk": "^2.4.2",
"js-tokens": "^4.0.0",
"picocolors": "^1.0.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-agora/node_modules/@babel/highlight/node_modules/ansi-styles": {
"version": "3.2.1",
"dev": true,
"license": "MIT",
"dependencies": {
"color-convert": "^1.9.0"
},
"engines": {
"node": ">=4"
}
},
"../modules/ecash-agora/node_modules/@babel/highlight/node_modules/chalk": {
"version": "2.4.2",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
"supports-color": "^5.3.0"
},
"engines": {
"node": ">=4"
}
},
"../modules/ecash-agora/node_modules/@babel/highlight/node_modules/color-convert": {
"version": "1.9.3",
"dev": true,
"license": "MIT",
"dependencies": {
"color-name": "1.1.3"
}
},
"../modules/ecash-agora/node_modules/@babel/highlight/node_modules/color-name": {
"version": "1.1.3",
"dev": true,
"license": "MIT"
},
"../modules/ecash-agora/node_modules/@babel/highlight/node_modules/escape-string-regexp": {
"version": "1.0.5",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.8.0"
}
},
"../modules/ecash-agora/node_modules/@babel/highlight/node_modules/has-flag": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"../modules/ecash-agora/node_modules/@babel/highlight/node_modules/supports-color": {
"version": "5.5.0",
"dev": true,
"license": "MIT",
"dependencies": {
"has-flag": "^3.0.0"
},
"engines": {
"node": ">=4"
}
},
"../modules/ecash-agora/node_modules/@babel/parser": {
"version": "7.24.4",
"dev": true,
"license": "MIT",
"bin": {
"parser": "bin/babel-parser.js"
},
"engines": {
"node": ">=6.0.0"
}
},
"../modules/ecash-agora/node_modules/@babel/template": {
"version": "7.24.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.23.5",
"@babel/parser": "^7.24.0",
"@babel/types": "^7.24.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-agora/node_modules/@babel/traverse": {
"version": "7.24.1",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.24.1",
"@babel/generator": "^7.24.1",
"@babel/helper-environment-visitor": "^7.22.20",
"@babel/helper-function-name": "^7.23.0",
"@babel/helper-hoist-variables": "^7.22.5",
"@babel/helper-split-export-declaration": "^7.22.6",
"@babel/parser": "^7.24.1",
"@babel/types": "^7.24.0",
"debug": "^4.3.1",
"globals": "^11.1.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-agora/node_modules/@babel/traverse/node_modules/globals": {
"version": "11.12.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"../modules/ecash-agora/node_modules/@babel/types": {
"version": "7.24.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-string-parser": "^7.23.4",
"@babel/helper-validator-identifier": "^7.22.20",
"to-fast-properties": "^2.0.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-agora/node_modules/@cspotcode/source-map-support": {
"version": "0.8.1",
"dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/trace-mapping": "0.3.9"
},
"engines": {
"node": ">=12"
}
},
"../modules/ecash-agora/node_modules/@esbuild/linux-x64": {
"version": "0.19.12",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"../modules/ecash-agora/node_modules/@istanbuljs/load-nyc-config": {
"version": "1.1.0",
"dev": true,
"license": "ISC",
"dependencies": {
"camelcase": "^5.3.1",
"find-up": "^4.1.0",
"get-package-type": "^0.1.0",
"js-yaml": "^3.13.1",
"resolve-from": "^5.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-agora/node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": {
"version": "1.0.10",
"dev": true,
"license": "MIT",
"dependencies": {
"sprintf-js": "~1.0.2"
}
},
"../modules/ecash-agora/node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": {
"version": "5.3.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"../modules/ecash-agora/node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": {
"version": "4.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"locate-path": "^5.0.0",
"path-exists": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-agora/node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": {
"version": "3.14.1",
"dev": true,
"license": "MIT",
"dependencies": {
"argparse": "^1.0.7",
"esprima": "^4.0.0"
},
"bin": {
"js-yaml": "bin/js-yaml.js"
}
},
"../modules/ecash-agora/node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": {
"version": "5.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-locate": "^4.1.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-agora/node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": {
"version": "2.3.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-try": "^2.0.0"
},
"engines": {
"node": ">=6"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-agora/node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": {
"version": "4.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-limit": "^2.2.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-agora/node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": {
"version": "5.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecash-agora/node_modules/@istanbuljs/nyc-config-typescript": {
"version": "1.0.2",
"dev": true,
"license": "ISC",
"dependencies": {
"@istanbuljs/schema": "^0.1.2"
},
"engines": {
"node": ">=8"
},
"peerDependencies": {
"nyc": ">=15"
}
},
"../modules/ecash-agora/node_modules/@istanbuljs/schema": {
"version": "0.1.3",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecash-agora/node_modules/@jridgewell/gen-mapping": {
"version": "0.3.5",
"dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/set-array": "^1.2.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
"@jridgewell/trace-mapping": "^0.3.24"
},
"engines": {
"node": ">=6.0.0"
}
},
"../modules/ecash-agora/node_modules/@jridgewell/gen-mapping/node_modules/@jridgewell/trace-mapping": {
"version": "0.3.25",
"dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/resolve-uri": "^3.1.0",
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
"../modules/ecash-agora/node_modules/@jridgewell/resolve-uri": {
"version": "3.1.2",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.0.0"
}
},
"../modules/ecash-agora/node_modules/@jridgewell/set-array": {
"version": "1.2.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.0.0"
}
},
"../modules/ecash-agora/node_modules/@jridgewell/sourcemap-codec": {
"version": "1.4.15",
"dev": true,
"license": "MIT"
},
"../modules/ecash-agora/node_modules/@jridgewell/trace-mapping": {
"version": "0.3.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/resolve-uri": "^3.0.3",
"@jridgewell/sourcemap-codec": "^1.4.10"
}
},
"../modules/ecash-agora/node_modules/@tsconfig/node10": {
"version": "1.0.11",
"dev": true,
"license": "MIT"
},
"../modules/ecash-agora/node_modules/@tsconfig/node12": {
"version": "1.0.11",
"dev": true,
"license": "MIT"
},
"../modules/ecash-agora/node_modules/@tsconfig/node14": {
"version": "1.0.3",
"dev": true,
"license": "MIT"
},
"../modules/ecash-agora/node_modules/@tsconfig/node16": {
"version": "1.0.4",
"dev": true,
"license": "MIT"
},
"../modules/ecash-agora/node_modules/@types/chai": {
"version": "4.3.14",
"dev": true,
"license": "MIT"
},
"../modules/ecash-agora/node_modules/@types/chai-as-promised": {
"version": "7.1.8",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/chai": "*"
}
},
"../modules/ecash-agora/node_modules/@types/mocha": {
"version": "10.0.6",
"dev": true,
"license": "MIT"
},
"../modules/ecash-agora/node_modules/@types/node": {
"version": "20.12.7",
"dev": true,
"license": "MIT",
"dependencies": {
"undici-types": "~5.26.4"
}
},
"../modules/ecash-agora/node_modules/acorn": {
"version": "8.11.3",
"dev": true,
"license": "MIT",
"bin": {
"acorn": "bin/acorn"
},
"engines": {
"node": ">=0.4.0"
}
},
"../modules/ecash-agora/node_modules/acorn-walk": {
"version": "8.3.2",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.4.0"
}
},
"../modules/ecash-agora/node_modules/aggregate-error": {
"version": "3.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"clean-stack": "^2.0.0",
"indent-string": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-agora/node_modules/ansi-colors": {
"version": "4.1.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"../modules/ecash-agora/node_modules/ansi-regex": {
"version": "5.0.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecash-agora/node_modules/ansi-styles": {
"version": "4.3.0",
"dev": true,
"license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"../modules/ecash-agora/node_modules/anymatch": {
"version": "3.1.3",
"dev": true,
"license": "ISC",
"dependencies": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
},
"engines": {
"node": ">= 8"
}
},
"../modules/ecash-agora/node_modules/append-transform": {
"version": "2.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"default-require-extensions": "^3.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-agora/node_modules/archy": {
"version": "1.0.0",
"dev": true,
"license": "MIT"
},
"../modules/ecash-agora/node_modules/arg": {
"version": "4.1.3",
"dev": true,
"license": "MIT"
},
"../modules/ecash-agora/node_modules/argparse": {
"version": "2.0.1",
"dev": true,
"license": "Python-2.0"
},
"../modules/ecash-agora/node_modules/assertion-error": {
"version": "1.1.0",
"dev": true,
"license": "MIT",
"engines": {
"node": "*"
}
},
"../modules/ecash-agora/node_modules/balanced-match": {
"version": "1.0.2",
"dev": true,
"license": "MIT"
},
"../modules/ecash-agora/node_modules/binary-extensions": {
"version": "2.3.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-agora/node_modules/brace-expansion": {
"version": "2.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0"
}
},
"../modules/ecash-agora/node_modules/braces": {
"version": "3.0.3",
"dev": true,
"license": "MIT",
"dependencies": {
"fill-range": "^7.1.1"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-agora/node_modules/browser-stdout": {
"version": "1.3.1",
"dev": true,
"license": "ISC"
},
"../modules/ecash-agora/node_modules/browserslist": {
"version": "4.23.0",
"dev": true,
"funding": [
{
"type": "opencollective",
"url": "https://opencollective.com/browserslist"
},
{
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/browserslist"
},
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
"license": "MIT",
"dependencies": {
"caniuse-lite": "^1.0.30001587",
"electron-to-chromium": "^1.4.668",
"node-releases": "^2.0.14",
"update-browserslist-db": "^1.0.13"
},
"bin": {
"browserslist": "cli.js"
},
"engines": {
"node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
}
},
"../modules/ecash-agora/node_modules/buffer-from": {
"version": "1.1.2",
"dev": true,
"license": "MIT"
},
"../modules/ecash-agora/node_modules/caching-transform": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"hasha": "^5.0.0",
"make-dir": "^3.0.0",
"package-hash": "^4.0.0",
"write-file-atomic": "^3.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-agora/node_modules/camelcase": {
"version": "6.3.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-agora/node_modules/chai": {
"version": "4.4.1",
"dev": true,
"license": "MIT",
"dependencies": {
"assertion-error": "^1.1.0",
"check-error": "^1.0.3",
"deep-eql": "^4.1.3",
"get-func-name": "^2.0.2",
"loupe": "^2.3.6",
"pathval": "^1.1.1",
"type-detect": "^4.0.8"
},
"engines": {
"node": ">=4"
}
},
"../modules/ecash-agora/node_modules/chai-as-promised": {
"version": "7.1.1",
"dev": true,
"license": "WTFPL",
"dependencies": {
"check-error": "^1.0.2"
},
"peerDependencies": {
"chai": ">= 2.1.2 < 5"
}
},
"../modules/ecash-agora/node_modules/chalk": {
"version": "4.1.2",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
"../modules/ecash-agora/node_modules/chalk/node_modules/supports-color": {
"version": "7.2.0",
"dev": true,
"license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-agora/node_modules/charenc": {
"version": "0.0.2",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": "*"
}
},
"../modules/ecash-agora/node_modules/check-error": {
"version": "1.0.3",
"dev": true,
"license": "MIT",
"dependencies": {
"get-func-name": "^2.0.2"
},
"engines": {
"node": "*"
}
},
"../modules/ecash-agora/node_modules/chokidar": {
"version": "3.5.3",
"dev": true,
"funding": [
{
"type": "individual",
"url": "https://paulmillr.com/funding/"
}
],
"license": "MIT",
"dependencies": {
"anymatch": "~3.1.2",
"braces": "~3.0.2",
"glob-parent": "~5.1.2",
"is-binary-path": "~2.1.0",
"is-glob": "~4.0.1",
"normalize-path": "~3.0.0",
"readdirp": "~3.6.0"
},
"engines": {
"node": ">= 8.10.0"
},
"optionalDependencies": {
"fsevents": "~2.3.2"
}
},
"../modules/ecash-agora/node_modules/chronik-client": {
"resolved": "../modules/chronik-client",
"link": true
},
"../modules/ecash-agora/node_modules/clean-stack": {
"version": "2.2.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"../modules/ecash-agora/node_modules/cliui": {
"version": "7.0.4",
"dev": true,
"license": "ISC",
"dependencies": {
"string-width": "^4.2.0",
"strip-ansi": "^6.0.0",
"wrap-ansi": "^7.0.0"
}
},
"../modules/ecash-agora/node_modules/color-convert": {
"version": "2.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"color-name": "~1.1.4"
},
"engines": {
"node": ">=7.0.0"
}
},
"../modules/ecash-agora/node_modules/color-name": {
"version": "1.1.4",
"dev": true,
"license": "MIT"
},
"../modules/ecash-agora/node_modules/commondir": {
"version": "1.0.1",
"dev": true,
"license": "MIT"
},
"../modules/ecash-agora/node_modules/concat-map": {
"version": "0.0.1",
"dev": true,
"license": "MIT"
},
"../modules/ecash-agora/node_modules/convert-source-map": {
"version": "1.9.0",
"dev": true,
"license": "MIT"
},
"../modules/ecash-agora/node_modules/create-require": {
"version": "1.1.1",
"dev": true,
"license": "MIT"
},
"../modules/ecash-agora/node_modules/cross-spawn": {
"version": "7.0.6",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
"integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
"dev": true,
"license": "MIT",
"dependencies": {
"path-key": "^3.1.0",
"shebang-command": "^2.0.0",
"which": "^2.0.1"
},
"engines": {
"node": ">= 8"
}
},
"../modules/ecash-agora/node_modules/crypt": {
"version": "0.0.2",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": "*"
}
},
"../modules/ecash-agora/node_modules/debug": {
"version": "4.3.4",
"dev": true,
"license": "MIT",
"dependencies": {
"ms": "2.1.2"
},
"engines": {
"node": ">=6.0"
},
"peerDependenciesMeta": {
"supports-color": {
"optional": true
}
}
},
"../modules/ecash-agora/node_modules/debug/node_modules/ms": {
"version": "2.1.2",
"dev": true,
"license": "MIT"
},
"../modules/ecash-agora/node_modules/decamelize": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-agora/node_modules/deep-eql": {
"version": "4.1.3",
"dev": true,
"license": "MIT",
"dependencies": {
"type-detect": "^4.0.0"
},
"engines": {
"node": ">=6"
}
},
"../modules/ecash-agora/node_modules/default-require-extensions": {
"version": "3.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"strip-bom": "^4.0.0"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-agora/node_modules/diff": {
"version": "5.0.0",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.3.1"
}
},
"../modules/ecash-agora/node_modules/ecash-lib": {
"resolved": "../modules/ecash-lib",
"link": true
},
"../modules/ecash-agora/node_modules/electron-to-chromium": {
"version": "1.4.731",
"dev": true,
"license": "ISC"
},
"../modules/ecash-agora/node_modules/emoji-regex": {
"version": "8.0.0",
"dev": true,
"license": "MIT"
},
"../modules/ecash-agora/node_modules/es6-error": {
"version": "4.1.1",
"dev": true,
"license": "MIT"
},
"../modules/ecash-agora/node_modules/esbuild": {
"version": "0.19.12",
"dev": true,
"hasInstallScript": true,
"license": "MIT",
"bin": {
"esbuild": "bin/esbuild"
},
"engines": {
"node": ">=12"
},
"optionalDependencies": {
"@esbuild/aix-ppc64": "0.19.12",
"@esbuild/android-arm": "0.19.12",
"@esbuild/android-arm64": "0.19.12",
"@esbuild/android-x64": "0.19.12",
"@esbuild/darwin-arm64": "0.19.12",
"@esbuild/darwin-x64": "0.19.12",
"@esbuild/freebsd-arm64": "0.19.12",
"@esbuild/freebsd-x64": "0.19.12",
"@esbuild/linux-arm": "0.19.12",
"@esbuild/linux-arm64": "0.19.12",
"@esbuild/linux-ia32": "0.19.12",
"@esbuild/linux-loong64": "0.19.12",
"@esbuild/linux-mips64el": "0.19.12",
"@esbuild/linux-ppc64": "0.19.12",
"@esbuild/linux-riscv64": "0.19.12",
"@esbuild/linux-s390x": "0.19.12",
"@esbuild/linux-x64": "0.19.12",
"@esbuild/netbsd-x64": "0.19.12",
"@esbuild/openbsd-x64": "0.19.12",
"@esbuild/sunos-x64": "0.19.12",
"@esbuild/win32-arm64": "0.19.12",
"@esbuild/win32-ia32": "0.19.12",
"@esbuild/win32-x64": "0.19.12"
}
},
"../modules/ecash-agora/node_modules/escalade": {
"version": "3.1.2",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"../modules/ecash-agora/node_modules/escape-string-regexp": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-agora/node_modules/esprima": {
"version": "4.0.1",
"dev": true,
"license": "BSD-2-Clause",
"bin": {
"esparse": "bin/esparse.js",
"esvalidate": "bin/esvalidate.js"
},
"engines": {
"node": ">=4"
}
},
"../modules/ecash-agora/node_modules/fill-range": {
"version": "7.1.1",
"dev": true,
"license": "MIT",
"dependencies": {
"to-regex-range": "^5.0.1"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-agora/node_modules/find-cache-dir": {
"version": "3.3.2",
"dev": true,
"license": "MIT",
"dependencies": {
"commondir": "^1.0.1",
"make-dir": "^3.0.2",
"pkg-dir": "^4.1.0"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/avajs/find-cache-dir?sponsor=1"
}
},
"../modules/ecash-agora/node_modules/find-up": {
"version": "5.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"locate-path": "^6.0.0",
"path-exists": "^4.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-agora/node_modules/flat": {
"version": "5.0.2",
"dev": true,
"license": "BSD-3-Clause",
"bin": {
"flat": "cli.js"
}
},
"../modules/ecash-agora/node_modules/foreground-child": {
"version": "2.0.0",
"dev": true,
"license": "ISC",
"dependencies": {
"cross-spawn": "^7.0.0",
"signal-exit": "^3.0.2"
},
"engines": {
"node": ">=8.0.0"
}
},
"../modules/ecash-agora/node_modules/fromentries": {
"version": "1.3.2",
"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"
}
],
"license": "MIT"
},
"../modules/ecash-agora/node_modules/fs.realpath": {
"version": "1.0.0",
"dev": true,
"license": "ISC"
},
"../modules/ecash-agora/node_modules/gensync": {
"version": "1.0.0-beta.2",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-agora/node_modules/get-caller-file": {
"version": "2.0.5",
"dev": true,
"license": "ISC",
"engines": {
"node": "6.* || 8.* || >= 10.*"
}
},
"../modules/ecash-agora/node_modules/get-func-name": {
"version": "2.0.2",
"dev": true,
"license": "MIT",
"engines": {
"node": "*"
}
},
"../modules/ecash-agora/node_modules/get-package-type": {
"version": "0.1.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8.0.0"
}
},
"../modules/ecash-agora/node_modules/get-tsconfig": {
"version": "4.7.3",
"dev": true,
"license": "MIT",
"dependencies": {
"resolve-pkg-maps": "^1.0.0"
},
"funding": {
"url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
}
},
"../modules/ecash-agora/node_modules/glob": {
"version": "8.1.0",
"dev": true,
"license": "ISC",
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^5.0.1",
"once": "^1.3.0"
},
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"../modules/ecash-agora/node_modules/glob-parent": {
"version": "5.1.2",
"dev": true,
"license": "ISC",
"dependencies": {
"is-glob": "^4.0.1"
},
"engines": {
"node": ">= 6"
}
},
"../modules/ecash-agora/node_modules/graceful-fs": {
"version": "4.2.11",
"dev": true,
"license": "ISC"
},
"../modules/ecash-agora/node_modules/has-flag": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecash-agora/node_modules/hasha": {
"version": "5.2.2",
"dev": true,
"license": "MIT",
"dependencies": {
"is-stream": "^2.0.0",
"type-fest": "^0.8.0"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-agora/node_modules/he": {
"version": "1.2.0",
"dev": true,
"license": "MIT",
"bin": {
"he": "bin/he"
}
},
"../modules/ecash-agora/node_modules/html-escaper": {
"version": "2.0.2",
"dev": true,
"license": "MIT"
},
"../modules/ecash-agora/node_modules/imurmurhash": {
"version": "0.1.4",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.8.19"
}
},
"../modules/ecash-agora/node_modules/indent-string": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecash-agora/node_modules/inflight": {
"version": "1.0.6",
"dev": true,
"license": "ISC",
"dependencies": {
"once": "^1.3.0",
"wrappy": "1"
}
},
"../modules/ecash-agora/node_modules/inherits": {
"version": "2.0.4",
"dev": true,
"license": "ISC"
},
"../modules/ecash-agora/node_modules/is-binary-path": {
"version": "2.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"binary-extensions": "^2.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-agora/node_modules/is-buffer": {
"version": "1.1.6",
"dev": true,
"license": "MIT"
},
"../modules/ecash-agora/node_modules/is-extglob": {
"version": "2.1.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"../modules/ecash-agora/node_modules/is-fullwidth-code-point": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecash-agora/node_modules/is-glob": {
"version": "4.0.3",
"dev": true,
"license": "MIT",
"dependencies": {
"is-extglob": "^2.1.1"
},
"engines": {
"node": ">=0.10.0"
}
},
"../modules/ecash-agora/node_modules/is-number": {
"version": "7.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.12.0"
}
},
"../modules/ecash-agora/node_modules/is-plain-obj": {
"version": "2.1.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecash-agora/node_modules/is-stream": {
"version": "2.0.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-agora/node_modules/is-typedarray": {
"version": "1.0.0",
"dev": true,
"license": "MIT"
},
"../modules/ecash-agora/node_modules/is-unicode-supported": {
"version": "0.1.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-agora/node_modules/is-windows": {
"version": "1.0.2",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"../modules/ecash-agora/node_modules/isexe": {
"version": "2.0.0",
"dev": true,
"license": "ISC"
},
"../modules/ecash-agora/node_modules/istanbul-lib-coverage": {
"version": "3.2.2",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": ">=8"
}
},
"../modules/ecash-agora/node_modules/istanbul-lib-hook": {
"version": "3.0.0",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"append-transform": "^2.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-agora/node_modules/istanbul-lib-instrument": {
"version": "4.0.3",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"@babel/core": "^7.7.5",
"@istanbuljs/schema": "^0.1.2",
"istanbul-lib-coverage": "^3.0.0",
"semver": "^6.3.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-agora/node_modules/istanbul-lib-processinfo": {
"version": "2.0.3",
"dev": true,
"license": "ISC",
"dependencies": {
"archy": "^1.0.0",
"cross-spawn": "^7.0.3",
"istanbul-lib-coverage": "^3.2.0",
"p-map": "^3.0.0",
"rimraf": "^3.0.0",
"uuid": "^8.3.2"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-agora/node_modules/istanbul-lib-report": {
"version": "3.0.1",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"istanbul-lib-coverage": "^3.0.0",
"make-dir": "^4.0.0",
"supports-color": "^7.1.0"
},
"engines": {
"node": ">=10"
}
},
"../modules/ecash-agora/node_modules/istanbul-lib-report/node_modules/lru-cache": {
"version": "6.0.0",
"dev": true,
"license": "ISC",
"dependencies": {
"yallist": "^4.0.0"
},
"engines": {
"node": ">=10"
}
},
"../modules/ecash-agora/node_modules/istanbul-lib-report/node_modules/make-dir": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"semver": "^7.5.3"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-agora/node_modules/istanbul-lib-report/node_modules/semver": {
"version": "7.6.0",
"dev": true,
"license": "ISC",
"dependencies": {
"lru-cache": "^6.0.0"
},
"bin": {
"semver": "bin/semver.js"
},
"engines": {
"node": ">=10"
}
},
"../modules/ecash-agora/node_modules/istanbul-lib-report/node_modules/supports-color": {
"version": "7.2.0",
"dev": true,
"license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-agora/node_modules/istanbul-lib-report/node_modules/yallist": {
"version": "4.0.0",
"dev": true,
"license": "ISC"
},
"../modules/ecash-agora/node_modules/istanbul-lib-source-maps": {
"version": "4.0.1",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"debug": "^4.1.1",
"istanbul-lib-coverage": "^3.0.0",
"source-map": "^0.6.1"
},
"engines": {
"node": ">=10"
}
},
"../modules/ecash-agora/node_modules/istanbul-reports": {
"version": "3.1.7",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"html-escaper": "^2.0.0",
"istanbul-lib-report": "^3.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-agora/node_modules/js-tokens": {
"version": "4.0.0",
"dev": true,
"license": "MIT"
},
"../modules/ecash-agora/node_modules/js-yaml": {
"version": "4.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"argparse": "^2.0.1"
},
"bin": {
"js-yaml": "bin/js-yaml.js"
}
},
"../modules/ecash-agora/node_modules/jsesc": {
"version": "2.5.2",
"dev": true,
"license": "MIT",
"bin": {
"jsesc": "bin/jsesc"
},
"engines": {
"node": ">=4"
}
},
"../modules/ecash-agora/node_modules/json5": {
"version": "2.2.3",
"dev": true,
"license": "MIT",
"bin": {
"json5": "lib/cli.js"
},
"engines": {
"node": ">=6"
}
},
"../modules/ecash-agora/node_modules/locate-path": {
"version": "6.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-locate": "^5.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-agora/node_modules/lodash.flattendeep": {
"version": "4.4.0",
"dev": true,
"license": "MIT"
},
"../modules/ecash-agora/node_modules/log-symbols": {
"version": "4.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"chalk": "^4.1.0",
"is-unicode-supported": "^0.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-agora/node_modules/loupe": {
"version": "2.3.7",
"dev": true,
"license": "MIT",
"dependencies": {
"get-func-name": "^2.0.1"
}
},
"../modules/ecash-agora/node_modules/lru-cache": {
"version": "5.1.1",
"dev": true,
"license": "ISC",
"dependencies": {
"yallist": "^3.0.2"
}
},
"../modules/ecash-agora/node_modules/make-dir": {
"version": "3.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"semver": "^6.0.0"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-agora/node_modules/make-error": {
"version": "1.3.6",
"dev": true,
"license": "ISC"
},
"../modules/ecash-agora/node_modules/md5": {
"version": "2.3.0",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"charenc": "0.0.2",
"crypt": "0.0.2",
"is-buffer": "~1.1.6"
}
},
"../modules/ecash-agora/node_modules/minimatch": {
"version": "5.0.1",
"dev": true,
"license": "ISC",
"dependencies": {
"brace-expansion": "^2.0.1"
},
"engines": {
"node": ">=10"
}
},
"../modules/ecash-agora/node_modules/mkdirp": {
"version": "3.0.1",
"dev": true,
"license": "MIT",
"bin": {
"mkdirp": "dist/cjs/src/bin.js"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"../modules/ecash-agora/node_modules/mocha": {
"version": "10.4.0",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-colors": "4.1.1",
"browser-stdout": "1.3.1",
"chokidar": "3.5.3",
"debug": "4.3.4",
"diff": "5.0.0",
"escape-string-regexp": "4.0.0",
"find-up": "5.0.0",
"glob": "8.1.0",
"he": "1.2.0",
"js-yaml": "4.1.0",
"log-symbols": "4.1.0",
"minimatch": "5.0.1",
"ms": "2.1.3",
"serialize-javascript": "6.0.0",
"strip-json-comments": "3.1.1",
"supports-color": "8.1.1",
"workerpool": "6.2.1",
"yargs": "16.2.0",
"yargs-parser": "20.2.4",
"yargs-unparser": "2.0.0"
},
"bin": {
"_mocha": "bin/_mocha",
"mocha": "bin/mocha.js"
},
"engines": {
"node": ">= 14.0.0"
}
},
"../modules/ecash-agora/node_modules/mocha-junit-reporter": {
"version": "2.2.1",
"dev": true,
"license": "MIT",
"dependencies": {
"debug": "^4.3.4",
"md5": "^2.3.0",
"mkdirp": "^3.0.0",
"strip-ansi": "^6.0.1",
"xml": "^1.0.1"
},
"peerDependencies": {
"mocha": ">=2.2.5"
}
},
"../modules/ecash-agora/node_modules/ms": {
"version": "2.1.3",
"dev": true,
"license": "MIT"
},
"../modules/ecash-agora/node_modules/node-preload": {
"version": "0.2.1",
"dev": true,
"license": "MIT",
"dependencies": {
"process-on-spawn": "^1.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-agora/node_modules/node-releases": {
"version": "2.0.14",
"dev": true,
"license": "MIT"
},
"../modules/ecash-agora/node_modules/normalize-path": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"../modules/ecash-agora/node_modules/nyc": {
"version": "15.1.0",
"dev": true,
"license": "ISC",
"dependencies": {
"@istanbuljs/load-nyc-config": "^1.0.0",
"@istanbuljs/schema": "^0.1.2",
"caching-transform": "^4.0.0",
"convert-source-map": "^1.7.0",
"decamelize": "^1.2.0",
"find-cache-dir": "^3.2.0",
"find-up": "^4.1.0",
"foreground-child": "^2.0.0",
"get-package-type": "^0.1.0",
"glob": "^7.1.6",
"istanbul-lib-coverage": "^3.0.0",
"istanbul-lib-hook": "^3.0.0",
"istanbul-lib-instrument": "^4.0.0",
"istanbul-lib-processinfo": "^2.0.2",
"istanbul-lib-report": "^3.0.0",
"istanbul-lib-source-maps": "^4.0.0",
"istanbul-reports": "^3.0.2",
"make-dir": "^3.0.0",
"node-preload": "^0.2.1",
"p-map": "^3.0.0",
"process-on-spawn": "^1.0.0",
"resolve-from": "^5.0.0",
"rimraf": "^3.0.0",
"signal-exit": "^3.0.2",
"spawn-wrap": "^2.0.0",
"test-exclude": "^6.0.0",
"yargs": "^15.0.2"
},
"bin": {
"nyc": "bin/nyc.js"
},
"engines": {
"node": ">=8.9"
}
},
"../modules/ecash-agora/node_modules/nyc/node_modules/brace-expansion": {
"version": "1.1.11",
"dev": true,
"license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"../modules/ecash-agora/node_modules/nyc/node_modules/camelcase": {
"version": "5.3.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"../modules/ecash-agora/node_modules/nyc/node_modules/cliui": {
"version": "6.0.0",
"dev": true,
"license": "ISC",
"dependencies": {
"string-width": "^4.2.0",
"strip-ansi": "^6.0.0",
"wrap-ansi": "^6.2.0"
}
},
"../modules/ecash-agora/node_modules/nyc/node_modules/decamelize": {
"version": "1.2.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"../modules/ecash-agora/node_modules/nyc/node_modules/find-up": {
"version": "4.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"locate-path": "^5.0.0",
"path-exists": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-agora/node_modules/nyc/node_modules/glob": {
"version": "7.2.3",
"dev": true,
"license": "ISC",
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.1.1",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
},
"engines": {
"node": "*"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"../modules/ecash-agora/node_modules/nyc/node_modules/locate-path": {
"version": "5.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-locate": "^4.1.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-agora/node_modules/nyc/node_modules/minimatch": {
"version": "3.1.2",
"dev": true,
"license": "ISC",
"dependencies": {
"brace-expansion": "^1.1.7"
},
"engines": {
"node": "*"
}
},
"../modules/ecash-agora/node_modules/nyc/node_modules/p-limit": {
"version": "2.3.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-try": "^2.0.0"
},
"engines": {
"node": ">=6"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-agora/node_modules/nyc/node_modules/p-locate": {
"version": "4.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-limit": "^2.2.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-agora/node_modules/nyc/node_modules/resolve-from": {
"version": "5.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecash-agora/node_modules/nyc/node_modules/wrap-ansi": {
"version": "6.2.0",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
"strip-ansi": "^6.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-agora/node_modules/nyc/node_modules/y18n": {
"version": "4.0.3",
"dev": true,
"license": "ISC"
},
"../modules/ecash-agora/node_modules/nyc/node_modules/yargs": {
"version": "15.4.1",
"dev": true,
"license": "MIT",
"dependencies": {
"cliui": "^6.0.0",
"decamelize": "^1.2.0",
"find-up": "^4.1.0",
"get-caller-file": "^2.0.1",
"require-directory": "^2.1.1",
"require-main-filename": "^2.0.0",
"set-blocking": "^2.0.0",
"string-width": "^4.2.0",
"which-module": "^2.0.0",
"y18n": "^4.0.0",
"yargs-parser": "^18.1.2"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-agora/node_modules/nyc/node_modules/yargs-parser": {
"version": "18.1.3",
"dev": true,
"license": "ISC",
"dependencies": {
"camelcase": "^5.0.0",
"decamelize": "^1.2.0"
},
"engines": {
"node": ">=6"
}
},
"../modules/ecash-agora/node_modules/once": {
"version": "1.4.0",
"dev": true,
"license": "ISC",
"dependencies": {
"wrappy": "1"
}
},
"../modules/ecash-agora/node_modules/p-limit": {
"version": "3.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"yocto-queue": "^0.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-agora/node_modules/p-locate": {
"version": "5.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-limit": "^3.0.2"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-agora/node_modules/p-map": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"aggregate-error": "^3.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-agora/node_modules/p-try": {
"version": "2.2.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"../modules/ecash-agora/node_modules/package-hash": {
"version": "4.0.0",
"dev": true,
"license": "ISC",
"dependencies": {
"graceful-fs": "^4.1.15",
"hasha": "^5.0.0",
"lodash.flattendeep": "^4.4.0",
"release-zalgo": "^1.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-agora/node_modules/path-exists": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecash-agora/node_modules/path-is-absolute": {
"version": "1.0.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"../modules/ecash-agora/node_modules/path-key": {
"version": "3.1.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecash-agora/node_modules/pathval": {
"version": "1.1.1",
"dev": true,
"license": "MIT",
"engines": {
"node": "*"
}
},
"../modules/ecash-agora/node_modules/picocolors": {
"version": "1.0.0",
"dev": true,
"license": "ISC"
},
"../modules/ecash-agora/node_modules/picomatch": {
"version": "2.3.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8.6"
},
"funding": {
"url": "https://github.com/sponsors/jonschlinkert"
}
},
"../modules/ecash-agora/node_modules/pkg-dir": {
"version": "4.2.0",
"dev": true,
"license": "MIT",
"dependencies": {
"find-up": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-agora/node_modules/pkg-dir/node_modules/find-up": {
"version": "4.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"locate-path": "^5.0.0",
"path-exists": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-agora/node_modules/pkg-dir/node_modules/locate-path": {
"version": "5.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-locate": "^4.1.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-agora/node_modules/pkg-dir/node_modules/p-limit": {
"version": "2.3.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-try": "^2.0.0"
},
"engines": {
"node": ">=6"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-agora/node_modules/pkg-dir/node_modules/p-locate": {
"version": "4.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-limit": "^2.2.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-agora/node_modules/process-on-spawn": {
"version": "1.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"fromentries": "^1.2.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-agora/node_modules/randombytes": {
"version": "2.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"safe-buffer": "^5.1.0"
}
},
"../modules/ecash-agora/node_modules/readdirp": {
"version": "3.6.0",
"dev": true,
"license": "MIT",
"dependencies": {
"picomatch": "^2.2.1"
},
"engines": {
"node": ">=8.10.0"
}
},
"../modules/ecash-agora/node_modules/release-zalgo": {
"version": "1.0.0",
"dev": true,
"license": "ISC",
"dependencies": {
"es6-error": "^4.0.1"
},
"engines": {
"node": ">=4"
}
},
"../modules/ecash-agora/node_modules/require-directory": {
"version": "2.1.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"../modules/ecash-agora/node_modules/require-main-filename": {
"version": "2.0.0",
"dev": true,
"license": "ISC"
},
"../modules/ecash-agora/node_modules/resolve-pkg-maps": {
"version": "1.0.0",
"dev": true,
"license": "MIT",
"funding": {
"url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
}
},
"../modules/ecash-agora/node_modules/rimraf": {
"version": "3.0.2",
"dev": true,
"license": "ISC",
"dependencies": {
"glob": "^7.1.3"
},
"bin": {
"rimraf": "bin.js"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"../modules/ecash-agora/node_modules/rimraf/node_modules/brace-expansion": {
"version": "1.1.11",
"dev": true,
"license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"../modules/ecash-agora/node_modules/rimraf/node_modules/glob": {
"version": "7.2.3",
"dev": true,
"license": "ISC",
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.1.1",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
},
"engines": {
"node": "*"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"../modules/ecash-agora/node_modules/rimraf/node_modules/minimatch": {
"version": "3.1.2",
"dev": true,
"license": "ISC",
"dependencies": {
"brace-expansion": "^1.1.7"
},
"engines": {
"node": "*"
}
},
"../modules/ecash-agora/node_modules/safe-buffer": {
"version": "5.2.1",
"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"
}
],
"license": "MIT"
},
"../modules/ecash-agora/node_modules/semver": {
"version": "6.3.1",
"dev": true,
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
}
},
"../modules/ecash-agora/node_modules/serialize-javascript": {
"version": "6.0.0",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"randombytes": "^2.1.0"
}
},
"../modules/ecash-agora/node_modules/set-blocking": {
"version": "2.0.0",
"dev": true,
"license": "ISC"
},
"../modules/ecash-agora/node_modules/shebang-command": {
"version": "2.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"shebang-regex": "^3.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-agora/node_modules/shebang-regex": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecash-agora/node_modules/signal-exit": {
"version": "3.0.7",
"dev": true,
"license": "ISC"
},
"../modules/ecash-agora/node_modules/source-map": {
"version": "0.6.1",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
}
},
"../modules/ecash-agora/node_modules/source-map-support": {
"version": "0.5.21",
"dev": true,
"license": "MIT",
"dependencies": {
"buffer-from": "^1.0.0",
"source-map": "^0.6.0"
}
},
"../modules/ecash-agora/node_modules/spawn-wrap": {
"version": "2.0.0",
"dev": true,
"license": "ISC",
"dependencies": {
"foreground-child": "^2.0.0",
"is-windows": "^1.0.2",
"make-dir": "^3.0.0",
"rimraf": "^3.0.0",
"signal-exit": "^3.0.2",
"which": "^2.0.1"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-agora/node_modules/sprintf-js": {
"version": "1.0.3",
"dev": true,
"license": "BSD-3-Clause"
},
"../modules/ecash-agora/node_modules/string-width": {
"version": "4.2.3",
"dev": true,
"license": "MIT",
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
"strip-ansi": "^6.0.1"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-agora/node_modules/strip-ansi": {
"version": "6.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-regex": "^5.0.1"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-agora/node_modules/strip-bom": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecash-agora/node_modules/strip-json-comments": {
"version": "3.1.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-agora/node_modules/supports-color": {
"version": "8.1.1",
"dev": true,
"license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/supports-color?sponsor=1"
}
},
"../modules/ecash-agora/node_modules/test-exclude": {
"version": "6.0.0",
"dev": true,
"license": "ISC",
"dependencies": {
"@istanbuljs/schema": "^0.1.2",
"glob": "^7.1.4",
"minimatch": "^3.0.4"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-agora/node_modules/test-exclude/node_modules/brace-expansion": {
"version": "1.1.11",
"dev": true,
"license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"../modules/ecash-agora/node_modules/test-exclude/node_modules/glob": {
"version": "7.2.3",
"dev": true,
"license": "ISC",
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.1.1",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
},
"engines": {
"node": "*"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"../modules/ecash-agora/node_modules/test-exclude/node_modules/minimatch": {
"version": "3.1.2",
"dev": true,
"license": "ISC",
"dependencies": {
"brace-expansion": "^1.1.7"
},
"engines": {
"node": "*"
}
},
"../modules/ecash-agora/node_modules/to-fast-properties": {
"version": "2.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"../modules/ecash-agora/node_modules/to-regex-range": {
"version": "5.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"is-number": "^7.0.0"
},
"engines": {
"node": ">=8.0"
}
},
"../modules/ecash-agora/node_modules/ts-node": {
"version": "10.9.2",
"dev": true,
"license": "MIT",
"dependencies": {
"@cspotcode/source-map-support": "^0.8.0",
"@tsconfig/node10": "^1.0.7",
"@tsconfig/node12": "^1.0.7",
"@tsconfig/node14": "^1.0.0",
"@tsconfig/node16": "^1.0.2",
"acorn": "^8.4.1",
"acorn-walk": "^8.1.1",
"arg": "^4.1.0",
"create-require": "^1.1.0",
"diff": "^4.0.1",
"make-error": "^1.1.1",
"v8-compile-cache-lib": "^3.0.1",
"yn": "3.1.1"
},
"bin": {
"ts-node": "dist/bin.js",
"ts-node-cwd": "dist/bin-cwd.js",
"ts-node-esm": "dist/bin-esm.js",
"ts-node-script": "dist/bin-script.js",
"ts-node-transpile-only": "dist/bin-transpile.js",
"ts-script": "dist/bin-script-deprecated.js"
},
"peerDependencies": {
"@swc/core": ">=1.2.50",
"@swc/wasm": ">=1.2.50",
"@types/node": "*",
"typescript": ">=2.7"
},
"peerDependenciesMeta": {
"@swc/core": {
"optional": true
},
"@swc/wasm": {
"optional": true
}
}
},
"../modules/ecash-agora/node_modules/ts-node/node_modules/diff": {
"version": "4.0.2",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.3.1"
}
},
"../modules/ecash-agora/node_modules/tsx": {
"version": "4.7.2",
"dev": true,
"license": "MIT",
"dependencies": {
"esbuild": "~0.19.10",
"get-tsconfig": "^4.7.2"
},
"bin": {
"tsx": "dist/cli.mjs"
},
"engines": {
"node": ">=18.0.0"
},
"optionalDependencies": {
"fsevents": "~2.3.3"
}
},
"../modules/ecash-agora/node_modules/type-detect": {
"version": "4.0.8",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"../modules/ecash-agora/node_modules/type-fest": {
"version": "0.8.1",
"dev": true,
"license": "(MIT OR CC0-1.0)",
"engines": {
"node": ">=8"
}
},
"../modules/ecash-agora/node_modules/typedarray-to-buffer": {
"version": "3.1.5",
"dev": true,
"license": "MIT",
"dependencies": {
"is-typedarray": "^1.0.0"
}
},
"../modules/ecash-agora/node_modules/typescript": {
"version": "5.4.3",
"dev": true,
"license": "Apache-2.0",
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
},
"engines": {
"node": ">=14.17"
}
},
"../modules/ecash-agora/node_modules/undici-types": {
"version": "5.26.5",
"dev": true,
"license": "MIT"
},
"../modules/ecash-agora/node_modules/update-browserslist-db": {
"version": "1.0.13",
"dev": true,
"funding": [
{
"type": "opencollective",
"url": "https://opencollective.com/browserslist"
},
{
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/browserslist"
},
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
"license": "MIT",
"dependencies": {
"escalade": "^3.1.1",
"picocolors": "^1.0.0"
},
"bin": {
"update-browserslist-db": "cli.js"
},
"peerDependencies": {
"browserslist": ">= 4.21.0"
}
},
"../modules/ecash-agora/node_modules/uuid": {
"version": "8.3.2",
"dev": true,
"license": "MIT",
"bin": {
"uuid": "dist/bin/uuid"
}
},
"../modules/ecash-agora/node_modules/v8-compile-cache-lib": {
"version": "3.0.1",
"dev": true,
"license": "MIT"
},
"../modules/ecash-agora/node_modules/which": {
"version": "2.0.2",
"dev": true,
"license": "ISC",
"dependencies": {
"isexe": "^2.0.0"
},
"bin": {
"node-which": "bin/node-which"
},
"engines": {
"node": ">= 8"
}
},
"../modules/ecash-agora/node_modules/which-module": {
"version": "2.0.1",
"dev": true,
"license": "ISC"
},
"../modules/ecash-agora/node_modules/workerpool": {
"version": "6.2.1",
"dev": true,
"license": "Apache-2.0"
},
"../modules/ecash-agora/node_modules/wrap-ansi": {
"version": "7.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
"strip-ansi": "^6.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
"../modules/ecash-agora/node_modules/wrappy": {
"version": "1.0.2",
"dev": true,
"license": "ISC"
},
"../modules/ecash-agora/node_modules/write-file-atomic": {
"version": "3.0.3",
"dev": true,
"license": "ISC",
"dependencies": {
"imurmurhash": "^0.1.4",
"is-typedarray": "^1.0.0",
"signal-exit": "^3.0.2",
"typedarray-to-buffer": "^3.1.5"
}
},
"../modules/ecash-agora/node_modules/xml": {
"version": "1.0.1",
"dev": true,
"license": "MIT"
},
"../modules/ecash-agora/node_modules/y18n": {
"version": "5.0.8",
"dev": true,
"license": "ISC",
"engines": {
"node": ">=10"
}
},
"../modules/ecash-agora/node_modules/yallist": {
"version": "3.1.1",
"dev": true,
"license": "ISC"
},
"../modules/ecash-agora/node_modules/yargs": {
"version": "16.2.0",
"dev": true,
"license": "MIT",
"dependencies": {
"cliui": "^7.0.2",
"escalade": "^3.1.1",
"get-caller-file": "^2.0.5",
"require-directory": "^2.1.1",
"string-width": "^4.2.0",
"y18n": "^5.0.5",
"yargs-parser": "^20.2.2"
},
"engines": {
"node": ">=10"
}
},
"../modules/ecash-agora/node_modules/yargs-parser": {
"version": "20.2.4",
"dev": true,
"license": "ISC",
"engines": {
"node": ">=10"
}
},
"../modules/ecash-agora/node_modules/yargs-unparser": {
"version": "2.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"camelcase": "^6.0.0",
"decamelize": "^4.0.0",
"flat": "^5.0.2",
"is-plain-obj": "^2.1.0"
},
"engines": {
"node": ">=10"
}
},
"../modules/ecash-agora/node_modules/yn": {
"version": "3.1.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"../modules/ecash-agora/node_modules/yocto-queue": {
"version": "0.1.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-lib": {
"version": "3.2.0",
"license": "MIT",
"dependencies": {
"b58-ts": "file:../b58-ts",
"ecashaddrjs": "file:../ecashaddrjs"
},
"devDependencies": {
"@istanbuljs/nyc-config-typescript": "^1.0.2",
"@types/chai": "^4.3.14",
"@types/mocha": "^10.0.6",
"@types/node": "^20.12.7",
"chai": "^5.1.0",
"chronik-client": "file:../chronik-client",
"mocha": "^10.4.0",
"mocha-junit-reporter": "^2.2.1",
"nyc": "^15.1.0",
"random-js": "^2.1.0",
"source-map-support": "^0.5.21",
"ts-node": "^10.9.2",
"tsx": "^4.7.2",
"typescript": "^5.4.3"
}
},
"../modules/ecash-lib/node_modules/@ampproject/remapping": {
"version": "2.3.0",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.24"
},
"engines": {
"node": ">=6.0.0"
}
},
"../modules/ecash-lib/node_modules/@ampproject/remapping/node_modules/@jridgewell/trace-mapping": {
"version": "0.3.25",
"dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/resolve-uri": "^3.1.0",
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
"../modules/ecash-lib/node_modules/@babel/code-frame": {
"version": "7.24.2",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/highlight": "^7.24.2",
"picocolors": "^1.0.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-lib/node_modules/@babel/compat-data": {
"version": "7.24.4",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-lib/node_modules/@babel/core": {
"version": "7.24.4",
"dev": true,
"license": "MIT",
"dependencies": {
"@ampproject/remapping": "^2.2.0",
"@babel/code-frame": "^7.24.2",
"@babel/generator": "^7.24.4",
"@babel/helper-compilation-targets": "^7.23.6",
"@babel/helper-module-transforms": "^7.23.3",
"@babel/helpers": "^7.24.4",
"@babel/parser": "^7.24.4",
"@babel/template": "^7.24.0",
"@babel/traverse": "^7.24.1",
"@babel/types": "^7.24.0",
"convert-source-map": "^2.0.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
"json5": "^2.2.3",
"semver": "^6.3.1"
},
"engines": {
"node": ">=6.9.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/babel"
}
},
"../modules/ecash-lib/node_modules/@babel/core/node_modules/convert-source-map": {
"version": "2.0.0",
"dev": true,
"license": "MIT"
},
"../modules/ecash-lib/node_modules/@babel/generator": {
"version": "7.24.4",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/types": "^7.24.0",
"@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.25",
"jsesc": "^2.5.1"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-lib/node_modules/@babel/generator/node_modules/@jridgewell/trace-mapping": {
"version": "0.3.25",
"dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/resolve-uri": "^3.1.0",
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
"../modules/ecash-lib/node_modules/@babel/helper-compilation-targets": {
"version": "7.23.6",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/compat-data": "^7.23.5",
"@babel/helper-validator-option": "^7.23.5",
"browserslist": "^4.22.2",
"lru-cache": "^5.1.1",
"semver": "^6.3.1"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-lib/node_modules/@babel/helper-environment-visitor": {
"version": "7.22.20",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-lib/node_modules/@babel/helper-function-name": {
"version": "7.23.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/template": "^7.22.15",
"@babel/types": "^7.23.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-lib/node_modules/@babel/helper-hoist-variables": {
"version": "7.22.5",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/types": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-lib/node_modules/@babel/helper-module-imports": {
"version": "7.24.3",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/types": "^7.24.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-lib/node_modules/@babel/helper-module-transforms": {
"version": "7.23.3",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-environment-visitor": "^7.22.20",
"@babel/helper-module-imports": "^7.22.15",
"@babel/helper-simple-access": "^7.22.5",
"@babel/helper-split-export-declaration": "^7.22.6",
"@babel/helper-validator-identifier": "^7.22.20"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0"
}
},
"../modules/ecash-lib/node_modules/@babel/helper-simple-access": {
"version": "7.22.5",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/types": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-lib/node_modules/@babel/helper-split-export-declaration": {
"version": "7.22.6",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/types": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-lib/node_modules/@babel/helper-string-parser": {
"version": "7.24.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-lib/node_modules/@babel/helper-validator-identifier": {
"version": "7.22.20",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-lib/node_modules/@babel/helper-validator-option": {
"version": "7.23.5",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-lib/node_modules/@babel/helpers": {
"version": "7.24.4",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/template": "^7.24.0",
"@babel/traverse": "^7.24.1",
"@babel/types": "^7.24.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-lib/node_modules/@babel/highlight": {
"version": "7.24.2",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-validator-identifier": "^7.22.20",
"chalk": "^2.4.2",
"js-tokens": "^4.0.0",
"picocolors": "^1.0.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-lib/node_modules/@babel/highlight/node_modules/ansi-styles": {
"version": "3.2.1",
"dev": true,
"license": "MIT",
"dependencies": {
"color-convert": "^1.9.0"
},
"engines": {
"node": ">=4"
}
},
"../modules/ecash-lib/node_modules/@babel/highlight/node_modules/chalk": {
"version": "2.4.2",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
"supports-color": "^5.3.0"
},
"engines": {
"node": ">=4"
}
},
"../modules/ecash-lib/node_modules/@babel/highlight/node_modules/color-convert": {
"version": "1.9.3",
"dev": true,
"license": "MIT",
"dependencies": {
"color-name": "1.1.3"
}
},
"../modules/ecash-lib/node_modules/@babel/highlight/node_modules/color-name": {
"version": "1.1.3",
"dev": true,
"license": "MIT"
},
"../modules/ecash-lib/node_modules/@babel/highlight/node_modules/escape-string-regexp": {
"version": "1.0.5",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.8.0"
}
},
"../modules/ecash-lib/node_modules/@babel/highlight/node_modules/has-flag": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"../modules/ecash-lib/node_modules/@babel/highlight/node_modules/supports-color": {
"version": "5.5.0",
"dev": true,
"license": "MIT",
"dependencies": {
"has-flag": "^3.0.0"
},
"engines": {
"node": ">=4"
}
},
"../modules/ecash-lib/node_modules/@babel/parser": {
"version": "7.24.4",
"dev": true,
"license": "MIT",
"bin": {
"parser": "bin/babel-parser.js"
},
"engines": {
"node": ">=6.0.0"
}
},
"../modules/ecash-lib/node_modules/@babel/template": {
"version": "7.24.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.23.5",
"@babel/parser": "^7.24.0",
"@babel/types": "^7.24.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-lib/node_modules/@babel/traverse": {
"version": "7.24.1",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.24.1",
"@babel/generator": "^7.24.1",
"@babel/helper-environment-visitor": "^7.22.20",
"@babel/helper-function-name": "^7.23.0",
"@babel/helper-hoist-variables": "^7.22.5",
"@babel/helper-split-export-declaration": "^7.22.6",
"@babel/parser": "^7.24.1",
"@babel/types": "^7.24.0",
"debug": "^4.3.1",
"globals": "^11.1.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-lib/node_modules/@babel/traverse/node_modules/globals": {
"version": "11.12.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"../modules/ecash-lib/node_modules/@babel/types": {
"version": "7.24.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-string-parser": "^7.23.4",
"@babel/helper-validator-identifier": "^7.22.20",
"to-fast-properties": "^2.0.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-lib/node_modules/@cspotcode/source-map-support": {
"version": "0.8.1",
"dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/trace-mapping": "0.3.9"
},
"engines": {
"node": ">=12"
}
},
"../modules/ecash-lib/node_modules/@esbuild/linux-x64": {
"version": "0.19.12",
"cpu": [
"x64"
],
"dev": true,
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"../modules/ecash-lib/node_modules/@istanbuljs/load-nyc-config": {
"version": "1.1.0",
"dev": true,
"license": "ISC",
"dependencies": {
"camelcase": "^5.3.1",
"find-up": "^4.1.0",
"get-package-type": "^0.1.0",
"js-yaml": "^3.13.1",
"resolve-from": "^5.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-lib/node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": {
"version": "1.0.10",
"dev": true,
"license": "MIT",
"dependencies": {
"sprintf-js": "~1.0.2"
}
},
"../modules/ecash-lib/node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": {
"version": "5.3.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"../modules/ecash-lib/node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": {
"version": "4.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"locate-path": "^5.0.0",
"path-exists": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-lib/node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": {
"version": "3.14.1",
"dev": true,
"license": "MIT",
"dependencies": {
"argparse": "^1.0.7",
"esprima": "^4.0.0"
},
"bin": {
"js-yaml": "bin/js-yaml.js"
}
},
"../modules/ecash-lib/node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": {
"version": "5.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-locate": "^4.1.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-lib/node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": {
"version": "2.3.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-try": "^2.0.0"
},
"engines": {
"node": ">=6"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-lib/node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": {
"version": "4.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-limit": "^2.2.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-lib/node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": {
"version": "5.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecash-lib/node_modules/@istanbuljs/nyc-config-typescript": {
"version": "1.0.2",
"dev": true,
"license": "ISC",
"dependencies": {
"@istanbuljs/schema": "^0.1.2"
},
"engines": {
"node": ">=8"
},
"peerDependencies": {
"nyc": ">=15"
}
},
"../modules/ecash-lib/node_modules/@istanbuljs/schema": {
"version": "0.1.3",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecash-lib/node_modules/@jridgewell/gen-mapping": {
"version": "0.3.5",
"dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/set-array": "^1.2.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
"@jridgewell/trace-mapping": "^0.3.24"
},
"engines": {
"node": ">=6.0.0"
}
},
"../modules/ecash-lib/node_modules/@jridgewell/gen-mapping/node_modules/@jridgewell/trace-mapping": {
"version": "0.3.25",
"dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/resolve-uri": "^3.1.0",
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
"../modules/ecash-lib/node_modules/@jridgewell/resolve-uri": {
"version": "3.1.2",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.0.0"
}
},
"../modules/ecash-lib/node_modules/@jridgewell/set-array": {
"version": "1.2.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.0.0"
}
},
"../modules/ecash-lib/node_modules/@jridgewell/sourcemap-codec": {
"version": "1.4.15",
"dev": true,
"license": "MIT"
},
"../modules/ecash-lib/node_modules/@jridgewell/trace-mapping": {
"version": "0.3.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/resolve-uri": "^3.0.3",
"@jridgewell/sourcemap-codec": "^1.4.10"
}
},
"../modules/ecash-lib/node_modules/@tsconfig/node10": {
"version": "1.0.11",
"dev": true,
"license": "MIT"
},
"../modules/ecash-lib/node_modules/@tsconfig/node12": {
"version": "1.0.11",
"dev": true,
"license": "MIT"
},
"../modules/ecash-lib/node_modules/@tsconfig/node14": {
"version": "1.0.3",
"dev": true,
"license": "MIT"
},
"../modules/ecash-lib/node_modules/@tsconfig/node16": {
"version": "1.0.4",
"dev": true,
"license": "MIT"
},
"../modules/ecash-lib/node_modules/@types/chai": {
"version": "4.3.14",
"dev": true,
"license": "MIT"
},
"../modules/ecash-lib/node_modules/@types/mocha": {
"version": "10.0.6",
"dev": true,
"license": "MIT"
},
"../modules/ecash-lib/node_modules/@types/node": {
"version": "20.12.7",
"dev": true,
"license": "MIT",
"dependencies": {
"undici-types": "~5.26.4"
}
},
"../modules/ecash-lib/node_modules/acorn": {
"version": "8.11.3",
"dev": true,
"license": "MIT",
"bin": {
"acorn": "bin/acorn"
},
"engines": {
"node": ">=0.4.0"
}
},
"../modules/ecash-lib/node_modules/acorn-walk": {
"version": "8.3.2",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.4.0"
}
},
"../modules/ecash-lib/node_modules/aggregate-error": {
"version": "3.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"clean-stack": "^2.0.0",
"indent-string": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-lib/node_modules/ansi-colors": {
"version": "4.1.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"../modules/ecash-lib/node_modules/ansi-regex": {
"version": "5.0.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecash-lib/node_modules/ansi-styles": {
"version": "4.3.0",
"dev": true,
"license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"../modules/ecash-lib/node_modules/anymatch": {
"version": "3.1.3",
"dev": true,
"license": "ISC",
"dependencies": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
},
"engines": {
"node": ">= 8"
}
},
"../modules/ecash-lib/node_modules/append-transform": {
"version": "2.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"default-require-extensions": "^3.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-lib/node_modules/archy": {
"version": "1.0.0",
"dev": true,
"license": "MIT"
},
"../modules/ecash-lib/node_modules/arg": {
"version": "4.1.3",
"dev": true,
"license": "MIT"
},
"../modules/ecash-lib/node_modules/argparse": {
"version": "2.0.1",
"dev": true,
"license": "Python-2.0"
},
"../modules/ecash-lib/node_modules/assertion-error": {
"version": "2.0.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=12"
}
},
"../modules/ecash-lib/node_modules/balanced-match": {
"version": "1.0.2",
"dev": true,
"license": "MIT"
},
"../modules/ecash-lib/node_modules/binary-extensions": {
"version": "2.3.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-lib/node_modules/brace-expansion": {
"version": "2.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0"
}
},
"../modules/ecash-lib/node_modules/braces": {
"version": "3.0.3",
"dev": true,
"license": "MIT",
"dependencies": {
"fill-range": "^7.1.1"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-lib/node_modules/browser-stdout": {
"version": "1.3.1",
"dev": true,
"license": "ISC"
},
"../modules/ecash-lib/node_modules/browserslist": {
"version": "4.23.0",
"dev": true,
"funding": [
{
"type": "opencollective",
"url": "https://opencollective.com/browserslist"
},
{
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/browserslist"
},
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
"license": "MIT",
"dependencies": {
"caniuse-lite": "^1.0.30001587",
"electron-to-chromium": "^1.4.668",
"node-releases": "^2.0.14",
"update-browserslist-db": "^1.0.13"
},
"bin": {
"browserslist": "cli.js"
},
"engines": {
"node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
}
},
"../modules/ecash-lib/node_modules/buffer-from": {
"version": "1.1.2",
"dev": true,
"license": "MIT"
},
"../modules/ecash-lib/node_modules/caching-transform": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"hasha": "^5.0.0",
"make-dir": "^3.0.0",
"package-hash": "^4.0.0",
"write-file-atomic": "^3.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-lib/node_modules/camelcase": {
"version": "6.3.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-lib/node_modules/chai": {
"version": "5.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"assertion-error": "^2.0.1",
"check-error": "^2.0.0",
"deep-eql": "^5.0.1",
"loupe": "^3.1.0",
"pathval": "^2.0.0"
},
"engines": {
"node": ">=12"
}
},
"../modules/ecash-lib/node_modules/chai/node_modules/check-error": {
"version": "2.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 16"
}
},
"../modules/ecash-lib/node_modules/chalk": {
"version": "4.1.2",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
"../modules/ecash-lib/node_modules/chalk/node_modules/supports-color": {
"version": "7.2.0",
"dev": true,
"license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-lib/node_modules/charenc": {
"version": "0.0.2",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": "*"
}
},
"../modules/ecash-lib/node_modules/chokidar": {
"version": "3.5.3",
"dev": true,
"funding": [
{
"type": "individual",
"url": "https://paulmillr.com/funding/"
}
],
"license": "MIT",
"dependencies": {
"anymatch": "~3.1.2",
"braces": "~3.0.2",
"glob-parent": "~5.1.2",
"is-binary-path": "~2.1.0",
"is-glob": "~4.0.1",
"normalize-path": "~3.0.0",
"readdirp": "~3.6.0"
},
"engines": {
"node": ">= 8.10.0"
},
"optionalDependencies": {
"fsevents": "~2.3.2"
}
},
"../modules/ecash-lib/node_modules/chronik-client": {
"resolved": "../modules/chronik-client",
"link": true
},
"../modules/ecash-lib/node_modules/clean-stack": {
"version": "2.2.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"../modules/ecash-lib/node_modules/cliui": {
"version": "7.0.4",
"dev": true,
"license": "ISC",
"dependencies": {
"string-width": "^4.2.0",
"strip-ansi": "^6.0.0",
"wrap-ansi": "^7.0.0"
}
},
"../modules/ecash-lib/node_modules/color-convert": {
"version": "2.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"color-name": "~1.1.4"
},
"engines": {
"node": ">=7.0.0"
}
},
"../modules/ecash-lib/node_modules/color-name": {
"version": "1.1.4",
"dev": true,
"license": "MIT"
},
"../modules/ecash-lib/node_modules/commondir": {
"version": "1.0.1",
"dev": true,
"license": "MIT"
},
"../modules/ecash-lib/node_modules/concat-map": {
"version": "0.0.1",
"dev": true,
"license": "MIT"
},
"../modules/ecash-lib/node_modules/convert-source-map": {
"version": "1.9.0",
"dev": true,
"license": "MIT"
},
"../modules/ecash-lib/node_modules/create-require": {
"version": "1.1.1",
"dev": true,
"license": "MIT"
},
"../modules/ecash-lib/node_modules/cross-spawn": {
"version": "7.0.6",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
"integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
"dev": true,
"license": "MIT",
"dependencies": {
"path-key": "^3.1.0",
"shebang-command": "^2.0.0",
"which": "^2.0.1"
},
"engines": {
"node": ">= 8"
}
},
"../modules/ecash-lib/node_modules/crypt": {
"version": "0.0.2",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": "*"
}
},
"../modules/ecash-lib/node_modules/debug": {
"version": "4.3.4",
"dev": true,
"license": "MIT",
"dependencies": {
"ms": "2.1.2"
},
"engines": {
"node": ">=6.0"
},
"peerDependenciesMeta": {
"supports-color": {
"optional": true
}
}
},
"../modules/ecash-lib/node_modules/debug/node_modules/ms": {
"version": "2.1.2",
"dev": true,
"license": "MIT"
},
"../modules/ecash-lib/node_modules/decamelize": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-lib/node_modules/deep-eql": {
"version": "5.0.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"../modules/ecash-lib/node_modules/default-require-extensions": {
"version": "3.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"strip-bom": "^4.0.0"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-lib/node_modules/diff": {
"version": "5.0.0",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.3.1"
}
},
"../modules/ecash-lib/node_modules/ecashaddrjs": {
"resolved": "../modules/ecashaddrjs",
"link": true
},
"../modules/ecash-lib/node_modules/electron-to-chromium": {
"version": "1.4.731",
"dev": true,
"license": "ISC"
},
"../modules/ecash-lib/node_modules/emoji-regex": {
"version": "8.0.0",
"dev": true,
"license": "MIT"
},
"../modules/ecash-lib/node_modules/es6-error": {
"version": "4.1.1",
"dev": true,
"license": "MIT"
},
"../modules/ecash-lib/node_modules/esbuild": {
"version": "0.19.12",
"dev": true,
"hasInstallScript": true,
"license": "MIT",
"bin": {
"esbuild": "bin/esbuild"
},
"engines": {
"node": ">=12"
},
"optionalDependencies": {
"@esbuild/aix-ppc64": "0.19.12",
"@esbuild/android-arm": "0.19.12",
"@esbuild/android-arm64": "0.19.12",
"@esbuild/android-x64": "0.19.12",
"@esbuild/darwin-arm64": "0.19.12",
"@esbuild/darwin-x64": "0.19.12",
"@esbuild/freebsd-arm64": "0.19.12",
"@esbuild/freebsd-x64": "0.19.12",
"@esbuild/linux-arm": "0.19.12",
"@esbuild/linux-arm64": "0.19.12",
"@esbuild/linux-ia32": "0.19.12",
"@esbuild/linux-loong64": "0.19.12",
"@esbuild/linux-mips64el": "0.19.12",
"@esbuild/linux-ppc64": "0.19.12",
"@esbuild/linux-riscv64": "0.19.12",
"@esbuild/linux-s390x": "0.19.12",
"@esbuild/linux-x64": "0.19.12",
"@esbuild/netbsd-x64": "0.19.12",
"@esbuild/openbsd-x64": "0.19.12",
"@esbuild/sunos-x64": "0.19.12",
"@esbuild/win32-arm64": "0.19.12",
"@esbuild/win32-ia32": "0.19.12",
"@esbuild/win32-x64": "0.19.12"
}
},
"../modules/ecash-lib/node_modules/escalade": {
"version": "3.1.2",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"../modules/ecash-lib/node_modules/escape-string-regexp": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-lib/node_modules/esprima": {
"version": "4.0.1",
"dev": true,
"license": "BSD-2-Clause",
"bin": {
"esparse": "bin/esparse.js",
"esvalidate": "bin/esvalidate.js"
},
"engines": {
"node": ">=4"
}
},
"../modules/ecash-lib/node_modules/fill-range": {
"version": "7.1.1",
"dev": true,
"license": "MIT",
"dependencies": {
"to-regex-range": "^5.0.1"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-lib/node_modules/find-cache-dir": {
"version": "3.3.2",
"dev": true,
"license": "MIT",
"dependencies": {
"commondir": "^1.0.1",
"make-dir": "^3.0.2",
"pkg-dir": "^4.1.0"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/avajs/find-cache-dir?sponsor=1"
}
},
"../modules/ecash-lib/node_modules/find-up": {
"version": "5.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"locate-path": "^6.0.0",
"path-exists": "^4.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-lib/node_modules/flat": {
"version": "5.0.2",
"dev": true,
"license": "BSD-3-Clause",
"bin": {
"flat": "cli.js"
}
},
"../modules/ecash-lib/node_modules/foreground-child": {
"version": "2.0.0",
"dev": true,
"license": "ISC",
"dependencies": {
"cross-spawn": "^7.0.0",
"signal-exit": "^3.0.2"
},
"engines": {
"node": ">=8.0.0"
}
},
"../modules/ecash-lib/node_modules/fromentries": {
"version": "1.3.2",
"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"
}
],
"license": "MIT"
},
"../modules/ecash-lib/node_modules/fs.realpath": {
"version": "1.0.0",
"dev": true,
"license": "ISC"
},
"../modules/ecash-lib/node_modules/gensync": {
"version": "1.0.0-beta.2",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-lib/node_modules/get-caller-file": {
"version": "2.0.5",
"dev": true,
"license": "ISC",
"engines": {
"node": "6.* || 8.* || >= 10.*"
}
},
"../modules/ecash-lib/node_modules/get-func-name": {
"version": "2.0.2",
"dev": true,
"license": "MIT",
"engines": {
"node": "*"
}
},
"../modules/ecash-lib/node_modules/get-package-type": {
"version": "0.1.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8.0.0"
}
},
"../modules/ecash-lib/node_modules/get-tsconfig": {
"version": "4.7.3",
"dev": true,
"license": "MIT",
"dependencies": {
"resolve-pkg-maps": "^1.0.0"
},
"funding": {
"url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
}
},
"../modules/ecash-lib/node_modules/glob": {
"version": "8.1.0",
"dev": true,
"license": "ISC",
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^5.0.1",
"once": "^1.3.0"
},
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"../modules/ecash-lib/node_modules/glob-parent": {
"version": "5.1.2",
"dev": true,
"license": "ISC",
"dependencies": {
"is-glob": "^4.0.1"
},
"engines": {
"node": ">= 6"
}
},
"../modules/ecash-lib/node_modules/graceful-fs": {
"version": "4.2.11",
"dev": true,
"license": "ISC"
},
"../modules/ecash-lib/node_modules/has-flag": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecash-lib/node_modules/hasha": {
"version": "5.2.2",
"dev": true,
"license": "MIT",
"dependencies": {
"is-stream": "^2.0.0",
"type-fest": "^0.8.0"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-lib/node_modules/he": {
"version": "1.2.0",
"dev": true,
"license": "MIT",
"bin": {
"he": "bin/he"
}
},
"../modules/ecash-lib/node_modules/html-escaper": {
"version": "2.0.2",
"dev": true,
"license": "MIT"
},
"../modules/ecash-lib/node_modules/imurmurhash": {
"version": "0.1.4",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.8.19"
}
},
"../modules/ecash-lib/node_modules/indent-string": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecash-lib/node_modules/inflight": {
"version": "1.0.6",
"dev": true,
"license": "ISC",
"dependencies": {
"once": "^1.3.0",
"wrappy": "1"
}
},
"../modules/ecash-lib/node_modules/inherits": {
"version": "2.0.4",
"dev": true,
"license": "ISC"
},
"../modules/ecash-lib/node_modules/is-binary-path": {
"version": "2.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"binary-extensions": "^2.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-lib/node_modules/is-buffer": {
"version": "1.1.6",
"dev": true,
"license": "MIT"
},
"../modules/ecash-lib/node_modules/is-extglob": {
"version": "2.1.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"../modules/ecash-lib/node_modules/is-fullwidth-code-point": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecash-lib/node_modules/is-glob": {
"version": "4.0.3",
"dev": true,
"license": "MIT",
"dependencies": {
"is-extglob": "^2.1.1"
},
"engines": {
"node": ">=0.10.0"
}
},
"../modules/ecash-lib/node_modules/is-number": {
"version": "7.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.12.0"
}
},
"../modules/ecash-lib/node_modules/is-plain-obj": {
"version": "2.1.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecash-lib/node_modules/is-stream": {
"version": "2.0.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-lib/node_modules/is-typedarray": {
"version": "1.0.0",
"dev": true,
"license": "MIT"
},
"../modules/ecash-lib/node_modules/is-unicode-supported": {
"version": "0.1.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-lib/node_modules/is-windows": {
"version": "1.0.2",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"../modules/ecash-lib/node_modules/isexe": {
"version": "2.0.0",
"dev": true,
"license": "ISC"
},
"../modules/ecash-lib/node_modules/istanbul-lib-coverage": {
"version": "3.2.2",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": ">=8"
}
},
"../modules/ecash-lib/node_modules/istanbul-lib-hook": {
"version": "3.0.0",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"append-transform": "^2.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-lib/node_modules/istanbul-lib-instrument": {
"version": "4.0.3",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"@babel/core": "^7.7.5",
"@istanbuljs/schema": "^0.1.2",
"istanbul-lib-coverage": "^3.0.0",
"semver": "^6.3.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-lib/node_modules/istanbul-lib-processinfo": {
"version": "2.0.3",
"dev": true,
"license": "ISC",
"dependencies": {
"archy": "^1.0.0",
"cross-spawn": "^7.0.3",
"istanbul-lib-coverage": "^3.2.0",
"p-map": "^3.0.0",
"rimraf": "^3.0.0",
"uuid": "^8.3.2"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-lib/node_modules/istanbul-lib-report": {
"version": "3.0.1",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"istanbul-lib-coverage": "^3.0.0",
"make-dir": "^4.0.0",
"supports-color": "^7.1.0"
},
"engines": {
"node": ">=10"
}
},
"../modules/ecash-lib/node_modules/istanbul-lib-report/node_modules/lru-cache": {
"version": "6.0.0",
"dev": true,
"license": "ISC",
"dependencies": {
"yallist": "^4.0.0"
},
"engines": {
"node": ">=10"
}
},
"../modules/ecash-lib/node_modules/istanbul-lib-report/node_modules/make-dir": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"semver": "^7.5.3"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-lib/node_modules/istanbul-lib-report/node_modules/semver": {
"version": "7.6.0",
"dev": true,
"license": "ISC",
"dependencies": {
"lru-cache": "^6.0.0"
},
"bin": {
"semver": "bin/semver.js"
},
"engines": {
"node": ">=10"
}
},
"../modules/ecash-lib/node_modules/istanbul-lib-report/node_modules/supports-color": {
"version": "7.2.0",
"dev": true,
"license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-lib/node_modules/istanbul-lib-report/node_modules/yallist": {
"version": "4.0.0",
"dev": true,
"license": "ISC"
},
"../modules/ecash-lib/node_modules/istanbul-lib-source-maps": {
"version": "4.0.1",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"debug": "^4.1.1",
"istanbul-lib-coverage": "^3.0.0",
"source-map": "^0.6.1"
},
"engines": {
"node": ">=10"
}
},
"../modules/ecash-lib/node_modules/istanbul-reports": {
"version": "3.1.7",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"html-escaper": "^2.0.0",
"istanbul-lib-report": "^3.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-lib/node_modules/js-tokens": {
"version": "4.0.0",
"dev": true,
"license": "MIT"
},
"../modules/ecash-lib/node_modules/js-yaml": {
"version": "4.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"argparse": "^2.0.1"
},
"bin": {
"js-yaml": "bin/js-yaml.js"
}
},
"../modules/ecash-lib/node_modules/jsesc": {
"version": "2.5.2",
"dev": true,
"license": "MIT",
"bin": {
"jsesc": "bin/jsesc"
},
"engines": {
"node": ">=4"
}
},
"../modules/ecash-lib/node_modules/json5": {
"version": "2.2.3",
"dev": true,
"license": "MIT",
"bin": {
"json5": "lib/cli.js"
},
"engines": {
"node": ">=6"
}
},
"../modules/ecash-lib/node_modules/locate-path": {
"version": "6.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-locate": "^5.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-lib/node_modules/lodash.flattendeep": {
"version": "4.4.0",
"dev": true,
"license": "MIT"
},
"../modules/ecash-lib/node_modules/log-symbols": {
"version": "4.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"chalk": "^4.1.0",
"is-unicode-supported": "^0.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-lib/node_modules/loupe": {
"version": "3.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"get-func-name": "^2.0.1"
}
},
"../modules/ecash-lib/node_modules/lru-cache": {
"version": "5.1.1",
"dev": true,
"license": "ISC",
"dependencies": {
"yallist": "^3.0.2"
}
},
"../modules/ecash-lib/node_modules/make-dir": {
"version": "3.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"semver": "^6.0.0"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-lib/node_modules/make-error": {
"version": "1.3.6",
"dev": true,
"license": "ISC"
},
"../modules/ecash-lib/node_modules/md5": {
"version": "2.3.0",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"charenc": "0.0.2",
"crypt": "0.0.2",
"is-buffer": "~1.1.6"
}
},
"../modules/ecash-lib/node_modules/minimatch": {
"version": "5.0.1",
"dev": true,
"license": "ISC",
"dependencies": {
"brace-expansion": "^2.0.1"
},
"engines": {
"node": ">=10"
}
},
"../modules/ecash-lib/node_modules/mkdirp": {
"version": "3.0.1",
"dev": true,
"license": "MIT",
"bin": {
"mkdirp": "dist/cjs/src/bin.js"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"../modules/ecash-lib/node_modules/mocha": {
"version": "10.4.0",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-colors": "4.1.1",
"browser-stdout": "1.3.1",
"chokidar": "3.5.3",
"debug": "4.3.4",
"diff": "5.0.0",
"escape-string-regexp": "4.0.0",
"find-up": "5.0.0",
"glob": "8.1.0",
"he": "1.2.0",
"js-yaml": "4.1.0",
"log-symbols": "4.1.0",
"minimatch": "5.0.1",
"ms": "2.1.3",
"serialize-javascript": "6.0.0",
"strip-json-comments": "3.1.1",
"supports-color": "8.1.1",
"workerpool": "6.2.1",
"yargs": "16.2.0",
"yargs-parser": "20.2.4",
"yargs-unparser": "2.0.0"
},
"bin": {
"_mocha": "bin/_mocha",
"mocha": "bin/mocha.js"
},
"engines": {
"node": ">= 14.0.0"
}
},
"../modules/ecash-lib/node_modules/mocha-junit-reporter": {
"version": "2.2.1",
"dev": true,
"license": "MIT",
"dependencies": {
"debug": "^4.3.4",
"md5": "^2.3.0",
"mkdirp": "^3.0.0",
"strip-ansi": "^6.0.1",
"xml": "^1.0.1"
},
"peerDependencies": {
"mocha": ">=2.2.5"
}
},
"../modules/ecash-lib/node_modules/ms": {
"version": "2.1.3",
"dev": true,
"license": "MIT"
},
"../modules/ecash-lib/node_modules/node-preload": {
"version": "0.2.1",
"dev": true,
"license": "MIT",
"dependencies": {
"process-on-spawn": "^1.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-lib/node_modules/node-releases": {
"version": "2.0.14",
"dev": true,
"license": "MIT"
},
"../modules/ecash-lib/node_modules/normalize-path": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"../modules/ecash-lib/node_modules/nyc": {
"version": "15.1.0",
"dev": true,
"license": "ISC",
"dependencies": {
"@istanbuljs/load-nyc-config": "^1.0.0",
"@istanbuljs/schema": "^0.1.2",
"caching-transform": "^4.0.0",
"convert-source-map": "^1.7.0",
"decamelize": "^1.2.0",
"find-cache-dir": "^3.2.0",
"find-up": "^4.1.0",
"foreground-child": "^2.0.0",
"get-package-type": "^0.1.0",
"glob": "^7.1.6",
"istanbul-lib-coverage": "^3.0.0",
"istanbul-lib-hook": "^3.0.0",
"istanbul-lib-instrument": "^4.0.0",
"istanbul-lib-processinfo": "^2.0.2",
"istanbul-lib-report": "^3.0.0",
"istanbul-lib-source-maps": "^4.0.0",
"istanbul-reports": "^3.0.2",
"make-dir": "^3.0.0",
"node-preload": "^0.2.1",
"p-map": "^3.0.0",
"process-on-spawn": "^1.0.0",
"resolve-from": "^5.0.0",
"rimraf": "^3.0.0",
"signal-exit": "^3.0.2",
"spawn-wrap": "^2.0.0",
"test-exclude": "^6.0.0",
"yargs": "^15.0.2"
},
"bin": {
"nyc": "bin/nyc.js"
},
"engines": {
"node": ">=8.9"
}
},
"../modules/ecash-lib/node_modules/nyc/node_modules/brace-expansion": {
"version": "1.1.11",
"dev": true,
"license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"../modules/ecash-lib/node_modules/nyc/node_modules/camelcase": {
"version": "5.3.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"../modules/ecash-lib/node_modules/nyc/node_modules/cliui": {
"version": "6.0.0",
"dev": true,
"license": "ISC",
"dependencies": {
"string-width": "^4.2.0",
"strip-ansi": "^6.0.0",
"wrap-ansi": "^6.2.0"
}
},
"../modules/ecash-lib/node_modules/nyc/node_modules/decamelize": {
"version": "1.2.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"../modules/ecash-lib/node_modules/nyc/node_modules/find-up": {
"version": "4.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"locate-path": "^5.0.0",
"path-exists": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-lib/node_modules/nyc/node_modules/glob": {
"version": "7.2.3",
"dev": true,
"license": "ISC",
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.1.1",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
},
"engines": {
"node": "*"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"../modules/ecash-lib/node_modules/nyc/node_modules/locate-path": {
"version": "5.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-locate": "^4.1.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-lib/node_modules/nyc/node_modules/minimatch": {
"version": "3.1.2",
"dev": true,
"license": "ISC",
"dependencies": {
"brace-expansion": "^1.1.7"
},
"engines": {
"node": "*"
}
},
"../modules/ecash-lib/node_modules/nyc/node_modules/p-limit": {
"version": "2.3.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-try": "^2.0.0"
},
"engines": {
"node": ">=6"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-lib/node_modules/nyc/node_modules/p-locate": {
"version": "4.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-limit": "^2.2.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-lib/node_modules/nyc/node_modules/resolve-from": {
"version": "5.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecash-lib/node_modules/nyc/node_modules/wrap-ansi": {
"version": "6.2.0",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
"strip-ansi": "^6.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-lib/node_modules/nyc/node_modules/y18n": {
"version": "4.0.3",
"dev": true,
"license": "ISC"
},
"../modules/ecash-lib/node_modules/nyc/node_modules/yargs": {
"version": "15.4.1",
"dev": true,
"license": "MIT",
"dependencies": {
"cliui": "^6.0.0",
"decamelize": "^1.2.0",
"find-up": "^4.1.0",
"get-caller-file": "^2.0.1",
"require-directory": "^2.1.1",
"require-main-filename": "^2.0.0",
"set-blocking": "^2.0.0",
"string-width": "^4.2.0",
"which-module": "^2.0.0",
"y18n": "^4.0.0",
"yargs-parser": "^18.1.2"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-lib/node_modules/nyc/node_modules/yargs-parser": {
"version": "18.1.3",
"dev": true,
"license": "ISC",
"dependencies": {
"camelcase": "^5.0.0",
"decamelize": "^1.2.0"
},
"engines": {
"node": ">=6"
}
},
"../modules/ecash-lib/node_modules/once": {
"version": "1.4.0",
"dev": true,
"license": "ISC",
"dependencies": {
"wrappy": "1"
}
},
"../modules/ecash-lib/node_modules/p-limit": {
"version": "3.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"yocto-queue": "^0.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-lib/node_modules/p-locate": {
"version": "5.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-limit": "^3.0.2"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-lib/node_modules/p-map": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"aggregate-error": "^3.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-lib/node_modules/p-try": {
"version": "2.2.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"../modules/ecash-lib/node_modules/package-hash": {
"version": "4.0.0",
"dev": true,
"license": "ISC",
"dependencies": {
"graceful-fs": "^4.1.15",
"hasha": "^5.0.0",
"lodash.flattendeep": "^4.4.0",
"release-zalgo": "^1.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-lib/node_modules/path-exists": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecash-lib/node_modules/path-is-absolute": {
"version": "1.0.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"../modules/ecash-lib/node_modules/path-key": {
"version": "3.1.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecash-lib/node_modules/pathval": {
"version": "2.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 14.16"
}
},
"../modules/ecash-lib/node_modules/picocolors": {
"version": "1.0.0",
"dev": true,
"license": "ISC"
},
"../modules/ecash-lib/node_modules/picomatch": {
"version": "2.3.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8.6"
},
"funding": {
"url": "https://github.com/sponsors/jonschlinkert"
}
},
"../modules/ecash-lib/node_modules/pkg-dir": {
"version": "4.2.0",
"dev": true,
"license": "MIT",
"dependencies": {
"find-up": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-lib/node_modules/pkg-dir/node_modules/find-up": {
"version": "4.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"locate-path": "^5.0.0",
"path-exists": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-lib/node_modules/pkg-dir/node_modules/locate-path": {
"version": "5.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-locate": "^4.1.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-lib/node_modules/pkg-dir/node_modules/p-limit": {
"version": "2.3.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-try": "^2.0.0"
},
"engines": {
"node": ">=6"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-lib/node_modules/pkg-dir/node_modules/p-locate": {
"version": "4.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-limit": "^2.2.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-lib/node_modules/process-on-spawn": {
"version": "1.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"fromentries": "^1.2.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-lib/node_modules/randombytes": {
"version": "2.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"safe-buffer": "^5.1.0"
}
},
"../modules/ecash-lib/node_modules/readdirp": {
"version": "3.6.0",
"dev": true,
"license": "MIT",
"dependencies": {
"picomatch": "^2.2.1"
},
"engines": {
"node": ">=8.10.0"
}
},
"../modules/ecash-lib/node_modules/release-zalgo": {
"version": "1.0.0",
"dev": true,
"license": "ISC",
"dependencies": {
"es6-error": "^4.0.1"
},
"engines": {
"node": ">=4"
}
},
"../modules/ecash-lib/node_modules/require-directory": {
"version": "2.1.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"../modules/ecash-lib/node_modules/require-main-filename": {
"version": "2.0.0",
"dev": true,
"license": "ISC"
},
"../modules/ecash-lib/node_modules/resolve-pkg-maps": {
"version": "1.0.0",
"dev": true,
"license": "MIT",
"funding": {
"url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
}
},
"../modules/ecash-lib/node_modules/rimraf": {
"version": "3.0.2",
"dev": true,
"license": "ISC",
"dependencies": {
"glob": "^7.1.3"
},
"bin": {
"rimraf": "bin.js"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"../modules/ecash-lib/node_modules/rimraf/node_modules/brace-expansion": {
"version": "1.1.11",
"dev": true,
"license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"../modules/ecash-lib/node_modules/rimraf/node_modules/glob": {
"version": "7.2.3",
"dev": true,
"license": "ISC",
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.1.1",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
},
"engines": {
"node": "*"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"../modules/ecash-lib/node_modules/rimraf/node_modules/minimatch": {
"version": "3.1.2",
"dev": true,
"license": "ISC",
"dependencies": {
"brace-expansion": "^1.1.7"
},
"engines": {
"node": "*"
}
},
"../modules/ecash-lib/node_modules/safe-buffer": {
"version": "5.2.1",
"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"
}
],
"license": "MIT"
},
"../modules/ecash-lib/node_modules/semver": {
"version": "6.3.1",
"dev": true,
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
}
},
"../modules/ecash-lib/node_modules/serialize-javascript": {
"version": "6.0.0",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"randombytes": "^2.1.0"
}
},
"../modules/ecash-lib/node_modules/set-blocking": {
"version": "2.0.0",
"dev": true,
"license": "ISC"
},
"../modules/ecash-lib/node_modules/shebang-command": {
"version": "2.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"shebang-regex": "^3.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-lib/node_modules/shebang-regex": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecash-lib/node_modules/signal-exit": {
"version": "3.0.7",
"dev": true,
"license": "ISC"
},
"../modules/ecash-lib/node_modules/source-map": {
"version": "0.6.1",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
}
},
"../modules/ecash-lib/node_modules/source-map-support": {
"version": "0.5.21",
"dev": true,
"license": "MIT",
"dependencies": {
"buffer-from": "^1.0.0",
"source-map": "^0.6.0"
}
},
"../modules/ecash-lib/node_modules/spawn-wrap": {
"version": "2.0.0",
"dev": true,
"license": "ISC",
"dependencies": {
"foreground-child": "^2.0.0",
"is-windows": "^1.0.2",
"make-dir": "^3.0.0",
"rimraf": "^3.0.0",
"signal-exit": "^3.0.2",
"which": "^2.0.1"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-lib/node_modules/sprintf-js": {
"version": "1.0.3",
"dev": true,
"license": "BSD-3-Clause"
},
"../modules/ecash-lib/node_modules/string-width": {
"version": "4.2.3",
"dev": true,
"license": "MIT",
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
"strip-ansi": "^6.0.1"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-lib/node_modules/strip-ansi": {
"version": "6.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-regex": "^5.0.1"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-lib/node_modules/strip-bom": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecash-lib/node_modules/strip-json-comments": {
"version": "3.1.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-lib/node_modules/supports-color": {
"version": "8.1.1",
"dev": true,
"license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/supports-color?sponsor=1"
}
},
"../modules/ecash-lib/node_modules/test-exclude": {
"version": "6.0.0",
"dev": true,
"license": "ISC",
"dependencies": {
"@istanbuljs/schema": "^0.1.2",
"glob": "^7.1.4",
"minimatch": "^3.0.4"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-lib/node_modules/test-exclude/node_modules/brace-expansion": {
"version": "1.1.11",
"dev": true,
"license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"../modules/ecash-lib/node_modules/test-exclude/node_modules/glob": {
"version": "7.2.3",
"dev": true,
"license": "ISC",
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.1.1",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
},
"engines": {
"node": "*"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"../modules/ecash-lib/node_modules/test-exclude/node_modules/minimatch": {
"version": "3.1.2",
"dev": true,
"license": "ISC",
"dependencies": {
"brace-expansion": "^1.1.7"
},
"engines": {
"node": "*"
}
},
"../modules/ecash-lib/node_modules/to-fast-properties": {
"version": "2.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"../modules/ecash-lib/node_modules/to-regex-range": {
"version": "5.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"is-number": "^7.0.0"
},
"engines": {
"node": ">=8.0"
}
},
"../modules/ecash-lib/node_modules/ts-node": {
"version": "10.9.2",
"dev": true,
"license": "MIT",
"dependencies": {
"@cspotcode/source-map-support": "^0.8.0",
"@tsconfig/node10": "^1.0.7",
"@tsconfig/node12": "^1.0.7",
"@tsconfig/node14": "^1.0.0",
"@tsconfig/node16": "^1.0.2",
"acorn": "^8.4.1",
"acorn-walk": "^8.1.1",
"arg": "^4.1.0",
"create-require": "^1.1.0",
"diff": "^4.0.1",
"make-error": "^1.1.1",
"v8-compile-cache-lib": "^3.0.1",
"yn": "3.1.1"
},
"bin": {
"ts-node": "dist/bin.js",
"ts-node-cwd": "dist/bin-cwd.js",
"ts-node-esm": "dist/bin-esm.js",
"ts-node-script": "dist/bin-script.js",
"ts-node-transpile-only": "dist/bin-transpile.js",
"ts-script": "dist/bin-script-deprecated.js"
},
"peerDependencies": {
"@swc/core": ">=1.2.50",
"@swc/wasm": ">=1.2.50",
"@types/node": "*",
"typescript": ">=2.7"
},
"peerDependenciesMeta": {
"@swc/core": {
"optional": true
},
"@swc/wasm": {
"optional": true
}
}
},
"../modules/ecash-lib/node_modules/ts-node/node_modules/diff": {
"version": "4.0.2",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.3.1"
}
},
"../modules/ecash-lib/node_modules/tsx": {
"version": "4.7.2",
"dev": true,
"license": "MIT",
"dependencies": {
"esbuild": "~0.19.10",
"get-tsconfig": "^4.7.2"
},
"bin": {
"tsx": "dist/cli.mjs"
},
"engines": {
"node": ">=18.0.0"
},
"optionalDependencies": {
"fsevents": "~2.3.3"
}
},
"../modules/ecash-lib/node_modules/type-fest": {
"version": "0.8.1",
"dev": true,
"license": "(MIT OR CC0-1.0)",
"engines": {
"node": ">=8"
}
},
"../modules/ecash-lib/node_modules/typedarray-to-buffer": {
"version": "3.1.5",
"dev": true,
"license": "MIT",
"dependencies": {
"is-typedarray": "^1.0.0"
}
},
"../modules/ecash-lib/node_modules/typescript": {
"version": "5.4.3",
"dev": true,
"license": "Apache-2.0",
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
},
"engines": {
"node": ">=14.17"
}
},
"../modules/ecash-lib/node_modules/undici-types": {
"version": "5.26.5",
"dev": true,
"license": "MIT"
},
"../modules/ecash-lib/node_modules/update-browserslist-db": {
"version": "1.0.13",
"dev": true,
"funding": [
{
"type": "opencollective",
"url": "https://opencollective.com/browserslist"
},
{
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/browserslist"
},
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
"license": "MIT",
"dependencies": {
"escalade": "^3.1.1",
"picocolors": "^1.0.0"
},
"bin": {
"update-browserslist-db": "cli.js"
},
"peerDependencies": {
"browserslist": ">= 4.21.0"
}
},
"../modules/ecash-lib/node_modules/uuid": {
"version": "8.3.2",
"dev": true,
"license": "MIT",
"bin": {
"uuid": "dist/bin/uuid"
}
},
"../modules/ecash-lib/node_modules/v8-compile-cache-lib": {
"version": "3.0.1",
"dev": true,
"license": "MIT"
},
"../modules/ecash-lib/node_modules/which": {
"version": "2.0.2",
"dev": true,
"license": "ISC",
"dependencies": {
"isexe": "^2.0.0"
},
"bin": {
"node-which": "bin/node-which"
},
"engines": {
"node": ">= 8"
}
},
"../modules/ecash-lib/node_modules/which-module": {
"version": "2.0.1",
"dev": true,
"license": "ISC"
},
"../modules/ecash-lib/node_modules/workerpool": {
"version": "6.2.1",
"dev": true,
"license": "Apache-2.0"
},
"../modules/ecash-lib/node_modules/wrap-ansi": {
"version": "7.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
"strip-ansi": "^6.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
"../modules/ecash-lib/node_modules/wrappy": {
"version": "1.0.2",
"dev": true,
"license": "ISC"
},
"../modules/ecash-lib/node_modules/write-file-atomic": {
"version": "3.0.3",
"dev": true,
"license": "ISC",
"dependencies": {
"imurmurhash": "^0.1.4",
"is-typedarray": "^1.0.0",
"signal-exit": "^3.0.2",
"typedarray-to-buffer": "^3.1.5"
}
},
"../modules/ecash-lib/node_modules/xml": {
"version": "1.0.1",
"dev": true,
"license": "MIT"
},
"../modules/ecash-lib/node_modules/y18n": {
"version": "5.0.8",
"dev": true,
"license": "ISC",
"engines": {
"node": ">=10"
}
},
"../modules/ecash-lib/node_modules/yallist": {
"version": "3.1.1",
"dev": true,
"license": "ISC"
},
"../modules/ecash-lib/node_modules/yargs": {
"version": "16.2.0",
"dev": true,
"license": "MIT",
"dependencies": {
"cliui": "^7.0.2",
"escalade": "^3.1.1",
"get-caller-file": "^2.0.5",
"require-directory": "^2.1.1",
"string-width": "^4.2.0",
"y18n": "^5.0.5",
"yargs-parser": "^20.2.2"
},
"engines": {
"node": ">=10"
}
},
"../modules/ecash-lib/node_modules/yargs-parser": {
"version": "20.2.4",
"dev": true,
"license": "ISC",
"engines": {
"node": ">=10"
}
},
"../modules/ecash-lib/node_modules/yargs-unparser": {
"version": "2.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"camelcase": "^6.0.0",
"decamelize": "^4.0.0",
"flat": "^5.0.2",
"is-plain-obj": "^2.1.0"
},
"engines": {
"node": ">=10"
}
},
"../modules/ecash-lib/node_modules/yn": {
"version": "3.1.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"../modules/ecash-lib/node_modules/yocto-queue": {
"version": "0.1.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-script": {
"version": "2.1.3",
"license": "MIT",
"devDependencies": {
"mocha-junit-reporter": "^2.2.0",
"mocha-suppress-logs": "^0.3.1",
"nyc": "^15.1.0",
"random-js": "^2.1.0"
}
},
"../modules/ecash-script/node_modules/@ampproject/remapping": {
"version": "2.2.1",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.0",
"@jridgewell/trace-mapping": "^0.3.9"
},
"engines": {
"node": ">=6.0.0"
}
},
"../modules/ecash-script/node_modules/@babel/code-frame": {
"version": "7.22.13",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/highlight": "^7.22.13",
"chalk": "^2.4.2"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-script/node_modules/@babel/code-frame/node_modules/ansi-styles": {
"version": "3.2.1",
"dev": true,
"license": "MIT",
"dependencies": {
"color-convert": "^1.9.0"
},
"engines": {
"node": ">=4"
}
},
"../modules/ecash-script/node_modules/@babel/code-frame/node_modules/chalk": {
"version": "2.4.2",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
"supports-color": "^5.3.0"
},
"engines": {
"node": ">=4"
}
},
"../modules/ecash-script/node_modules/@babel/code-frame/node_modules/color-convert": {
"version": "1.9.3",
"dev": true,
"license": "MIT",
"dependencies": {
"color-name": "1.1.3"
}
},
"../modules/ecash-script/node_modules/@babel/code-frame/node_modules/color-name": {
"version": "1.1.3",
"dev": true,
"license": "MIT"
},
"../modules/ecash-script/node_modules/@babel/code-frame/node_modules/escape-string-regexp": {
"version": "1.0.5",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.8.0"
}
},
"../modules/ecash-script/node_modules/@babel/code-frame/node_modules/has-flag": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"../modules/ecash-script/node_modules/@babel/code-frame/node_modules/supports-color": {
"version": "5.5.0",
"dev": true,
"license": "MIT",
"dependencies": {
"has-flag": "^3.0.0"
},
"engines": {
"node": ">=4"
}
},
"../modules/ecash-script/node_modules/@babel/compat-data": {
"version": "7.22.3",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-script/node_modules/@babel/core": {
"version": "7.22.1",
"dev": true,
"license": "MIT",
"dependencies": {
"@ampproject/remapping": "^2.2.0",
"@babel/code-frame": "^7.21.4",
"@babel/generator": "^7.22.0",
"@babel/helper-compilation-targets": "^7.22.1",
"@babel/helper-module-transforms": "^7.22.1",
"@babel/helpers": "^7.22.0",
"@babel/parser": "^7.22.0",
"@babel/template": "^7.21.9",
"@babel/traverse": "^7.22.1",
"@babel/types": "^7.22.0",
"convert-source-map": "^1.7.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
"json5": "^2.2.2",
"semver": "^6.3.0"
},
"engines": {
"node": ">=6.9.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/babel"
}
},
"../modules/ecash-script/node_modules/@babel/generator": {
"version": "7.23.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/types": "^7.23.0",
"@jridgewell/gen-mapping": "^0.3.2",
"@jridgewell/trace-mapping": "^0.3.17",
"jsesc": "^2.5.1"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-script/node_modules/@babel/helper-compilation-targets": {
"version": "7.22.1",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/compat-data": "^7.22.0",
"@babel/helper-validator-option": "^7.21.0",
"browserslist": "^4.21.3",
"lru-cache": "^5.1.1",
"semver": "^6.3.0"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0"
}
},
"../modules/ecash-script/node_modules/@babel/helper-environment-visitor": {
"version": "7.22.20",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-script/node_modules/@babel/helper-function-name": {
"version": "7.23.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/template": "^7.22.15",
"@babel/types": "^7.23.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-script/node_modules/@babel/helper-hoist-variables": {
"version": "7.22.5",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/types": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-script/node_modules/@babel/helper-module-imports": {
"version": "7.21.4",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/types": "^7.21.4"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-script/node_modules/@babel/helper-module-transforms": {
"version": "7.22.1",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-environment-visitor": "^7.22.1",
"@babel/helper-module-imports": "^7.21.4",
"@babel/helper-simple-access": "^7.21.5",
"@babel/helper-split-export-declaration": "^7.18.6",
"@babel/helper-validator-identifier": "^7.19.1",
"@babel/template": "^7.21.9",
"@babel/traverse": "^7.22.1",
"@babel/types": "^7.22.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-script/node_modules/@babel/helper-simple-access": {
"version": "7.21.5",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/types": "^7.21.5"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-script/node_modules/@babel/helper-split-export-declaration": {
"version": "7.22.6",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/types": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-script/node_modules/@babel/helper-string-parser": {
"version": "7.22.5",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-script/node_modules/@babel/helper-validator-identifier": {
"version": "7.22.20",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-script/node_modules/@babel/helper-validator-option": {
"version": "7.21.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-script/node_modules/@babel/helpers": {
"version": "7.22.3",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/template": "^7.21.9",
"@babel/traverse": "^7.22.1",
"@babel/types": "^7.22.3"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-script/node_modules/@babel/highlight": {
"version": "7.22.20",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-validator-identifier": "^7.22.20",
"chalk": "^2.4.2",
"js-tokens": "^4.0.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-script/node_modules/@babel/highlight/node_modules/ansi-styles": {
"version": "3.2.1",
"dev": true,
"license": "MIT",
"dependencies": {
"color-convert": "^1.9.0"
},
"engines": {
"node": ">=4"
}
},
"../modules/ecash-script/node_modules/@babel/highlight/node_modules/chalk": {
"version": "2.4.2",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
"supports-color": "^5.3.0"
},
"engines": {
"node": ">=4"
}
},
"../modules/ecash-script/node_modules/@babel/highlight/node_modules/color-convert": {
"version": "1.9.3",
"dev": true,
"license": "MIT",
"dependencies": {
"color-name": "1.1.3"
}
},
"../modules/ecash-script/node_modules/@babel/highlight/node_modules/color-name": {
"version": "1.1.3",
"dev": true,
"license": "MIT"
},
"../modules/ecash-script/node_modules/@babel/highlight/node_modules/escape-string-regexp": {
"version": "1.0.5",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.8.0"
}
},
"../modules/ecash-script/node_modules/@babel/highlight/node_modules/has-flag": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"../modules/ecash-script/node_modules/@babel/highlight/node_modules/supports-color": {
"version": "5.5.0",
"dev": true,
"license": "MIT",
"dependencies": {
"has-flag": "^3.0.0"
},
"engines": {
"node": ">=4"
}
},
"../modules/ecash-script/node_modules/@babel/parser": {
"version": "7.23.0",
"dev": true,
"license": "MIT",
"bin": {
"parser": "bin/babel-parser.js"
},
"engines": {
"node": ">=6.0.0"
}
},
"../modules/ecash-script/node_modules/@babel/template": {
"version": "7.22.15",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.22.13",
"@babel/parser": "^7.22.15",
"@babel/types": "^7.22.15"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-script/node_modules/@babel/traverse": {
"version": "7.23.2",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.22.13",
"@babel/generator": "^7.23.0",
"@babel/helper-environment-visitor": "^7.22.20",
"@babel/helper-function-name": "^7.23.0",
"@babel/helper-hoist-variables": "^7.22.5",
"@babel/helper-split-export-declaration": "^7.22.6",
"@babel/parser": "^7.23.0",
"@babel/types": "^7.23.0",
"debug": "^4.1.0",
"globals": "^11.1.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-script/node_modules/@babel/traverse/node_modules/globals": {
"version": "11.12.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"../modules/ecash-script/node_modules/@babel/types": {
"version": "7.23.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-string-parser": "^7.22.5",
"@babel/helper-validator-identifier": "^7.22.20",
"to-fast-properties": "^2.0.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-script/node_modules/@isaacs/cliui": {
"version": "8.0.2",
"resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
"integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
"dev": true,
"license": "ISC",
"peer": true,
"dependencies": {
"string-width": "^5.1.2",
"string-width-cjs": "npm:string-width@^4.2.0",
"strip-ansi": "^7.0.1",
"strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
"wrap-ansi": "^8.1.0",
"wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
},
"engines": {
"node": ">=12"
}
},
"../modules/ecash-script/node_modules/@isaacs/cliui/node_modules/ansi-regex": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
"integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
"dev": true,
"license": "MIT",
"peer": true,
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/chalk/ansi-regex?sponsor=1"
}
},
"../modules/ecash-script/node_modules/@isaacs/cliui/node_modules/ansi-styles": {
"version": "6.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
"integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
"dev": true,
"license": "MIT",
"peer": true,
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"../modules/ecash-script/node_modules/@isaacs/cliui/node_modules/emoji-regex": {
"version": "9.2.2",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
"integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
"dev": true,
"license": "MIT",
"peer": true
},
"../modules/ecash-script/node_modules/@isaacs/cliui/node_modules/string-width": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
"integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"eastasianwidth": "^0.2.0",
"emoji-regex": "^9.2.2",
"strip-ansi": "^7.0.1"
},
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-script/node_modules/@isaacs/cliui/node_modules/strip-ansi": {
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
"integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"ansi-regex": "^6.0.1"
},
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/chalk/strip-ansi?sponsor=1"
}
},
"../modules/ecash-script/node_modules/@isaacs/cliui/node_modules/wrap-ansi": {
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
"integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"ansi-styles": "^6.1.0",
"string-width": "^5.0.1",
"strip-ansi": "^7.0.1"
},
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
"../modules/ecash-script/node_modules/@istanbuljs/load-nyc-config": {
"version": "1.1.0",
"dev": true,
"license": "ISC",
"dependencies": {
"camelcase": "^5.3.1",
"find-up": "^4.1.0",
"get-package-type": "^0.1.0",
"js-yaml": "^3.13.1",
"resolve-from": "^5.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": {
"version": "1.0.10",
"dev": true,
"license": "MIT",
"dependencies": {
"sprintf-js": "~1.0.2"
}
},
"../modules/ecash-script/node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": {
"version": "5.3.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"../modules/ecash-script/node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": {
"version": "4.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"locate-path": "^5.0.0",
"path-exists": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": {
"version": "3.14.1",
"dev": true,
"license": "MIT",
"dependencies": {
"argparse": "^1.0.7",
"esprima": "^4.0.0"
},
"bin": {
"js-yaml": "bin/js-yaml.js"
}
},
"../modules/ecash-script/node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": {
"version": "5.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-locate": "^4.1.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": {
"version": "2.3.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-try": "^2.0.0"
},
"engines": {
"node": ">=6"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-script/node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": {
"version": "4.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-limit": "^2.2.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": {
"version": "5.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/@istanbuljs/schema": {
"version": "0.1.3",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/@jridgewell/gen-mapping": {
"version": "0.3.3",
"dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/set-array": "^1.0.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
"@jridgewell/trace-mapping": "^0.3.9"
},
"engines": {
"node": ">=6.0.0"
}
},
"../modules/ecash-script/node_modules/@jridgewell/resolve-uri": {
"version": "3.1.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.0.0"
}
},
"../modules/ecash-script/node_modules/@jridgewell/set-array": {
"version": "1.1.2",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.0.0"
}
},
"../modules/ecash-script/node_modules/@jridgewell/sourcemap-codec": {
"version": "1.4.15",
"dev": true,
"license": "MIT"
},
"../modules/ecash-script/node_modules/@jridgewell/trace-mapping": {
"version": "0.3.18",
"dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/resolve-uri": "3.1.0",
"@jridgewell/sourcemap-codec": "1.4.14"
}
},
"../modules/ecash-script/node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": {
"version": "1.4.14",
"dev": true,
"license": "MIT"
},
"../modules/ecash-script/node_modules/@pkgjs/parseargs": {
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
"integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
"dev": true,
"license": "MIT",
"optional": true,
"peer": true,
"engines": {
"node": ">=14"
}
},
"../modules/ecash-script/node_modules/aggregate-error": {
"version": "3.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"clean-stack": "^2.0.0",
"indent-string": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/ansi-colors": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
"integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
"dev": true,
"license": "MIT",
"peer": true,
"engines": {
"node": ">=6"
}
},
"../modules/ecash-script/node_modules/ansi-regex": {
"version": "5.0.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/ansi-styles": {
"version": "4.3.0",
"dev": true,
"license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"../modules/ecash-script/node_modules/anymatch": {
"version": "3.1.3",
"dev": true,
"license": "ISC",
"peer": true,
"dependencies": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
},
"engines": {
"node": ">= 8"
}
},
"../modules/ecash-script/node_modules/append-transform": {
"version": "2.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"default-require-extensions": "^3.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/archy": {
"version": "1.0.0",
"dev": true,
"license": "MIT"
},
"../modules/ecash-script/node_modules/argparse": {
"version": "2.0.1",
"dev": true,
"license": "Python-2.0",
"peer": true
},
"../modules/ecash-script/node_modules/balanced-match": {
"version": "1.0.2",
"dev": true,
"license": "MIT"
},
"../modules/ecash-script/node_modules/binary-extensions": {
"version": "2.2.0",
"dev": true,
"license": "MIT",
"peer": true,
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/brace-expansion": {
"version": "1.1.11",
"dev": true,
"license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"../modules/ecash-script/node_modules/braces": {
"version": "3.0.3",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"fill-range": "^7.1.1"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/browser-stdout": {
"version": "1.3.1",
"dev": true,
"license": "ISC",
"peer": true
},
"../modules/ecash-script/node_modules/browserslist": {
"version": "4.21.7",
"dev": true,
"funding": [
{
"type": "opencollective",
"url": "https://opencollective.com/browserslist"
},
{
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/browserslist"
},
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
"license": "MIT",
"dependencies": {
"caniuse-lite": "^1.0.30001489",
"electron-to-chromium": "^1.4.411",
"node-releases": "^2.0.12",
"update-browserslist-db": "^1.0.11"
},
"bin": {
"browserslist": "cli.js"
},
"engines": {
"node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
}
},
"../modules/ecash-script/node_modules/caching-transform": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"hasha": "^5.0.0",
"make-dir": "^3.0.0",
"package-hash": "^4.0.0",
"write-file-atomic": "^3.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/camelcase": {
"version": "6.3.0",
"dev": true,
"license": "MIT",
"peer": true,
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-script/node_modules/chalk": {
"version": "4.1.2",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
"../modules/ecash-script/node_modules/charenc": {
"version": "0.0.2",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": "*"
}
},
"../modules/ecash-script/node_modules/chokidar": {
"version": "3.5.3",
"dev": true,
"funding": [
{
"type": "individual",
"url": "https://paulmillr.com/funding/"
}
],
"license": "MIT",
"peer": true,
"dependencies": {
"anymatch": "~3.1.2",
"braces": "~3.0.2",
"glob-parent": "~5.1.2",
"is-binary-path": "~2.1.0",
"is-glob": "~4.0.1",
"normalize-path": "~3.0.0",
"readdirp": "~3.6.0"
},
"engines": {
"node": ">= 8.10.0"
},
"optionalDependencies": {
"fsevents": "~2.3.2"
}
},
"../modules/ecash-script/node_modules/chokidar/node_modules/glob-parent": {
"version": "5.1.2",
"dev": true,
"license": "ISC",
"peer": true,
"dependencies": {
"is-glob": "^4.0.1"
},
"engines": {
"node": ">= 6"
}
},
"../modules/ecash-script/node_modules/clean-stack": {
"version": "2.2.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"../modules/ecash-script/node_modules/cliui": {
"version": "8.0.1",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
"integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
"dev": true,
"license": "ISC",
"peer": true,
"dependencies": {
"string-width": "^4.2.0",
"strip-ansi": "^6.0.1",
"wrap-ansi": "^7.0.0"
},
"engines": {
"node": ">=12"
}
},
"../modules/ecash-script/node_modules/color-convert": {
"version": "2.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"color-name": "~1.1.4"
},
"engines": {
"node": ">=7.0.0"
}
},
"../modules/ecash-script/node_modules/color-name": {
"version": "1.1.4",
"dev": true,
"license": "MIT"
},
"../modules/ecash-script/node_modules/commondir": {
"version": "1.0.1",
"dev": true,
"license": "MIT"
},
"../modules/ecash-script/node_modules/concat-map": {
"version": "0.0.1",
"dev": true,
"license": "MIT"
},
"../modules/ecash-script/node_modules/convert-source-map": {
"version": "1.9.0",
"dev": true,
"license": "MIT"
},
"../modules/ecash-script/node_modules/cross-spawn": {
"version": "7.0.6",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
"integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
"dev": true,
"license": "MIT",
"dependencies": {
"path-key": "^3.1.0",
"shebang-command": "^2.0.0",
"which": "^2.0.1"
},
"engines": {
"node": ">= 8"
}
},
"../modules/ecash-script/node_modules/crypt": {
"version": "0.0.2",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": "*"
}
},
"../modules/ecash-script/node_modules/debug": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
"integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
"dev": true,
"license": "MIT",
"dependencies": {
"ms": "^2.1.3"
},
"engines": {
"node": ">=6.0"
},
"peerDependenciesMeta": {
"supports-color": {
"optional": true
}
}
},
"../modules/ecash-script/node_modules/decamelize": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"peer": true,
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-script/node_modules/default-require-extensions": {
"version": "3.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"strip-bom": "^4.0.0"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-script/node_modules/diff": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz",
"integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==",
"dev": true,
"license": "BSD-3-Clause",
"peer": true,
"engines": {
"node": ">=0.3.1"
}
},
"../modules/ecash-script/node_modules/eastasianwidth": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
"integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
"dev": true,
"license": "MIT",
"peer": true
},
"../modules/ecash-script/node_modules/electron-to-chromium": {
"version": "1.4.424",
"dev": true,
"license": "ISC"
},
"../modules/ecash-script/node_modules/emoji-regex": {
"version": "8.0.0",
"dev": true,
"license": "MIT"
},
"../modules/ecash-script/node_modules/es6-error": {
"version": "4.1.1",
"dev": true,
"license": "MIT"
},
"../modules/ecash-script/node_modules/escalade": {
"version": "3.1.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"../modules/ecash-script/node_modules/escape-string-regexp": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"peer": true,
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-script/node_modules/esprima": {
"version": "4.0.1",
"dev": true,
"license": "BSD-2-Clause",
"bin": {
"esparse": "bin/esparse.js",
"esvalidate": "bin/esvalidate.js"
},
"engines": {
"node": ">=4"
}
},
"../modules/ecash-script/node_modules/fill-range": {
"version": "7.1.1",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"to-regex-range": "^5.0.1"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/find-cache-dir": {
"version": "3.3.2",
"dev": true,
"license": "MIT",
"dependencies": {
"commondir": "^1.0.1",
"make-dir": "^3.0.2",
"pkg-dir": "^4.1.0"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/avajs/find-cache-dir?sponsor=1"
}
},
"../modules/ecash-script/node_modules/find-up": {
"version": "5.0.0",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"locate-path": "^6.0.0",
"path-exists": "^4.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-script/node_modules/flat": {
"version": "5.0.2",
"dev": true,
"license": "BSD-3-Clause",
"peer": true,
"bin": {
"flat": "cli.js"
}
},
"../modules/ecash-script/node_modules/foreground-child": {
"version": "2.0.0",
"dev": true,
"license": "ISC",
"dependencies": {
"cross-spawn": "^7.0.0",
"signal-exit": "^3.0.2"
},
"engines": {
"node": ">=8.0.0"
}
},
"../modules/ecash-script/node_modules/fromentries": {
"version": "1.3.2",
"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"
}
],
"license": "MIT"
},
"../modules/ecash-script/node_modules/fs.realpath": {
"version": "1.0.0",
"dev": true,
"license": "ISC"
},
"../modules/ecash-script/node_modules/gensync": {
"version": "1.0.0-beta.2",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecash-script/node_modules/get-caller-file": {
"version": "2.0.5",
"dev": true,
"license": "ISC",
"engines": {
"node": "6.* || 8.* || >= 10.*"
}
},
"../modules/ecash-script/node_modules/get-package-type": {
"version": "0.1.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8.0.0"
}
},
"../modules/ecash-script/node_modules/glob": {
"version": "7.2.0",
"dev": true,
"license": "ISC",
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.0.4",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
},
"engines": {
"node": "*"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"../modules/ecash-script/node_modules/graceful-fs": {
"version": "4.2.11",
"dev": true,
"license": "ISC"
},
"../modules/ecash-script/node_modules/has-flag": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/hasha": {
"version": "5.2.2",
"dev": true,
"license": "MIT",
"dependencies": {
"is-stream": "^2.0.0",
"type-fest": "^0.8.0"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-script/node_modules/hasha/node_modules/type-fest": {
"version": "0.8.1",
"dev": true,
"license": "(MIT OR CC0-1.0)",
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/he": {
"version": "1.2.0",
"dev": true,
"license": "MIT",
"peer": true,
"bin": {
"he": "bin/he"
}
},
"../modules/ecash-script/node_modules/html-escaper": {
"version": "2.0.2",
"dev": true,
"license": "MIT"
},
"../modules/ecash-script/node_modules/imurmurhash": {
"version": "0.1.4",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.8.19"
}
},
"../modules/ecash-script/node_modules/indent-string": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/inflight": {
"version": "1.0.6",
"dev": true,
"license": "ISC",
"dependencies": {
"once": "^1.3.0",
"wrappy": "1"
}
},
"../modules/ecash-script/node_modules/inherits": {
"version": "2.0.4",
"dev": true,
"license": "ISC"
},
"../modules/ecash-script/node_modules/is-binary-path": {
"version": "2.1.0",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"binary-extensions": "^2.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/is-buffer": {
"version": "1.1.6",
"dev": true,
"license": "MIT"
},
"../modules/ecash-script/node_modules/is-extglob": {
"version": "2.1.1",
"dev": true,
"license": "MIT",
"peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"../modules/ecash-script/node_modules/is-fullwidth-code-point": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/is-glob": {
"version": "4.0.3",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"is-extglob": "^2.1.1"
},
"engines": {
"node": ">=0.10.0"
}
},
"../modules/ecash-script/node_modules/is-number": {
"version": "7.0.0",
"dev": true,
"license": "MIT",
"peer": true,
"engines": {
"node": ">=0.12.0"
}
},
"../modules/ecash-script/node_modules/is-plain-obj": {
"version": "2.1.0",
"dev": true,
"license": "MIT",
"peer": true,
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/is-stream": {
"version": "2.0.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-script/node_modules/is-typedarray": {
"version": "1.0.0",
"dev": true,
"license": "MIT"
},
"../modules/ecash-script/node_modules/is-unicode-supported": {
"version": "0.1.0",
"dev": true,
"license": "MIT",
"peer": true,
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-script/node_modules/is-windows": {
"version": "1.0.2",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"../modules/ecash-script/node_modules/isexe": {
"version": "2.0.0",
"dev": true,
"license": "ISC"
},
"../modules/ecash-script/node_modules/istanbul-lib-coverage": {
"version": "3.2.0",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/istanbul-lib-hook": {
"version": "3.0.0",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"append-transform": "^2.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/istanbul-lib-instrument": {
"version": "4.0.3",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"@babel/core": "^7.7.5",
"@istanbuljs/schema": "^0.1.2",
"istanbul-lib-coverage": "^3.0.0",
"semver": "^6.3.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/istanbul-lib-processinfo": {
"version": "2.0.3",
"dev": true,
"license": "ISC",
"dependencies": {
"archy": "^1.0.0",
"cross-spawn": "^7.0.3",
"istanbul-lib-coverage": "^3.2.0",
"p-map": "^3.0.0",
"rimraf": "^3.0.0",
"uuid": "^8.3.2"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/istanbul-lib-report": {
"version": "3.0.0",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"istanbul-lib-coverage": "^3.0.0",
"make-dir": "^3.0.0",
"supports-color": "^7.1.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/istanbul-lib-source-maps": {
"version": "4.0.1",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"debug": "^4.1.1",
"istanbul-lib-coverage": "^3.0.0",
"source-map": "^0.6.1"
},
"engines": {
"node": ">=10"
}
},
"../modules/ecash-script/node_modules/istanbul-reports": {
"version": "3.1.5",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"html-escaper": "^2.0.0",
"istanbul-lib-report": "^3.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/jackspeak": {
"version": "3.4.3",
"resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
"integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
"dev": true,
"license": "BlueOak-1.0.0",
"peer": true,
"dependencies": {
"@isaacs/cliui": "^8.0.2"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
},
"optionalDependencies": {
"@pkgjs/parseargs": "^0.11.0"
}
},
"../modules/ecash-script/node_modules/js-tokens": {
"version": "4.0.0",
"dev": true,
"license": "MIT"
},
"../modules/ecash-script/node_modules/js-yaml": {
"version": "4.1.0",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"argparse": "^2.0.1"
},
"bin": {
"js-yaml": "bin/js-yaml.js"
}
},
"../modules/ecash-script/node_modules/jsesc": {
"version": "2.5.2",
"dev": true,
"license": "MIT",
"bin": {
"jsesc": "bin/jsesc"
},
"engines": {
"node": ">=4"
}
},
"../modules/ecash-script/node_modules/json5": {
"version": "2.2.3",
"dev": true,
"license": "MIT",
"bin": {
"json5": "lib/cli.js"
},
"engines": {
"node": ">=6"
}
},
"../modules/ecash-script/node_modules/locate-path": {
"version": "6.0.0",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"p-locate": "^5.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-script/node_modules/lodash.flattendeep": {
"version": "4.4.0",
"dev": true,
"license": "MIT"
},
"../modules/ecash-script/node_modules/log-symbols": {
"version": "4.1.0",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"chalk": "^4.1.0",
"is-unicode-supported": "^0.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-script/node_modules/lru-cache": {
"version": "5.1.1",
"dev": true,
"license": "ISC",
"dependencies": {
"yallist": "^3.0.2"
}
},
"../modules/ecash-script/node_modules/make-dir": {
"version": "3.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"semver": "^6.0.0"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-script/node_modules/md5": {
"version": "2.3.0",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"charenc": "0.0.2",
"crypt": "0.0.2",
"is-buffer": "~1.1.6"
}
},
"../modules/ecash-script/node_modules/minimatch": {
"version": "3.1.2",
"dev": true,
"license": "ISC",
"dependencies": {
"brace-expansion": "^1.1.7"
},
"engines": {
"node": "*"
}
},
"../modules/ecash-script/node_modules/minipass": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
"integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
"dev": true,
"license": "ISC",
"peer": true,
"engines": {
"node": ">=16 || 14 >=14.17"
}
},
"../modules/ecash-script/node_modules/mkdirp": {
"version": "1.0.4",
"dev": true,
"license": "MIT",
"bin": {
"mkdirp": "bin/cmd.js"
},
"engines": {
"node": ">=10"
}
},
"../modules/ecash-script/node_modules/mocha": {
"version": "11.1.0",
"resolved": "https://registry.npmjs.org/mocha/-/mocha-11.1.0.tgz",
"integrity": "sha512-8uJR5RTC2NgpY3GrYcgpZrsEd9zKbPDpob1RezyR2upGHRQtHWofmzTMzTMSV6dru3tj5Ukt0+Vnq1qhFEEwAg==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"ansi-colors": "^4.1.3",
"browser-stdout": "^1.3.1",
"chokidar": "^3.5.3",
"debug": "^4.3.5",
"diff": "^5.2.0",
"escape-string-regexp": "^4.0.0",
"find-up": "^5.0.0",
"glob": "^10.4.5",
"he": "^1.2.0",
"js-yaml": "^4.1.0",
"log-symbols": "^4.1.0",
"minimatch": "^5.1.6",
"ms": "^2.1.3",
"serialize-javascript": "^6.0.2",
"strip-json-comments": "^3.1.1",
"supports-color": "^8.1.1",
"workerpool": "^6.5.1",
"yargs": "^17.7.2",
"yargs-parser": "^21.1.1",
"yargs-unparser": "^2.0.0"
},
"bin": {
"_mocha": "bin/_mocha",
"mocha": "bin/mocha.js"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
"../modules/ecash-script/node_modules/mocha-junit-reporter": {
"version": "2.2.0",
"dev": true,
"license": "MIT",
"dependencies": {
"debug": "^4.3.4",
"md5": "^2.3.0",
"mkdirp": "~1.0.4",
"strip-ansi": "^6.0.1",
"xml": "^1.0.1"
},
"peerDependencies": {
"mocha": ">=2.2.5"
}
},
"../modules/ecash-script/node_modules/mocha-suppress-logs": {
"version": "0.3.1",
"dev": true,
"license": "MIT"
},
"../modules/ecash-script/node_modules/mocha/node_modules/brace-expansion": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"balanced-match": "^1.0.0"
}
},
"../modules/ecash-script/node_modules/mocha/node_modules/foreground-child": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
"integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
"dev": true,
"license": "ISC",
"peer": true,
"dependencies": {
"cross-spawn": "^7.0.0",
"signal-exit": "^4.0.1"
},
"engines": {
"node": ">=14"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"../modules/ecash-script/node_modules/mocha/node_modules/glob": {
"version": "10.4.5",
"resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
"integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
"dev": true,
"license": "ISC",
"peer": true,
"dependencies": {
"foreground-child": "^3.1.0",
"jackspeak": "^3.1.2",
"minimatch": "^9.0.4",
"minipass": "^7.1.2",
"package-json-from-dist": "^1.0.0",
"path-scurry": "^1.11.1"
},
"bin": {
"glob": "dist/esm/bin.mjs"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"../modules/ecash-script/node_modules/mocha/node_modules/glob/node_modules/minimatch": {
"version": "9.0.5",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
"integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
"dev": true,
"license": "ISC",
"peer": true,
"dependencies": {
"brace-expansion": "^2.0.1"
},
"engines": {
"node": ">=16 || 14 >=14.17"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"../modules/ecash-script/node_modules/mocha/node_modules/minimatch": {
"version": "5.1.6",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
"integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
"dev": true,
"license": "ISC",
"peer": true,
"dependencies": {
"brace-expansion": "^2.0.1"
},
"engines": {
"node": ">=10"
}
},
"../modules/ecash-script/node_modules/mocha/node_modules/signal-exit": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
"integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
"dev": true,
"license": "ISC",
"peer": true,
"engines": {
"node": ">=14"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"../modules/ecash-script/node_modules/mocha/node_modules/supports-color": {
"version": "8.1.1",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/supports-color?sponsor=1"
}
},
"../modules/ecash-script/node_modules/ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
"dev": true,
"license": "MIT"
},
"../modules/ecash-script/node_modules/node-preload": {
"version": "0.2.1",
"dev": true,
"license": "MIT",
"dependencies": {
"process-on-spawn": "^1.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/node-releases": {
"version": "2.0.12",
"dev": true,
"license": "MIT"
},
"../modules/ecash-script/node_modules/normalize-path": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"../modules/ecash-script/node_modules/nyc": {
"version": "15.1.0",
"dev": true,
"license": "ISC",
"dependencies": {
"@istanbuljs/load-nyc-config": "^1.0.0",
"@istanbuljs/schema": "^0.1.2",
"caching-transform": "^4.0.0",
"convert-source-map": "^1.7.0",
"decamelize": "^1.2.0",
"find-cache-dir": "^3.2.0",
"find-up": "^4.1.0",
"foreground-child": "^2.0.0",
"get-package-type": "^0.1.0",
"glob": "^7.1.6",
"istanbul-lib-coverage": "^3.0.0",
"istanbul-lib-hook": "^3.0.0",
"istanbul-lib-instrument": "^4.0.0",
"istanbul-lib-processinfo": "^2.0.2",
"istanbul-lib-report": "^3.0.0",
"istanbul-lib-source-maps": "^4.0.0",
"istanbul-reports": "^3.0.2",
"make-dir": "^3.0.0",
"node-preload": "^0.2.1",
"p-map": "^3.0.0",
"process-on-spawn": "^1.0.0",
"resolve-from": "^5.0.0",
"rimraf": "^3.0.0",
"signal-exit": "^3.0.2",
"spawn-wrap": "^2.0.0",
"test-exclude": "^6.0.0",
"yargs": "^15.0.2"
},
"bin": {
"nyc": "bin/nyc.js"
},
"engines": {
"node": ">=8.9"
}
},
"../modules/ecash-script/node_modules/nyc/node_modules/camelcase": {
"version": "5.3.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"../modules/ecash-script/node_modules/nyc/node_modules/cliui": {
"version": "6.0.0",
"dev": true,
"license": "ISC",
"dependencies": {
"string-width": "^4.2.0",
"strip-ansi": "^6.0.0",
"wrap-ansi": "^6.2.0"
}
},
"../modules/ecash-script/node_modules/nyc/node_modules/decamelize": {
"version": "1.2.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"../modules/ecash-script/node_modules/nyc/node_modules/find-up": {
"version": "4.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"locate-path": "^5.0.0",
"path-exists": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/nyc/node_modules/locate-path": {
"version": "5.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-locate": "^4.1.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/nyc/node_modules/p-limit": {
"version": "2.3.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-try": "^2.0.0"
},
"engines": {
"node": ">=6"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-script/node_modules/nyc/node_modules/p-locate": {
"version": "4.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-limit": "^2.2.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/nyc/node_modules/resolve-from": {
"version": "5.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/nyc/node_modules/wrap-ansi": {
"version": "6.2.0",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
"strip-ansi": "^6.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/nyc/node_modules/y18n": {
"version": "4.0.3",
"dev": true,
"license": "ISC"
},
"../modules/ecash-script/node_modules/nyc/node_modules/yargs": {
"version": "15.4.1",
"dev": true,
"license": "MIT",
"dependencies": {
"cliui": "^6.0.0",
"decamelize": "^1.2.0",
"find-up": "^4.1.0",
"get-caller-file": "^2.0.1",
"require-directory": "^2.1.1",
"require-main-filename": "^2.0.0",
"set-blocking": "^2.0.0",
"string-width": "^4.2.0",
"which-module": "^2.0.0",
"y18n": "^4.0.0",
"yargs-parser": "^18.1.2"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/nyc/node_modules/yargs-parser": {
"version": "18.1.3",
"dev": true,
"license": "ISC",
"dependencies": {
"camelcase": "^5.0.0",
"decamelize": "^1.2.0"
},
"engines": {
"node": ">=6"
}
},
"../modules/ecash-script/node_modules/once": {
"version": "1.4.0",
"dev": true,
"license": "ISC",
"dependencies": {
"wrappy": "1"
}
},
"../modules/ecash-script/node_modules/p-limit": {
"version": "3.1.0",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"yocto-queue": "^0.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-script/node_modules/p-locate": {
"version": "5.0.0",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"p-limit": "^3.0.2"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-script/node_modules/p-map": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"aggregate-error": "^3.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/p-try": {
"version": "2.2.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"../modules/ecash-script/node_modules/package-hash": {
"version": "4.0.0",
"dev": true,
"license": "ISC",
"dependencies": {
"graceful-fs": "^4.1.15",
"hasha": "^5.0.0",
"lodash.flattendeep": "^4.4.0",
"release-zalgo": "^1.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/package-json-from-dist": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
"integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
"dev": true,
"license": "BlueOak-1.0.0",
"peer": true
},
"../modules/ecash-script/node_modules/path-exists": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/path-is-absolute": {
"version": "1.0.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"../modules/ecash-script/node_modules/path-key": {
"version": "3.1.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/path-scurry": {
"version": "1.11.1",
"resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
"integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
"dev": true,
"license": "BlueOak-1.0.0",
"peer": true,
"dependencies": {
"lru-cache": "^10.2.0",
"minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
},
"engines": {
"node": ">=16 || 14 >=14.18"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"../modules/ecash-script/node_modules/path-scurry/node_modules/lru-cache": {
"version": "10.4.3",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
"integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
"dev": true,
"license": "ISC",
"peer": true
},
"../modules/ecash-script/node_modules/picocolors": {
"version": "1.0.0",
"dev": true,
"license": "ISC"
},
"../modules/ecash-script/node_modules/picomatch": {
"version": "2.3.1",
"dev": true,
"license": "MIT",
"peer": true,
"engines": {
"node": ">=8.6"
},
"funding": {
"url": "https://github.com/sponsors/jonschlinkert"
}
},
"../modules/ecash-script/node_modules/pkg-dir": {
"version": "4.2.0",
"dev": true,
"license": "MIT",
"dependencies": {
"find-up": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/pkg-dir/node_modules/find-up": {
"version": "4.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"locate-path": "^5.0.0",
"path-exists": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/pkg-dir/node_modules/locate-path": {
"version": "5.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-locate": "^4.1.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/pkg-dir/node_modules/p-limit": {
"version": "2.3.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-try": "^2.0.0"
},
"engines": {
"node": ">=6"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-script/node_modules/pkg-dir/node_modules/p-locate": {
"version": "4.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-limit": "^2.2.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/process-on-spawn": {
"version": "1.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"fromentries": "^1.2.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/random-js": {
"version": "2.1.0",
"dev": true,
"license": "MIT"
},
"../modules/ecash-script/node_modules/randombytes": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
"integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"safe-buffer": "^5.1.0"
}
},
"../modules/ecash-script/node_modules/readdirp": {
"version": "3.6.0",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"picomatch": "^2.2.1"
},
"engines": {
"node": ">=8.10.0"
}
},
"../modules/ecash-script/node_modules/release-zalgo": {
"version": "1.0.0",
"dev": true,
"license": "ISC",
"dependencies": {
"es6-error": "^4.0.1"
},
"engines": {
"node": ">=4"
}
},
"../modules/ecash-script/node_modules/require-directory": {
"version": "2.1.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"../modules/ecash-script/node_modules/require-main-filename": {
"version": "2.0.0",
"dev": true,
"license": "ISC"
},
"../modules/ecash-script/node_modules/rimraf": {
"version": "3.0.2",
"dev": true,
"license": "ISC",
"dependencies": {
"glob": "^7.1.3"
},
"bin": {
"rimraf": "bin.js"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"../modules/ecash-script/node_modules/safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
"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"
}
],
"license": "MIT",
"peer": true
},
"../modules/ecash-script/node_modules/semver": {
"version": "6.3.1",
"dev": true,
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
}
},
"../modules/ecash-script/node_modules/serialize-javascript": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
"integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
"dev": true,
"license": "BSD-3-Clause",
"peer": true,
"dependencies": {
"randombytes": "^2.1.0"
}
},
"../modules/ecash-script/node_modules/set-blocking": {
"version": "2.0.0",
"dev": true,
"license": "ISC"
},
"../modules/ecash-script/node_modules/shebang-command": {
"version": "2.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"shebang-regex": "^3.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/shebang-regex": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/signal-exit": {
"version": "3.0.7",
"dev": true,
"license": "ISC"
},
"../modules/ecash-script/node_modules/source-map": {
"version": "0.6.1",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
}
},
"../modules/ecash-script/node_modules/spawn-wrap": {
"version": "2.0.0",
"dev": true,
"license": "ISC",
"dependencies": {
"foreground-child": "^2.0.0",
"is-windows": "^1.0.2",
"make-dir": "^3.0.0",
"rimraf": "^3.0.0",
"signal-exit": "^3.0.2",
"which": "^2.0.1"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/sprintf-js": {
"version": "1.0.3",
"dev": true,
"license": "BSD-3-Clause"
},
"../modules/ecash-script/node_modules/string-width": {
"version": "4.2.3",
"dev": true,
"license": "MIT",
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
"strip-ansi": "^6.0.1"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/string-width-cjs": {
"name": "string-width",
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
"strip-ansi": "^6.0.1"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/strip-ansi": {
"version": "6.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-regex": "^5.0.1"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/strip-ansi-cjs": {
"name": "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,
"license": "MIT",
"peer": true,
"dependencies": {
"ansi-regex": "^5.0.1"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/strip-bom": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/strip-json-comments": {
"version": "3.1.1",
"dev": true,
"license": "MIT",
"peer": true,
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecash-script/node_modules/supports-color": {
"version": "7.2.0",
"dev": true,
"license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/test-exclude": {
"version": "6.0.0",
"dev": true,
"license": "ISC",
"dependencies": {
"@istanbuljs/schema": "^0.1.2",
"glob": "^7.1.4",
"minimatch": "^3.0.4"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecash-script/node_modules/to-fast-properties": {
"version": "2.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"../modules/ecash-script/node_modules/to-regex-range": {
"version": "5.0.1",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"is-number": "^7.0.0"
},
"engines": {
"node": ">=8.0"
}
},
"../modules/ecash-script/node_modules/typedarray-to-buffer": {
"version": "3.1.5",
"dev": true,
"license": "MIT",
"dependencies": {
"is-typedarray": "^1.0.0"
}
},
"../modules/ecash-script/node_modules/update-browserslist-db": {
"version": "1.0.11",
"dev": true,
"funding": [
{
"type": "opencollective",
"url": "https://opencollective.com/browserslist"
},
{
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/browserslist"
},
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
"license": "MIT",
"dependencies": {
"escalade": "^3.1.1",
"picocolors": "^1.0.0"
},
"bin": {
"update-browserslist-db": "cli.js"
},
"peerDependencies": {
"browserslist": ">= 4.21.0"
}
},
"../modules/ecash-script/node_modules/uuid": {
"version": "8.3.2",
"dev": true,
"license": "MIT",
"bin": {
"uuid": "dist/bin/uuid"
}
},
"../modules/ecash-script/node_modules/which": {
"version": "2.0.2",
"dev": true,
"license": "ISC",
"dependencies": {
"isexe": "^2.0.0"
},
"bin": {
"node-which": "bin/node-which"
},
"engines": {
"node": ">= 8"
}
},
"../modules/ecash-script/node_modules/which-module": {
"version": "2.0.1",
"dev": true,
"license": "ISC"
},
"../modules/ecash-script/node_modules/workerpool": {
"version": "6.5.1",
"resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz",
"integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==",
"dev": true,
"license": "Apache-2.0",
"peer": true
},
"../modules/ecash-script/node_modules/wrap-ansi": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
"strip-ansi": "^6.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
"../modules/ecash-script/node_modules/wrap-ansi-cjs": {
"name": "wrap-ansi",
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
"strip-ansi": "^6.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
"../modules/ecash-script/node_modules/wrappy": {
"version": "1.0.2",
"dev": true,
"license": "ISC"
},
"../modules/ecash-script/node_modules/write-file-atomic": {
"version": "3.0.3",
"dev": true,
"license": "ISC",
"dependencies": {
"imurmurhash": "^0.1.4",
"is-typedarray": "^1.0.0",
"signal-exit": "^3.0.2",
"typedarray-to-buffer": "^3.1.5"
}
},
"../modules/ecash-script/node_modules/xml": {
"version": "1.0.1",
"dev": true,
"license": "MIT"
},
"../modules/ecash-script/node_modules/y18n": {
"version": "5.0.8",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
"integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
"dev": true,
"license": "ISC",
"peer": true,
"engines": {
"node": ">=10"
}
},
"../modules/ecash-script/node_modules/yallist": {
"version": "3.1.1",
"dev": true,
"license": "ISC"
},
"../modules/ecash-script/node_modules/yargs": {
"version": "17.7.2",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
"integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"cliui": "^8.0.1",
"escalade": "^3.1.1",
"get-caller-file": "^2.0.5",
"require-directory": "^2.1.1",
"string-width": "^4.2.3",
"y18n": "^5.0.5",
"yargs-parser": "^21.1.1"
},
"engines": {
"node": ">=12"
}
},
"../modules/ecash-script/node_modules/yargs-parser": {
"version": "21.1.1",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
"integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
"dev": true,
"license": "ISC",
"peer": true,
"engines": {
"node": ">=12"
}
},
"../modules/ecash-script/node_modules/yargs-unparser": {
"version": "2.0.0",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"camelcase": "^6.0.0",
"decamelize": "^4.0.0",
"flat": "^5.0.2",
"is-plain-obj": "^2.1.0"
},
"engines": {
"node": ">=10"
}
},
"../modules/ecash-script/node_modules/yocto-queue": {
"version": "0.1.0",
"dev": true,
"license": "MIT",
"peer": true,
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecashaddrjs": {
"version": "2.0.0",
"license": "MIT",
"devDependencies": {
"@babel/cli": "^7.21.0",
"@babel/core": "^7.21.3",
"@babel/preset-env": "^7.20.2",
"@types/chai": "^5.0.1",
"@types/mocha": "^10.0.10",
"buffer": "^6.0.3",
"chai": "^4.3.7",
"debug": "^4.3.4",
"jsdoc": "^4.0.2",
"mocha": "^10.2.0",
"mocha-junit-reporter": "^2.2.0",
"mocha-suppress-logs": "^0.3.1",
"nyc": "^15.1.0",
"random-js": "^2.1.0",
"ts-loader": "^9.5.1",
"ts-node": "^10.9.2"
}
},
"../modules/ecashaddrjs/node_modules/@ampproject/remapping": {
"version": "2.2.0",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"@jridgewell/gen-mapping": "^0.1.0",
"@jridgewell/trace-mapping": "^0.3.9"
},
"engines": {
"node": ">=6.0.0"
}
},
"../modules/ecashaddrjs/node_modules/@ampproject/remapping/node_modules/@jridgewell/gen-mapping": {
"version": "0.1.1",
"dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/set-array": "^1.0.0",
"@jridgewell/sourcemap-codec": "^1.4.10"
},
"engines": {
"node": ">=6.0.0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/cli": {
"version": "7.21.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/trace-mapping": "^0.3.17",
"commander": "^4.0.1",
"convert-source-map": "^1.1.0",
"fs-readdir-recursive": "^1.1.0",
"glob": "^7.2.0",
"make-dir": "^2.1.0",
"slash": "^2.0.0"
},
"bin": {
"babel": "bin/babel.js",
"babel-external-helpers": "bin/babel-external-helpers.js"
},
"engines": {
"node": ">=6.9.0"
},
"optionalDependencies": {
"@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents.3",
"chokidar": "^3.4.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/code-frame": {
"version": "7.22.13",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/highlight": "^7.22.13",
"chalk": "^2.4.2"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/compat-data": {
"version": "7.21.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/core": {
"version": "7.21.3",
"dev": true,
"license": "MIT",
"dependencies": {
"@ampproject/remapping": "^2.2.0",
"@babel/code-frame": "^7.18.6",
"@babel/generator": "^7.21.3",
"@babel/helper-compilation-targets": "^7.20.7",
"@babel/helper-module-transforms": "^7.21.2",
"@babel/helpers": "^7.21.0",
"@babel/parser": "^7.21.3",
"@babel/template": "^7.20.7",
"@babel/traverse": "^7.21.3",
"@babel/types": "^7.21.3",
"convert-source-map": "^1.7.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
"json5": "^2.2.2",
"semver": "^6.3.0"
},
"engines": {
"node": ">=6.9.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/babel"
}
},
"../modules/ecashaddrjs/node_modules/@babel/core/node_modules/semver": {
"version": "6.3.1",
"dev": true,
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
}
},
"../modules/ecashaddrjs/node_modules/@babel/generator": {
"version": "7.23.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/types": "^7.23.0",
"@jridgewell/gen-mapping": "^0.3.2",
"@jridgewell/trace-mapping": "^0.3.17",
"jsesc": "^2.5.1"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/helper-annotate-as-pure": {
"version": "7.18.6",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/types": "^7.18.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/helper-builder-binary-assignment-operator-visitor": {
"version": "7.18.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-explode-assignable-expression": "^7.18.6",
"@babel/types": "^7.18.9"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/helper-compilation-targets": {
"version": "7.20.7",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/compat-data": "^7.20.5",
"@babel/helper-validator-option": "^7.18.6",
"browserslist": "^4.21.3",
"lru-cache": "^5.1.1",
"semver": "^6.3.0"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/helper-compilation-targets/node_modules/semver": {
"version": "6.3.1",
"dev": true,
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
}
},
"../modules/ecashaddrjs/node_modules/@babel/helper-create-class-features-plugin": {
"version": "7.21.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.18.6",
"@babel/helper-environment-visitor": "^7.18.9",
"@babel/helper-function-name": "^7.21.0",
"@babel/helper-member-expression-to-functions": "^7.21.0",
"@babel/helper-optimise-call-expression": "^7.18.6",
"@babel/helper-replace-supers": "^7.20.7",
"@babel/helper-skip-transparent-expression-wrappers": "^7.20.0",
"@babel/helper-split-export-declaration": "^7.18.6"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/helper-create-regexp-features-plugin": {
"version": "7.21.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.18.6",
"regexpu-core": "^5.3.1"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/helper-define-polyfill-provider": {
"version": "0.3.3",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-compilation-targets": "^7.17.7",
"@babel/helper-plugin-utils": "^7.16.7",
"debug": "^4.1.1",
"lodash.debounce": "^4.0.8",
"resolve": "^1.14.2",
"semver": "^6.1.2"
},
"peerDependencies": {
"@babel/core": "^7.4.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": {
"version": "6.3.1",
"dev": true,
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
}
},
"../modules/ecashaddrjs/node_modules/@babel/helper-environment-visitor": {
"version": "7.22.20",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/helper-explode-assignable-expression": {
"version": "7.18.6",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/types": "^7.18.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/helper-function-name": {
"version": "7.23.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/template": "^7.22.15",
"@babel/types": "^7.23.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/helper-hoist-variables": {
"version": "7.22.5",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/types": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/helper-member-expression-to-functions": {
"version": "7.21.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/types": "^7.21.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/helper-module-imports": {
"version": "7.18.6",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/types": "^7.18.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/helper-module-transforms": {
"version": "7.21.2",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-environment-visitor": "^7.18.9",
"@babel/helper-module-imports": "^7.18.6",
"@babel/helper-simple-access": "^7.20.2",
"@babel/helper-split-export-declaration": "^7.18.6",
"@babel/helper-validator-identifier": "^7.19.1",
"@babel/template": "^7.20.7",
"@babel/traverse": "^7.21.2",
"@babel/types": "^7.21.2"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/helper-optimise-call-expression": {
"version": "7.18.6",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/types": "^7.18.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/helper-plugin-utils": {
"version": "7.20.2",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/helper-remap-async-to-generator": {
"version": "7.18.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.18.6",
"@babel/helper-environment-visitor": "^7.18.9",
"@babel/helper-wrap-function": "^7.18.9",
"@babel/types": "^7.18.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/helper-replace-supers": {
"version": "7.20.7",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-environment-visitor": "^7.18.9",
"@babel/helper-member-expression-to-functions": "^7.20.7",
"@babel/helper-optimise-call-expression": "^7.18.6",
"@babel/template": "^7.20.7",
"@babel/traverse": "^7.20.7",
"@babel/types": "^7.20.7"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/helper-simple-access": {
"version": "7.20.2",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/types": "^7.20.2"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/helper-skip-transparent-expression-wrappers": {
"version": "7.20.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/types": "^7.20.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/helper-split-export-declaration": {
"version": "7.22.6",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/types": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/helper-string-parser": {
"version": "7.22.5",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/helper-validator-identifier": {
"version": "7.22.20",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/helper-validator-option": {
"version": "7.21.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/helper-wrap-function": {
"version": "7.20.5",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-function-name": "^7.19.0",
"@babel/template": "^7.18.10",
"@babel/traverse": "^7.20.5",
"@babel/types": "^7.20.5"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/helpers": {
"version": "7.21.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/template": "^7.20.7",
"@babel/traverse": "^7.21.0",
"@babel/types": "^7.21.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/highlight": {
"version": "7.22.20",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-validator-identifier": "^7.22.20",
"chalk": "^2.4.2",
"js-tokens": "^4.0.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/parser": {
"version": "7.23.0",
"dev": true,
"license": "MIT",
"bin": {
"parser": "bin/babel-parser.js"
},
"engines": {
"node": ">=6.0.0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
"version": "7.18.6",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.18.6"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
"version": "7.20.7",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.20.2",
"@babel/helper-skip-transparent-expression-wrappers": "^7.20.0",
"@babel/plugin-proposal-optional-chaining": "^7.20.7"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.13.0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-proposal-async-generator-functions": {
"version": "7.20.7",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-environment-visitor": "^7.18.9",
"@babel/helper-plugin-utils": "^7.20.2",
"@babel/helper-remap-async-to-generator": "^7.18.9",
"@babel/plugin-syntax-async-generators": "^7.8.4"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-proposal-class-properties": {
"version": "7.18.6",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-create-class-features-plugin": "^7.18.6",
"@babel/helper-plugin-utils": "^7.18.6"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-proposal-class-static-block": {
"version": "7.21.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-create-class-features-plugin": "^7.21.0",
"@babel/helper-plugin-utils": "^7.20.2",
"@babel/plugin-syntax-class-static-block": "^7.14.5"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.12.0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-proposal-dynamic-import": {
"version": "7.18.6",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.18.6",
"@babel/plugin-syntax-dynamic-import": "^7.8.3"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-proposal-export-namespace-from": {
"version": "7.18.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.18.9",
"@babel/plugin-syntax-export-namespace-from": "^7.8.3"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-proposal-json-strings": {
"version": "7.18.6",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.18.6",
"@babel/plugin-syntax-json-strings": "^7.8.3"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-proposal-logical-assignment-operators": {
"version": "7.20.7",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.20.2",
"@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-proposal-nullish-coalescing-operator": {
"version": "7.18.6",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.18.6",
"@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-proposal-numeric-separator": {
"version": "7.18.6",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.18.6",
"@babel/plugin-syntax-numeric-separator": "^7.10.4"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-proposal-object-rest-spread": {
"version": "7.20.7",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/compat-data": "^7.20.5",
"@babel/helper-compilation-targets": "^7.20.7",
"@babel/helper-plugin-utils": "^7.20.2",
"@babel/plugin-syntax-object-rest-spread": "^7.8.3",
"@babel/plugin-transform-parameters": "^7.20.7"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-proposal-optional-catch-binding": {
"version": "7.18.6",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.18.6",
"@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-proposal-optional-chaining": {
"version": "7.21.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.20.2",
"@babel/helper-skip-transparent-expression-wrappers": "^7.20.0",
"@babel/plugin-syntax-optional-chaining": "^7.8.3"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-proposal-private-methods": {
"version": "7.18.6",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-create-class-features-plugin": "^7.18.6",
"@babel/helper-plugin-utils": "^7.18.6"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-proposal-private-property-in-object": {
"version": "7.21.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.18.6",
"@babel/helper-create-class-features-plugin": "^7.21.0",
"@babel/helper-plugin-utils": "^7.20.2",
"@babel/plugin-syntax-private-property-in-object": "^7.14.5"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-proposal-unicode-property-regex": {
"version": "7.18.6",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-create-regexp-features-plugin": "^7.18.6",
"@babel/helper-plugin-utils": "^7.18.6"
},
"engines": {
"node": ">=4"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-syntax-async-generators": {
"version": "7.8.4",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-syntax-class-properties": {
"version": "7.12.13",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.12.13"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-syntax-class-static-block": {
"version": "7.14.5",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.14.5"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-syntax-dynamic-import": {
"version": "7.8.3",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-syntax-export-namespace-from": {
"version": "7.8.3",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.3"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-syntax-import-assertions": {
"version": "7.20.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.19.0"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-syntax-json-strings": {
"version": "7.8.3",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-syntax-logical-assignment-operators": {
"version": "7.10.4",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.10.4"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-syntax-nullish-coalescing-operator": {
"version": "7.8.3",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-syntax-numeric-separator": {
"version": "7.10.4",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.10.4"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-syntax-object-rest-spread": {
"version": "7.8.3",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-syntax-optional-catch-binding": {
"version": "7.8.3",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-syntax-optional-chaining": {
"version": "7.8.3",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-syntax-private-property-in-object": {
"version": "7.14.5",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.14.5"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-syntax-top-level-await": {
"version": "7.14.5",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.14.5"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-transform-arrow-functions": {
"version": "7.20.7",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.20.2"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-transform-async-to-generator": {
"version": "7.20.7",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-module-imports": "^7.18.6",
"@babel/helper-plugin-utils": "^7.20.2",
"@babel/helper-remap-async-to-generator": "^7.18.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-transform-block-scoped-functions": {
"version": "7.18.6",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.18.6"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-transform-block-scoping": {
"version": "7.21.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.20.2"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-transform-classes": {
"version": "7.21.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.18.6",
"@babel/helper-compilation-targets": "^7.20.7",
"@babel/helper-environment-visitor": "^7.18.9",
"@babel/helper-function-name": "^7.21.0",
"@babel/helper-optimise-call-expression": "^7.18.6",
"@babel/helper-plugin-utils": "^7.20.2",
"@babel/helper-replace-supers": "^7.20.7",
"@babel/helper-split-export-declaration": "^7.18.6",
"globals": "^11.1.0"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-transform-computed-properties": {
"version": "7.20.7",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.20.2",
"@babel/template": "^7.20.7"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-transform-destructuring": {
"version": "7.21.3",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.20.2"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-transform-dotall-regex": {
"version": "7.18.6",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-create-regexp-features-plugin": "^7.18.6",
"@babel/helper-plugin-utils": "^7.18.6"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-transform-duplicate-keys": {
"version": "7.18.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.18.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-transform-exponentiation-operator": {
"version": "7.18.6",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6",
"@babel/helper-plugin-utils": "^7.18.6"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-transform-for-of": {
"version": "7.21.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.20.2"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-transform-function-name": {
"version": "7.18.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-compilation-targets": "^7.18.9",
"@babel/helper-function-name": "^7.18.9",
"@babel/helper-plugin-utils": "^7.18.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-transform-literals": {
"version": "7.18.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.18.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-transform-member-expression-literals": {
"version": "7.18.6",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.18.6"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-transform-modules-amd": {
"version": "7.20.11",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-module-transforms": "^7.20.11",
"@babel/helper-plugin-utils": "^7.20.2"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-transform-modules-commonjs": {
"version": "7.21.2",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-module-transforms": "^7.21.2",
"@babel/helper-plugin-utils": "^7.20.2",
"@babel/helper-simple-access": "^7.20.2"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-transform-modules-systemjs": {
"version": "7.20.11",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-hoist-variables": "^7.18.6",
"@babel/helper-module-transforms": "^7.20.11",
"@babel/helper-plugin-utils": "^7.20.2",
"@babel/helper-validator-identifier": "^7.19.1"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-transform-modules-umd": {
"version": "7.18.6",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-module-transforms": "^7.18.6",
"@babel/helper-plugin-utils": "^7.18.6"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
"version": "7.20.5",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-create-regexp-features-plugin": "^7.20.5",
"@babel/helper-plugin-utils": "^7.20.2"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-transform-new-target": {
"version": "7.18.6",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.18.6"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-transform-object-super": {
"version": "7.18.6",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.18.6",
"@babel/helper-replace-supers": "^7.18.6"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-transform-parameters": {
"version": "7.21.3",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.20.2"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-transform-property-literals": {
"version": "7.18.6",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.18.6"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-transform-regenerator": {
"version": "7.20.5",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.20.2",
"regenerator-transform": "^0.15.1"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-transform-reserved-words": {
"version": "7.18.6",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.18.6"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-transform-shorthand-properties": {
"version": "7.18.6",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.18.6"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-transform-spread": {
"version": "7.20.7",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.20.2",
"@babel/helper-skip-transparent-expression-wrappers": "^7.20.0"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-transform-sticky-regex": {
"version": "7.18.6",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.18.6"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-transform-template-literals": {
"version": "7.18.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.18.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-transform-typeof-symbol": {
"version": "7.18.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.18.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-transform-unicode-escapes": {
"version": "7.18.10",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.18.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/plugin-transform-unicode-regex": {
"version": "7.18.6",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-create-regexp-features-plugin": "^7.18.6",
"@babel/helper-plugin-utils": "^7.18.6"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/preset-env": {
"version": "7.20.2",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/compat-data": "^7.20.1",
"@babel/helper-compilation-targets": "^7.20.0",
"@babel/helper-plugin-utils": "^7.20.2",
"@babel/helper-validator-option": "^7.18.6",
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6",
"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9",
"@babel/plugin-proposal-async-generator-functions": "^7.20.1",
"@babel/plugin-proposal-class-properties": "^7.18.6",
"@babel/plugin-proposal-class-static-block": "^7.18.6",
"@babel/plugin-proposal-dynamic-import": "^7.18.6",
"@babel/plugin-proposal-export-namespace-from": "^7.18.9",
"@babel/plugin-proposal-json-strings": "^7.18.6",
"@babel/plugin-proposal-logical-assignment-operators": "^7.18.9",
"@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6",
"@babel/plugin-proposal-numeric-separator": "^7.18.6",
"@babel/plugin-proposal-object-rest-spread": "^7.20.2",
"@babel/plugin-proposal-optional-catch-binding": "^7.18.6",
"@babel/plugin-proposal-optional-chaining": "^7.18.9",
"@babel/plugin-proposal-private-methods": "^7.18.6",
"@babel/plugin-proposal-private-property-in-object": "^7.18.6",
"@babel/plugin-proposal-unicode-property-regex": "^7.18.6",
"@babel/plugin-syntax-async-generators": "^7.8.4",
"@babel/plugin-syntax-class-properties": "^7.12.13",
"@babel/plugin-syntax-class-static-block": "^7.14.5",
"@babel/plugin-syntax-dynamic-import": "^7.8.3",
"@babel/plugin-syntax-export-namespace-from": "^7.8.3",
"@babel/plugin-syntax-import-assertions": "^7.20.0",
"@babel/plugin-syntax-json-strings": "^7.8.3",
"@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
"@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
"@babel/plugin-syntax-numeric-separator": "^7.10.4",
"@babel/plugin-syntax-object-rest-spread": "^7.8.3",
"@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
"@babel/plugin-syntax-optional-chaining": "^7.8.3",
"@babel/plugin-syntax-private-property-in-object": "^7.14.5",
"@babel/plugin-syntax-top-level-await": "^7.14.5",
"@babel/plugin-transform-arrow-functions": "^7.18.6",
"@babel/plugin-transform-async-to-generator": "^7.18.6",
"@babel/plugin-transform-block-scoped-functions": "^7.18.6",
"@babel/plugin-transform-block-scoping": "^7.20.2",
"@babel/plugin-transform-classes": "^7.20.2",
"@babel/plugin-transform-computed-properties": "^7.18.9",
"@babel/plugin-transform-destructuring": "^7.20.2",
"@babel/plugin-transform-dotall-regex": "^7.18.6",
"@babel/plugin-transform-duplicate-keys": "^7.18.9",
"@babel/plugin-transform-exponentiation-operator": "^7.18.6",
"@babel/plugin-transform-for-of": "^7.18.8",
"@babel/plugin-transform-function-name": "^7.18.9",
"@babel/plugin-transform-literals": "^7.18.9",
"@babel/plugin-transform-member-expression-literals": "^7.18.6",
"@babel/plugin-transform-modules-amd": "^7.19.6",
"@babel/plugin-transform-modules-commonjs": "^7.19.6",
"@babel/plugin-transform-modules-systemjs": "^7.19.6",
"@babel/plugin-transform-modules-umd": "^7.18.6",
"@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1",
"@babel/plugin-transform-new-target": "^7.18.6",
"@babel/plugin-transform-object-super": "^7.18.6",
"@babel/plugin-transform-parameters": "^7.20.1",
"@babel/plugin-transform-property-literals": "^7.18.6",
"@babel/plugin-transform-regenerator": "^7.18.6",
"@babel/plugin-transform-reserved-words": "^7.18.6",
"@babel/plugin-transform-shorthand-properties": "^7.18.6",
"@babel/plugin-transform-spread": "^7.19.0",
"@babel/plugin-transform-sticky-regex": "^7.18.6",
"@babel/plugin-transform-template-literals": "^7.18.9",
"@babel/plugin-transform-typeof-symbol": "^7.18.9",
"@babel/plugin-transform-unicode-escapes": "^7.18.10",
"@babel/plugin-transform-unicode-regex": "^7.18.6",
"@babel/preset-modules": "^0.1.5",
"@babel/types": "^7.20.2",
"babel-plugin-polyfill-corejs2": "^0.3.3",
"babel-plugin-polyfill-corejs3": "^0.6.0",
"babel-plugin-polyfill-regenerator": "^0.4.1",
"core-js-compat": "^3.25.1",
"semver": "^6.3.0"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/preset-env/node_modules/semver": {
"version": "6.3.1",
"dev": true,
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
}
},
"../modules/ecashaddrjs/node_modules/@babel/preset-modules": {
"version": "0.1.5",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.0.0",
"@babel/plugin-proposal-unicode-property-regex": "^7.4.4",
"@babel/plugin-transform-dotall-regex": "^7.4.4",
"@babel/types": "^7.4.4",
"esutils": "^2.0.2"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/regjsgen": {
"version": "0.8.0",
"dev": true,
"license": "MIT"
},
"../modules/ecashaddrjs/node_modules/@babel/runtime": {
"version": "7.21.0",
"dev": true,
"license": "MIT",
"dependencies": {
"regenerator-runtime": "^0.13.11"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/template": {
"version": "7.22.15",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.22.13",
"@babel/parser": "^7.22.15",
"@babel/types": "^7.22.15"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/traverse": {
"version": "7.23.2",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.22.13",
"@babel/generator": "^7.23.0",
"@babel/helper-environment-visitor": "^7.22.20",
"@babel/helper-function-name": "^7.23.0",
"@babel/helper-hoist-variables": "^7.22.5",
"@babel/helper-split-export-declaration": "^7.22.6",
"@babel/parser": "^7.23.0",
"@babel/types": "^7.23.0",
"debug": "^4.1.0",
"globals": "^11.1.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecashaddrjs/node_modules/@babel/types": {
"version": "7.23.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-string-parser": "^7.22.5",
"@babel/helper-validator-identifier": "^7.22.20",
"to-fast-properties": "^2.0.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecashaddrjs/node_modules/@cspotcode/source-map-support": {
"version": "0.8.1",
"dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/trace-mapping": "0.3.9"
},
"engines": {
"node": ">=12"
}
},
"../modules/ecashaddrjs/node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": {
"version": "0.3.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/resolve-uri": "^3.0.3",
"@jridgewell/sourcemap-codec": "^1.4.10"
}
},
"../modules/ecashaddrjs/node_modules/@istanbuljs/load-nyc-config": {
"version": "1.1.0",
"dev": true,
"license": "ISC",
"dependencies": {
"camelcase": "^5.3.1",
"find-up": "^4.1.0",
"get-package-type": "^0.1.0",
"js-yaml": "^3.13.1",
"resolve-from": "^5.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": {
"version": "4.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"locate-path": "^5.0.0",
"path-exists": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": {
"version": "5.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-locate": "^4.1.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": {
"version": "2.3.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-try": "^2.0.0"
},
"engines": {
"node": ">=6"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecashaddrjs/node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": {
"version": "4.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-limit": "^2.2.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/@istanbuljs/schema": {
"version": "0.1.3",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/@jridgewell/gen-mapping": {
"version": "0.3.8",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",
"integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/set-array": "^1.2.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
"@jridgewell/trace-mapping": "^0.3.24"
},
"engines": {
"node": ">=6.0.0"
}
},
"../modules/ecashaddrjs/node_modules/@jridgewell/resolve-uri": {
"version": "3.1.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.0.0"
}
},
"../modules/ecashaddrjs/node_modules/@jridgewell/set-array": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
"integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.0.0"
}
},
"../modules/ecashaddrjs/node_modules/@jridgewell/source-map": {
"version": "0.3.6",
"resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz",
"integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.25"
}
},
"../modules/ecashaddrjs/node_modules/@jridgewell/sourcemap-codec": {
"version": "1.4.14",
"dev": true,
"license": "MIT"
},
"../modules/ecashaddrjs/node_modules/@jridgewell/trace-mapping": {
"version": "0.3.25",
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
"integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/resolve-uri": "^3.1.0",
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
"../modules/ecashaddrjs/node_modules/@jsdoc/salty": {
"version": "0.2.5",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"lodash": "^4.17.21"
},
"engines": {
"node": ">=v12.0.0"
}
},
"../modules/ecashaddrjs/node_modules/@nicolo-ribaudo/chokidar-2": {
"version": "2.1.8-no-fsevents.3",
"dev": true,
"license": "MIT",
"optional": true
},
"../modules/ecashaddrjs/node_modules/@tsconfig/node10": {
"version": "1.0.11",
"dev": true,
"license": "MIT"
},
"../modules/ecashaddrjs/node_modules/@tsconfig/node12": {
"version": "1.0.11",
"dev": true,
"license": "MIT"
},
"../modules/ecashaddrjs/node_modules/@tsconfig/node14": {
"version": "1.0.3",
"dev": true,
"license": "MIT"
},
"../modules/ecashaddrjs/node_modules/@tsconfig/node16": {
"version": "1.0.4",
"dev": true,
"license": "MIT"
},
"../modules/ecashaddrjs/node_modules/@types/chai": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.0.1.tgz",
"integrity": "sha512-5T8ajsg3M/FOncpLYW7sdOcD6yf4+722sze/tc4KQV0P8Z2rAr3SAuHCIkYmYpt8VbcQlnz8SxlOlPQYefe4cA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/deep-eql": "*"
}
},
"../modules/ecashaddrjs/node_modules/@types/deep-eql": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz",
"integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==",
"dev": true,
"license": "MIT"
},
"../modules/ecashaddrjs/node_modules/@types/eslint": {
"version": "9.6.1",
"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz",
"integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@types/estree": "*",
"@types/json-schema": "*"
}
},
"../modules/ecashaddrjs/node_modules/@types/eslint-scope": {
"version": "3.7.7",
"resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz",
"integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@types/eslint": "*",
"@types/estree": "*"
}
},
"../modules/ecashaddrjs/node_modules/@types/estree": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
"integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==",
"dev": true,
"license": "MIT",
"peer": true
},
"../modules/ecashaddrjs/node_modules/@types/json-schema": {
"version": "7.0.15",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
"integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
"dev": true,
"license": "MIT",
"peer": true
},
"../modules/ecashaddrjs/node_modules/@types/linkify-it": {
"version": "3.0.2",
"dev": true,
"license": "MIT"
},
"../modules/ecashaddrjs/node_modules/@types/markdown-it": {
"version": "12.2.3",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/linkify-it": "*",
"@types/mdurl": "*"
}
},
"../modules/ecashaddrjs/node_modules/@types/mdurl": {
"version": "1.0.2",
"dev": true,
"license": "MIT"
},
"../modules/ecashaddrjs/node_modules/@types/mocha": {
"version": "10.0.10",
"resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz",
"integrity": "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==",
"dev": true,
"license": "MIT"
},
"../modules/ecashaddrjs/node_modules/@types/node": {
"version": "18.15.3",
"dev": true,
"license": "MIT",
"peer": true
},
"../modules/ecashaddrjs/node_modules/@webassemblyjs/ast": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz",
"integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@webassemblyjs/helper-numbers": "1.13.2",
"@webassemblyjs/helper-wasm-bytecode": "1.13.2"
}
},
"../modules/ecashaddrjs/node_modules/@webassemblyjs/floating-point-hex-parser": {
"version": "1.13.2",
"resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz",
"integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==",
"dev": true,
"license": "MIT",
"peer": true
},
"../modules/ecashaddrjs/node_modules/@webassemblyjs/helper-api-error": {
"version": "1.13.2",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz",
"integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==",
"dev": true,
"license": "MIT",
"peer": true
},
"../modules/ecashaddrjs/node_modules/@webassemblyjs/helper-buffer": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz",
"integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==",
"dev": true,
"license": "MIT",
"peer": true
},
"../modules/ecashaddrjs/node_modules/@webassemblyjs/helper-numbers": {
"version": "1.13.2",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz",
"integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@webassemblyjs/floating-point-hex-parser": "1.13.2",
"@webassemblyjs/helper-api-error": "1.13.2",
"@xtuc/long": "4.2.2"
}
},
"../modules/ecashaddrjs/node_modules/@webassemblyjs/helper-wasm-bytecode": {
"version": "1.13.2",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz",
"integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==",
"dev": true,
"license": "MIT",
"peer": true
},
"../modules/ecashaddrjs/node_modules/@webassemblyjs/helper-wasm-section": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz",
"integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@webassemblyjs/ast": "1.14.1",
"@webassemblyjs/helper-buffer": "1.14.1",
"@webassemblyjs/helper-wasm-bytecode": "1.13.2",
"@webassemblyjs/wasm-gen": "1.14.1"
}
},
"../modules/ecashaddrjs/node_modules/@webassemblyjs/ieee754": {
"version": "1.13.2",
"resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz",
"integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@xtuc/ieee754": "^1.2.0"
}
},
"../modules/ecashaddrjs/node_modules/@webassemblyjs/leb128": {
"version": "1.13.2",
"resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz",
"integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==",
"dev": true,
"license": "Apache-2.0",
"peer": true,
"dependencies": {
"@xtuc/long": "4.2.2"
}
},
"../modules/ecashaddrjs/node_modules/@webassemblyjs/utf8": {
"version": "1.13.2",
"resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz",
"integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==",
"dev": true,
"license": "MIT",
"peer": true
},
"../modules/ecashaddrjs/node_modules/@webassemblyjs/wasm-edit": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz",
"integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@webassemblyjs/ast": "1.14.1",
"@webassemblyjs/helper-buffer": "1.14.1",
"@webassemblyjs/helper-wasm-bytecode": "1.13.2",
"@webassemblyjs/helper-wasm-section": "1.14.1",
"@webassemblyjs/wasm-gen": "1.14.1",
"@webassemblyjs/wasm-opt": "1.14.1",
"@webassemblyjs/wasm-parser": "1.14.1",
"@webassemblyjs/wast-printer": "1.14.1"
}
},
"../modules/ecashaddrjs/node_modules/@webassemblyjs/wasm-gen": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz",
"integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@webassemblyjs/ast": "1.14.1",
"@webassemblyjs/helper-wasm-bytecode": "1.13.2",
"@webassemblyjs/ieee754": "1.13.2",
"@webassemblyjs/leb128": "1.13.2",
"@webassemblyjs/utf8": "1.13.2"
}
},
"../modules/ecashaddrjs/node_modules/@webassemblyjs/wasm-opt": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz",
"integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@webassemblyjs/ast": "1.14.1",
"@webassemblyjs/helper-buffer": "1.14.1",
"@webassemblyjs/wasm-gen": "1.14.1",
"@webassemblyjs/wasm-parser": "1.14.1"
}
},
"../modules/ecashaddrjs/node_modules/@webassemblyjs/wasm-parser": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz",
"integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@webassemblyjs/ast": "1.14.1",
"@webassemblyjs/helper-api-error": "1.13.2",
"@webassemblyjs/helper-wasm-bytecode": "1.13.2",
"@webassemblyjs/ieee754": "1.13.2",
"@webassemblyjs/leb128": "1.13.2",
"@webassemblyjs/utf8": "1.13.2"
}
},
"../modules/ecashaddrjs/node_modules/@webassemblyjs/wast-printer": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz",
"integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@webassemblyjs/ast": "1.14.1",
"@xtuc/long": "4.2.2"
}
},
"../modules/ecashaddrjs/node_modules/@xtuc/ieee754": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
"integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
"dev": true,
"license": "BSD-3-Clause",
"peer": true
},
"../modules/ecashaddrjs/node_modules/@xtuc/long": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
"integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
"dev": true,
"license": "Apache-2.0",
"peer": true
},
"../modules/ecashaddrjs/node_modules/acorn": {
"version": "8.14.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
"integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
"dev": true,
"license": "MIT",
"bin": {
"acorn": "bin/acorn"
},
"engines": {
"node": ">=0.4.0"
}
},
"../modules/ecashaddrjs/node_modules/acorn-walk": {
"version": "8.3.4",
"dev": true,
"license": "MIT",
"dependencies": {
"acorn": "^8.11.0"
},
"engines": {
"node": ">=0.4.0"
}
},
"../modules/ecashaddrjs/node_modules/aggregate-error": {
"version": "3.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"clean-stack": "^2.0.0",
"indent-string": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/ajv-formats": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
"integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"ajv": "^8.0.0"
},
"peerDependencies": {
"ajv": "^8.0.0"
},
"peerDependenciesMeta": {
"ajv": {
"optional": true
}
}
},
"../modules/ecashaddrjs/node_modules/ajv-formats/node_modules/ajv": {
"version": "8.17.1",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1",
"json-schema-traverse": "^1.0.0",
"require-from-string": "^2.0.2"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/epoberezkin"
}
},
"../modules/ecashaddrjs/node_modules/ajv-formats/node_modules/json-schema-traverse": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
"dev": true,
"license": "MIT",
"peer": true
},
"../modules/ecashaddrjs/node_modules/ansi-colors": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
"integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"../modules/ecashaddrjs/node_modules/ansi-regex": {
"version": "5.0.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/ansi-styles": {
"version": "3.2.1",
"dev": true,
"license": "MIT",
"dependencies": {
"color-convert": "^1.9.0"
},
"engines": {
"node": ">=4"
}
},
"../modules/ecashaddrjs/node_modules/append-transform": {
"version": "2.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"default-require-extensions": "^3.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/archy": {
"version": "1.0.0",
"dev": true,
"license": "MIT"
},
"../modules/ecashaddrjs/node_modules/arg": {
"version": "4.1.3",
"dev": true,
"license": "MIT"
},
"../modules/ecashaddrjs/node_modules/argparse": {
"version": "1.0.10",
"dev": true,
"license": "MIT",
"dependencies": {
"sprintf-js": "~1.0.2"
}
},
"../modules/ecashaddrjs/node_modules/assertion-error": {
"version": "1.1.0",
"dev": true,
"license": "MIT",
"engines": {
"node": "*"
}
},
"../modules/ecashaddrjs/node_modules/babel-plugin-polyfill-corejs2": {
"version": "0.3.3",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/compat-data": "^7.17.7",
"@babel/helper-define-polyfill-provider": "^0.3.3",
"semver": "^6.1.1"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": {
"version": "6.3.1",
"dev": true,
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
}
},
"../modules/ecashaddrjs/node_modules/babel-plugin-polyfill-corejs3": {
"version": "0.6.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-define-polyfill-provider": "^0.3.3",
"core-js-compat": "^3.25.1"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/babel-plugin-polyfill-regenerator": {
"version": "0.4.1",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-define-polyfill-provider": "^0.3.3"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"../modules/ecashaddrjs/node_modules/balanced-match": {
"version": "1.0.2",
"dev": true,
"license": "MIT"
},
"../modules/ecashaddrjs/node_modules/base64-js": {
"version": "1.5.1",
"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"
}
],
"license": "MIT"
},
"../modules/ecashaddrjs/node_modules/bluebird": {
"version": "3.7.2",
"dev": true,
"license": "MIT"
},
"../modules/ecashaddrjs/node_modules/brace-expansion": {
"version": "1.1.11",
"dev": true,
"license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"../modules/ecashaddrjs/node_modules/braces": {
"version": "3.0.3",
"dev": true,
"license": "MIT",
"dependencies": {
"fill-range": "^7.1.1"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/browser-stdout": {
"version": "1.3.1",
"dev": true,
"license": "ISC"
},
"../modules/ecashaddrjs/node_modules/browserslist": {
"version": "4.24.4",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz",
"integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==",
"dev": true,
"funding": [
{
"type": "opencollective",
"url": "https://opencollective.com/browserslist"
},
{
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/browserslist"
},
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
"license": "MIT",
"dependencies": {
"caniuse-lite": "^1.0.30001688",
"electron-to-chromium": "^1.5.73",
"node-releases": "^2.0.19",
"update-browserslist-db": "^1.1.1"
},
"bin": {
"browserslist": "cli.js"
},
"engines": {
"node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
}
},
"../modules/ecashaddrjs/node_modules/buffer": {
"version": "6.0.3",
"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"
}
],
"license": "MIT",
"dependencies": {
"base64-js": "^1.3.1",
"ieee754": "^1.2.1"
}
},
"../modules/ecashaddrjs/node_modules/buffer-from": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
"dev": true,
"license": "MIT",
"peer": true
},
"../modules/ecashaddrjs/node_modules/caching-transform": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"hasha": "^5.0.0",
"make-dir": "^3.0.0",
"package-hash": "^4.0.0",
"write-file-atomic": "^3.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/caching-transform/node_modules/make-dir": {
"version": "3.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"semver": "^6.0.0"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecashaddrjs/node_modules/caching-transform/node_modules/semver": {
"version": "6.3.1",
"dev": true,
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
}
},
"../modules/ecashaddrjs/node_modules/camelcase": {
"version": "5.3.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"../modules/ecashaddrjs/node_modules/catharsis": {
"version": "0.9.0",
"dev": true,
"license": "MIT",
"dependencies": {
"lodash": "^4.17.15"
},
"engines": {
"node": ">= 10"
}
},
"../modules/ecashaddrjs/node_modules/chai": {
"version": "4.3.7",
"dev": true,
"license": "MIT",
"dependencies": {
"assertion-error": "^1.1.0",
"check-error": "^1.0.2",
"deep-eql": "^4.1.2",
"get-func-name": "^2.0.0",
"loupe": "^2.3.1",
"pathval": "^1.1.1",
"type-detect": "^4.0.5"
},
"engines": {
"node": ">=4"
}
},
"../modules/ecashaddrjs/node_modules/chalk": {
"version": "2.4.2",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
"supports-color": "^5.3.0"
},
"engines": {
"node": ">=4"
}
},
"../modules/ecashaddrjs/node_modules/charenc": {
"version": "0.0.2",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": "*"
}
},
"../modules/ecashaddrjs/node_modules/check-error": {
"version": "1.0.2",
"dev": true,
"license": "MIT",
"engines": {
"node": "*"
}
},
"../modules/ecashaddrjs/node_modules/chokidar": {
"version": "3.5.3",
"dev": true,
"funding": [
{
"type": "individual",
"url": "https://paulmillr.com/funding/"
}
],
"license": "MIT",
"dependencies": {
"anymatch": "~3.1.2",
"braces": "~3.0.2",
"glob-parent": "~5.1.2",
"is-binary-path": "~2.1.0",
"is-glob": "~4.0.1",
"normalize-path": "~3.0.0",
"readdirp": "~3.6.0"
},
"engines": {
"node": ">= 8.10.0"
},
"optionalDependencies": {
"fsevents": "~2.3.2"
}
},
"../modules/ecashaddrjs/node_modules/chokidar/node_modules/anymatch": {
"version": "3.1.3",
"dev": true,
"license": "ISC",
"dependencies": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
},
"engines": {
"node": ">= 8"
}
},
"../modules/ecashaddrjs/node_modules/chokidar/node_modules/binary-extensions": {
"version": "2.2.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/chokidar/node_modules/glob-parent": {
"version": "5.1.2",
"dev": true,
"license": "ISC",
"dependencies": {
"is-glob": "^4.0.1"
},
"engines": {
"node": ">= 6"
}
},
"../modules/ecashaddrjs/node_modules/chokidar/node_modules/is-binary-path": {
"version": "2.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"binary-extensions": "^2.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/chokidar/node_modules/readdirp": {
"version": "3.6.0",
"dev": true,
"license": "MIT",
"dependencies": {
"picomatch": "^2.2.1"
},
"engines": {
"node": ">=8.10.0"
}
},
"../modules/ecashaddrjs/node_modules/chrome-trace-event": {
"version": "1.0.3",
"dev": true,
"license": "MIT",
"peer": true,
"engines": {
"node": ">=6.0"
}
},
"../modules/ecashaddrjs/node_modules/clean-stack": {
"version": "2.2.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"../modules/ecashaddrjs/node_modules/cliui": {
"version": "7.0.4",
"dev": true,
"license": "ISC",
"dependencies": {
"string-width": "^4.2.0",
"strip-ansi": "^6.0.0",
"wrap-ansi": "^7.0.0"
}
},
"../modules/ecashaddrjs/node_modules/color-convert": {
"version": "1.9.3",
"dev": true,
"license": "MIT",
"dependencies": {
"color-name": "1.1.3"
}
},
"../modules/ecashaddrjs/node_modules/color-name": {
"version": "1.1.3",
"dev": true,
"license": "MIT"
},
"../modules/ecashaddrjs/node_modules/commander": {
"version": "4.1.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 6"
}
},
"../modules/ecashaddrjs/node_modules/commondir": {
"version": "1.0.1",
"dev": true,
"license": "MIT"
},
"../modules/ecashaddrjs/node_modules/concat-map": {
"version": "0.0.1",
"dev": true,
"license": "MIT"
},
"../modules/ecashaddrjs/node_modules/convert-source-map": {
"version": "1.9.0",
"dev": true,
"license": "MIT"
},
"../modules/ecashaddrjs/node_modules/core-js-compat": {
"version": "3.29.1",
"dev": true,
"license": "MIT",
"dependencies": {
"browserslist": "^4.21.5"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/core-js"
}
},
"../modules/ecashaddrjs/node_modules/create-require": {
"version": "1.1.1",
"dev": true,
"license": "MIT"
},
"../modules/ecashaddrjs/node_modules/cross-spawn": {
"version": "7.0.6",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
"integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
"dev": true,
"license": "MIT",
"dependencies": {
"path-key": "^3.1.0",
"shebang-command": "^2.0.0",
"which": "^2.0.1"
},
"engines": {
"node": ">= 8"
}
},
"../modules/ecashaddrjs/node_modules/crypt": {
"version": "0.0.2",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": "*"
}
},
"../modules/ecashaddrjs/node_modules/debug": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
"integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
"dev": true,
"license": "MIT",
"dependencies": {
"ms": "^2.1.3"
},
"engines": {
"node": ">=6.0"
},
"peerDependenciesMeta": {
"supports-color": {
"optional": true
}
}
},
"../modules/ecashaddrjs/node_modules/decamelize": {
"version": "1.2.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"../modules/ecashaddrjs/node_modules/deep-eql": {
"version": "4.1.3",
"dev": true,
"license": "MIT",
"dependencies": {
"type-detect": "^4.0.0"
},
"engines": {
"node": ">=6"
}
},
"../modules/ecashaddrjs/node_modules/default-require-extensions": {
"version": "3.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"strip-bom": "^4.0.0"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecashaddrjs/node_modules/diff": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz",
"integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.3.1"
}
},
"../modules/ecashaddrjs/node_modules/electron-to-chromium": {
"version": "1.5.101",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.101.tgz",
"integrity": "sha512-L0ISiQrP/56Acgu4/i/kfPwWSgrzYZUnQrC0+QPFuhqlLP1Ir7qzPPDVS9BcKIyWTRU8+o6CC8dKw38tSWhYIA==",
"dev": true,
"license": "ISC"
},
"../modules/ecashaddrjs/node_modules/emoji-regex": {
"version": "8.0.0",
"dev": true,
"license": "MIT"
},
"../modules/ecashaddrjs/node_modules/enhanced-resolve": {
"version": "5.18.1",
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz",
"integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==",
"dev": true,
"license": "MIT",
"dependencies": {
"graceful-fs": "^4.2.4",
"tapable": "^2.2.0"
},
"engines": {
"node": ">=10.13.0"
}
},
"../modules/ecashaddrjs/node_modules/entities": {
"version": "2.1.0",
"dev": true,
"license": "BSD-2-Clause",
"funding": {
"url": "https://github.com/fb55/entities?sponsor=1"
}
},
"../modules/ecashaddrjs/node_modules/es-module-lexer": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz",
"integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==",
"dev": true,
"license": "MIT",
"peer": true
},
"../modules/ecashaddrjs/node_modules/es6-error": {
"version": "4.1.1",
"dev": true,
"license": "MIT"
},
"../modules/ecashaddrjs/node_modules/escalade": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
"integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"../modules/ecashaddrjs/node_modules/escape-string-regexp": {
"version": "1.0.5",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.8.0"
}
},
"../modules/ecashaddrjs/node_modules/eslint-scope": {
"version": "5.1.1",
"dev": true,
"license": "BSD-2-Clause",
"peer": true,
"dependencies": {
"esrecurse": "^4.3.0",
"estraverse": "^4.1.1"
},
"engines": {
"node": ">=8.0.0"
}
},
"../modules/ecashaddrjs/node_modules/esprima": {
"version": "4.0.1",
"dev": true,
"license": "BSD-2-Clause",
"bin": {
"esparse": "bin/esparse.js",
"esvalidate": "bin/esvalidate.js"
},
"engines": {
"node": ">=4"
}
},
"../modules/ecashaddrjs/node_modules/esrecurse": {
"version": "4.3.0",
"dev": true,
"license": "BSD-2-Clause",
"peer": true,
"dependencies": {
"estraverse": "^5.2.0"
},
"engines": {
"node": ">=4.0"
}
},
"../modules/ecashaddrjs/node_modules/esrecurse/node_modules/estraverse": {
"version": "5.3.0",
"dev": true,
"license": "BSD-2-Clause",
"peer": true,
"engines": {
"node": ">=4.0"
}
},
"../modules/ecashaddrjs/node_modules/estraverse": {
"version": "4.3.0",
"dev": true,
"license": "BSD-2-Clause",
"peer": true,
"engines": {
"node": ">=4.0"
}
},
"../modules/ecashaddrjs/node_modules/esutils": {
"version": "2.0.3",
"dev": true,
"license": "BSD-2-Clause",
"engines": {
"node": ">=0.10.0"
}
},
"../modules/ecashaddrjs/node_modules/events": {
"version": "3.3.0",
"dev": true,
"license": "MIT",
"peer": true,
"engines": {
"node": ">=0.8.x"
}
},
"../modules/ecashaddrjs/node_modules/fast-deep-equal": {
"version": "3.1.3",
"dev": true,
"license": "MIT",
"peer": true
},
"../modules/ecashaddrjs/node_modules/fast-uri": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz",
"integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==",
"dev": true,
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/fastify"
},
{
"type": "opencollective",
"url": "https://opencollective.com/fastify"
}
],
"license": "BSD-3-Clause",
"peer": true
},
"../modules/ecashaddrjs/node_modules/fill-range": {
"version": "7.1.1",
"dev": true,
"license": "MIT",
"dependencies": {
"to-regex-range": "^5.0.1"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/find-cache-dir": {
"version": "3.3.2",
"dev": true,
"license": "MIT",
"dependencies": {
"commondir": "^1.0.1",
"make-dir": "^3.0.2",
"pkg-dir": "^4.1.0"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/avajs/find-cache-dir?sponsor=1"
}
},
"../modules/ecashaddrjs/node_modules/find-cache-dir/node_modules/make-dir": {
"version": "3.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"semver": "^6.0.0"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecashaddrjs/node_modules/find-cache-dir/node_modules/semver": {
"version": "6.3.1",
"dev": true,
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
}
},
"../modules/ecashaddrjs/node_modules/find-up": {
"version": "5.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"locate-path": "^6.0.0",
"path-exists": "^4.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecashaddrjs/node_modules/flat": {
"version": "5.0.2",
"dev": true,
"license": "BSD-3-Clause",
"bin": {
"flat": "cli.js"
}
},
"../modules/ecashaddrjs/node_modules/foreground-child": {
"version": "2.0.0",
"dev": true,
"license": "ISC",
"dependencies": {
"cross-spawn": "^7.0.0",
"signal-exit": "^3.0.2"
},
"engines": {
"node": ">=8.0.0"
}
},
"../modules/ecashaddrjs/node_modules/fromentries": {
"version": "1.3.2",
"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"
}
],
"license": "MIT"
},
"../modules/ecashaddrjs/node_modules/fs-readdir-recursive": {
"version": "1.1.0",
"dev": true,
"license": "MIT"
},
"../modules/ecashaddrjs/node_modules/fs.realpath": {
"version": "1.0.0",
"dev": true,
"license": "ISC"
},
"../modules/ecashaddrjs/node_modules/function-bind": {
"version": "1.1.1",
"dev": true,
"license": "MIT"
},
"../modules/ecashaddrjs/node_modules/gensync": {
"version": "1.0.0-beta.2",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"../modules/ecashaddrjs/node_modules/get-caller-file": {
"version": "2.0.5",
"dev": true,
"license": "ISC",
"engines": {
"node": "6.* || 8.* || >= 10.*"
}
},
"../modules/ecashaddrjs/node_modules/get-func-name": {
"version": "2.0.2",
"dev": true,
"license": "MIT",
"engines": {
"node": "*"
}
},
"../modules/ecashaddrjs/node_modules/get-package-type": {
"version": "0.1.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8.0.0"
}
},
"../modules/ecashaddrjs/node_modules/glob": {
"version": "7.2.3",
"dev": true,
"license": "ISC",
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.1.1",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
},
"engines": {
"node": "*"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"../modules/ecashaddrjs/node_modules/glob-to-regexp": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
"integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
"dev": true,
"license": "BSD-2-Clause",
"peer": true
},
"../modules/ecashaddrjs/node_modules/globals": {
"version": "11.12.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"../modules/ecashaddrjs/node_modules/graceful-fs": {
"version": "4.2.11",
"dev": true,
"license": "ISC"
},
"../modules/ecashaddrjs/node_modules/has": {
"version": "1.0.3",
"dev": true,
"license": "MIT",
"dependencies": {
"function-bind": "^1.1.1"
},
"engines": {
"node": ">= 0.4.0"
}
},
"../modules/ecashaddrjs/node_modules/has-flag": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"../modules/ecashaddrjs/node_modules/hasha": {
"version": "5.2.2",
"dev": true,
"license": "MIT",
"dependencies": {
"is-stream": "^2.0.0",
"type-fest": "^0.8.0"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecashaddrjs/node_modules/he": {
"version": "1.2.0",
"dev": true,
"license": "MIT",
"bin": {
"he": "bin/he"
}
},
"../modules/ecashaddrjs/node_modules/html-escaper": {
"version": "2.0.2",
"dev": true,
"license": "MIT"
},
"../modules/ecashaddrjs/node_modules/ieee754": {
"version": "1.2.1",
"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"
}
],
"license": "BSD-3-Clause"
},
"../modules/ecashaddrjs/node_modules/imurmurhash": {
"version": "0.1.4",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.8.19"
}
},
"../modules/ecashaddrjs/node_modules/indent-string": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/inflight": {
"version": "1.0.6",
"dev": true,
"license": "ISC",
"dependencies": {
"once": "^1.3.0",
"wrappy": "1"
}
},
"../modules/ecashaddrjs/node_modules/inherits": {
"version": "2.0.4",
"dev": true,
"license": "ISC"
},
"../modules/ecashaddrjs/node_modules/is-buffer": {
"version": "1.1.6",
"dev": true,
"license": "MIT"
},
"../modules/ecashaddrjs/node_modules/is-core-module": {
"version": "2.11.0",
"dev": true,
"license": "MIT",
"dependencies": {
"has": "^1.0.3"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"../modules/ecashaddrjs/node_modules/is-extglob": {
"version": "2.1.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"../modules/ecashaddrjs/node_modules/is-fullwidth-code-point": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/is-glob": {
"version": "4.0.3",
"dev": true,
"license": "MIT",
"dependencies": {
"is-extglob": "^2.1.1"
},
"engines": {
"node": ">=0.10.0"
}
},
"../modules/ecashaddrjs/node_modules/is-number": {
"version": "7.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.12.0"
}
},
"../modules/ecashaddrjs/node_modules/is-plain-obj": {
"version": "2.1.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/is-stream": {
"version": "2.0.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecashaddrjs/node_modules/is-typedarray": {
"version": "1.0.0",
"dev": true,
"license": "MIT"
},
"../modules/ecashaddrjs/node_modules/is-unicode-supported": {
"version": "0.1.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecashaddrjs/node_modules/is-windows": {
"version": "1.0.2",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"../modules/ecashaddrjs/node_modules/isexe": {
"version": "2.0.0",
"dev": true,
"license": "ISC"
},
"../modules/ecashaddrjs/node_modules/istanbul-lib-coverage": {
"version": "3.2.0",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/istanbul-lib-hook": {
"version": "3.0.0",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"append-transform": "^2.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/istanbul-lib-instrument": {
"version": "4.0.3",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"@babel/core": "^7.7.5",
"@istanbuljs/schema": "^0.1.2",
"istanbul-lib-coverage": "^3.0.0",
"semver": "^6.3.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/istanbul-lib-instrument/node_modules/semver": {
"version": "6.3.1",
"dev": true,
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
}
},
"../modules/ecashaddrjs/node_modules/istanbul-lib-processinfo": {
"version": "2.0.3",
"dev": true,
"license": "ISC",
"dependencies": {
"archy": "^1.0.0",
"cross-spawn": "^7.0.3",
"istanbul-lib-coverage": "^3.2.0",
"p-map": "^3.0.0",
"rimraf": "^3.0.0",
"uuid": "^8.3.2"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/istanbul-lib-processinfo/node_modules/uuid": {
"version": "8.3.2",
"dev": true,
"license": "MIT",
"bin": {
"uuid": "dist/bin/uuid"
}
},
"../modules/ecashaddrjs/node_modules/istanbul-lib-report": {
"version": "3.0.0",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"istanbul-lib-coverage": "^3.0.0",
"make-dir": "^3.0.0",
"supports-color": "^7.1.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/istanbul-lib-report/node_modules/has-flag": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/istanbul-lib-report/node_modules/make-dir": {
"version": "3.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"semver": "^6.0.0"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecashaddrjs/node_modules/istanbul-lib-report/node_modules/semver": {
"version": "6.3.1",
"dev": true,
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
}
},
"../modules/ecashaddrjs/node_modules/istanbul-lib-report/node_modules/supports-color": {
"version": "7.2.0",
"dev": true,
"license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/istanbul-lib-source-maps": {
"version": "4.0.1",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"debug": "^4.1.1",
"istanbul-lib-coverage": "^3.0.0",
"source-map": "^0.6.1"
},
"engines": {
"node": ">=10"
}
},
"../modules/ecashaddrjs/node_modules/istanbul-lib-source-maps/node_modules/source-map": {
"version": "0.6.1",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
}
},
"../modules/ecashaddrjs/node_modules/istanbul-reports": {
"version": "3.1.5",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"html-escaper": "^2.0.0",
"istanbul-lib-report": "^3.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/jest-worker": {
"version": "27.5.1",
"resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
"integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@types/node": "*",
"merge-stream": "^2.0.0",
"supports-color": "^8.0.0"
},
"engines": {
"node": ">= 10.13.0"
}
},
"../modules/ecashaddrjs/node_modules/jest-worker/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,
"license": "MIT",
"peer": true,
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/jest-worker/node_modules/supports-color": {
"version": "8.1.1",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
"integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/supports-color?sponsor=1"
}
},
"../modules/ecashaddrjs/node_modules/js-tokens": {
"version": "4.0.0",
"dev": true,
"license": "MIT"
},
"../modules/ecashaddrjs/node_modules/js-yaml": {
"version": "3.14.1",
"dev": true,
"license": "MIT",
"dependencies": {
"argparse": "^1.0.7",
"esprima": "^4.0.0"
},
"bin": {
"js-yaml": "bin/js-yaml.js"
}
},
"../modules/ecashaddrjs/node_modules/js2xmlparser": {
"version": "4.0.2",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"xmlcreate": "^2.0.4"
}
},
"../modules/ecashaddrjs/node_modules/jsdoc": {
"version": "4.0.2",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"@babel/parser": "^7.20.15",
"@jsdoc/salty": "^0.2.1",
"@types/markdown-it": "^12.2.3",
"bluebird": "^3.7.2",
"catharsis": "^0.9.0",
"escape-string-regexp": "^2.0.0",
"js2xmlparser": "^4.0.2",
"klaw": "^3.0.0",
"markdown-it": "^12.3.2",
"markdown-it-anchor": "^8.4.1",
"marked": "^4.0.10",
"mkdirp": "^1.0.4",
"requizzle": "^0.2.3",
"strip-json-comments": "^3.1.0",
"underscore": "~1.13.2"
},
"bin": {
"jsdoc": "jsdoc.js"
},
"engines": {
"node": ">=12.0.0"
}
},
"../modules/ecashaddrjs/node_modules/jsdoc/node_modules/escape-string-regexp": {
"version": "2.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/jsesc": {
"version": "2.5.2",
"dev": true,
"license": "MIT",
"bin": {
"jsesc": "bin/jsesc"
},
"engines": {
"node": ">=4"
}
},
"../modules/ecashaddrjs/node_modules/json-parse-even-better-errors": {
"version": "2.3.1",
"dev": true,
"license": "MIT",
"peer": true
},
"../modules/ecashaddrjs/node_modules/json5": {
"version": "2.2.3",
"dev": true,
"license": "MIT",
"bin": {
"json5": "lib/cli.js"
},
"engines": {
"node": ">=6"
}
},
"../modules/ecashaddrjs/node_modules/klaw": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"graceful-fs": "^4.1.9"
}
},
"../modules/ecashaddrjs/node_modules/linkify-it": {
"version": "3.0.3",
"dev": true,
"license": "MIT",
"dependencies": {
"uc.micro": "^1.0.1"
}
},
"../modules/ecashaddrjs/node_modules/loader-runner": {
"version": "4.3.0",
"dev": true,
"license": "MIT",
"peer": true,
"engines": {
"node": ">=6.11.5"
}
},
"../modules/ecashaddrjs/node_modules/locate-path": {
"version": "6.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-locate": "^5.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecashaddrjs/node_modules/lodash": {
"version": "4.17.21",
"dev": true,
"license": "MIT"
},
"../modules/ecashaddrjs/node_modules/lodash.debounce": {
"version": "4.0.8",
"dev": true,
"license": "MIT"
},
"../modules/ecashaddrjs/node_modules/lodash.flattendeep": {
"version": "4.4.0",
"dev": true,
"license": "MIT"
},
"../modules/ecashaddrjs/node_modules/log-symbols": {
"version": "4.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"chalk": "^4.1.0",
"is-unicode-supported": "^0.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecashaddrjs/node_modules/log-symbols/node_modules/ansi-styles": {
"version": "4.3.0",
"dev": true,
"license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"../modules/ecashaddrjs/node_modules/log-symbols/node_modules/chalk": {
"version": "4.1.2",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
"../modules/ecashaddrjs/node_modules/log-symbols/node_modules/color-convert": {
"version": "2.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"color-name": "~1.1.4"
},
"engines": {
"node": ">=7.0.0"
}
},
"../modules/ecashaddrjs/node_modules/log-symbols/node_modules/color-name": {
"version": "1.1.4",
"dev": true,
"license": "MIT"
},
"../modules/ecashaddrjs/node_modules/log-symbols/node_modules/has-flag": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/log-symbols/node_modules/supports-color": {
"version": "7.2.0",
"dev": true,
"license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/loupe": {
"version": "2.3.6",
"dev": true,
"license": "MIT",
"dependencies": {
"get-func-name": "^2.0.0"
}
},
"../modules/ecashaddrjs/node_modules/lru-cache": {
"version": "5.1.1",
"dev": true,
"license": "ISC",
"dependencies": {
"yallist": "^3.0.2"
}
},
"../modules/ecashaddrjs/node_modules/make-dir": {
"version": "2.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"pify": "^4.0.1",
"semver": "^5.6.0"
},
"engines": {
"node": ">=6"
}
},
"../modules/ecashaddrjs/node_modules/make-error": {
"version": "1.3.6",
"dev": true,
"license": "ISC"
},
"../modules/ecashaddrjs/node_modules/markdown-it": {
"version": "12.3.2",
"dev": true,
"license": "MIT",
"dependencies": {
"argparse": "^2.0.1",
"entities": "~2.1.0",
"linkify-it": "^3.0.1",
"mdurl": "^1.0.1",
"uc.micro": "^1.0.5"
},
"bin": {
"markdown-it": "bin/markdown-it.js"
}
},
"../modules/ecashaddrjs/node_modules/markdown-it-anchor": {
"version": "8.6.7",
"dev": true,
"license": "Unlicense",
"peerDependencies": {
"@types/markdown-it": "*",
"markdown-it": "*"
}
},
"../modules/ecashaddrjs/node_modules/markdown-it/node_modules/argparse": {
"version": "2.0.1",
"dev": true,
"license": "Python-2.0"
},
"../modules/ecashaddrjs/node_modules/marked": {
"version": "4.2.12",
"dev": true,
"license": "MIT",
"bin": {
"marked": "bin/marked.js"
},
"engines": {
"node": ">= 12"
}
},
"../modules/ecashaddrjs/node_modules/md5": {
"version": "2.3.0",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"charenc": "0.0.2",
"crypt": "0.0.2",
"is-buffer": "~1.1.6"
}
},
"../modules/ecashaddrjs/node_modules/mdurl": {
"version": "1.0.1",
"dev": true,
"license": "MIT"
},
"../modules/ecashaddrjs/node_modules/merge-stream": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
"integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
"dev": true,
"license": "MIT",
"peer": true
},
"../modules/ecashaddrjs/node_modules/micromatch": {
"version": "4.0.8",
"dev": true,
"license": "MIT",
"dependencies": {
"braces": "^3.0.3",
"picomatch": "^2.3.1"
},
"engines": {
"node": ">=8.6"
}
},
"../modules/ecashaddrjs/node_modules/mime-db": {
"version": "1.52.0",
"dev": true,
"license": "MIT",
"peer": true,
"engines": {
"node": ">= 0.6"
}
},
"../modules/ecashaddrjs/node_modules/mime-types": {
"version": "2.1.35",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"mime-db": "1.52.0"
},
"engines": {
"node": ">= 0.6"
}
},
"../modules/ecashaddrjs/node_modules/minimatch": {
"version": "3.1.2",
"dev": true,
"license": "ISC",
"dependencies": {
"brace-expansion": "^1.1.7"
},
"engines": {
"node": "*"
}
},
"../modules/ecashaddrjs/node_modules/mkdirp": {
"version": "1.0.4",
"dev": true,
"license": "MIT",
"bin": {
"mkdirp": "bin/cmd.js"
},
"engines": {
"node": ">=10"
}
},
"../modules/ecashaddrjs/node_modules/mocha": {
"version": "10.8.2",
"resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
"integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-colors": "^4.1.3",
"browser-stdout": "^1.3.1",
"chokidar": "^3.5.3",
"debug": "^4.3.5",
"diff": "^5.2.0",
"escape-string-regexp": "^4.0.0",
"find-up": "^5.0.0",
"glob": "^8.1.0",
"he": "^1.2.0",
"js-yaml": "^4.1.0",
"log-symbols": "^4.1.0",
"minimatch": "^5.1.6",
"ms": "^2.1.3",
"serialize-javascript": "^6.0.2",
"strip-json-comments": "^3.1.1",
"supports-color": "^8.1.1",
"workerpool": "^6.5.1",
"yargs": "^16.2.0",
"yargs-parser": "^20.2.9",
"yargs-unparser": "^2.0.0"
},
"bin": {
"_mocha": "bin/_mocha",
"mocha": "bin/mocha.js"
},
"engines": {
"node": ">= 14.0.0"
}
},
"../modules/ecashaddrjs/node_modules/mocha-junit-reporter": {
"version": "2.2.0",
"dev": true,
"license": "MIT",
"dependencies": {
"debug": "^4.3.4",
"md5": "^2.3.0",
"mkdirp": "~1.0.4",
"strip-ansi": "^6.0.1",
"xml": "^1.0.1"
},
"peerDependencies": {
"mocha": ">=2.2.5"
}
},
"../modules/ecashaddrjs/node_modules/mocha-suppress-logs": {
"version": "0.3.1",
"dev": true,
"license": "MIT"
},
"../modules/ecashaddrjs/node_modules/mocha/node_modules/argparse": {
"version": "2.0.1",
"dev": true,
"license": "Python-2.0"
},
"../modules/ecashaddrjs/node_modules/mocha/node_modules/brace-expansion": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
"dev": true,
"license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0"
}
},
"../modules/ecashaddrjs/node_modules/mocha/node_modules/escape-string-regexp": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecashaddrjs/node_modules/mocha/node_modules/glob": {
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
"integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
"deprecated": "Glob versions prior to v9 are no longer supported",
"dev": true,
"license": "ISC",
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^5.0.1",
"once": "^1.3.0"
},
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"../modules/ecashaddrjs/node_modules/mocha/node_modules/has-flag": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/mocha/node_modules/js-yaml": {
"version": "4.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"argparse": "^2.0.1"
},
"bin": {
"js-yaml": "bin/js-yaml.js"
}
},
"../modules/ecashaddrjs/node_modules/mocha/node_modules/minimatch": {
"version": "5.1.6",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
"integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
"dev": true,
"license": "ISC",
"dependencies": {
"brace-expansion": "^2.0.1"
},
"engines": {
"node": ">=10"
}
},
"../modules/ecashaddrjs/node_modules/mocha/node_modules/supports-color": {
"version": "8.1.1",
"dev": true,
"license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/supports-color?sponsor=1"
}
},
"../modules/ecashaddrjs/node_modules/ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
"dev": true,
"license": "MIT"
},
"../modules/ecashaddrjs/node_modules/neo-async": {
"version": "2.6.2",
"dev": true,
"license": "MIT",
"peer": true
},
"../modules/ecashaddrjs/node_modules/node-preload": {
"version": "0.2.1",
"dev": true,
"license": "MIT",
"dependencies": {
"process-on-spawn": "^1.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/node-releases": {
"version": "2.0.19",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz",
"integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==",
"dev": true,
"license": "MIT"
},
"../modules/ecashaddrjs/node_modules/normalize-path": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"../modules/ecashaddrjs/node_modules/nyc": {
"version": "15.1.0",
"dev": true,
"license": "ISC",
"dependencies": {
"@istanbuljs/load-nyc-config": "^1.0.0",
"@istanbuljs/schema": "^0.1.2",
"caching-transform": "^4.0.0",
"convert-source-map": "^1.7.0",
"decamelize": "^1.2.0",
"find-cache-dir": "^3.2.0",
"find-up": "^4.1.0",
"foreground-child": "^2.0.0",
"get-package-type": "^0.1.0",
"glob": "^7.1.6",
"istanbul-lib-coverage": "^3.0.0",
"istanbul-lib-hook": "^3.0.0",
"istanbul-lib-instrument": "^4.0.0",
"istanbul-lib-processinfo": "^2.0.2",
"istanbul-lib-report": "^3.0.0",
"istanbul-lib-source-maps": "^4.0.0",
"istanbul-reports": "^3.0.2",
"make-dir": "^3.0.0",
"node-preload": "^0.2.1",
"p-map": "^3.0.0",
"process-on-spawn": "^1.0.0",
"resolve-from": "^5.0.0",
"rimraf": "^3.0.0",
"signal-exit": "^3.0.2",
"spawn-wrap": "^2.0.0",
"test-exclude": "^6.0.0",
"yargs": "^15.0.2"
},
"bin": {
"nyc": "bin/nyc.js"
},
"engines": {
"node": ">=8.9"
}
},
"../modules/ecashaddrjs/node_modules/nyc/node_modules/ansi-styles": {
"version": "4.3.0",
"dev": true,
"license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"../modules/ecashaddrjs/node_modules/nyc/node_modules/cliui": {
"version": "6.0.0",
"dev": true,
"license": "ISC",
"dependencies": {
"string-width": "^4.2.0",
"strip-ansi": "^6.0.0",
"wrap-ansi": "^6.2.0"
}
},
"../modules/ecashaddrjs/node_modules/nyc/node_modules/color-convert": {
"version": "2.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"color-name": "~1.1.4"
},
"engines": {
"node": ">=7.0.0"
}
},
"../modules/ecashaddrjs/node_modules/nyc/node_modules/color-name": {
"version": "1.1.4",
"dev": true,
"license": "MIT"
},
"../modules/ecashaddrjs/node_modules/nyc/node_modules/find-up": {
"version": "4.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"locate-path": "^5.0.0",
"path-exists": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/nyc/node_modules/locate-path": {
"version": "5.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-locate": "^4.1.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/nyc/node_modules/make-dir": {
"version": "3.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"semver": "^6.0.0"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecashaddrjs/node_modules/nyc/node_modules/p-limit": {
"version": "2.3.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-try": "^2.0.0"
},
"engines": {
"node": ">=6"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecashaddrjs/node_modules/nyc/node_modules/p-locate": {
"version": "4.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-limit": "^2.2.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/nyc/node_modules/semver": {
"version": "6.3.1",
"dev": true,
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
}
},
"../modules/ecashaddrjs/node_modules/nyc/node_modules/wrap-ansi": {
"version": "6.2.0",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
"strip-ansi": "^6.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/nyc/node_modules/yargs": {
"version": "15.4.1",
"dev": true,
"license": "MIT",
"dependencies": {
"cliui": "^6.0.0",
"decamelize": "^1.2.0",
"find-up": "^4.1.0",
"get-caller-file": "^2.0.1",
"require-directory": "^2.1.1",
"require-main-filename": "^2.0.0",
"set-blocking": "^2.0.0",
"string-width": "^4.2.0",
"which-module": "^2.0.0",
"y18n": "^4.0.0",
"yargs-parser": "^18.1.2"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/nyc/node_modules/yargs-parser": {
"version": "18.1.3",
"dev": true,
"license": "ISC",
"dependencies": {
"camelcase": "^5.0.0",
"decamelize": "^1.2.0"
},
"engines": {
"node": ">=6"
}
},
"../modules/ecashaddrjs/node_modules/once": {
"version": "1.4.0",
"dev": true,
"license": "ISC",
"dependencies": {
"wrappy": "1"
}
},
"../modules/ecashaddrjs/node_modules/p-limit": {
"version": "3.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"yocto-queue": "^0.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecashaddrjs/node_modules/p-locate": {
"version": "5.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-limit": "^3.0.2"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecashaddrjs/node_modules/p-map": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"aggregate-error": "^3.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/p-try": {
"version": "2.2.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"../modules/ecashaddrjs/node_modules/package-hash": {
"version": "4.0.0",
"dev": true,
"license": "ISC",
"dependencies": {
"graceful-fs": "^4.1.15",
"hasha": "^5.0.0",
"lodash.flattendeep": "^4.4.0",
"release-zalgo": "^1.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/path-exists": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/path-is-absolute": {
"version": "1.0.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"../modules/ecashaddrjs/node_modules/path-key": {
"version": "3.1.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/path-parse": {
"version": "1.0.7",
"dev": true,
"license": "MIT"
},
"../modules/ecashaddrjs/node_modules/pathval": {
"version": "1.1.1",
"dev": true,
"license": "MIT",
"engines": {
"node": "*"
}
},
"../modules/ecashaddrjs/node_modules/picocolors": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
"dev": true,
"license": "ISC"
},
"../modules/ecashaddrjs/node_modules/picomatch": {
"version": "2.3.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8.6"
},
"funding": {
"url": "https://github.com/sponsors/jonschlinkert"
}
},
"../modules/ecashaddrjs/node_modules/pify": {
"version": "4.0.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"../modules/ecashaddrjs/node_modules/pkg-dir": {
"version": "4.2.0",
"dev": true,
"license": "MIT",
"dependencies": {
"find-up": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/pkg-dir/node_modules/find-up": {
"version": "4.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"locate-path": "^5.0.0",
"path-exists": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/pkg-dir/node_modules/locate-path": {
"version": "5.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-locate": "^4.1.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/pkg-dir/node_modules/p-limit": {
"version": "2.3.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-try": "^2.0.0"
},
"engines": {
"node": ">=6"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecashaddrjs/node_modules/pkg-dir/node_modules/p-locate": {
"version": "4.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-limit": "^2.2.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/process-on-spawn": {
"version": "1.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"fromentries": "^1.2.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/random-js": {
"version": "2.1.0",
"dev": true,
"license": "MIT"
},
"../modules/ecashaddrjs/node_modules/randombytes": {
"version": "2.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"safe-buffer": "^5.1.0"
}
},
"../modules/ecashaddrjs/node_modules/regenerate": {
"version": "1.4.2",
"dev": true,
"license": "MIT"
},
"../modules/ecashaddrjs/node_modules/regenerate-unicode-properties": {
"version": "10.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"regenerate": "^1.4.2"
},
"engines": {
"node": ">=4"
}
},
"../modules/ecashaddrjs/node_modules/regenerator-runtime": {
"version": "0.13.11",
"dev": true,
"license": "MIT"
},
"../modules/ecashaddrjs/node_modules/regenerator-transform": {
"version": "0.15.1",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.8.4"
}
},
"../modules/ecashaddrjs/node_modules/regexpu-core": {
"version": "5.3.2",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/regjsgen": "^0.8.0",
"regenerate": "^1.4.2",
"regenerate-unicode-properties": "^10.1.0",
"regjsparser": "^0.9.1",
"unicode-match-property-ecmascript": "^2.0.0",
"unicode-match-property-value-ecmascript": "^2.1.0"
},
"engines": {
"node": ">=4"
}
},
"../modules/ecashaddrjs/node_modules/regjsparser": {
"version": "0.9.1",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
"jsesc": "~0.5.0"
},
"bin": {
"regjsparser": "bin/parser"
}
},
"../modules/ecashaddrjs/node_modules/regjsparser/node_modules/jsesc": {
"version": "0.5.0",
"dev": true,
"bin": {
"jsesc": "bin/jsesc"
}
},
"../modules/ecashaddrjs/node_modules/release-zalgo": {
"version": "1.0.0",
"dev": true,
"license": "ISC",
"dependencies": {
"es6-error": "^4.0.1"
},
"engines": {
"node": ">=4"
}
},
"../modules/ecashaddrjs/node_modules/require-directory": {
"version": "2.1.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"../modules/ecashaddrjs/node_modules/require-from-string": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
"integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
"dev": true,
"license": "MIT",
"peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"../modules/ecashaddrjs/node_modules/require-main-filename": {
"version": "2.0.0",
"dev": true,
"license": "ISC"
},
"../modules/ecashaddrjs/node_modules/requizzle": {
"version": "0.2.4",
"dev": true,
"license": "MIT",
"dependencies": {
"lodash": "^4.17.21"
}
},
"../modules/ecashaddrjs/node_modules/resolve": {
"version": "1.22.1",
"dev": true,
"license": "MIT",
"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"
}
},
"../modules/ecashaddrjs/node_modules/resolve-from": {
"version": "5.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/rimraf": {
"version": "3.0.2",
"dev": true,
"license": "ISC",
"dependencies": {
"glob": "^7.1.3"
},
"bin": {
"rimraf": "bin.js"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"../modules/ecashaddrjs/node_modules/safe-buffer": {
"version": "5.1.2",
"dev": true,
"license": "MIT"
},
"../modules/ecashaddrjs/node_modules/schema-utils": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz",
"integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@types/json-schema": "^7.0.9",
"ajv": "^8.9.0",
"ajv-formats": "^2.1.1",
"ajv-keywords": "^5.1.0"
},
"engines": {
"node": ">= 10.13.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/webpack"
}
},
"../modules/ecashaddrjs/node_modules/schema-utils/node_modules/ajv": {
"version": "8.17.1",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1",
"json-schema-traverse": "^1.0.0",
"require-from-string": "^2.0.2"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/epoberezkin"
}
},
"../modules/ecashaddrjs/node_modules/schema-utils/node_modules/ajv-keywords": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz",
"integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.3"
},
"peerDependencies": {
"ajv": "^8.8.2"
}
},
"../modules/ecashaddrjs/node_modules/schema-utils/node_modules/json-schema-traverse": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
"dev": true,
"license": "MIT",
"peer": true
},
"../modules/ecashaddrjs/node_modules/semver": {
"version": "5.7.2",
"dev": true,
"license": "ISC",
"bin": {
"semver": "bin/semver"
}
},
"../modules/ecashaddrjs/node_modules/serialize-javascript": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
"integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"randombytes": "^2.1.0"
}
},
"../modules/ecashaddrjs/node_modules/set-blocking": {
"version": "2.0.0",
"dev": true,
"license": "ISC"
},
"../modules/ecashaddrjs/node_modules/shebang-command": {
"version": "2.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"shebang-regex": "^3.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/shebang-regex": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/signal-exit": {
"version": "3.0.7",
"dev": true,
"license": "ISC"
},
"../modules/ecashaddrjs/node_modules/slash": {
"version": "2.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"../modules/ecashaddrjs/node_modules/source-map": {
"version": "0.7.4",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": ">= 8"
}
},
"../modules/ecashaddrjs/node_modules/source-map-support": {
"version": "0.5.21",
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
"integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"buffer-from": "^1.0.0",
"source-map": "^0.6.0"
}
},
"../modules/ecashaddrjs/node_modules/source-map-support/node_modules/source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true,
"license": "BSD-3-Clause",
"peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"../modules/ecashaddrjs/node_modules/spawn-wrap": {
"version": "2.0.0",
"dev": true,
"license": "ISC",
"dependencies": {
"foreground-child": "^2.0.0",
"is-windows": "^1.0.2",
"make-dir": "^3.0.0",
"rimraf": "^3.0.0",
"signal-exit": "^3.0.2",
"which": "^2.0.1"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/spawn-wrap/node_modules/make-dir": {
"version": "3.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"semver": "^6.0.0"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecashaddrjs/node_modules/spawn-wrap/node_modules/semver": {
"version": "6.3.1",
"dev": true,
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
}
},
"../modules/ecashaddrjs/node_modules/sprintf-js": {
"version": "1.0.3",
"dev": true,
"license": "BSD-3-Clause"
},
"../modules/ecashaddrjs/node_modules/string-width": {
"version": "4.2.3",
"dev": true,
"license": "MIT",
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
"strip-ansi": "^6.0.1"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/strip-ansi": {
"version": "6.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-regex": "^5.0.1"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/strip-bom": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/strip-json-comments": {
"version": "3.1.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecashaddrjs/node_modules/supports-color": {
"version": "5.5.0",
"dev": true,
"license": "MIT",
"dependencies": {
"has-flag": "^3.0.0"
},
"engines": {
"node": ">=4"
}
},
"../modules/ecashaddrjs/node_modules/supports-preserve-symlinks-flag": {
"version": "1.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"../modules/ecashaddrjs/node_modules/tapable": {
"version": "2.2.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"../modules/ecashaddrjs/node_modules/terser": {
"version": "5.39.0",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.39.0.tgz",
"integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==",
"dev": true,
"license": "BSD-2-Clause",
"peer": true,
"dependencies": {
"@jridgewell/source-map": "^0.3.3",
"acorn": "^8.8.2",
"commander": "^2.20.0",
"source-map-support": "~0.5.20"
},
"bin": {
"terser": "bin/terser"
},
"engines": {
"node": ">=10"
}
},
"../modules/ecashaddrjs/node_modules/terser-webpack-plugin": {
"version": "5.3.11",
"resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.11.tgz",
"integrity": "sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@jridgewell/trace-mapping": "^0.3.25",
"jest-worker": "^27.4.5",
"schema-utils": "^4.3.0",
"serialize-javascript": "^6.0.2",
"terser": "^5.31.1"
},
"engines": {
"node": ">= 10.13.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/webpack"
},
"peerDependencies": {
"webpack": "^5.1.0"
},
"peerDependenciesMeta": {
"@swc/core": {
"optional": true
},
"esbuild": {
"optional": true
},
"uglify-js": {
"optional": true
}
}
},
"../modules/ecashaddrjs/node_modules/terser/node_modules/commander": {
"version": "2.20.3",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
"dev": true,
"license": "MIT",
"peer": true
},
"../modules/ecashaddrjs/node_modules/test-exclude": {
"version": "6.0.0",
"dev": true,
"license": "ISC",
"dependencies": {
"@istanbuljs/schema": "^0.1.2",
"glob": "^7.1.4",
"minimatch": "^3.0.4"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/to-fast-properties": {
"version": "2.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"../modules/ecashaddrjs/node_modules/to-regex-range": {
"version": "5.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"is-number": "^7.0.0"
},
"engines": {
"node": ">=8.0"
}
},
"../modules/ecashaddrjs/node_modules/ts-loader": {
"version": "9.5.1",
"dev": true,
"license": "MIT",
"dependencies": {
"chalk": "^4.1.0",
"enhanced-resolve": "^5.0.0",
"micromatch": "^4.0.0",
"semver": "^7.3.4",
"source-map": "^0.7.4"
},
"engines": {
"node": ">=12.0.0"
},
"peerDependencies": {
"typescript": "*",
"webpack": "^5.0.0"
}
},
"../modules/ecashaddrjs/node_modules/ts-loader/node_modules/ansi-styles": {
"version": "4.3.0",
"dev": true,
"license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"../modules/ecashaddrjs/node_modules/ts-loader/node_modules/chalk": {
"version": "4.1.2",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
"../modules/ecashaddrjs/node_modules/ts-loader/node_modules/color-convert": {
"version": "2.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"color-name": "~1.1.4"
},
"engines": {
"node": ">=7.0.0"
}
},
"../modules/ecashaddrjs/node_modules/ts-loader/node_modules/color-name": {
"version": "1.1.4",
"dev": true,
"license": "MIT"
},
"../modules/ecashaddrjs/node_modules/ts-loader/node_modules/has-flag": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/ts-loader/node_modules/semver": {
"version": "7.6.3",
"dev": true,
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
},
"engines": {
"node": ">=10"
}
},
"../modules/ecashaddrjs/node_modules/ts-loader/node_modules/supports-color": {
"version": "7.2.0",
"dev": true,
"license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/ts-node": {
"version": "10.9.2",
"dev": true,
"license": "MIT",
"dependencies": {
"@cspotcode/source-map-support": "^0.8.0",
"@tsconfig/node10": "^1.0.7",
"@tsconfig/node12": "^1.0.7",
"@tsconfig/node14": "^1.0.0",
"@tsconfig/node16": "^1.0.2",
"acorn": "^8.4.1",
"acorn-walk": "^8.1.1",
"arg": "^4.1.0",
"create-require": "^1.1.0",
"diff": "^4.0.1",
"make-error": "^1.1.1",
"v8-compile-cache-lib": "^3.0.1",
"yn": "3.1.1"
},
"bin": {
"ts-node": "dist/bin.js",
"ts-node-cwd": "dist/bin-cwd.js",
"ts-node-esm": "dist/bin-esm.js",
"ts-node-script": "dist/bin-script.js",
"ts-node-transpile-only": "dist/bin-transpile.js",
"ts-script": "dist/bin-script-deprecated.js"
},
"peerDependencies": {
"@swc/core": ">=1.2.50",
"@swc/wasm": ">=1.2.50",
"@types/node": "*",
"typescript": ">=2.7"
},
"peerDependenciesMeta": {
"@swc/core": {
"optional": true
},
"@swc/wasm": {
"optional": true
}
}
},
"../modules/ecashaddrjs/node_modules/ts-node/node_modules/diff": {
"version": "4.0.2",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.3.1"
}
},
"../modules/ecashaddrjs/node_modules/type-detect": {
"version": "4.0.8",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"../modules/ecashaddrjs/node_modules/type-fest": {
"version": "0.8.1",
"dev": true,
"license": "(MIT OR CC0-1.0)",
"engines": {
"node": ">=8"
}
},
"../modules/ecashaddrjs/node_modules/typedarray-to-buffer": {
"version": "3.1.5",
"dev": true,
"license": "MIT",
"dependencies": {
"is-typedarray": "^1.0.0"
}
},
"../modules/ecashaddrjs/node_modules/typescript": {
"version": "5.6.2",
"dev": true,
"license": "Apache-2.0",
"peer": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
},
"engines": {
"node": ">=14.17"
}
},
"../modules/ecashaddrjs/node_modules/uc.micro": {
"version": "1.0.6",
"dev": true,
"license": "MIT"
},
"../modules/ecashaddrjs/node_modules/underscore": {
"version": "1.13.6",
"dev": true,
"license": "MIT"
},
"../modules/ecashaddrjs/node_modules/unicode-canonical-property-names-ecmascript": {
"version": "2.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"../modules/ecashaddrjs/node_modules/unicode-match-property-ecmascript": {
"version": "2.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"unicode-canonical-property-names-ecmascript": "^2.0.0",
"unicode-property-aliases-ecmascript": "^2.0.0"
},
"engines": {
"node": ">=4"
}
},
"../modules/ecashaddrjs/node_modules/unicode-match-property-value-ecmascript": {
"version": "2.1.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"../modules/ecashaddrjs/node_modules/unicode-property-aliases-ecmascript": {
"version": "2.1.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"../modules/ecashaddrjs/node_modules/update-browserslist-db": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz",
"integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==",
"dev": true,
"funding": [
{
"type": "opencollective",
"url": "https://opencollective.com/browserslist"
},
{
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/browserslist"
},
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
"license": "MIT",
"dependencies": {
"escalade": "^3.2.0",
"picocolors": "^1.1.1"
},
"bin": {
"update-browserslist-db": "cli.js"
},
"peerDependencies": {
"browserslist": ">= 4.21.0"
}
},
"../modules/ecashaddrjs/node_modules/v8-compile-cache-lib": {
"version": "3.0.1",
"dev": true,
"license": "MIT"
},
"../modules/ecashaddrjs/node_modules/watchpack": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz",
"integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"glob-to-regexp": "^0.4.1",
"graceful-fs": "^4.1.2"
},
"engines": {
"node": ">=10.13.0"
}
},
"../modules/ecashaddrjs/node_modules/webpack": {
"version": "5.98.0",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.98.0.tgz",
"integrity": "sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@types/eslint-scope": "^3.7.7",
"@types/estree": "^1.0.6",
"@webassemblyjs/ast": "^1.14.1",
"@webassemblyjs/wasm-edit": "^1.14.1",
"@webassemblyjs/wasm-parser": "^1.14.1",
"acorn": "^8.14.0",
"browserslist": "^4.24.0",
"chrome-trace-event": "^1.0.2",
"enhanced-resolve": "^5.17.1",
"es-module-lexer": "^1.2.1",
"eslint-scope": "5.1.1",
"events": "^3.2.0",
"glob-to-regexp": "^0.4.1",
"graceful-fs": "^4.2.11",
"json-parse-even-better-errors": "^2.3.1",
"loader-runner": "^4.2.0",
"mime-types": "^2.1.27",
"neo-async": "^2.6.2",
"schema-utils": "^4.3.0",
"tapable": "^2.1.1",
"terser-webpack-plugin": "^5.3.11",
"watchpack": "^2.4.1",
"webpack-sources": "^3.2.3"
},
"bin": {
"webpack": "bin/webpack.js"
},
"engines": {
"node": ">=10.13.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/webpack"
},
"peerDependenciesMeta": {
"webpack-cli": {
"optional": true
}
}
},
"../modules/ecashaddrjs/node_modules/webpack-sources": {
"version": "3.2.3",
"dev": true,
"license": "MIT",
"peer": true,
"engines": {
"node": ">=10.13.0"
}
},
"../modules/ecashaddrjs/node_modules/which": {
"version": "2.0.2",
"dev": true,
"license": "ISC",
"dependencies": {
"isexe": "^2.0.0"
},
"bin": {
"node-which": "bin/node-which"
},
"engines": {
"node": ">= 8"
}
},
"../modules/ecashaddrjs/node_modules/which-module": {
"version": "2.0.0",
"dev": true,
"license": "ISC"
},
"../modules/ecashaddrjs/node_modules/workerpool": {
"version": "6.5.1",
"resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz",
"integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==",
"dev": true,
"license": "Apache-2.0"
},
"../modules/ecashaddrjs/node_modules/wrap-ansi": {
"version": "7.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
"strip-ansi": "^6.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
"../modules/ecashaddrjs/node_modules/wrap-ansi/node_modules/ansi-styles": {
"version": "4.3.0",
"dev": true,
"license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"../modules/ecashaddrjs/node_modules/wrap-ansi/node_modules/color-convert": {
"version": "2.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"color-name": "~1.1.4"
},
"engines": {
"node": ">=7.0.0"
}
},
"../modules/ecashaddrjs/node_modules/wrap-ansi/node_modules/color-name": {
"version": "1.1.4",
"dev": true,
"license": "MIT"
},
"../modules/ecashaddrjs/node_modules/wrappy": {
"version": "1.0.2",
"dev": true,
"license": "ISC"
},
"../modules/ecashaddrjs/node_modules/write-file-atomic": {
"version": "3.0.3",
"dev": true,
"license": "ISC",
"dependencies": {
"imurmurhash": "^0.1.4",
"is-typedarray": "^1.0.0",
"signal-exit": "^3.0.2",
"typedarray-to-buffer": "^3.1.5"
}
},
"../modules/ecashaddrjs/node_modules/xml": {
"version": "1.0.1",
"dev": true,
"license": "MIT"
},
"../modules/ecashaddrjs/node_modules/xmlcreate": {
"version": "2.0.4",
"dev": true,
"license": "Apache-2.0"
},
"../modules/ecashaddrjs/node_modules/y18n": {
"version": "4.0.3",
"dev": true,
"license": "ISC"
},
"../modules/ecashaddrjs/node_modules/yallist": {
"version": "3.1.1",
"dev": true,
"license": "ISC"
},
"../modules/ecashaddrjs/node_modules/yargs": {
"version": "16.2.0",
"dev": true,
"license": "MIT",
"dependencies": {
"cliui": "^7.0.2",
"escalade": "^3.1.1",
"get-caller-file": "^2.0.5",
"require-directory": "^2.1.1",
"string-width": "^4.2.0",
"y18n": "^5.0.5",
"yargs-parser": "^20.2.2"
},
"engines": {
"node": ">=10"
}
},
"../modules/ecashaddrjs/node_modules/yargs-parser": {
"version": "20.2.9",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
"integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
"dev": true,
"license": "ISC",
"engines": {
"node": ">=10"
}
},
"../modules/ecashaddrjs/node_modules/yargs-unparser": {
"version": "2.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"camelcase": "^6.0.0",
"decamelize": "^4.0.0",
"flat": "^5.0.2",
"is-plain-obj": "^2.1.0"
},
"engines": {
"node": ">=10"
}
},
"../modules/ecashaddrjs/node_modules/yargs-unparser/node_modules/camelcase": {
"version": "6.3.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecashaddrjs/node_modules/yargs-unparser/node_modules/decamelize": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"../modules/ecashaddrjs/node_modules/yargs/node_modules/y18n": {
"version": "5.0.8",
"dev": true,
"license": "ISC",
"engines": {
"node": ">=10"
}
},
"../modules/ecashaddrjs/node_modules/yn": {
"version": "3.1.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"../modules/ecashaddrjs/node_modules/yocto-queue": {
"version": "0.1.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/@adobe/css-tools": {
"version": "4.4.0",
"dev": true,
"license": "MIT"
},
"node_modules/@alloc/quick-lru": {
"version": "5.2.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/@ampproject/remapping": {
"version": "2.3.0",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.24"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@babel/code-frame": {
"version": "7.26.2",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-validator-identifier": "^7.25.9",
"js-tokens": "^4.0.0",
"picocolors": "^1.0.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/compat-data": {
"version": "7.26.2",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/core": {
"version": "7.26.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@ampproject/remapping": "^2.2.0",
"@babel/code-frame": "^7.26.0",
"@babel/generator": "^7.26.0",
"@babel/helper-compilation-targets": "^7.25.9",
"@babel/helper-module-transforms": "^7.26.0",
"@babel/helpers": "^7.26.0",
"@babel/parser": "^7.26.0",
"@babel/template": "^7.25.9",
"@babel/traverse": "^7.25.9",
"@babel/types": "^7.26.0",
"convert-source-map": "^2.0.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
"json5": "^2.2.3",
"semver": "^6.3.1"
},
"engines": {
"node": ">=6.9.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/babel"
}
},
"node_modules/@babel/core/node_modules/semver": {
"version": "6.3.1",
"dev": true,
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
}
},
"node_modules/@babel/generator": {
"version": "7.26.2",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/parser": "^7.26.2",
"@babel/types": "^7.26.0",
"@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.25",
"jsesc": "^3.0.2"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-annotate-as-pure": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/types": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-builder-binary-assignment-operator-visitor": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/traverse": "^7.25.9",
"@babel/types": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-compilation-targets": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/compat-data": "^7.25.9",
"@babel/helper-validator-option": "^7.25.9",
"browserslist": "^4.24.0",
"lru-cache": "^5.1.1",
"semver": "^6.3.1"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-compilation-targets/node_modules/semver": {
"version": "6.3.1",
"dev": true,
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
}
},
"node_modules/@babel/helper-create-class-features-plugin": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.25.9",
"@babel/helper-member-expression-to-functions": "^7.25.9",
"@babel/helper-optimise-call-expression": "^7.25.9",
"@babel/helper-replace-supers": "^7.25.9",
"@babel/helper-skip-transparent-expression-wrappers": "^7.25.9",
"@babel/traverse": "^7.25.9",
"semver": "^6.3.1"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0"
}
},
"node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": {
"version": "6.3.1",
"dev": true,
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
}
},
"node_modules/@babel/helper-create-regexp-features-plugin": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.25.9",
"regexpu-core": "^6.1.1",
"semver": "^6.3.1"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0"
}
},
"node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": {
"version": "6.3.1",
"dev": true,
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
}
},
"node_modules/@babel/helper-define-polyfill-provider": {
"version": "0.6.2",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-compilation-targets": "^7.22.6",
"@babel/helper-plugin-utils": "^7.22.5",
"debug": "^4.1.1",
"lodash.debounce": "^4.0.8",
"resolve": "^1.14.2"
},
"peerDependencies": {
"@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
}
},
"node_modules/@babel/helper-member-expression-to-functions": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/traverse": "^7.25.9",
"@babel/types": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-imports": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/traverse": "^7.25.9",
"@babel/types": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-transforms": {
"version": "7.26.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-module-imports": "^7.25.9",
"@babel/helper-validator-identifier": "^7.25.9",
"@babel/traverse": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0"
}
},
"node_modules/@babel/helper-optimise-call-expression": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/types": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-plugin-utils": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-remap-async-to-generator": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.25.9",
"@babel/helper-wrap-function": "^7.25.9",
"@babel/traverse": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0"
}
},
"node_modules/@babel/helper-replace-supers": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-member-expression-to-functions": "^7.25.9",
"@babel/helper-optimise-call-expression": "^7.25.9",
"@babel/traverse": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0"
}
},
"node_modules/@babel/helper-simple-access": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/traverse": "^7.25.9",
"@babel/types": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-skip-transparent-expression-wrappers": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/traverse": "^7.25.9",
"@babel/types": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-string-parser": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-identifier": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-option": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-wrap-function": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/template": "^7.25.9",
"@babel/traverse": "^7.25.9",
"@babel/types": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helpers": {
"version": "7.26.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/template": "^7.25.9",
"@babel/types": "^7.26.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/parser": {
"version": "7.26.2",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/types": "^7.26.0"
},
"bin": {
"parser": "bin/babel-parser.js"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9",
"@babel/traverse": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0"
}
},
"node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0"
}
},
"node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0"
}
},
"node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9",
"@babel/helper-skip-transparent-expression-wrappers": "^7.25.9",
"@babel/plugin-transform-optional-chaining": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.13.0"
}
},
"node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9",
"@babel/traverse": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0"
}
},
"node_modules/@babel/plugin-proposal-class-properties": {
"version": "7.18.6",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-create-class-features-plugin": "^7.18.6",
"@babel/helper-plugin-utils": "^7.18.6"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-proposal-decorators": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-create-class-features-plugin": "^7.25.9",
"@babel/helper-plugin-utils": "^7.25.9",
"@babel/plugin-syntax-decorators": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-proposal-nullish-coalescing-operator": {
"version": "7.18.6",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.18.6",
"@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-proposal-numeric-separator": {
"version": "7.18.6",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.18.6",
"@babel/plugin-syntax-numeric-separator": "^7.10.4"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-proposal-optional-chaining": {
"version": "7.21.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.20.2",
"@babel/helper-skip-transparent-expression-wrappers": "^7.20.0",
"@babel/plugin-syntax-optional-chaining": "^7.8.3"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-proposal-private-methods": {
"version": "7.18.6",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-create-class-features-plugin": "^7.18.6",
"@babel/helper-plugin-utils": "^7.18.6"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-proposal-private-property-in-object": {
"version": "7.21.11",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.18.6",
"@babel/helper-create-class-features-plugin": "^7.21.0",
"@babel/helper-plugin-utils": "^7.20.2",
"@babel/plugin-syntax-private-property-in-object": "^7.14.5"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-syntax-async-generators": {
"version": "7.8.4",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-syntax-bigint": {
"version": "7.8.3",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-syntax-class-properties": {
"version": "7.12.13",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.12.13"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-syntax-class-static-block": {
"version": "7.14.5",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.14.5"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-syntax-decorators": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-syntax-flow": {
"version": "7.26.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-syntax-import-assertions": {
"version": "7.26.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-syntax-import-attributes": {
"version": "7.26.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-syntax-import-meta": {
"version": "7.10.4",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.10.4"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-syntax-json-strings": {
"version": "7.8.3",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-syntax-jsx": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-syntax-logical-assignment-operators": {
"version": "7.10.4",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.10.4"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-syntax-nullish-coalescing-operator": {
"version": "7.8.3",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-syntax-numeric-separator": {
"version": "7.10.4",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.10.4"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-syntax-object-rest-spread": {
"version": "7.8.3",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-syntax-optional-catch-binding": {
"version": "7.8.3",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-syntax-optional-chaining": {
"version": "7.8.3",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-syntax-private-property-in-object": {
"version": "7.14.5",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.14.5"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-syntax-top-level-await": {
"version": "7.14.5",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.14.5"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-syntax-typescript": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-syntax-unicode-sets-regex": {
"version": "7.18.6",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-create-regexp-features-plugin": "^7.18.6",
"@babel/helper-plugin-utils": "^7.18.6"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0"
}
},
"node_modules/@babel/plugin-transform-arrow-functions": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-async-generator-functions": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9",
"@babel/helper-remap-async-to-generator": "^7.25.9",
"@babel/traverse": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-async-to-generator": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-module-imports": "^7.25.9",
"@babel/helper-plugin-utils": "^7.25.9",
"@babel/helper-remap-async-to-generator": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-block-scoped-functions": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-block-scoping": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-class-properties": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-create-class-features-plugin": "^7.25.9",
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-class-static-block": {
"version": "7.26.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-create-class-features-plugin": "^7.25.9",
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.12.0"
}
},
"node_modules/@babel/plugin-transform-classes": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.25.9",
"@babel/helper-compilation-targets": "^7.25.9",
"@babel/helper-plugin-utils": "^7.25.9",
"@babel/helper-replace-supers": "^7.25.9",
"@babel/traverse": "^7.25.9",
"globals": "^11.1.0"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-computed-properties": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9",
"@babel/template": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-destructuring": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-dotall-regex": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-create-regexp-features-plugin": "^7.25.9",
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-duplicate-keys": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-create-regexp-features-plugin": "^7.25.9",
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0"
}
},
"node_modules/@babel/plugin-transform-dynamic-import": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-exponentiation-operator": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-builder-binary-assignment-operator-visitor": "^7.25.9",
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-export-namespace-from": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-flow-strip-types": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9",
"@babel/plugin-syntax-flow": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-for-of": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9",
"@babel/helper-skip-transparent-expression-wrappers": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-function-name": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-compilation-targets": "^7.25.9",
"@babel/helper-plugin-utils": "^7.25.9",
"@babel/traverse": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-json-strings": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-literals": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-logical-assignment-operators": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-member-expression-literals": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-modules-amd": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-module-transforms": "^7.25.9",
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-modules-commonjs": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-module-transforms": "^7.25.9",
"@babel/helper-plugin-utils": "^7.25.9",
"@babel/helper-simple-access": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-modules-systemjs": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-module-transforms": "^7.25.9",
"@babel/helper-plugin-utils": "^7.25.9",
"@babel/helper-validator-identifier": "^7.25.9",
"@babel/traverse": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-modules-umd": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-module-transforms": "^7.25.9",
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-create-regexp-features-plugin": "^7.25.9",
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0"
}
},
"node_modules/@babel/plugin-transform-new-target": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-nullish-coalescing-operator": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-numeric-separator": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-object-rest-spread": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-compilation-targets": "^7.25.9",
"@babel/helper-plugin-utils": "^7.25.9",
"@babel/plugin-transform-parameters": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-object-super": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9",
"@babel/helper-replace-supers": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-optional-catch-binding": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-optional-chaining": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9",
"@babel/helper-skip-transparent-expression-wrappers": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-parameters": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-private-methods": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-create-class-features-plugin": "^7.25.9",
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-private-property-in-object": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.25.9",
"@babel/helper-create-class-features-plugin": "^7.25.9",
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-property-literals": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-react-constant-elements": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-react-display-name": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-react-jsx": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.25.9",
"@babel/helper-module-imports": "^7.25.9",
"@babel/helper-plugin-utils": "^7.25.9",
"@babel/plugin-syntax-jsx": "^7.25.9",
"@babel/types": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-react-jsx-development": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/plugin-transform-react-jsx": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-react-pure-annotations": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.25.9",
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-regenerator": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9",
"regenerator-transform": "^0.15.2"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-regexp-modifiers": {
"version": "7.26.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-create-regexp-features-plugin": "^7.25.9",
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0"
}
},
"node_modules/@babel/plugin-transform-reserved-words": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-runtime": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-module-imports": "^7.25.9",
"@babel/helper-plugin-utils": "^7.25.9",
"babel-plugin-polyfill-corejs2": "^0.4.10",
"babel-plugin-polyfill-corejs3": "^0.10.6",
"babel-plugin-polyfill-regenerator": "^0.6.1",
"semver": "^6.3.1"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-runtime/node_modules/semver": {
"version": "6.3.1",
"dev": true,
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
}
},
"node_modules/@babel/plugin-transform-shorthand-properties": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-spread": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9",
"@babel/helper-skip-transparent-expression-wrappers": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-sticky-regex": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-template-literals": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-typeof-symbol": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-typescript": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.25.9",
"@babel/helper-create-class-features-plugin": "^7.25.9",
"@babel/helper-plugin-utils": "^7.25.9",
"@babel/helper-skip-transparent-expression-wrappers": "^7.25.9",
"@babel/plugin-syntax-typescript": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-unicode-escapes": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-unicode-property-regex": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-create-regexp-features-plugin": "^7.25.9",
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-unicode-regex": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-create-regexp-features-plugin": "^7.25.9",
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-transform-unicode-sets-regex": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-create-regexp-features-plugin": "^7.25.9",
"@babel/helper-plugin-utils": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0"
}
},
"node_modules/@babel/preset-env": {
"version": "7.26.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/compat-data": "^7.26.0",
"@babel/helper-compilation-targets": "^7.25.9",
"@babel/helper-plugin-utils": "^7.25.9",
"@babel/helper-validator-option": "^7.25.9",
"@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9",
"@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9",
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9",
"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9",
"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9",
"@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",
"@babel/plugin-syntax-import-assertions": "^7.26.0",
"@babel/plugin-syntax-import-attributes": "^7.26.0",
"@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
"@babel/plugin-transform-arrow-functions": "^7.25.9",
"@babel/plugin-transform-async-generator-functions": "^7.25.9",
"@babel/plugin-transform-async-to-generator": "^7.25.9",
"@babel/plugin-transform-block-scoped-functions": "^7.25.9",
"@babel/plugin-transform-block-scoping": "^7.25.9",
"@babel/plugin-transform-class-properties": "^7.25.9",
"@babel/plugin-transform-class-static-block": "^7.26.0",
"@babel/plugin-transform-classes": "^7.25.9",
"@babel/plugin-transform-computed-properties": "^7.25.9",
"@babel/plugin-transform-destructuring": "^7.25.9",
"@babel/plugin-transform-dotall-regex": "^7.25.9",
"@babel/plugin-transform-duplicate-keys": "^7.25.9",
"@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9",
"@babel/plugin-transform-dynamic-import": "^7.25.9",
"@babel/plugin-transform-exponentiation-operator": "^7.25.9",
"@babel/plugin-transform-export-namespace-from": "^7.25.9",
"@babel/plugin-transform-for-of": "^7.25.9",
"@babel/plugin-transform-function-name": "^7.25.9",
"@babel/plugin-transform-json-strings": "^7.25.9",
"@babel/plugin-transform-literals": "^7.25.9",
"@babel/plugin-transform-logical-assignment-operators": "^7.25.9",
"@babel/plugin-transform-member-expression-literals": "^7.25.9",
"@babel/plugin-transform-modules-amd": "^7.25.9",
"@babel/plugin-transform-modules-commonjs": "^7.25.9",
"@babel/plugin-transform-modules-systemjs": "^7.25.9",
"@babel/plugin-transform-modules-umd": "^7.25.9",
"@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9",
"@babel/plugin-transform-new-target": "^7.25.9",
"@babel/plugin-transform-nullish-coalescing-operator": "^7.25.9",
"@babel/plugin-transform-numeric-separator": "^7.25.9",
"@babel/plugin-transform-object-rest-spread": "^7.25.9",
"@babel/plugin-transform-object-super": "^7.25.9",
"@babel/plugin-transform-optional-catch-binding": "^7.25.9",
"@babel/plugin-transform-optional-chaining": "^7.25.9",
"@babel/plugin-transform-parameters": "^7.25.9",
"@babel/plugin-transform-private-methods": "^7.25.9",
"@babel/plugin-transform-private-property-in-object": "^7.25.9",
"@babel/plugin-transform-property-literals": "^7.25.9",
"@babel/plugin-transform-regenerator": "^7.25.9",
"@babel/plugin-transform-regexp-modifiers": "^7.26.0",
"@babel/plugin-transform-reserved-words": "^7.25.9",
"@babel/plugin-transform-shorthand-properties": "^7.25.9",
"@babel/plugin-transform-spread": "^7.25.9",
"@babel/plugin-transform-sticky-regex": "^7.25.9",
"@babel/plugin-transform-template-literals": "^7.25.9",
"@babel/plugin-transform-typeof-symbol": "^7.25.9",
"@babel/plugin-transform-unicode-escapes": "^7.25.9",
"@babel/plugin-transform-unicode-property-regex": "^7.25.9",
"@babel/plugin-transform-unicode-regex": "^7.25.9",
"@babel/plugin-transform-unicode-sets-regex": "^7.25.9",
"@babel/preset-modules": "0.1.6-no-external-plugins",
"babel-plugin-polyfill-corejs2": "^0.4.10",
"babel-plugin-polyfill-corejs3": "^0.10.6",
"babel-plugin-polyfill-regenerator": "^0.6.1",
"core-js-compat": "^3.38.1",
"semver": "^6.3.1"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/preset-env/node_modules/@babel/plugin-proposal-private-property-in-object": {
"version": "7.21.0-placeholder-for-preset-env.2",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/preset-env/node_modules/semver": {
"version": "6.3.1",
"dev": true,
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
}
},
"node_modules/@babel/preset-modules": {
"version": "0.1.6-no-external-plugins",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.0.0",
"@babel/types": "^7.4.4",
"esutils": "^2.0.2"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0"
}
},
"node_modules/@babel/preset-react": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9",
"@babel/helper-validator-option": "^7.25.9",
"@babel/plugin-transform-react-display-name": "^7.25.9",
"@babel/plugin-transform-react-jsx": "^7.25.9",
"@babel/plugin-transform-react-jsx-development": "^7.25.9",
"@babel/plugin-transform-react-pure-annotations": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/preset-typescript": {
"version": "7.26.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.25.9",
"@babel/helper-validator-option": "^7.25.9",
"@babel/plugin-syntax-jsx": "^7.25.9",
"@babel/plugin-transform-modules-commonjs": "^7.25.9",
"@babel/plugin-transform-typescript": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/runtime": {
"version": "7.26.0",
"dev": true,
"license": "MIT",
"dependencies": {
"regenerator-runtime": "^0.14.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/template": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.25.9",
"@babel/parser": "^7.25.9",
"@babel/types": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/traverse": {
"version": "7.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.25.9",
"@babel/generator": "^7.25.9",
"@babel/parser": "^7.25.9",
"@babel/template": "^7.25.9",
"@babel/types": "^7.25.9",
"debug": "^4.3.1",
"globals": "^11.1.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/types": {
"version": "7.26.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-string-parser": "^7.25.9",
"@babel/helper-validator-identifier": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@bcoe/v8-coverage": {
"version": "0.2.3",
"dev": true,
"license": "MIT"
},
"node_modules/@csstools/normalize.css": {
"version": "12.1.1",
"dev": true,
"license": "CC0-1.0"
},
"node_modules/@csstools/postcss-cascade-layers": {
"version": "1.1.1",
"dev": true,
"license": "CC0-1.0",
"dependencies": {
"@csstools/selector-specificity": "^2.0.2",
"postcss-selector-parser": "^6.0.10"
},
"engines": {
"node": "^12 || ^14 || >=16"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/csstools"
},
"peerDependencies": {
"postcss": "^8.2"
}
},
"node_modules/@csstools/postcss-color-function": {
"version": "1.1.1",
"dev": true,
"license": "CC0-1.0",
"dependencies": {
"@csstools/postcss-progressive-custom-properties": "^1.1.0",
"postcss-value-parser": "^4.2.0"
},
"engines": {
"node": "^12 || ^14 || >=16"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/csstools"
},
"peerDependencies": {
"postcss": "^8.2"
}
},
"node_modules/@csstools/postcss-font-format-keywords": {
"version": "1.0.1",
"dev": true,
"license": "CC0-1.0",
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
"engines": {
"node": "^12 || ^14 || >=16"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/csstools"
},
"peerDependencies": {
"postcss": "^8.2"
}
},
"node_modules/@csstools/postcss-hwb-function": {
"version": "1.0.2",
"dev": true,
"license": "CC0-1.0",
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
"engines": {
"node": "^12 || ^14 || >=16"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/csstools"
},
"peerDependencies": {
"postcss": "^8.2"
}
},
"node_modules/@csstools/postcss-ic-unit": {
"version": "1.0.1",
"dev": true,
"license": "CC0-1.0",
"dependencies": {
"@csstools/postcss-progressive-custom-properties": "^1.1.0",
"postcss-value-parser": "^4.2.0"
},
"engines": {
"node": "^12 || ^14 || >=16"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/csstools"
},
"peerDependencies": {
"postcss": "^8.2"
}
},
"node_modules/@csstools/postcss-is-pseudo-class": {
"version": "2.0.7",
"dev": true,
"license": "CC0-1.0",
"dependencies": {
"@csstools/selector-specificity": "^2.0.0",
"postcss-selector-parser": "^6.0.10"
},
"engines": {
"node": "^12 || ^14 || >=16"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/csstools"
},
"peerDependencies": {
"postcss": "^8.2"
}
},
"node_modules/@csstools/postcss-nested-calc": {
"version": "1.0.0",
"dev": true,
"license": "CC0-1.0",
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
"engines": {
"node": "^12 || ^14 || >=16"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/csstools"
},
"peerDependencies": {
"postcss": "^8.2"
}
},
"node_modules/@csstools/postcss-normalize-display-values": {
"version": "1.0.1",
"dev": true,
"license": "CC0-1.0",
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
"engines": {
"node": "^12 || ^14 || >=16"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/csstools"
},
"peerDependencies": {
"postcss": "^8.2"
}
},
"node_modules/@csstools/postcss-oklab-function": {
"version": "1.1.1",
"dev": true,
"license": "CC0-1.0",
"dependencies": {
"@csstools/postcss-progressive-custom-properties": "^1.1.0",
"postcss-value-parser": "^4.2.0"
},
"engines": {
"node": "^12 || ^14 || >=16"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/csstools"
},
"peerDependencies": {
"postcss": "^8.2"
}
},
"node_modules/@csstools/postcss-progressive-custom-properties": {
"version": "1.3.0",
"dev": true,
"license": "CC0-1.0",
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
"engines": {
"node": "^12 || ^14 || >=16"
},
"peerDependencies": {
"postcss": "^8.3"
}
},
"node_modules/@csstools/postcss-stepped-value-functions": {
"version": "1.0.1",
"dev": true,
"license": "CC0-1.0",
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
"engines": {
"node": "^12 || ^14 || >=16"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/csstools"
},
"peerDependencies": {
"postcss": "^8.2"
}
},
"node_modules/@csstools/postcss-text-decoration-shorthand": {
"version": "1.0.0",
"dev": true,
"license": "CC0-1.0",
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
"engines": {
"node": "^12 || ^14 || >=16"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/csstools"
},
"peerDependencies": {
"postcss": "^8.2"
}
},
"node_modules/@csstools/postcss-trigonometric-functions": {
"version": "1.0.2",
"dev": true,
"license": "CC0-1.0",
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
"engines": {
"node": "^14 || >=16"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/csstools"
},
"peerDependencies": {
"postcss": "^8.2"
}
},
"node_modules/@csstools/postcss-unset-value": {
"version": "1.0.2",
"dev": true,
"license": "CC0-1.0",
"engines": {
"node": "^12 || ^14 || >=16"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/csstools"
},
"peerDependencies": {
"postcss": "^8.2"
}
},
"node_modules/@csstools/selector-specificity": {
"version": "2.2.0",
"dev": true,
"license": "CC0-1.0",
"engines": {
"node": "^14 || ^16 || >=18"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/csstools"
},
"peerDependencies": {
"postcss-selector-parser": "^6.0.10"
}
},
"node_modules/@emotion/is-prop-valid": {
"version": "0.8.8",
"dev": true,
"license": "MIT",
"dependencies": {
"@emotion/memoize": "0.7.4"
}
},
"node_modules/@emotion/memoize": {
"version": "0.7.4",
"dev": true,
"license": "MIT"
},
"node_modules/@emotion/unitless": {
"version": "0.7.5",
"dev": true,
"license": "MIT"
},
"node_modules/@eslint-community/eslint-utils": {
"version": "4.4.1",
"dev": true,
"license": "MIT",
"optional": true,
"peer": true,
"dependencies": {
"eslint-visitor-keys": "^3.4.3"
},
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
},
"funding": {
"url": "https://opencollective.com/eslint"
},
"peerDependencies": {
"eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
}
},
"node_modules/@eslint-community/regexpp": {
"version": "4.12.1",
"dev": true,
"license": "MIT",
"optional": true,
"peer": true,
"engines": {
"node": "^12.0.0 || ^14.0.0 || >=16.0.0"
}
},
"node_modules/@eslint/eslintrc": {
"version": "2.1.4",
"dev": true,
"license": "MIT",
"optional": true,
"peer": true,
"dependencies": {
"ajv": "^6.12.4",
"debug": "^4.3.2",
"espree": "^9.6.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/@eslint/eslintrc/node_modules/argparse": {
"version": "2.0.1",
"dev": true,
"license": "Python-2.0",
"optional": true,
"peer": true
},
"node_modules/@eslint/eslintrc/node_modules/globals": {
"version": "13.24.0",
"dev": true,
"license": "MIT",
"optional": true,
"peer": true,
"dependencies": {
"type-fest": "^0.20.2"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/@eslint/eslintrc/node_modules/js-yaml": {
"version": "4.1.0",
"dev": true,
"license": "MIT",
"optional": true,
"peer": true,
"dependencies": {
"argparse": "^2.0.1"
},
"bin": {
"js-yaml": "bin/js-yaml.js"
}
},
"node_modules/@eslint/eslintrc/node_modules/type-fest": {
"version": "0.20.2",
"dev": true,
"license": "(MIT OR CC0-1.0)",
"optional": true,
"peer": true,
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/@eslint/js": {
"version": "8.56.0",
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz",
"integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==",
"dev": true,
"license": "MIT",
"optional": true,
"peer": true,
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
}
},
"node_modules/@floating-ui/core": {
"version": "1.6.9",
"resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.9.tgz",
"integrity": "sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==",
"license": "MIT",
"dependencies": {
"@floating-ui/utils": "^0.2.9"
}
},
"node_modules/@floating-ui/dom": {
"version": "1.6.13",
"resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.13.tgz",
"integrity": "sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==",
"license": "MIT",
"dependencies": {
"@floating-ui/core": "^1.6.0",
"@floating-ui/utils": "^0.2.9"
}
},
"node_modules/@floating-ui/utils": {
"version": "0.2.9",
"resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.9.tgz",
"integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==",
"license": "MIT"
},
"node_modules/@humanwhocodes/config-array": {
"version": "0.11.14",
"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
"integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
"deprecated": "Use @eslint/config-array instead",
"dev": true,
"license": "Apache-2.0",
"optional": true,
"peer": true,
"dependencies": {
"@humanwhocodes/object-schema": "^2.0.2",
"debug": "^4.3.1",
"minimatch": "^3.0.5"
},
"engines": {
"node": ">=10.10.0"
}
},
"node_modules/@humanwhocodes/module-importer": {
"version": "1.0.1",
"dev": true,
"license": "Apache-2.0",
"optional": true,
"peer": true,
"engines": {
"node": ">=12.22"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/nzakas"
}
},
"node_modules/@humanwhocodes/object-schema": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
"integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
"deprecated": "Use @eslint/object-schema instead",
"dev": true,
"license": "BSD-3-Clause",
"optional": true,
"peer": true
},
"node_modules/@isaacs/cliui": {
"version": "8.0.2",
"dev": true,
"license": "ISC",
"dependencies": {
"string-width": "^5.1.2",
"string-width-cjs": "npm:string-width@^4.2.0",
"strip-ansi": "^7.0.1",
"strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
"wrap-ansi": "^8.1.0",
"wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
},
"engines": {
"node": ">=12"
}
},
"node_modules/@isaacs/cliui/node_modules/ansi-regex": {
"version": "6.1.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/chalk/ansi-regex?sponsor=1"
}
},
"node_modules/@isaacs/cliui/node_modules/ansi-styles": {
"version": "6.2.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/@isaacs/cliui/node_modules/string-width": {
"version": "5.1.2",
"dev": true,
"license": "MIT",
"dependencies": {
"eastasianwidth": "^0.2.0",
"emoji-regex": "^9.2.2",
"strip-ansi": "^7.0.1"
},
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/@isaacs/cliui/node_modules/strip-ansi": {
"version": "7.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-regex": "^6.0.1"
},
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/chalk/strip-ansi?sponsor=1"
}
},
"node_modules/@isaacs/cliui/node_modules/wrap-ansi": {
"version": "8.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^6.1.0",
"string-width": "^5.0.1",
"strip-ansi": "^7.0.1"
},
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
"node_modules/@istanbuljs/load-nyc-config": {
"version": "1.1.0",
"dev": true,
"license": "ISC",
"dependencies": {
"camelcase": "^5.3.1",
"find-up": "^4.1.0",
"get-package-type": "^0.1.0",
"js-yaml": "^3.13.1",
"resolve-from": "^5.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": {
"version": "5.3.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/@istanbuljs/schema": {
"version": "0.1.3",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/@jest/console": {
"version": "29.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@jest/types": "^29.6.3",
"@types/node": "*",
"chalk": "^4.0.0",
"jest-message-util": "^29.7.0",
"jest-util": "^29.7.0",
"slash": "^3.0.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/core": {
"version": "29.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@jest/console": "^29.7.0",
"@jest/reporters": "^29.7.0",
"@jest/test-result": "^29.7.0",
"@jest/transform": "^29.7.0",
"@jest/types": "^29.6.3",
"@types/node": "*",
"ansi-escapes": "^4.2.1",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
"exit": "^0.1.2",
"graceful-fs": "^4.2.9",
"jest-changed-files": "^29.7.0",
"jest-config": "^29.7.0",
"jest-haste-map": "^29.7.0",
"jest-message-util": "^29.7.0",
"jest-regex-util": "^29.6.3",
"jest-resolve": "^29.7.0",
"jest-resolve-dependencies": "^29.7.0",
"jest-runner": "^29.7.0",
"jest-runtime": "^29.7.0",
"jest-snapshot": "^29.7.0",
"jest-util": "^29.7.0",
"jest-validate": "^29.7.0",
"jest-watcher": "^29.7.0",
"micromatch": "^4.0.4",
"pretty-format": "^29.7.0",
"slash": "^3.0.0",
"strip-ansi": "^6.0.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
},
"peerDependencies": {
"node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
},
"peerDependenciesMeta": {
"node-notifier": {
"optional": true
}
}
},
"node_modules/@jest/core/node_modules/ansi-styles": {
"version": "5.2.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/@jest/core/node_modules/pretty-format": {
"version": "29.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@jest/schemas": "^29.6.3",
"ansi-styles": "^5.0.0",
"react-is": "^18.0.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/core/node_modules/react-is": {
"version": "18.3.1",
"dev": true,
"license": "MIT"
},
"node_modules/@jest/environment": {
"version": "29.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@jest/fake-timers": "^29.7.0",
"@jest/types": "^29.6.3",
"@types/node": "*",
"jest-mock": "^29.7.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/expect": {
"version": "29.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"expect": "^29.7.0",
"jest-snapshot": "^29.7.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/expect-utils": {
"version": "29.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"jest-get-type": "^29.6.3"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/fake-timers": {
"version": "29.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@jest/types": "^29.6.3",
"@sinonjs/fake-timers": "^10.0.2",
"@types/node": "*",
"jest-message-util": "^29.7.0",
"jest-mock": "^29.7.0",
"jest-util": "^29.7.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/globals": {
"version": "29.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@jest/environment": "^29.7.0",
"@jest/expect": "^29.7.0",
"@jest/types": "^29.6.3",
"jest-mock": "^29.7.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/reporters": {
"version": "29.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@bcoe/v8-coverage": "^0.2.3",
"@jest/console": "^29.7.0",
"@jest/test-result": "^29.7.0",
"@jest/transform": "^29.7.0",
"@jest/types": "^29.6.3",
"@jridgewell/trace-mapping": "^0.3.18",
"@types/node": "*",
"chalk": "^4.0.0",
"collect-v8-coverage": "^1.0.0",
"exit": "^0.1.2",
"glob": "^7.1.3",
"graceful-fs": "^4.2.9",
"istanbul-lib-coverage": "^3.0.0",
"istanbul-lib-instrument": "^6.0.0",
"istanbul-lib-report": "^3.0.0",
"istanbul-lib-source-maps": "^4.0.0",
"istanbul-reports": "^3.1.3",
"jest-message-util": "^29.7.0",
"jest-util": "^29.7.0",
"jest-worker": "^29.7.0",
"slash": "^3.0.0",
"string-length": "^4.0.1",
"strip-ansi": "^6.0.0",
"v8-to-istanbul": "^9.0.1"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
},
"peerDependencies": {
"node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
},
"peerDependenciesMeta": {
"node-notifier": {
"optional": true
}
}
},
"node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": {
"version": "6.0.3",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"@babel/core": "^7.23.9",
"@babel/parser": "^7.23.9",
"@istanbuljs/schema": "^0.1.3",
"istanbul-lib-coverage": "^3.2.0",
"semver": "^7.5.4"
},
"engines": {
"node": ">=10"
}
},
"node_modules/@jest/reporters/node_modules/jest-worker": {
"version": "29.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/node": "*",
"jest-util": "^29.7.0",
"merge-stream": "^2.0.0",
"supports-color": "^8.0.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/reporters/node_modules/supports-color": {
"version": "8.1.1",
"dev": true,
"license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/supports-color?sponsor=1"
}
},
"node_modules/@jest/schemas": {
"version": "29.6.3",
"dev": true,
"license": "MIT",
"dependencies": {
"@sinclair/typebox": "^0.27.8"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/source-map": {
"version": "29.6.3",
"dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/trace-mapping": "^0.3.18",
"callsites": "^3.0.0",
"graceful-fs": "^4.2.9"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/test-result": {
"version": "29.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@jest/console": "^29.7.0",
"@jest/types": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"collect-v8-coverage": "^1.0.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/test-sequencer": {
"version": "29.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@jest/test-result": "^29.7.0",
"graceful-fs": "^4.2.9",
"jest-haste-map": "^29.7.0",
"slash": "^3.0.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/transform": {
"version": "29.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/core": "^7.11.6",
"@jest/types": "^29.6.3",
"@jridgewell/trace-mapping": "^0.3.18",
"babel-plugin-istanbul": "^6.1.1",
"chalk": "^4.0.0",
"convert-source-map": "^2.0.0",
"fast-json-stable-stringify": "^2.1.0",
"graceful-fs": "^4.2.9",
"jest-haste-map": "^29.7.0",
"jest-regex-util": "^29.6.3",
"jest-util": "^29.7.0",
"micromatch": "^4.0.4",
"pirates": "^4.0.4",
"slash": "^3.0.0",
"write-file-atomic": "^4.0.2"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/types": {
"version": "29.6.3",
"dev": true,
"license": "MIT",
"dependencies": {
"@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
"@types/yargs": "^17.0.8",
"chalk": "^4.0.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jridgewell/gen-mapping": {
"version": "0.3.5",
"dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/set-array": "^1.2.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
"@jridgewell/trace-mapping": "^0.3.24"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/resolve-uri": {
"version": "3.1.2",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/set-array": {
"version": "1.2.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/source-map": {
"version": "0.3.6",
"dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.25"
}
},
"node_modules/@jridgewell/sourcemap-codec": {
"version": "1.5.0",
"dev": true,
"license": "MIT"
},
"node_modules/@jridgewell/trace-mapping": {
"version": "0.3.25",
"dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/resolve-uri": "^3.1.0",
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
"node_modules/@leichtgewicht/ip-codec": {
"version": "2.0.5",
"dev": true,
"license": "MIT"
},
"node_modules/@noble/hashes": {
"version": "1.5.0",
"license": "MIT",
"engines": {
"node": "^14.21.3 || >=16"
},
"funding": {
"url": "https://paulmillr.com/funding/"
}
},
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
"dev": true,
"license": "MIT",
"dependencies": {
"@nodelib/fs.stat": "2.0.5",
"run-parallel": "^1.1.9"
},
"engines": {
"node": ">= 8"
}
},
"node_modules/@nodelib/fs.stat": {
"version": "2.0.5",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 8"
}
},
"node_modules/@nodelib/fs.walk": {
"version": "1.2.8",
"dev": true,
"license": "MIT",
"dependencies": {
"@nodelib/fs.scandir": "2.1.5",
"fastq": "^1.6.0"
},
"engines": {
"node": ">= 8"
}
},
"node_modules/@pkgjs/parseargs": {
"version": "0.11.0",
"dev": true,
"license": "MIT",
"optional": true,
"engines": {
"node": ">=14"
}
},
"node_modules/@pmmmwh/react-refresh-webpack-plugin": {
"version": "0.5.15",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-html": "^0.0.9",
"core-js-pure": "^3.23.3",
"error-stack-parser": "^2.0.6",
"html-entities": "^2.1.0",
"loader-utils": "^2.0.4",
"schema-utils": "^4.2.0",
"source-map": "^0.7.3"
},
"engines": {
"node": ">= 10.13"
},
"peerDependencies": {
"@types/webpack": "4.x || 5.x",
"react-refresh": ">=0.10.0 <1.0.0",
"sockjs-client": "^1.4.0",
"type-fest": ">=0.17.0 <5.0.0",
"webpack": ">=4.43.0 <6.0.0",
"webpack-dev-server": "3.x || 4.x || 5.x",
"webpack-hot-middleware": "2.x",
"webpack-plugin-serve": "0.x || 1.x"
},
"peerDependenciesMeta": {
"@types/webpack": {
"optional": true
},
"sockjs-client": {
"optional": true
},
"type-fest": {
"optional": true
},
"webpack-dev-server": {
"optional": true
},
"webpack-hot-middleware": {
"optional": true
},
"webpack-plugin-serve": {
"optional": true
}
}
},
"node_modules/@remix-run/router": {
"version": "1.21.0",
"license": "MIT",
"engines": {
"node": ">=14.0.0"
}
},
"node_modules/@rollup/plugin-babel": {
"version": "5.3.1",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-module-imports": "^7.10.4",
"@rollup/pluginutils": "^3.1.0"
},
"engines": {
"node": ">= 10.0.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0",
"@types/babel__core": "^7.1.9",
"rollup": "^1.20.0||^2.0.0"
},
"peerDependenciesMeta": {
"@types/babel__core": {
"optional": true
}
}
},
"node_modules/@rollup/plugin-node-resolve": {
"version": "11.2.1",
"dev": true,
"license": "MIT",
"dependencies": {
"@rollup/pluginutils": "^3.1.0",
"@types/resolve": "1.17.1",
"builtin-modules": "^3.1.0",
"deepmerge": "^4.2.2",
"is-module": "^1.0.0",
"resolve": "^1.19.0"
},
"engines": {
"node": ">= 10.0.0"
},
"peerDependencies": {
"rollup": "^1.20.0||^2.0.0"
}
},
"node_modules/@rollup/plugin-replace": {
"version": "2.4.2",
"dev": true,
"license": "MIT",
"dependencies": {
"@rollup/pluginutils": "^3.1.0",
"magic-string": "^0.25.7"
},
"peerDependencies": {
"rollup": "^1.20.0 || ^2.0.0"
}
},
"node_modules/@rollup/pluginutils": {
"version": "3.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/estree": "0.0.39",
"estree-walker": "^1.0.1",
"picomatch": "^2.2.2"
},
"engines": {
"node": ">= 8.0.0"
},
"peerDependencies": {
"rollup": "^1.20.0||^2.0.0"
}
},
"node_modules/@rollup/pluginutils/node_modules/@types/estree": {
"version": "0.0.39",
"dev": true,
"license": "MIT"
},
"node_modules/@sinclair/typebox": {
"version": "0.27.8",
"dev": true,
"license": "MIT"
},
"node_modules/@sinonjs/commons": {
"version": "3.0.1",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"type-detect": "4.0.8"
}
},
"node_modules/@sinonjs/fake-timers": {
"version": "10.3.0",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"@sinonjs/commons": "^3.0.0"
}
},
"node_modules/@surma/rollup-plugin-off-main-thread": {
"version": "2.2.3",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"ejs": "^3.1.6",
"json5": "^2.2.0",
"magic-string": "^0.25.0",
"string.prototype.matchall": "^4.0.6"
}
},
"node_modules/@svgr/babel-plugin-add-jsx-attribute": {
"version": "6.5.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/gregberge"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@svgr/babel-plugin-remove-jsx-attribute": {
"version": "8.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=14"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/gregberge"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": {
"version": "8.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=14"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/gregberge"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": {
"version": "6.5.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/gregberge"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@svgr/babel-plugin-svg-dynamic-title": {
"version": "6.5.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/gregberge"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@svgr/babel-plugin-svg-em-dimensions": {
"version": "6.5.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/gregberge"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@svgr/babel-plugin-transform-react-native-svg": {
"version": "6.5.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/gregberge"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@svgr/babel-plugin-transform-svg-component": {
"version": "6.5.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=12"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/gregberge"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@svgr/babel-preset": {
"version": "6.5.1",
"dev": true,
"license": "MIT",
"dependencies": {
"@svgr/babel-plugin-add-jsx-attribute": "^6.5.1",
"@svgr/babel-plugin-remove-jsx-attribute": "*",
"@svgr/babel-plugin-remove-jsx-empty-expression": "*",
"@svgr/babel-plugin-replace-jsx-attribute-value": "^6.5.1",
"@svgr/babel-plugin-svg-dynamic-title": "^6.5.1",
"@svgr/babel-plugin-svg-em-dimensions": "^6.5.1",
"@svgr/babel-plugin-transform-react-native-svg": "^6.5.1",
"@svgr/babel-plugin-transform-svg-component": "^6.5.1"
},
"engines": {
"node": ">=10"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/gregberge"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
"node_modules/@svgr/core": {
"version": "6.5.1",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/core": "^7.19.6",
"@svgr/babel-preset": "^6.5.1",
"@svgr/plugin-jsx": "^6.5.1",
"camelcase": "^6.2.0",
"cosmiconfig": "^7.0.1"
},
"engines": {
"node": ">=10"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/gregberge"
}
},
"node_modules/@svgr/hast-util-to-babel-ast": {
"version": "6.5.1",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/types": "^7.20.0",
"entities": "^4.4.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/gregberge"
}
},
"node_modules/@svgr/plugin-jsx": {
"version": "6.5.1",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/core": "^7.19.6",
"@svgr/babel-preset": "^6.5.1",
"@svgr/hast-util-to-babel-ast": "^6.5.1",
"svg-parser": "^2.0.4"
},
"engines": {
"node": ">=10"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/gregberge"
},
"peerDependencies": {
"@svgr/core": "^6.0.0"
}
},
"node_modules/@svgr/plugin-svgo": {
"version": "6.5.1",
"dev": true,
"license": "MIT",
"dependencies": {
"cosmiconfig": "^7.0.1",
"deepmerge": "^4.2.2",
"svgo": "^2.8.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/gregberge"
},
"peerDependencies": {
"@svgr/core": "*"
}
},
"node_modules/@svgr/webpack": {
"version": "6.5.1",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/core": "^7.19.6",
"@babel/plugin-transform-react-constant-elements": "^7.18.12",
"@babel/preset-env": "^7.19.4",
"@babel/preset-react": "^7.18.6",
"@babel/preset-typescript": "^7.18.6",
"@svgr/core": "^6.5.1",
"@svgr/plugin-jsx": "^6.5.1",
"@svgr/plugin-svgo": "^6.5.1"
},
"engines": {
"node": ">=10"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/gregberge"
}
},
"node_modules/@testing-library/dom": {
"version": "10.4.0",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"@babel/code-frame": "^7.10.4",
"@babel/runtime": "^7.12.5",
"@types/aria-query": "^5.0.1",
"aria-query": "5.3.0",
"chalk": "^4.1.0",
"dom-accessibility-api": "^0.5.9",
"lz-string": "^1.5.0",
"pretty-format": "^27.0.2"
},
"engines": {
"node": ">=18"
}
},
"node_modules/@testing-library/jest-dom": {
"version": "6.6.3",
"dev": true,
"license": "MIT",
"dependencies": {
"@adobe/css-tools": "^4.4.0",
"aria-query": "^5.0.0",
"chalk": "^3.0.0",
"css.escape": "^1.5.1",
"dom-accessibility-api": "^0.6.3",
"lodash": "^4.17.21",
"redent": "^3.0.0"
},
"engines": {
"node": ">=14",
"npm": ">=6",
"yarn": ">=1"
}
},
"node_modules/@testing-library/jest-dom/node_modules/chalk": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": {
"version": "0.6.3",
"dev": true,
"license": "MIT"
},
"node_modules/@testing-library/react": {
"version": "16.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.12.5"
},
"engines": {
"node": ">=18"
},
"peerDependencies": {
"@testing-library/dom": "^10.0.0",
"@types/react": "^18.0.0",
"@types/react-dom": "^18.0.0",
"react": "^18.0.0",
"react-dom": "^18.0.0"
},
"peerDependenciesMeta": {
"@types/react": {
"optional": true
},
"@types/react-dom": {
"optional": true
}
}
},
"node_modules/@testing-library/user-event": {
"version": "14.5.2",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=12",
"npm": ">=6"
},
"peerDependencies": {
"@testing-library/dom": ">=7.21.4"
}
},
"node_modules/@tootallnate/once": {
"version": "2.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 10"
}
},
"node_modules/@trysound/sax": {
"version": "0.2.0",
"dev": true,
"license": "ISC",
"engines": {
"node": ">=10.13.0"
}
},
"node_modules/@types/aria-query": {
"version": "5.0.4",
"dev": true,
"license": "MIT",
"peer": true
},
"node_modules/@types/babel__core": {
"version": "7.20.5",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/parser": "^7.20.7",
"@babel/types": "^7.20.7",
"@types/babel__generator": "*",
"@types/babel__template": "*",
"@types/babel__traverse": "*"
}
},
"node_modules/@types/babel__generator": {
"version": "7.6.8",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/types": "^7.0.0"
}
},
"node_modules/@types/babel__template": {
"version": "7.4.4",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/parser": "^7.1.0",
"@babel/types": "^7.0.0"
}
},
"node_modules/@types/babel__traverse": {
"version": "7.20.6",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/types": "^7.20.7"
}
},
"node_modules/@types/body-parser": {
"version": "1.19.5",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/connect": "*",
"@types/node": "*"
}
},
"node_modules/@types/bonjour": {
"version": "3.5.13",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/connect": {
"version": "3.4.38",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/connect-history-api-fallback": {
"version": "1.5.4",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/express-serve-static-core": "*",
"@types/node": "*"
}
},
"node_modules/@types/eslint": {
"version": "9.6.1",
"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz",
"integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/estree": "*",
"@types/json-schema": "*"
}
},
"node_modules/@types/eslint-scope": {
"version": "3.7.7",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/eslint": "*",
"@types/estree": "*"
}
},
"node_modules/@types/estree": {
"version": "1.0.6",
"dev": true,
"license": "MIT"
},
"node_modules/@types/express": {
"version": "4.17.21",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/body-parser": "*",
"@types/express-serve-static-core": "^4.17.33",
"@types/qs": "*",
"@types/serve-static": "*"
}
},
"node_modules/@types/express-serve-static-core": {
"version": "5.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/node": "*",
"@types/qs": "*",
"@types/range-parser": "*",
"@types/send": "*"
}
},
"node_modules/@types/express/node_modules/@types/express-serve-static-core": {
"version": "4.19.6",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/node": "*",
"@types/qs": "*",
"@types/range-parser": "*",
"@types/send": "*"
}
},
"node_modules/@types/graceful-fs": {
"version": "4.1.9",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/hoist-non-react-statics": {
"version": "3.3.5",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/react": "*",
"hoist-non-react-statics": "^3.3.0"
}
},
"node_modules/@types/html-minifier-terser": {
"version": "6.1.0",
"dev": true,
"license": "MIT"
},
"node_modules/@types/http-errors": {
"version": "2.0.4",
"dev": true,
"license": "MIT"
},
"node_modules/@types/http-proxy": {
"version": "1.17.15",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/istanbul-lib-coverage": {
"version": "2.0.6",
"dev": true,
"license": "MIT"
},
"node_modules/@types/istanbul-lib-report": {
"version": "3.0.3",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/istanbul-lib-coverage": "*"
}
},
"node_modules/@types/istanbul-reports": {
"version": "3.0.4",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/istanbul-lib-report": "*"
}
},
"node_modules/@types/jest": {
"version": "29.5.14",
"resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz",
"integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"expect": "^29.0.0",
"pretty-format": "^29.0.0"
}
},
"node_modules/@types/jest-when": {
"version": "3.5.5",
"resolved": "https://registry.npmjs.org/@types/jest-when/-/jest-when-3.5.5.tgz",
"integrity": "sha512-H9MDPIrz7NOu6IXP9OHExNN9LnJbGYAzRsGIDKxWr7Fth9vovemNV8yFbkUWLSEmuA8PREvAEvt9yK0PPLmFHA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/jest": "*"
}
},
"node_modules/@types/jest/node_modules/ansi-styles": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
"integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/@types/jest/node_modules/pretty-format": {
"version": "29.7.0",
"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
"integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@jest/schemas": "^29.6.3",
"ansi-styles": "^5.0.0",
"react-is": "^18.0.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@types/jest/node_modules/react-is": {
"version": "18.3.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
"integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
"dev": true,
"license": "MIT"
},
"node_modules/@types/jsdom": {
"version": "20.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/node": "*",
"@types/tough-cookie": "*",
"parse5": "^7.0.0"
}
},
"node_modules/@types/json-schema": {
"version": "7.0.15",
"dev": true,
"license": "MIT"
},
"node_modules/@types/lodash": {
"version": "4.17.13",
"resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.13.tgz",
"integrity": "sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg==",
"dev": true,
"license": "MIT"
},
"node_modules/@types/lodash.debounce": {
"version": "4.0.9",
"resolved": "https://registry.npmjs.org/@types/lodash.debounce/-/lodash.debounce-4.0.9.tgz",
"integrity": "sha512-Ma5JcgTREwpLRwMM+XwBR7DaWe96nC38uCBDFKZWbNKD+osjVzdpnUSwBcqCptrp16sSOLBAUb50Car5I0TCsQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/lodash": "*"
}
},
"node_modules/@types/mime": {
"version": "1.3.5",
"dev": true,
"license": "MIT"
},
"node_modules/@types/node": {
"version": "22.9.0",
"dev": true,
"license": "MIT",
"dependencies": {
"undici-types": "~6.19.8"
}
},
"node_modules/@types/node-forge": {
"version": "1.3.11",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/parse-json": {
"version": "4.0.2",
"dev": true,
"license": "MIT"
},
"node_modules/@types/prop-types": {
"version": "15.7.13",
"dev": true,
"license": "MIT"
},
"node_modules/@types/qs": {
"version": "6.9.17",
"dev": true,
"license": "MIT"
},
"node_modules/@types/randombytes": {
"version": "2.0.3",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/range-parser": {
"version": "1.2.7",
"dev": true,
"license": "MIT"
},
"node_modules/@types/react": {
"version": "18.3.12",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/prop-types": "*",
"csstype": "^3.0.2"
}
},
"node_modules/@types/react-dom": {
"version": "18.3.1",
"resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.1.tgz",
"integrity": "sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/react": "*"
}
},
"node_modules/@types/resolve": {
"version": "1.17.1",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/retry": {
"version": "0.12.0",
"dev": true,
"license": "MIT"
},
"node_modules/@types/send": {
"version": "0.17.4",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/mime": "^1",
"@types/node": "*"
}
},
"node_modules/@types/serve-index": {
"version": "1.9.4",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/express": "*"
}
},
"node_modules/@types/serve-static": {
"version": "1.15.7",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/http-errors": "*",
"@types/node": "*",
"@types/send": "*"
}
},
"node_modules/@types/sockjs": {
"version": "0.3.36",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/stack-utils": {
"version": "2.0.3",
"dev": true,
"license": "MIT"
},
"node_modules/@types/styled-components": {
"version": "5.1.34",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/hoist-non-react-statics": "*",
"@types/react": "*",
"csstype": "^3.0.2"
}
},
"node_modules/@types/tough-cookie": {
"version": "4.0.5",
"dev": true,
"license": "MIT"
},
"node_modules/@types/trusted-types": {
"version": "2.0.7",
"dev": true,
"license": "MIT"
},
"node_modules/@types/webpack-env": {
"version": "1.18.5",
"resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.18.5.tgz",
"integrity": "sha512-wz7kjjRRj8/Lty4B+Kr0LN6Ypc/3SymeCCGSbaXp2leH0ZVg/PriNiOwNj4bD4uphI7A8NXS4b6Gl373sfO5mA==",
"dev": true,
"license": "MIT"
},
"node_modules/@types/wif": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/@types/wif/-/wif-2.0.5.tgz",
"integrity": "sha512-addYBlYjDxLfJxDUoyTzICnu0u4snCdGJpICIIFk65zGcdjah3twTJq1Fdy+OdeZSRiof2raFtMqSqF9KeqthQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/ws": {
"version": "8.5.13",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/yargs": {
"version": "17.0.33",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/yargs-parser": "*"
}
},
"node_modules/@types/yargs-parser": {
"version": "21.0.3",
"dev": true,
"license": "MIT"
},
"node_modules/@ungap/structured-clone": {
"version": "1.2.0",
"dev": true,
"license": "ISC",
"optional": true,
"peer": true
},
"node_modules/@webassemblyjs/ast": {
"version": "1.14.1",
"dev": true,
"license": "MIT",
"dependencies": {
"@webassemblyjs/helper-numbers": "1.13.2",
"@webassemblyjs/helper-wasm-bytecode": "1.13.2"
}
},
"node_modules/@webassemblyjs/floating-point-hex-parser": {
"version": "1.13.2",
"dev": true,
"license": "MIT"
},
"node_modules/@webassemblyjs/helper-api-error": {
"version": "1.13.2",
"dev": true,
"license": "MIT"
},
"node_modules/@webassemblyjs/helper-buffer": {
"version": "1.14.1",
"dev": true,
"license": "MIT"
},
"node_modules/@webassemblyjs/helper-numbers": {
"version": "1.13.2",
"dev": true,
"license": "MIT",
"dependencies": {
"@webassemblyjs/floating-point-hex-parser": "1.13.2",
"@webassemblyjs/helper-api-error": "1.13.2",
"@xtuc/long": "4.2.2"
}
},
"node_modules/@webassemblyjs/helper-wasm-bytecode": {
"version": "1.13.2",
"dev": true,
"license": "MIT"
},
"node_modules/@webassemblyjs/helper-wasm-section": {
"version": "1.14.1",
"dev": true,
"license": "MIT",
"dependencies": {
"@webassemblyjs/ast": "1.14.1",
"@webassemblyjs/helper-buffer": "1.14.1",
"@webassemblyjs/helper-wasm-bytecode": "1.13.2",
"@webassemblyjs/wasm-gen": "1.14.1"
}
},
"node_modules/@webassemblyjs/ieee754": {
"version": "1.13.2",
"dev": true,
"license": "MIT",
"dependencies": {
"@xtuc/ieee754": "^1.2.0"
}
},
"node_modules/@webassemblyjs/leb128": {
"version": "1.13.2",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"@xtuc/long": "4.2.2"
}
},
"node_modules/@webassemblyjs/utf8": {
"version": "1.13.2",
"dev": true,
"license": "MIT"
},
"node_modules/@webassemblyjs/wasm-edit": {
"version": "1.14.1",
"dev": true,
"license": "MIT",
"dependencies": {
"@webassemblyjs/ast": "1.14.1",
"@webassemblyjs/helper-buffer": "1.14.1",
"@webassemblyjs/helper-wasm-bytecode": "1.13.2",
"@webassemblyjs/helper-wasm-section": "1.14.1",
"@webassemblyjs/wasm-gen": "1.14.1",
"@webassemblyjs/wasm-opt": "1.14.1",
"@webassemblyjs/wasm-parser": "1.14.1",
"@webassemblyjs/wast-printer": "1.14.1"
}
},
"node_modules/@webassemblyjs/wasm-gen": {
"version": "1.14.1",
"dev": true,
"license": "MIT",
"dependencies": {
"@webassemblyjs/ast": "1.14.1",
"@webassemblyjs/helper-wasm-bytecode": "1.13.2",
"@webassemblyjs/ieee754": "1.13.2",
"@webassemblyjs/leb128": "1.13.2",
"@webassemblyjs/utf8": "1.13.2"
}
},
"node_modules/@webassemblyjs/wasm-opt": {
"version": "1.14.1",
"dev": true,
"license": "MIT",
"dependencies": {
"@webassemblyjs/ast": "1.14.1",
"@webassemblyjs/helper-buffer": "1.14.1",
"@webassemblyjs/wasm-gen": "1.14.1",
"@webassemblyjs/wasm-parser": "1.14.1"
}
},
"node_modules/@webassemblyjs/wasm-parser": {
"version": "1.14.1",
"dev": true,
"license": "MIT",
"dependencies": {
"@webassemblyjs/ast": "1.14.1",
"@webassemblyjs/helper-api-error": "1.13.2",
"@webassemblyjs/helper-wasm-bytecode": "1.13.2",
"@webassemblyjs/ieee754": "1.13.2",
"@webassemblyjs/leb128": "1.13.2",
"@webassemblyjs/utf8": "1.13.2"
}
},
"node_modules/@webassemblyjs/wast-printer": {
"version": "1.14.1",
"dev": true,
"license": "MIT",
"dependencies": {
"@webassemblyjs/ast": "1.14.1",
"@xtuc/long": "4.2.2"
}
},
"node_modules/@xtuc/ieee754": {
"version": "1.2.0",
"dev": true,
"license": "BSD-3-Clause"
},
"node_modules/@xtuc/long": {
"version": "4.2.2",
"dev": true,
"license": "Apache-2.0"
},
"node_modules/@zxing/browser": {
"version": "0.1.5",
"license": "MIT",
"optionalDependencies": {
"@zxing/text-encoding": "^0.9.0"
},
"peerDependencies": {
"@zxing/library": "^0.21.0"
}
},
"node_modules/@zxing/library": {
"version": "0.21.3",
"license": "MIT",
"peer": true,
"dependencies": {
"ts-custom-error": "^3.2.1"
},
"engines": {
"node": ">= 10.4.0"
},
"optionalDependencies": {
"@zxing/text-encoding": "~0.9.0"
}
},
"node_modules/@zxing/text-encoding": {
"version": "0.9.0",
"license": "(Unlicense OR Apache-2.0)",
"optional": true
},
"node_modules/abab": {
"version": "2.0.6",
"dev": true,
"license": "BSD-3-Clause"
},
"node_modules/abort-controller": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"event-target-shim": "^5.0.0"
},
"engines": {
"node": ">=6.5"
}
},
"node_modules/accepts": {
"version": "1.3.8",
"dev": true,
"license": "MIT",
"dependencies": {
"mime-types": "~2.1.34",
"negotiator": "0.6.3"
},
"engines": {
"node": ">= 0.6"
}
},
"node_modules/accepts/node_modules/negotiator": {
"version": "0.6.3",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/acorn": {
"version": "8.14.0",
"dev": true,
"license": "MIT",
"bin": {
"acorn": "bin/acorn"
},
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/acorn-globals": {
"version": "7.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"acorn": "^8.1.0",
"acorn-walk": "^8.0.2"
}
},
"node_modules/acorn-jsx": {
"version": "5.3.2",
"dev": true,
"license": "MIT",
"optional": true,
"peer": true,
"peerDependencies": {
"acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
}
},
"node_modules/acorn-walk": {
"version": "8.3.4",
"dev": true,
"license": "MIT",
"dependencies": {
"acorn": "^8.11.0"
},
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/address": {
"version": "1.2.2",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 10.0.0"
}
},
"node_modules/adjust-sourcemap-loader": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"loader-utils": "^2.0.0",
"regex-parser": "^2.2.11"
},
"engines": {
"node": ">=8.9"
}
},
"node_modules/agent-base": {
"version": "6.0.2",
"dev": true,
"license": "MIT",
"dependencies": {
"debug": "4"
},
"engines": {
"node": ">= 6.0.0"
}
},
"node_modules/ajv": {
"version": "6.12.6",
"dev": true,
"license": "MIT",
"dependencies": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
"json-schema-traverse": "^0.4.1",
"uri-js": "^4.2.2"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/epoberezkin"
}
},
"node_modules/ajv-formats": {
"version": "2.1.1",
"dev": true,
"license": "MIT",
"dependencies": {
"ajv": "^8.0.0"
},
"peerDependencies": {
"ajv": "^8.0.0"
},
"peerDependenciesMeta": {
"ajv": {
"optional": true
}
}
},
"node_modules/ajv-formats/node_modules/ajv": {
"version": "8.17.1",
"dev": true,
"license": "MIT",
"dependencies": {
"fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1",
"json-schema-traverse": "^1.0.0",
"require-from-string": "^2.0.2"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/epoberezkin"
}
},
"node_modules/ajv-formats/node_modules/json-schema-traverse": {
"version": "1.0.0",
"dev": true,
"license": "MIT"
},
"node_modules/ajv-keywords": {
"version": "3.5.2",
"dev": true,
"license": "MIT",
"peerDependencies": {
"ajv": "^6.9.1"
}
},
"node_modules/ansi-escapes": {
"version": "4.3.2",
"dev": true,
"license": "MIT",
"dependencies": {
"type-fest": "^0.21.3"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/ansi-html": {
"version": "0.0.9",
"dev": true,
"engines": [
"node >= 0.8.0"
],
"license": "Apache-2.0",
"bin": {
"ansi-html": "bin/ansi-html"
}
},
"node_modules/ansi-html-community": {
"version": "0.0.8",
"dev": true,
"engines": [
"node >= 0.8.0"
],
"license": "Apache-2.0",
"bin": {
"ansi-html": "bin/ansi-html"
}
},
"node_modules/ansi-regex": {
"version": "5.0.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/ansi-styles": {
"version": "4.3.0",
"dev": true,
"license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/any-promise": {
"version": "1.3.0",
"dev": true,
"license": "MIT"
},
"node_modules/anymatch": {
"version": "3.1.3",
"dev": true,
"license": "ISC",
"dependencies": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
},
"engines": {
"node": ">= 8"
}
},
"node_modules/arg": {
"version": "5.0.2",
"dev": true,
"license": "MIT"
},
"node_modules/argparse": {
"version": "1.0.10",
"dev": true,
"license": "MIT",
"dependencies": {
"sprintf-js": "~1.0.2"
}
},
"node_modules/aria-query": {
"version": "5.3.0",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"dequal": "^2.0.3"
}
},
"node_modules/array-buffer-byte-length": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz",
"integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.3",
"is-array-buffer": "^3.0.5"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/array-flatten": {
"version": "1.1.1",
"dev": true,
"license": "MIT"
},
"node_modules/array-union": {
"version": "2.1.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/arraybuffer.prototype.slice": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz",
"integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"array-buffer-byte-length": "^1.0.1",
"call-bind": "^1.0.8",
"define-properties": "^1.2.1",
"es-abstract": "^1.23.5",
"es-errors": "^1.3.0",
"get-intrinsic": "^1.2.6",
"is-array-buffer": "^3.0.4"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/asap": {
"version": "2.0.6",
"dev": true,
"license": "MIT"
},
"node_modules/asn1.js": {
"version": "4.10.1",
"dev": true,
"license": "MIT",
"dependencies": {
"bn.js": "^4.0.0",
"inherits": "^2.0.1",
"minimalistic-assert": "^1.0.0"
}
},
"node_modules/asn1.js/node_modules/bn.js": {
"version": "4.12.0",
"dev": true,
"license": "MIT"
},
"node_modules/assert": {
"version": "2.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.2",
"is-nan": "^1.3.2",
"object-is": "^1.1.5",
"object.assign": "^4.1.4",
"util": "^0.12.5"
}
},
"node_modules/async": {
"version": "3.2.6",
"dev": true,
"license": "MIT"
},
"node_modules/async-function": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz",
"integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
}
},
"node_modules/asynckit": {
"version": "0.4.0",
"dev": true,
"license": "MIT"
},
"node_modules/at-least-node": {
"version": "1.0.0",
"dev": true,
"license": "ISC",
"engines": {
"node": ">= 4.0.0"
}
},
"node_modules/autoprefixer": {
"version": "10.4.20",
"dev": true,
"funding": [
{
"type": "opencollective",
"url": "https://opencollective.com/postcss/"
},
{
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/autoprefixer"
},
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
"license": "MIT",
"dependencies": {
"browserslist": "^4.23.3",
"caniuse-lite": "^1.0.30001646",
"fraction.js": "^4.3.7",
"normalize-range": "^0.1.2",
"picocolors": "^1.0.1",
"postcss-value-parser": "^4.2.0"
},
"bin": {
"autoprefixer": "bin/autoprefixer"
},
"engines": {
"node": "^10 || ^12 || >=14"
},
"peerDependencies": {
"postcss": "^8.1.0"
}
},
"node_modules/available-typed-arrays": {
"version": "1.0.7",
"dev": true,
"license": "MIT",
"dependencies": {
"possible-typed-array-names": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/babel-jest": {
"version": "29.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@jest/transform": "^29.7.0",
"@types/babel__core": "^7.1.14",
"babel-plugin-istanbul": "^6.1.1",
"babel-preset-jest": "^29.6.3",
"chalk": "^4.0.0",
"graceful-fs": "^4.2.9",
"slash": "^3.0.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
},
"peerDependencies": {
"@babel/core": "^7.8.0"
}
},
"node_modules/babel-loader": {
"version": "8.4.1",
"dev": true,
"license": "MIT",
"dependencies": {
"find-cache-dir": "^3.3.1",
"loader-utils": "^2.0.4",
"make-dir": "^3.1.0",
"schema-utils": "^2.6.5"
},
"engines": {
"node": ">= 8.9"
},
"peerDependencies": {
"@babel/core": "^7.0.0",
"webpack": ">=2"
}
},
"node_modules/babel-loader/node_modules/schema-utils": {
"version": "2.7.1",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/json-schema": "^7.0.5",
"ajv": "^6.12.4",
"ajv-keywords": "^3.5.2"
},
"engines": {
"node": ">= 8.9.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/webpack"
}
},
"node_modules/babel-plugin-istanbul": {
"version": "6.1.1",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"@babel/helper-plugin-utils": "^7.0.0",
"@istanbuljs/load-nyc-config": "^1.0.0",
"@istanbuljs/schema": "^0.1.2",
"istanbul-lib-instrument": "^5.0.4",
"test-exclude": "^6.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/babel-plugin-jest-hoist": {
"version": "29.6.3",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/template": "^7.3.3",
"@babel/types": "^7.3.3",
"@types/babel__core": "^7.1.14",
"@types/babel__traverse": "^7.0.6"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/babel-plugin-macros": {
"version": "3.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.12.5",
"cosmiconfig": "^7.0.0",
"resolve": "^1.19.0"
},
"engines": {
"node": ">=10",
"npm": ">=6"
}
},
"node_modules/babel-plugin-named-asset-import": {
"version": "0.3.8",
"dev": true,
"license": "MIT",
"peerDependencies": {
"@babel/core": "^7.1.0"
}
},
"node_modules/babel-plugin-polyfill-corejs2": {
"version": "0.4.11",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/compat-data": "^7.22.6",
"@babel/helper-define-polyfill-provider": "^0.6.2",
"semver": "^6.3.1"
},
"peerDependencies": {
"@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
}
},
"node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": {
"version": "6.3.1",
"dev": true,
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
}
},
"node_modules/babel-plugin-polyfill-corejs3": {
"version": "0.10.6",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-define-polyfill-provider": "^0.6.2",
"core-js-compat": "^3.38.0"
},
"peerDependencies": {
"@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
}
},
"node_modules/babel-plugin-polyfill-regenerator": {
"version": "0.6.2",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-define-polyfill-provider": "^0.6.2"
},
"peerDependencies": {
"@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
}
},
"node_modules/babel-plugin-styled-components": {
"version": "2.1.4",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-annotate-as-pure": "^7.22.5",
"@babel/helper-module-imports": "^7.22.5",
"@babel/plugin-syntax-jsx": "^7.22.5",
"lodash": "^4.17.21",
"picomatch": "^2.3.1"
},
"peerDependencies": {
"styled-components": ">= 2"
}
},
"node_modules/babel-plugin-transform-react-remove-prop-types": {
"version": "0.4.24",
"dev": true,
"license": "MIT"
},
"node_modules/babel-preset-current-node-syntax": {
"version": "1.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/plugin-syntax-async-generators": "^7.8.4",
"@babel/plugin-syntax-bigint": "^7.8.3",
"@babel/plugin-syntax-class-properties": "^7.12.13",
"@babel/plugin-syntax-class-static-block": "^7.14.5",
"@babel/plugin-syntax-import-attributes": "^7.24.7",
"@babel/plugin-syntax-import-meta": "^7.10.4",
"@babel/plugin-syntax-json-strings": "^7.8.3",
"@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
"@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
"@babel/plugin-syntax-numeric-separator": "^7.10.4",
"@babel/plugin-syntax-object-rest-spread": "^7.8.3",
"@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
"@babel/plugin-syntax-optional-chaining": "^7.8.3",
"@babel/plugin-syntax-private-property-in-object": "^7.14.5",
"@babel/plugin-syntax-top-level-await": "^7.14.5"
},
"peerDependencies": {
"@babel/core": "^7.0.0"
}
},
"node_modules/babel-preset-jest": {
"version": "29.6.3",
"dev": true,
"license": "MIT",
"dependencies": {
"babel-plugin-jest-hoist": "^29.6.3",
"babel-preset-current-node-syntax": "^1.0.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0"
}
},
"node_modules/babel-preset-react-app": {
"version": "10.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/core": "^7.16.0",
"@babel/plugin-proposal-class-properties": "^7.16.0",
"@babel/plugin-proposal-decorators": "^7.16.4",
"@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0",
"@babel/plugin-proposal-numeric-separator": "^7.16.0",
"@babel/plugin-proposal-optional-chaining": "^7.16.0",
"@babel/plugin-proposal-private-methods": "^7.16.0",
"@babel/plugin-transform-flow-strip-types": "^7.16.0",
"@babel/plugin-transform-react-display-name": "^7.16.0",
"@babel/plugin-transform-runtime": "^7.16.4",
"@babel/preset-env": "^7.16.4",
"@babel/preset-react": "^7.16.0",
"@babel/preset-typescript": "^7.16.0",
"@babel/runtime": "^7.16.3",
"babel-plugin-macros": "^3.1.0",
"babel-plugin-transform-react-remove-prop-types": "^0.4.24"
}
},
"node_modules/balanced-match": {
"version": "1.0.2",
"dev": true,
"license": "MIT"
},
"node_modules/base64-js": {
"version": "1.5.1",
"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"
}
],
"license": "MIT"
},
"node_modules/batch": {
"version": "0.6.1",
"dev": true,
"license": "MIT"
},
"node_modules/bfj": {
"version": "7.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"bluebird": "^3.7.2",
"check-types": "^11.2.3",
"hoopy": "^0.1.4",
"jsonpath": "^1.1.1",
"tryer": "^1.0.1"
},
"engines": {
"node": ">= 8.0.0"
}
},
"node_modules/big.js": {
"version": "5.2.2",
"dev": true,
"license": "MIT",
"engines": {
"node": "*"
}
},
"node_modules/bignumber.js": {
"version": "9.1.2",
"resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz",
"integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==",
"license": "MIT",
"engines": {
"node": "*"
}
},
"node_modules/binary-extensions": {
"version": "2.3.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/bip39": {
"version": "3.1.0",
"license": "ISC",
"dependencies": {
"@noble/hashes": "^1.2.0"
}
},
"node_modules/bip66": {
"version": "1.1.5",
"license": "MIT",
"dependencies": {
"safe-buffer": "^5.0.1"
}
},
"node_modules/bluebird": {
"version": "3.7.2",
"dev": true,
"license": "MIT"
},
"node_modules/bn.js": {
"version": "5.2.1",
"dev": true,
"license": "MIT"
},
"node_modules/body-parser": {
"version": "1.20.3",
"dev": true,
"license": "MIT",
"dependencies": {
"bytes": "3.1.2",
"content-type": "~1.0.5",
"debug": "2.6.9",
"depd": "2.0.0",
"destroy": "1.2.0",
"http-errors": "2.0.0",
"iconv-lite": "0.4.24",
"on-finished": "2.4.1",
"qs": "6.13.0",
"raw-body": "2.5.2",
"type-is": "~1.6.18",
"unpipe": "1.0.0"
},
"engines": {
"node": ">= 0.8",
"npm": "1.2.8000 || >= 1.4.16"
}
},
"node_modules/body-parser/node_modules/debug": {
"version": "2.6.9",
"dev": true,
"license": "MIT",
"dependencies": {
"ms": "2.0.0"
}
},
"node_modules/body-parser/node_modules/iconv-lite": {
"version": "0.4.24",
"dev": true,
"license": "MIT",
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/body-parser/node_modules/ms": {
"version": "2.0.0",
"dev": true,
"license": "MIT"
},
"node_modules/bonjour-service": {
"version": "1.2.1",
"dev": true,
"license": "MIT",
"dependencies": {
"fast-deep-equal": "^3.1.3",
"multicast-dns": "^7.2.5"
}
},
"node_modules/boolbase": {
"version": "1.0.0",
"dev": true,
"license": "ISC"
},
"node_modules/brace-expansion": {
"version": "1.1.11",
"dev": true,
"license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"node_modules/braces": {
"version": "3.0.3",
"dev": true,
"license": "MIT",
"dependencies": {
"fill-range": "^7.1.1"
},
"engines": {
"node": ">=8"
}
},
"node_modules/brorand": {
"version": "1.1.0",
"dev": true,
"license": "MIT"
},
"node_modules/browserify-aes": {
"version": "1.2.0",
"dev": true,
"license": "MIT",
"dependencies": {
"buffer-xor": "^1.0.3",
"cipher-base": "^1.0.0",
"create-hash": "^1.1.0",
"evp_bytestokey": "^1.0.3",
"inherits": "^2.0.1",
"safe-buffer": "^5.0.1"
}
},
"node_modules/browserify-cipher": {
"version": "1.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"browserify-aes": "^1.0.4",
"browserify-des": "^1.0.0",
"evp_bytestokey": "^1.0.0"
}
},
"node_modules/browserify-des": {
"version": "1.0.2",
"dev": true,
"license": "MIT",
"dependencies": {
"cipher-base": "^1.0.1",
"des.js": "^1.0.0",
"inherits": "^2.0.1",
"safe-buffer": "^5.1.2"
}
},
"node_modules/browserify-rsa": {
"version": "4.1.1",
"dev": true,
"license": "MIT",
"dependencies": {
"bn.js": "^5.2.1",
"randombytes": "^2.1.0",
"safe-buffer": "^5.2.1"
},
"engines": {
"node": ">= 0.10"
}
},
"node_modules/browserify-sign": {
"version": "4.2.3",
"dev": true,
"license": "ISC",
"dependencies": {
"bn.js": "^5.2.1",
"browserify-rsa": "^4.1.0",
"create-hash": "^1.2.0",
"create-hmac": "^1.1.7",
"elliptic": "^6.5.5",
"hash-base": "~3.0",
"inherits": "^2.0.4",
"parse-asn1": "^5.1.7",
"readable-stream": "^2.3.8",
"safe-buffer": "^5.2.1"
},
"engines": {
"node": ">= 0.12"
}
},
"node_modules/browserify-zlib": {
"version": "0.2.0",
"dev": true,
"license": "MIT",
"dependencies": {
"pako": "~1.0.5"
}
},
"node_modules/browserslist": {
"version": "4.24.2",
"dev": true,
"funding": [
{
"type": "opencollective",
"url": "https://opencollective.com/browserslist"
},
{
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/browserslist"
},
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
"license": "MIT",
"dependencies": {
"caniuse-lite": "^1.0.30001669",
"electron-to-chromium": "^1.5.41",
"node-releases": "^2.0.18",
"update-browserslist-db": "^1.1.1"
},
"bin": {
"browserslist": "cli.js"
},
"engines": {
"node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
}
},
"node_modules/bser": {
"version": "2.1.1",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"node-int64": "^0.4.0"
}
},
"node_modules/buffer": {
"version": "6.0.3",
"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"
}
],
"license": "MIT",
"dependencies": {
"base64-js": "^1.3.1",
"ieee754": "^1.2.1"
}
},
"node_modules/buffer-from": {
"version": "1.1.2",
"dev": true,
"license": "MIT"
},
"node_modules/buffer-xor": {
"version": "1.0.3",
"dev": true,
"license": "MIT"
},
"node_modules/builtin-modules": {
"version": "3.3.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/builtin-status-codes": {
"version": "3.0.0",
"dev": true,
"license": "MIT"
},
"node_modules/bytes": {
"version": "3.1.2",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.8"
}
},
"node_modules/call-bind": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz",
"integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bind-apply-helpers": "^1.0.0",
"es-define-property": "^1.0.0",
"get-intrinsic": "^1.2.4",
"set-function-length": "^1.2.2"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/call-bind-apply-helpers": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
"integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0",
"function-bind": "^1.1.2"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/call-bound": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
"integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bind-apply-helpers": "^1.0.2",
"get-intrinsic": "^1.3.0"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/callsites": {
"version": "3.1.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/camel-case": {
"version": "4.1.2",
"dev": true,
"license": "MIT",
"dependencies": {
"pascal-case": "^3.1.2",
"tslib": "^2.0.3"
}
},
"node_modules/camelcase": {
"version": "6.3.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/camelcase-css": {
"version": "2.0.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 6"
}
},
"node_modules/camelize": {
"version": "1.0.1",
"dev": true,
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/caniuse-api": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"browserslist": "^4.0.0",
"caniuse-lite": "^1.0.0",
"lodash.memoize": "^4.1.2",
"lodash.uniq": "^4.5.0"
}
},
"node_modules/caniuse-lite": {
"version": "1.0.30001717",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001717.tgz",
"integrity": "sha512-auPpttCq6BDEG8ZAuHJIplGw6GODhjw+/11e7IjpnYCxZcW/ONgPs0KVBJ0d1bY3e2+7PRe5RCLyP+PfwVgkYw==",
"dev": true,
"funding": [
{
"type": "opencollective",
"url": "https://opencollective.com/browserslist"
},
{
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/caniuse-lite"
},
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
"license": "CC-BY-4.0"
},
"node_modules/case-sensitive-paths-webpack-plugin": {
"version": "2.4.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/chalk": {
"version": "4.1.2",
"dev": true,
"license": "MIT",
"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/char-regex": {
"version": "1.0.2",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
}
},
"node_modules/check-types": {
"version": "11.2.3",
"dev": true,
"license": "MIT"
},
"node_modules/chokidar": {
"version": "3.6.0",
"dev": true,
"license": "MIT",
"dependencies": {
"anymatch": "~3.1.2",
"braces": "~3.0.2",
"glob-parent": "~5.1.2",
"is-binary-path": "~2.1.0",
"is-glob": "~4.0.1",
"normalize-path": "~3.0.0",
"readdirp": "~3.6.0"
},
"engines": {
"node": ">= 8.10.0"
},
"funding": {
"url": "https://paulmillr.com/funding/"
},
"optionalDependencies": {
"fsevents": "~2.3.2"
}
},
"node_modules/chokidar/node_modules/glob-parent": {
"version": "5.1.2",
"dev": true,
"license": "ISC",
"dependencies": {
"is-glob": "^4.0.1"
},
"engines": {
"node": ">= 6"
}
},
"node_modules/chrome-trace-event": {
"version": "1.0.4",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.0"
}
},
"node_modules/chronik-client": {
"resolved": "../modules/chronik-client",
"link": true
},
"node_modules/ci-info": {
"version": "3.9.0",
"dev": true,
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/sibiraj-s"
}
],
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/cipher-base": {
"version": "1.0.4",
"dev": true,
"license": "MIT",
"dependencies": {
"inherits": "^2.0.1",
"safe-buffer": "^5.0.1"
}
},
"node_modules/cjs-module-lexer": {
"version": "1.4.1",
"dev": true,
"license": "MIT"
},
"node_modules/classnames": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz",
"integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==",
"license": "MIT"
},
"node_modules/clean-css": {
"version": "5.3.3",
"dev": true,
"license": "MIT",
"dependencies": {
"source-map": "~0.6.0"
},
"engines": {
"node": ">= 10.0"
}
},
"node_modules/clean-css/node_modules/source-map": {
"version": "0.6.1",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/cliui": {
"version": "8.0.1",
"dev": true,
"license": "ISC",
"dependencies": {
"string-width": "^4.2.0",
"strip-ansi": "^6.0.1",
"wrap-ansi": "^7.0.0"
},
"engines": {
"node": ">=12"
}
},
"node_modules/clsx": {
"version": "2.1.1",
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/co": {
"version": "4.6.0",
"dev": true,
"license": "MIT",
"engines": {
"iojs": ">= 1.0.0",
"node": ">= 0.12.0"
}
},
"node_modules/collect-v8-coverage": {
"version": "1.0.2",
"dev": true,
"license": "MIT"
},
"node_modules/color-convert": {
"version": "2.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"color-name": "~1.1.4"
},
"engines": {
"node": ">=7.0.0"
}
},
"node_modules/color-name": {
"version": "1.1.4",
"dev": true,
"license": "MIT"
},
"node_modules/colord": {
"version": "2.9.3",
"dev": true,
"license": "MIT"
},
"node_modules/colorette": {
"version": "2.0.20",
"dev": true,
"license": "MIT"
},
"node_modules/combined-stream": {
"version": "1.0.8",
"dev": true,
"license": "MIT",
"dependencies": {
"delayed-stream": "~1.0.0"
},
"engines": {
"node": ">= 0.8"
}
},
"node_modules/commander": {
"version": "8.3.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 12"
}
},
"node_modules/common-tags": {
"version": "1.8.2",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4.0.0"
}
},
"node_modules/commondir": {
"version": "1.0.1",
"dev": true,
"license": "MIT"
},
"node_modules/compressible": {
"version": "2.0.18",
"dev": true,
"license": "MIT",
"dependencies": {
"mime-db": ">= 1.43.0 < 2"
},
"engines": {
"node": ">= 0.6"
}
},
"node_modules/compression": {
"version": "1.7.5",
"dev": true,
"license": "MIT",
"dependencies": {
"bytes": "3.1.2",
"compressible": "~2.0.18",
"debug": "2.6.9",
"negotiator": "~0.6.4",
"on-headers": "~1.0.2",
"safe-buffer": "5.2.1",
"vary": "~1.1.2"
},
"engines": {
"node": ">= 0.8.0"
}
},
"node_modules/compression/node_modules/debug": {
"version": "2.6.9",
"dev": true,
"license": "MIT",
"dependencies": {
"ms": "2.0.0"
}
},
"node_modules/compression/node_modules/ms": {
"version": "2.0.0",
"dev": true,
"license": "MIT"
},
"node_modules/concat-map": {
"version": "0.0.1",
"dev": true,
"license": "MIT"
},
"node_modules/connect-history-api-fallback": {
"version": "2.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.8"
}
},
"node_modules/console-browserify": {
"version": "1.2.0",
"dev": true
},
"node_modules/constants-browserify": {
"version": "1.0.0",
"dev": true,
"license": "MIT"
},
"node_modules/content-disposition": {
"version": "0.5.4",
"dev": true,
"license": "MIT",
"dependencies": {
"safe-buffer": "5.2.1"
},
"engines": {
"node": ">= 0.6"
}
},
"node_modules/content-type": {
"version": "1.0.5",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/convert-source-map": {
"version": "2.0.0",
"dev": true,
"license": "MIT"
},
"node_modules/cookie": {
"version": "0.7.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/cookie-signature": {
"version": "1.0.6",
"dev": true,
"license": "MIT"
},
"node_modules/core-js": {
"version": "3.39.0",
"dev": true,
"hasInstallScript": true,
"license": "MIT",
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/core-js"
}
},
"node_modules/core-js-compat": {
"version": "3.39.0",
"dev": true,
"license": "MIT",
"dependencies": {
"browserslist": "^4.24.2"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/core-js"
}
},
"node_modules/core-js-pure": {
"version": "3.39.0",
"dev": true,
"hasInstallScript": true,
"license": "MIT",
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/core-js"
}
},
"node_modules/core-util-is": {
"version": "1.0.3",
"dev": true,
"license": "MIT"
},
"node_modules/cosmiconfig": {
"version": "7.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/parse-json": "^4.0.0",
"import-fresh": "^3.2.1",
"parse-json": "^5.0.0",
"path-type": "^4.0.0",
"yaml": "^1.10.0"
},
"engines": {
"node": ">=10"
}
},
"node_modules/create-ecdh": {
"version": "4.0.4",
"dev": true,
"license": "MIT",
"dependencies": {
"bn.js": "^4.1.0",
"elliptic": "^6.5.3"
}
},
"node_modules/create-ecdh/node_modules/bn.js": {
"version": "4.12.0",
"dev": true,
"license": "MIT"
},
"node_modules/create-hash": {
"version": "1.2.0",
"dev": true,
"license": "MIT",
"dependencies": {
"cipher-base": "^1.0.1",
"inherits": "^2.0.1",
"md5.js": "^1.3.4",
"ripemd160": "^2.0.1",
"sha.js": "^2.4.0"
}
},
"node_modules/create-hmac": {
"version": "1.1.7",
"dev": true,
"license": "MIT",
"dependencies": {
"cipher-base": "^1.0.3",
"create-hash": "^1.1.0",
"inherits": "^2.0.1",
"ripemd160": "^2.0.0",
"safe-buffer": "^5.0.1",
"sha.js": "^2.4.8"
}
},
"node_modules/create-jest": {
"version": "29.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@jest/types": "^29.6.3",
"chalk": "^4.0.0",
"exit": "^0.1.2",
"graceful-fs": "^4.2.9",
"jest-config": "^29.7.0",
"jest-util": "^29.7.0",
"prompts": "^2.0.1"
},
"bin": {
"create-jest": "bin/create-jest.js"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/cross-spawn": {
"version": "7.0.5",
"dev": true,
"license": "MIT",
"dependencies": {
"path-key": "^3.1.0",
"shebang-command": "^2.0.0",
"which": "^2.0.1"
},
"engines": {
"node": ">= 8"
}
},
"node_modules/crypto-browserify": {
"version": "3.12.1",
"dev": true,
"license": "MIT",
"dependencies": {
"browserify-cipher": "^1.0.1",
"browserify-sign": "^4.2.3",
"create-ecdh": "^4.0.4",
"create-hash": "^1.2.0",
"create-hmac": "^1.1.7",
"diffie-hellman": "^5.0.3",
"hash-base": "~3.0.4",
"inherits": "^2.0.4",
"pbkdf2": "^3.1.2",
"public-encrypt": "^4.0.3",
"randombytes": "^2.1.0",
"randomfill": "^1.0.4"
},
"engines": {
"node": ">= 0.10"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/crypto-random-string": {
"version": "2.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/css-blank-pseudo": {
"version": "3.0.3",
"dev": true,
"license": "CC0-1.0",
"dependencies": {
"postcss-selector-parser": "^6.0.9"
},
"bin": {
"css-blank-pseudo": "dist/cli.cjs"
},
"engines": {
"node": "^12 || ^14 || >=16"
},
"peerDependencies": {
"postcss": "^8.4"
}
},
"node_modules/css-color-keywords": {
"version": "1.0.0",
"dev": true,
"license": "ISC",
"engines": {
"node": ">=4"
}
},
"node_modules/css-declaration-sorter": {
"version": "6.4.1",
"dev": true,
"license": "ISC",
"engines": {
"node": "^10 || ^12 || >=14"
},
"peerDependencies": {
"postcss": "^8.0.9"
}
},
"node_modules/css-has-pseudo": {
"version": "3.0.4",
"dev": true,
"license": "CC0-1.0",
"dependencies": {
"postcss-selector-parser": "^6.0.9"
},
"bin": {
"css-has-pseudo": "dist/cli.cjs"
},
"engines": {
"node": "^12 || ^14 || >=16"
},
"peerDependencies": {
"postcss": "^8.4"
}
},
"node_modules/css-loader": {
"version": "6.11.0",
"dev": true,
"license": "MIT",
"dependencies": {
"icss-utils": "^5.1.0",
"postcss": "^8.4.33",
"postcss-modules-extract-imports": "^3.1.0",
"postcss-modules-local-by-default": "^4.0.5",
"postcss-modules-scope": "^3.2.0",
"postcss-modules-values": "^4.0.0",
"postcss-value-parser": "^4.2.0",
"semver": "^7.5.4"
},
"engines": {
"node": ">= 12.13.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/webpack"
},
"peerDependencies": {
"@rspack/core": "0.x || 1.x",
"webpack": "^5.0.0"
},
"peerDependenciesMeta": {
"@rspack/core": {
"optional": true
},
"webpack": {
"optional": true
}
}
},
"node_modules/css-minimizer-webpack-plugin": {
"version": "3.4.1",
"dev": true,
"license": "MIT",
"dependencies": {
"cssnano": "^5.0.6",
"jest-worker": "^27.0.2",
"postcss": "^8.3.5",
"schema-utils": "^4.0.0",
"serialize-javascript": "^6.0.0",
"source-map": "^0.6.1"
},
"engines": {
"node": ">= 12.13.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/webpack"
},
"peerDependencies": {
"webpack": "^5.0.0"
},
"peerDependenciesMeta": {
"@parcel/css": {
"optional": true
},
"clean-css": {
"optional": true
},
"csso": {
"optional": true
},
"esbuild": {
"optional": true
}
}
},
"node_modules/css-minimizer-webpack-plugin/node_modules/source-map": {
"version": "0.6.1",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/css-prefers-color-scheme": {
"version": "6.0.3",
"dev": true,
"license": "CC0-1.0",
"bin": {
"css-prefers-color-scheme": "dist/cli.cjs"
},
"engines": {
"node": "^12 || ^14 || >=16"
},
"peerDependencies": {
"postcss": "^8.4"
}
},
"node_modules/css-select": {
"version": "4.3.0",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
"boolbase": "^1.0.0",
"css-what": "^6.0.1",
"domhandler": "^4.3.1",
"domutils": "^2.8.0",
"nth-check": "^2.0.1"
},
"funding": {
"url": "https://github.com/sponsors/fb55"
}
},
"node_modules/css-to-react-native": {
"version": "2.3.2",
"dev": true,
"license": "MIT",
"dependencies": {
"camelize": "^1.0.0",
"css-color-keywords": "^1.0.0",
"postcss-value-parser": "^3.3.0"
}
},
"node_modules/css-to-react-native/node_modules/postcss-value-parser": {
"version": "3.3.1",
"dev": true,
"license": "MIT"
},
"node_modules/css-tree": {
"version": "1.1.3",
"dev": true,
"license": "MIT",
"dependencies": {
"mdn-data": "2.0.14",
"source-map": "^0.6.1"
},
"engines": {
"node": ">=8.0.0"
}
},
"node_modules/css-tree/node_modules/source-map": {
"version": "0.6.1",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/css-what": {
"version": "6.1.0",
"dev": true,
"license": "BSD-2-Clause",
"engines": {
"node": ">= 6"
},
"funding": {
"url": "https://github.com/sponsors/fb55"
}
},
"node_modules/css.escape": {
"version": "1.5.1",
"dev": true,
"license": "MIT"
},
"node_modules/cssdb": {
"version": "7.11.2",
"dev": true,
"funding": [
{
"type": "opencollective",
"url": "https://opencollective.com/csstools"
},
{
"type": "github",
"url": "https://github.com/sponsors/csstools"
}
],
"license": "CC0-1.0"
},
"node_modules/cssesc": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"bin": {
"cssesc": "bin/cssesc"
},
"engines": {
"node": ">=4"
}
},
"node_modules/cssfontparser": {
"version": "1.2.1",
"dev": true,
"license": "MIT"
},
"node_modules/cssnano": {
"version": "5.1.15",
"dev": true,
"license": "MIT",
"dependencies": {
"cssnano-preset-default": "^5.2.14",
"lilconfig": "^2.0.3",
"yaml": "^1.10.2"
},
"engines": {
"node": "^10 || ^12 || >=14.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/cssnano"
},
"peerDependencies": {
"postcss": "^8.2.15"
}
},
"node_modules/cssnano-preset-default": {
"version": "5.2.14",
"dev": true,
"license": "MIT",
"dependencies": {
"css-declaration-sorter": "^6.3.1",
"cssnano-utils": "^3.1.0",
"postcss-calc": "^8.2.3",
"postcss-colormin": "^5.3.1",
"postcss-convert-values": "^5.1.3",
"postcss-discard-comments": "^5.1.2",
"postcss-discard-duplicates": "^5.1.0",
"postcss-discard-empty": "^5.1.1",
"postcss-discard-overridden": "^5.1.0",
"postcss-merge-longhand": "^5.1.7",
"postcss-merge-rules": "^5.1.4",
"postcss-minify-font-values": "^5.1.0",
"postcss-minify-gradients": "^5.1.1",
"postcss-minify-params": "^5.1.4",
"postcss-minify-selectors": "^5.2.1",
"postcss-normalize-charset": "^5.1.0",
"postcss-normalize-display-values": "^5.1.0",
"postcss-normalize-positions": "^5.1.1",
"postcss-normalize-repeat-style": "^5.1.1",
"postcss-normalize-string": "^5.1.0",
"postcss-normalize-timing-functions": "^5.1.0",
"postcss-normalize-unicode": "^5.1.1",
"postcss-normalize-url": "^5.1.0",
"postcss-normalize-whitespace": "^5.1.1",
"postcss-ordered-values": "^5.1.3",
"postcss-reduce-initial": "^5.1.2",
"postcss-reduce-transforms": "^5.1.0",
"postcss-svgo": "^5.1.0",
"postcss-unique-selectors": "^5.1.1"
},
"engines": {
"node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
"postcss": "^8.2.15"
}
},
"node_modules/cssnano-utils": {
"version": "3.1.0",
"dev": true,
"license": "MIT",
"engines": {
"node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
"postcss": "^8.2.15"
}
},
"node_modules/csso": {
"version": "4.2.0",
"dev": true,
"license": "MIT",
"dependencies": {
"css-tree": "^1.1.2"
},
"engines": {
"node": ">=8.0.0"
}
},
"node_modules/cssom": {
"version": "0.5.0",
"dev": true,
"license": "MIT"
},
"node_modules/cssstyle": {
"version": "2.3.0",
"dev": true,
"license": "MIT",
"dependencies": {
"cssom": "~0.3.6"
},
"engines": {
"node": ">=8"
}
},
"node_modules/cssstyle/node_modules/cssom": {
"version": "0.3.8",
"dev": true,
"license": "MIT"
},
"node_modules/csstype": {
"version": "3.1.3",
"dev": true,
"license": "MIT"
},
"node_modules/data-urls": {
"version": "3.0.2",
"dev": true,
"license": "MIT",
"dependencies": {
"abab": "^2.0.6",
"whatwg-mimetype": "^3.0.0",
"whatwg-url": "^11.0.0"
},
"engines": {
"node": ">=12"
}
},
"node_modules/data-view-buffer": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz",
"integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.3",
"es-errors": "^1.3.0",
"is-data-view": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/data-view-byte-length": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz",
"integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.3",
"es-errors": "^1.3.0",
"is-data-view": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/inspect-js"
}
},
"node_modules/data-view-byte-offset": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz",
"integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.2",
"es-errors": "^1.3.0",
"is-data-view": "^1.0.1"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/debug": {
"version": "4.3.7",
"dev": true,
"license": "MIT",
"dependencies": {
"ms": "^2.1.3"
},
"engines": {
"node": ">=6.0"
},
"peerDependenciesMeta": {
"supports-color": {
"optional": true
}
}
},
"node_modules/decimal.js": {
"version": "10.4.3",
"dev": true,
"license": "MIT"
},
"node_modules/dedent": {
"version": "1.5.3",
"dev": true,
"license": "MIT",
"peerDependencies": {
"babel-plugin-macros": "^3.1.0"
},
"peerDependenciesMeta": {
"babel-plugin-macros": {
"optional": true
}
}
},
"node_modules/deep-is": {
"version": "0.1.4",
"dev": true,
"license": "MIT"
},
"node_modules/deepmerge": {
"version": "4.3.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/default-gateway": {
"version": "6.0.3",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
"execa": "^5.0.0"
},
"engines": {
"node": ">= 10"
}
},
"node_modules/define-data-property": {
"version": "1.1.4",
"dev": true,
"license": "MIT",
"dependencies": {
"es-define-property": "^1.0.0",
"es-errors": "^1.3.0",
"gopd": "^1.0.1"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/define-lazy-prop": {
"version": "2.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/define-properties": {
"version": "1.2.1",
"dev": true,
"license": "MIT",
"dependencies": {
"define-data-property": "^1.0.1",
"has-property-descriptors": "^1.0.0",
"object-keys": "^1.1.1"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/delayed-stream": {
"version": "1.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/depd": {
"version": "2.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.8"
}
},
"node_modules/dequal": {
"version": "2.0.3",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/des.js": {
"version": "1.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"inherits": "^2.0.1",
"minimalistic-assert": "^1.0.0"
}
},
"node_modules/destroy": {
"version": "1.2.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.8",
"npm": "1.2.8000 || >= 1.4.16"
}
},
"node_modules/detect-newline": {
"version": "3.1.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/detect-node": {
"version": "2.1.0",
"dev": true,
"license": "MIT"
},
"node_modules/detect-port-alt": {
"version": "1.1.6",
"dev": true,
"license": "MIT",
"dependencies": {
"address": "^1.0.1",
"debug": "^2.6.0"
},
"bin": {
"detect": "bin/detect-port",
"detect-port": "bin/detect-port"
},
"engines": {
"node": ">= 4.2.1"
}
},
"node_modules/detect-port-alt/node_modules/debug": {
"version": "2.6.9",
"dev": true,
"license": "MIT",
"dependencies": {
"ms": "2.0.0"
}
},
"node_modules/detect-port-alt/node_modules/ms": {
"version": "2.0.0",
"dev": true,
"license": "MIT"
},
"node_modules/didyoumean": {
"version": "1.2.2",
"dev": true,
"license": "Apache-2.0"
},
"node_modules/diff-sequences": {
"version": "29.6.3",
"dev": true,
"license": "MIT",
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/diffie-hellman": {
"version": "5.0.3",
"dev": true,
"license": "MIT",
"dependencies": {
"bn.js": "^4.1.0",
"miller-rabin": "^4.0.0",
"randombytes": "^2.0.0"
}
},
"node_modules/diffie-hellman/node_modules/bn.js": {
"version": "4.12.0",
"dev": true,
"license": "MIT"
},
"node_modules/dir-glob": {
"version": "3.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"path-type": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/dlv": {
"version": "1.1.3",
"dev": true,
"license": "MIT"
},
"node_modules/dns-packet": {
"version": "5.6.1",
"dev": true,
"license": "MIT",
"dependencies": {
"@leichtgewicht/ip-codec": "^2.0.1"
},
"engines": {
"node": ">=6"
}
},
"node_modules/doctrine": {
"version": "3.0.0",
"dev": true,
"license": "Apache-2.0",
"optional": true,
"peer": true,
"dependencies": {
"esutils": "^2.0.2"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/dom-accessibility-api": {
"version": "0.5.16",
"dev": true,
"license": "MIT",
"peer": true
},
"node_modules/dom-converter": {
"version": "0.2.0",
"dev": true,
"license": "MIT",
"dependencies": {
"utila": "~0.4"
}
},
"node_modules/dom-serializer": {
"version": "1.4.1",
"dev": true,
"license": "MIT",
"dependencies": {
"domelementtype": "^2.0.1",
"domhandler": "^4.2.0",
"entities": "^2.0.0"
},
"funding": {
"url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
}
},
"node_modules/dom-serializer/node_modules/entities": {
"version": "2.2.0",
"dev": true,
"license": "BSD-2-Clause",
"funding": {
"url": "https://github.com/fb55/entities?sponsor=1"
}
},
"node_modules/domain-browser": {
"version": "5.7.0",
"dev": true,
"license": "Artistic-2.0",
"engines": {
"node": ">=4"
},
"funding": {
"url": "https://bevry.me/fund"
}
},
"node_modules/domelementtype": {
"version": "2.3.0",
"dev": true,
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/fb55"
}
],
"license": "BSD-2-Clause"
},
"node_modules/domexception": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"webidl-conversions": "^7.0.0"
},
"engines": {
"node": ">=12"
}
},
"node_modules/domhandler": {
"version": "4.3.1",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
"domelementtype": "^2.2.0"
},
"engines": {
"node": ">= 4"
},
"funding": {
"url": "https://github.com/fb55/domhandler?sponsor=1"
}
},
"node_modules/domutils": {
"version": "2.8.0",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
"dom-serializer": "^1.0.1",
"domelementtype": "^2.2.0",
"domhandler": "^4.2.0"
},
"funding": {
"url": "https://github.com/fb55/domutils?sponsor=1"
}
},
"node_modules/dot-case": {
"version": "3.0.4",
"dev": true,
"license": "MIT",
"dependencies": {
"no-case": "^3.0.4",
"tslib": "^2.0.3"
}
},
"node_modules/dotenv": {
"version": "10.0.0",
"dev": true,
"license": "BSD-2-Clause",
"engines": {
"node": ">=10"
}
},
"node_modules/dotenv-expand": {
"version": "5.1.0",
"dev": true,
"license": "BSD-2-Clause"
},
"node_modules/dunder-proto": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
"integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bind-apply-helpers": "^1.0.1",
"es-errors": "^1.3.0",
"gopd": "^1.2.0"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/duplexer": {
"version": "0.1.2",
"dev": true,
"license": "MIT"
},
"node_modules/eastasianwidth": {
"version": "0.2.0",
"dev": true,
"license": "MIT"
},
"node_modules/ecash-agora": {
"resolved": "../modules/ecash-agora",
"link": true
},
"node_modules/ecash-lib": {
"resolved": "../modules/ecash-lib",
"link": true
},
"node_modules/ecash-script": {
"resolved": "../modules/ecash-script",
"link": true
},
"node_modules/ecashaddrjs": {
"resolved": "../modules/ecashaddrjs",
"link": true
},
"node_modules/ee-first": {
"version": "1.1.1",
"dev": true,
"license": "MIT"
},
"node_modules/ejs": {
"version": "3.1.10",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"jake": "^10.8.5"
},
"bin": {
"ejs": "bin/cli.js"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/electron-to-chromium": {
"version": "1.5.52",
"dev": true,
"license": "ISC"
},
"node_modules/elliptic": {
"version": "6.6.0",
"dev": true,
"license": "MIT",
"dependencies": {
"bn.js": "^4.11.9",
"brorand": "^1.1.0",
"hash.js": "^1.0.0",
"hmac-drbg": "^1.0.1",
"inherits": "^2.0.4",
"minimalistic-assert": "^1.0.1",
"minimalistic-crypto-utils": "^1.0.1"
}
},
"node_modules/elliptic/node_modules/bn.js": {
"version": "4.12.0",
"dev": true,
"license": "MIT"
},
"node_modules/emittery": {
"version": "0.13.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/sindresorhus/emittery?sponsor=1"
}
},
"node_modules/emoji-regex": {
"version": "9.2.2",
"dev": true,
"license": "MIT"
},
"node_modules/emojis-list": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 4"
}
},
"node_modules/encodeurl": {
"version": "2.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.8"
}
},
"node_modules/enhanced-resolve": {
"version": "5.17.1",
"dev": true,
"license": "MIT",
"dependencies": {
"graceful-fs": "^4.2.4",
"tapable": "^2.2.0"
},
"engines": {
"node": ">=10.13.0"
}
},
"node_modules/entities": {
"version": "4.5.0",
"dev": true,
"license": "BSD-2-Clause",
"engines": {
"node": ">=0.12"
},
"funding": {
"url": "https://github.com/fb55/entities?sponsor=1"
}
},
"node_modules/error-ex": {
"version": "1.3.2",
"dev": true,
"license": "MIT",
"dependencies": {
"is-arrayish": "^0.2.1"
}
},
"node_modules/error-stack-parser": {
"version": "2.1.4",
"dev": true,
"license": "MIT",
"dependencies": {
"stackframe": "^1.3.4"
}
},
"node_modules/es-abstract": {
"version": "1.23.9",
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz",
"integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==",
"dev": true,
"license": "MIT",
"dependencies": {
"array-buffer-byte-length": "^1.0.2",
"arraybuffer.prototype.slice": "^1.0.4",
"available-typed-arrays": "^1.0.7",
"call-bind": "^1.0.8",
"call-bound": "^1.0.3",
"data-view-buffer": "^1.0.2",
"data-view-byte-length": "^1.0.2",
"data-view-byte-offset": "^1.0.1",
"es-define-property": "^1.0.1",
"es-errors": "^1.3.0",
"es-object-atoms": "^1.0.0",
"es-set-tostringtag": "^2.1.0",
"es-to-primitive": "^1.3.0",
"function.prototype.name": "^1.1.8",
"get-intrinsic": "^1.2.7",
"get-proto": "^1.0.0",
"get-symbol-description": "^1.1.0",
"globalthis": "^1.0.4",
"gopd": "^1.2.0",
"has-property-descriptors": "^1.0.2",
"has-proto": "^1.2.0",
"has-symbols": "^1.1.0",
"hasown": "^2.0.2",
"internal-slot": "^1.1.0",
"is-array-buffer": "^3.0.5",
"is-callable": "^1.2.7",
"is-data-view": "^1.0.2",
"is-regex": "^1.2.1",
"is-shared-array-buffer": "^1.0.4",
"is-string": "^1.1.1",
"is-typed-array": "^1.1.15",
"is-weakref": "^1.1.0",
"math-intrinsics": "^1.1.0",
"object-inspect": "^1.13.3",
"object-keys": "^1.1.1",
"object.assign": "^4.1.7",
"own-keys": "^1.0.1",
"regexp.prototype.flags": "^1.5.3",
"safe-array-concat": "^1.1.3",
"safe-push-apply": "^1.0.0",
"safe-regex-test": "^1.1.0",
"set-proto": "^1.0.0",
"string.prototype.trim": "^1.2.10",
"string.prototype.trimend": "^1.0.9",
"string.prototype.trimstart": "^1.0.8",
"typed-array-buffer": "^1.0.3",
"typed-array-byte-length": "^1.0.3",
"typed-array-byte-offset": "^1.0.4",
"typed-array-length": "^1.0.7",
"unbox-primitive": "^1.1.0",
"which-typed-array": "^1.1.18"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/es-define-property": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
"integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
}
},
"node_modules/es-errors": {
"version": "1.3.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
}
},
"node_modules/es-module-lexer": {
"version": "1.5.4",
"dev": true,
"license": "MIT"
},
"node_modules/es-object-atoms": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
"integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
"dev": true,
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/es-set-tostringtag": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
"integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
"dev": true,
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0",
"get-intrinsic": "^1.2.6",
"has-tostringtag": "^1.0.2",
"hasown": "^2.0.2"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/es-to-primitive": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz",
"integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==",
"dev": true,
"license": "MIT",
"dependencies": {
"is-callable": "^1.2.7",
"is-date-object": "^1.0.5",
"is-symbol": "^1.0.4"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/escalade": {
"version": "3.2.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/escape-html": {
"version": "1.0.3",
"dev": true,
"license": "MIT"
},
"node_modules/escape-string-regexp": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/escodegen": {
"version": "2.1.0",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
"esprima": "^4.0.1",
"estraverse": "^5.2.0",
"esutils": "^2.0.2"
},
"bin": {
"escodegen": "bin/escodegen.js",
"esgenerate": "bin/esgenerate.js"
},
"engines": {
"node": ">=6.0"
},
"optionalDependencies": {
"source-map": "~0.6.1"
}
},
"node_modules/escodegen/node_modules/source-map": {
"version": "0.6.1",
"dev": true,
"license": "BSD-3-Clause",
"optional": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/eslint": {
"version": "8.56.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz",
"integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==",
"deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.",
"dev": true,
"license": "MIT",
"optional": true,
"peer": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.6.1",
"@eslint/eslintrc": "^2.1.4",
"@eslint/js": "8.56.0",
"@humanwhocodes/config-array": "^0.11.13",
"@humanwhocodes/module-importer": "^1.0.1",
"@nodelib/fs.walk": "^1.2.8",
"@ungap/structured-clone": "^1.2.0",
"ajv": "^6.12.4",
"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.2.2",
"eslint-visitor-keys": "^3.4.3",
"espree": "^9.6.1",
"esquery": "^1.4.2",
"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",
"graphemer": "^1.4.0",
"ignore": "^5.2.0",
"imurmurhash": "^0.1.4",
"is-glob": "^4.0.0",
"is-path-inside": "^3.0.3",
"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.3",
"strip-ansi": "^6.0.1",
"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/eslint-scope": {
"version": "7.2.2",
"dev": true,
"license": "BSD-2-Clause",
"optional": true,
"peer": true,
"dependencies": {
"esrecurse": "^4.3.0",
"estraverse": "^5.2.0"
},
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
},
"funding": {
"url": "https://opencollective.com/eslint"
}
},
"node_modules/eslint-visitor-keys": {
"version": "3.4.3",
"dev": true,
"license": "Apache-2.0",
"optional": true,
"peer": true,
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
},
"funding": {
"url": "https://opencollective.com/eslint"
}
},
"node_modules/eslint/node_modules/argparse": {
"version": "2.0.1",
"dev": true,
"license": "Python-2.0",
"optional": true,
"peer": true
},
"node_modules/eslint/node_modules/find-up": {
"version": "5.0.0",
"dev": true,
"license": "MIT",
"optional": true,
"peer": true,
"dependencies": {
"locate-path": "^6.0.0",
"path-exists": "^4.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/eslint/node_modules/globals": {
"version": "13.24.0",
"dev": true,
"license": "MIT",
"optional": true,
"peer": true,
"dependencies": {
"type-fest": "^0.20.2"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/eslint/node_modules/js-yaml": {
"version": "4.1.0",
"dev": true,
"license": "MIT",
"optional": true,
"peer": true,
"dependencies": {
"argparse": "^2.0.1"
},
"bin": {
"js-yaml": "bin/js-yaml.js"
}
},
"node_modules/eslint/node_modules/locate-path": {
"version": "6.0.0",
"dev": true,
"license": "MIT",
"optional": true,
"peer": true,
"dependencies": {
"p-locate": "^5.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/eslint/node_modules/p-locate": {
"version": "5.0.0",
"dev": true,
"license": "MIT",
"optional": true,
"peer": true,
"dependencies": {
"p-limit": "^3.0.2"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/eslint/node_modules/type-fest": {
"version": "0.20.2",
"dev": true,
"license": "(MIT OR CC0-1.0)",
"optional": true,
"peer": true,
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/espree": {
"version": "9.6.1",
"dev": true,
"license": "BSD-2-Clause",
"optional": true,
"peer": true,
"dependencies": {
"acorn": "^8.9.0",
"acorn-jsx": "^5.3.2",
"eslint-visitor-keys": "^3.4.1"
},
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
},
"funding": {
"url": "https://opencollective.com/eslint"
}
},
"node_modules/esprima": {
"version": "4.0.1",
"dev": true,
"license": "BSD-2-Clause",
"bin": {
"esparse": "bin/esparse.js",
"esvalidate": "bin/esvalidate.js"
},
"engines": {
"node": ">=4"
}
},
"node_modules/esquery": {
"version": "1.6.0",
"dev": true,
"license": "BSD-3-Clause",
"optional": true,
"peer": true,
"dependencies": {
"estraverse": "^5.1.0"
},
"engines": {
"node": ">=0.10"
}
},
"node_modules/esrecurse": {
"version": "4.3.0",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
"estraverse": "^5.2.0"
},
"engines": {
"node": ">=4.0"
}
},
"node_modules/estraverse": {
"version": "5.3.0",
"dev": true,
"license": "BSD-2-Clause",
"engines": {
"node": ">=4.0"
}
},
"node_modules/estree-walker": {
"version": "1.0.1",
"dev": true,
"license": "MIT"
},
"node_modules/esutils": {
"version": "2.0.3",
"dev": true,
"license": "BSD-2-Clause",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/etag": {
"version": "1.8.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/event-target-shim": {
"version": "5.0.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/eventemitter3": {
"version": "4.0.7",
"dev": true,
"license": "MIT"
},
"node_modules/events": {
"version": "3.3.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.8.x"
}
},
"node_modules/evp_bytestokey": {
"version": "1.0.3",
"dev": true,
"license": "MIT",
"dependencies": {
"md5.js": "^1.3.4",
"safe-buffer": "^5.1.1"
}
},
"node_modules/execa": {
"version": "5.1.1",
"dev": true,
"license": "MIT",
"dependencies": {
"cross-spawn": "^7.0.3",
"get-stream": "^6.0.0",
"human-signals": "^2.1.0",
"is-stream": "^2.0.0",
"merge-stream": "^2.0.0",
"npm-run-path": "^4.0.1",
"onetime": "^5.1.2",
"signal-exit": "^3.0.3",
"strip-final-newline": "^2.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sindresorhus/execa?sponsor=1"
}
},
"node_modules/exit": {
"version": "0.1.2",
"dev": true,
"engines": {
"node": ">= 0.8.0"
}
},
"node_modules/expect": {
"version": "29.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@jest/expect-utils": "^29.7.0",
"jest-get-type": "^29.6.3",
"jest-matcher-utils": "^29.7.0",
"jest-message-util": "^29.7.0",
"jest-util": "^29.7.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/express": {
"version": "4.21.2",
"resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz",
"integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==",
"dev": true,
"license": "MIT",
"dependencies": {
"accepts": "~1.3.8",
"array-flatten": "1.1.1",
"body-parser": "1.20.3",
"content-disposition": "0.5.4",
"content-type": "~1.0.4",
"cookie": "0.7.1",
"cookie-signature": "1.0.6",
"debug": "2.6.9",
"depd": "2.0.0",
"encodeurl": "~2.0.0",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
"finalhandler": "1.3.1",
"fresh": "0.5.2",
"http-errors": "2.0.0",
"merge-descriptors": "1.0.3",
"methods": "~1.1.2",
"on-finished": "2.4.1",
"parseurl": "~1.3.3",
"path-to-regexp": "0.1.12",
"proxy-addr": "~2.0.7",
"qs": "6.13.0",
"range-parser": "~1.2.1",
"safe-buffer": "5.2.1",
"send": "0.19.0",
"serve-static": "1.16.2",
"setprototypeof": "1.2.0",
"statuses": "2.0.1",
"type-is": "~1.6.18",
"utils-merge": "1.0.1",
"vary": "~1.1.2"
},
"engines": {
"node": ">= 0.10.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/express"
}
},
"node_modules/express/node_modules/debug": {
"version": "2.6.9",
"dev": true,
"license": "MIT",
"dependencies": {
"ms": "2.0.0"
}
},
"node_modules/express/node_modules/ms": {
"version": "2.0.0",
"dev": true,
"license": "MIT"
},
"node_modules/extensionizer": {
"version": "1.0.1",
"dev": true,
"license": "ISC"
},
"node_modules/fake-indexeddb": {
"version": "5.0.2",
"dev": true,
"license": "Apache-2.0",
"engines": {
"node": ">=18"
}
},
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"dev": true,
"license": "MIT"
},
"node_modules/fast-glob": {
"version": "3.3.2",
"dev": true,
"license": "MIT",
"dependencies": {
"@nodelib/fs.stat": "^2.0.2",
"@nodelib/fs.walk": "^1.2.3",
"glob-parent": "^5.1.2",
"merge2": "^1.3.0",
"micromatch": "^4.0.4"
},
"engines": {
"node": ">=8.6.0"
}
},
"node_modules/fast-glob/node_modules/glob-parent": {
"version": "5.1.2",
"dev": true,
"license": "ISC",
"dependencies": {
"is-glob": "^4.0.1"
},
"engines": {
"node": ">= 6"
}
},
"node_modules/fast-json-stable-stringify": {
"version": "2.1.0",
"dev": true,
"license": "MIT"
},
"node_modules/fast-levenshtein": {
"version": "2.0.6",
"dev": true,
"license": "MIT"
},
"node_modules/fast-uri": {
"version": "3.0.3",
"dev": true,
"license": "BSD-3-Clause"
},
"node_modules/fastq": {
"version": "1.17.1",
"dev": true,
"license": "ISC",
"dependencies": {
"reusify": "^1.0.4"
}
},
"node_modules/faye-websocket": {
"version": "0.11.4",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"websocket-driver": ">=0.5.1"
},
"engines": {
"node": ">=0.8.0"
}
},
"node_modules/fb-watchman": {
"version": "2.0.2",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"bser": "2.1.1"
}
},
"node_modules/file-entry-cache": {
"version": "6.0.1",
"dev": true,
"license": "MIT",
"optional": true,
"peer": true,
"dependencies": {
"flat-cache": "^3.0.4"
},
"engines": {
"node": "^10.12.0 || >=12.0.0"
}
},
"node_modules/file-loader": {
"version": "6.2.0",
"dev": true,
"license": "MIT",
"dependencies": {
"loader-utils": "^2.0.0",
"schema-utils": "^3.0.0"
},
"engines": {
"node": ">= 10.13.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/webpack"
},
"peerDependencies": {
"webpack": "^4.0.0 || ^5.0.0"
}
},
"node_modules/file-loader/node_modules/schema-utils": {
"version": "3.3.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/json-schema": "^7.0.8",
"ajv": "^6.12.5",
"ajv-keywords": "^3.5.2"
},
"engines": {
"node": ">= 10.13.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/webpack"
}
},
"node_modules/filelist": {
"version": "1.0.4",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"minimatch": "^5.0.1"
}
},
"node_modules/filelist/node_modules/brace-expansion": {
"version": "2.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0"
}
},
"node_modules/filelist/node_modules/minimatch": {
"version": "5.1.6",
"dev": true,
"license": "ISC",
"dependencies": {
"brace-expansion": "^2.0.1"
},
"engines": {
"node": ">=10"
}
},
"node_modules/filesize": {
"version": "8.0.7",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": ">= 0.4.0"
}
},
"node_modules/fill-range": {
"version": "7.1.1",
"dev": true,
"license": "MIT",
"dependencies": {
"to-regex-range": "^5.0.1"
},
"engines": {
"node": ">=8"
}
},
"node_modules/finalhandler": {
"version": "1.3.1",
"dev": true,
"license": "MIT",
"dependencies": {
"debug": "2.6.9",
"encodeurl": "~2.0.0",
"escape-html": "~1.0.3",
"on-finished": "2.4.1",
"parseurl": "~1.3.3",
"statuses": "2.0.1",
"unpipe": "~1.0.0"
},
"engines": {
"node": ">= 0.8"
}
},
"node_modules/finalhandler/node_modules/debug": {
"version": "2.6.9",
"dev": true,
"license": "MIT",
"dependencies": {
"ms": "2.0.0"
}
},
"node_modules/finalhandler/node_modules/ms": {
"version": "2.0.0",
"dev": true,
"license": "MIT"
},
"node_modules/find-cache-dir": {
"version": "3.3.2",
"dev": true,
"license": "MIT",
"dependencies": {
"commondir": "^1.0.1",
"make-dir": "^3.0.2",
"pkg-dir": "^4.1.0"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/avajs/find-cache-dir?sponsor=1"
}
},
"node_modules/find-up": {
"version": "4.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"locate-path": "^5.0.0",
"path-exists": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/flat-cache": {
"version": "3.2.0",
"dev": true,
"license": "MIT",
"optional": true,
"peer": true,
"dependencies": {
"flatted": "^3.2.9",
"keyv": "^4.5.3",
"rimraf": "^3.0.2"
},
"engines": {
"node": "^10.12.0 || >=12.0.0"
}
},
"node_modules/flatted": {
"version": "3.3.1",
"dev": true,
"license": "ISC",
"optional": true,
"peer": true
},
"node_modules/follow-redirects": {
"version": "1.15.9",
"dev": true,
"funding": [
{
"type": "individual",
"url": "https://github.com/sponsors/RubenVerborgh"
}
],
"license": "MIT",
"engines": {
"node": ">=4.0"
},
"peerDependenciesMeta": {
"debug": {
"optional": true
}
}
},
"node_modules/for-each": {
"version": "0.3.3",
"dev": true,
"license": "MIT",
"dependencies": {
"is-callable": "^1.1.3"
}
},
"node_modules/foreground-child": {
"version": "3.3.0",
"dev": true,
"license": "ISC",
"dependencies": {
"cross-spawn": "^7.0.0",
"signal-exit": "^4.0.1"
},
"engines": {
"node": ">=14"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/foreground-child/node_modules/signal-exit": {
"version": "4.1.0",
"dev": true,
"license": "ISC",
"engines": {
"node": ">=14"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/fork-ts-checker-webpack-plugin": {
"version": "6.5.3",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.8.3",
"@types/json-schema": "^7.0.5",
"chalk": "^4.1.0",
"chokidar": "^3.4.2",
"cosmiconfig": "^6.0.0",
"deepmerge": "^4.2.2",
"fs-extra": "^9.0.0",
"glob": "^7.1.6",
"memfs": "^3.1.2",
"minimatch": "^3.0.4",
"schema-utils": "2.7.0",
"semver": "^7.3.2",
"tapable": "^1.0.0"
},
"engines": {
"node": ">=10",
"yarn": ">=1.0.0"
},
"peerDependencies": {
"eslint": ">= 6",
"typescript": ">= 2.7",
"vue-template-compiler": "*",
"webpack": ">= 4"
},
"peerDependenciesMeta": {
"eslint": {
"optional": true
},
"vue-template-compiler": {
"optional": true
}
}
},
"node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": {
"version": "6.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/parse-json": "^4.0.0",
"import-fresh": "^3.1.0",
"parse-json": "^5.0.0",
"path-type": "^4.0.0",
"yaml": "^1.7.2"
},
"engines": {
"node": ">=8"
}
},
"node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": {
"version": "9.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"at-least-node": "^1.0.0",
"graceful-fs": "^4.2.0",
"jsonfile": "^6.0.1",
"universalify": "^2.0.0"
},
"engines": {
"node": ">=10"
}
},
"node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": {
"version": "2.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/json-schema": "^7.0.4",
"ajv": "^6.12.2",
"ajv-keywords": "^3.4.1"
},
"engines": {
"node": ">= 8.9.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/webpack"
}
},
"node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": {
"version": "1.1.3",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/form-data": {
"version": "4.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
"mime-types": "^2.1.12"
},
"engines": {
"node": ">= 6"
}
},
"node_modules/forwarded": {
"version": "0.2.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/fraction.js": {
"version": "4.3.7",
"dev": true,
"license": "MIT",
"engines": {
"node": "*"
},
"funding": {
"type": "patreon",
"url": "https://github.com/sponsors/rawify"
}
},
"node_modules/fresh": {
"version": "0.5.2",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/fs-extra": {
"version": "10.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"graceful-fs": "^4.2.0",
"jsonfile": "^6.0.1",
"universalify": "^2.0.0"
},
"engines": {
"node": ">=12"
}
},
"node_modules/fs-monkey": {
"version": "1.0.6",
"dev": true,
"license": "Unlicense"
},
"node_modules/fs.realpath": {
"version": "1.0.0",
"dev": true,
"license": "ISC"
},
"node_modules/function-bind": {
"version": "1.1.2",
"dev": true,
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/function.prototype.name": {
"version": "1.1.8",
"resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz",
"integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.8",
"call-bound": "^1.0.3",
"define-properties": "^1.2.1",
"functions-have-names": "^1.2.3",
"hasown": "^2.0.2",
"is-callable": "^1.2.7"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/functions-have-names": {
"version": "1.2.3",
"dev": true,
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/gensync": {
"version": "1.0.0-beta.2",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/get-caller-file": {
"version": "2.0.5",
"dev": true,
"license": "ISC",
"engines": {
"node": "6.* || 8.* || >= 10.*"
}
},
"node_modules/get-intrinsic": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
"integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bind-apply-helpers": "^1.0.2",
"es-define-property": "^1.0.1",
"es-errors": "^1.3.0",
"es-object-atoms": "^1.1.1",
"function-bind": "^1.1.2",
"get-proto": "^1.0.1",
"gopd": "^1.2.0",
"has-symbols": "^1.1.0",
"hasown": "^2.0.2",
"math-intrinsics": "^1.1.0"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/get-own-enumerable-property-symbols": {
"version": "3.0.2",
"dev": true,
"license": "ISC"
},
"node_modules/get-package-type": {
"version": "0.1.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8.0.0"
}
},
"node_modules/get-proto": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
"integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
"dev": true,
"license": "MIT",
"dependencies": {
"dunder-proto": "^1.0.1",
"es-object-atoms": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/get-stream": {
"version": "6.0.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/get-symbol-description": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz",
"integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.3",
"es-errors": "^1.3.0",
"get-intrinsic": "^1.2.6"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/glob": {
"version": "7.2.3",
"dev": true,
"license": "ISC",
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.1.1",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
},
"engines": {
"node": "*"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/glob-parent": {
"version": "6.0.2",
"dev": true,
"license": "ISC",
"dependencies": {
"is-glob": "^4.0.3"
},
"engines": {
"node": ">=10.13.0"
}
},
"node_modules/glob-to-regexp": {
"version": "0.4.1",
"dev": true,
"license": "BSD-2-Clause"
},
"node_modules/global-modules": {
"version": "2.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"global-prefix": "^3.0.0"
},
"engines": {
"node": ">=6"
}
},
"node_modules/global-prefix": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"ini": "^1.3.5",
"kind-of": "^6.0.2",
"which": "^1.3.1"
},
"engines": {
"node": ">=6"
}
},
"node_modules/global-prefix/node_modules/which": {
"version": "1.3.1",
"dev": true,
"license": "ISC",
"dependencies": {
"isexe": "^2.0.0"
},
"bin": {
"which": "bin/which"
}
},
"node_modules/globals": {
"version": "11.12.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/globalthis": {
"version": "1.0.4",
"dev": true,
"license": "MIT",
"dependencies": {
"define-properties": "^1.2.1",
"gopd": "^1.0.1"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/globby": {
"version": "11.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"array-union": "^2.1.0",
"dir-glob": "^3.0.1",
"fast-glob": "^3.2.9",
"ignore": "^5.2.0",
"merge2": "^1.4.1",
"slash": "^3.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/gopd": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
"integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/graceful-fs": {
"version": "4.2.11",
"dev": true,
"license": "ISC"
},
"node_modules/graphemer": {
"version": "1.4.0",
"dev": true,
"license": "MIT",
"optional": true,
"peer": true
},
"node_modules/gzip-size": {
"version": "6.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"duplexer": "^0.1.2"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/handle-thing": {
"version": "2.0.1",
"dev": true,
"license": "MIT"
},
"node_modules/harmony-reflect": {
"version": "1.6.2",
"dev": true,
"license": "(Apache-2.0 OR MPL-1.1)"
},
"node_modules/has-bigints": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz",
"integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/has-flag": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/has-property-descriptors": {
"version": "1.0.2",
"dev": true,
"license": "MIT",
"dependencies": {
"es-define-property": "^1.0.0"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/has-proto": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz",
"integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"dunder-proto": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/has-symbols": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
"integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/has-tostringtag": {
"version": "1.0.2",
"dev": true,
"license": "MIT",
"dependencies": {
"has-symbols": "^1.0.3"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/hash-base": {
"version": "3.0.4",
"dev": true,
"license": "MIT",
"dependencies": {
"inherits": "^2.0.1",
"safe-buffer": "^5.0.1"
},
"engines": {
"node": ">=4"
}
},
"node_modules/hash.js": {
"version": "1.1.7",
"dev": true,
"license": "MIT",
"dependencies": {
"inherits": "^2.0.3",
"minimalistic-assert": "^1.0.1"
}
},
"node_modules/hasown": {
"version": "2.0.2",
"dev": true,
"license": "MIT",
"dependencies": {
"function-bind": "^1.1.2"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/he": {
"version": "1.2.0",
"dev": true,
"license": "MIT",
"bin": {
"he": "bin/he"
}
},
"node_modules/hmac-drbg": {
"version": "1.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"hash.js": "^1.0.3",
"minimalistic-assert": "^1.0.0",
"minimalistic-crypto-utils": "^1.0.1"
}
},
"node_modules/hoist-non-react-statics": {
"version": "3.3.2",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"react-is": "^16.7.0"
}
},
"node_modules/hoopy": {
"version": "0.1.4",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 6.0.0"
}
},
"node_modules/hpack.js": {
"version": "2.1.6",
"dev": true,
"license": "MIT",
"dependencies": {
"inherits": "^2.0.1",
"obuf": "^1.0.0",
"readable-stream": "^2.0.1",
"wbuf": "^1.1.0"
}
},
"node_modules/html-encoding-sniffer": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"whatwg-encoding": "^2.0.0"
},
"engines": {
"node": ">=12"
}
},
"node_modules/html-entities": {
"version": "2.5.2",
"dev": true,
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/mdevils"
},
{
"type": "patreon",
"url": "https://patreon.com/mdevils"
}
],
"license": "MIT"
},
"node_modules/html-escaper": {
"version": "2.0.2",
"dev": true,
"license": "MIT"
},
"node_modules/html-minifier-terser": {
"version": "6.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"camel-case": "^4.1.2",
"clean-css": "^5.2.2",
"commander": "^8.3.0",
"he": "^1.2.0",
"param-case": "^3.0.4",
"relateurl": "^0.2.7",
"terser": "^5.10.0"
},
"bin": {
"html-minifier-terser": "cli.js"
},
"engines": {
"node": ">=12"
}
},
"node_modules/html-webpack-plugin": {
"version": "5.6.3",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/html-minifier-terser": "^6.0.0",
"html-minifier-terser": "^6.0.2",
"lodash": "^4.17.21",
"pretty-error": "^4.0.0",
"tapable": "^2.0.0"
},
"engines": {
"node": ">=10.13.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/html-webpack-plugin"
},
"peerDependencies": {
"@rspack/core": "0.x || 1.x",
"webpack": "^5.20.0"
},
"peerDependenciesMeta": {
"@rspack/core": {
"optional": true
},
"webpack": {
"optional": true
}
}
},
"node_modules/htmlparser2": {
"version": "6.1.0",
"dev": true,
"funding": [
"https://github.com/fb55/htmlparser2?sponsor=1",
{
"type": "github",
"url": "https://github.com/sponsors/fb55"
}
],
"license": "MIT",
"dependencies": {
"domelementtype": "^2.0.1",
"domhandler": "^4.0.0",
"domutils": "^2.5.2",
"entities": "^2.0.0"
}
},
"node_modules/htmlparser2/node_modules/entities": {
"version": "2.2.0",
"dev": true,
"license": "BSD-2-Clause",
"funding": {
"url": "https://github.com/fb55/entities?sponsor=1"
}
},
"node_modules/http-deceiver": {
"version": "1.2.7",
"dev": true,
"license": "MIT"
},
"node_modules/http-errors": {
"version": "2.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"depd": "2.0.0",
"inherits": "2.0.4",
"setprototypeof": "1.2.0",
"statuses": "2.0.1",
"toidentifier": "1.0.1"
},
"engines": {
"node": ">= 0.8"
}
},
"node_modules/http-parser-js": {
"version": "0.5.8",
"dev": true,
"license": "MIT"
},
"node_modules/http-proxy": {
"version": "1.18.1",
"dev": true,
"license": "MIT",
"dependencies": {
"eventemitter3": "^4.0.0",
"follow-redirects": "^1.0.0",
"requires-port": "^1.0.0"
},
"engines": {
"node": ">=8.0.0"
}
},
"node_modules/http-proxy-agent": {
"version": "5.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@tootallnate/once": "2",
"agent-base": "6",
"debug": "4"
},
"engines": {
"node": ">= 6"
}
},
"node_modules/http-proxy-middleware": {
"version": "2.0.7",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/http-proxy": "^1.17.8",
"http-proxy": "^1.18.1",
"is-glob": "^4.0.1",
"is-plain-obj": "^3.0.0",
"micromatch": "^4.0.2"
},
"engines": {
"node": ">=12.0.0"
},
"peerDependencies": {
"@types/express": "^4.17.13"
},
"peerDependenciesMeta": {
"@types/express": {
"optional": true
}
}
},
"node_modules/https-browserify": {
"version": "1.0.0",
"dev": true,
"license": "MIT"
},
"node_modules/https-proxy-agent": {
"version": "5.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"agent-base": "6",
"debug": "4"
},
"engines": {
"node": ">= 6"
}
},
"node_modules/human-signals": {
"version": "2.1.0",
"dev": true,
"license": "Apache-2.0",
"engines": {
"node": ">=10.17.0"
}
},
"node_modules/iconv-lite": {
"version": "0.6.3",
"dev": true,
"license": "MIT",
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3.0.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/icss-utils": {
"version": "5.1.0",
"dev": true,
"license": "ISC",
"engines": {
"node": "^10 || ^12 || >= 14"
},
"peerDependencies": {
"postcss": "^8.1.0"
}
},
"node_modules/idb": {
"version": "7.1.1",
"dev": true,
"license": "ISC"
},
"node_modules/identity-obj-proxy": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"harmony-reflect": "^1.4.6"
},
"engines": {
"node": ">=4"
}
},
"node_modules/ieee754": {
"version": "1.2.1",
"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"
}
],
"license": "BSD-3-Clause"
},
"node_modules/ignore": {
"version": "5.3.2",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 4"
}
},
"node_modules/immediate": {
"version": "3.0.6",
"license": "MIT"
},
"node_modules/immer": {
"version": "9.0.21",
"dev": true,
"license": "MIT",
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/immer"
}
},
"node_modules/import-fresh": {
"version": "3.3.0",
"dev": true,
"license": "MIT",
"dependencies": {
"parent-module": "^1.0.0",
"resolve-from": "^4.0.0"
},
"engines": {
"node": ">=6"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/import-fresh/node_modules/resolve-from": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/import-local": {
"version": "3.2.0",
"dev": true,
"license": "MIT",
"dependencies": {
"pkg-dir": "^4.2.0",
"resolve-cwd": "^3.0.0"
},
"bin": {
"import-local-fixture": "fixtures/cli.js"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/imurmurhash": {
"version": "0.1.4",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.8.19"
}
},
"node_modules/indent-string": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/inflight": {
"version": "1.0.6",
"dev": true,
"license": "ISC",
"dependencies": {
"once": "^1.3.0",
"wrappy": "1"
}
},
"node_modules/inherits": {
"version": "2.0.4",
"dev": true,
"license": "ISC"
},
"node_modules/ini": {
"version": "1.3.8",
"dev": true,
"license": "ISC"
},
"node_modules/internal-slot": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz",
"integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==",
"dev": true,
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0",
"hasown": "^2.0.2",
"side-channel": "^1.1.0"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/ipaddr.js": {
"version": "2.2.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 10"
}
},
"node_modules/is-arguments": {
"version": "1.1.1",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.2",
"has-tostringtag": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-array-buffer": {
"version": "3.0.5",
"resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz",
"integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.8",
"call-bound": "^1.0.3",
"get-intrinsic": "^1.2.6"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-arrayish": {
"version": "0.2.1",
"dev": true,
"license": "MIT"
},
"node_modules/is-async-function": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz",
"integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"async-function": "^1.0.0",
"call-bound": "^1.0.3",
"get-proto": "^1.0.1",
"has-tostringtag": "^1.0.2",
"safe-regex-test": "^1.1.0"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-bigint": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz",
"integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"has-bigints": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-binary-path": {
"version": "2.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"binary-extensions": "^2.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/is-boolean-object": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz",
"integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.3",
"has-tostringtag": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-callable": {
"version": "1.2.7",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-core-module": {
"version": "2.15.1",
"dev": true,
"license": "MIT",
"dependencies": {
"hasown": "^2.0.2"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-data-view": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz",
"integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.2",
"get-intrinsic": "^1.2.6",
"is-typed-array": "^1.1.13"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-date-object": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz",
"integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.2",
"has-tostringtag": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-docker": {
"version": "2.2.1",
"dev": true,
"license": "MIT",
"bin": {
"is-docker": "cli.js"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/is-extglob": {
"version": "2.1.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/is-finalizationregistry": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz",
"integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.3"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-fullwidth-code-point": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/is-generator-fn": {
"version": "2.1.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/is-generator-function": {
"version": "1.0.10",
"dev": true,
"license": "MIT",
"dependencies": {
"has-tostringtag": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-glob": {
"version": "4.0.3",
"dev": true,
"license": "MIT",
"dependencies": {
"is-extglob": "^2.1.1"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/is-map": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
"integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-module": {
"version": "1.0.0",
"dev": true,
"license": "MIT"
},
"node_modules/is-nan": {
"version": "1.3.2",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.0",
"define-properties": "^1.1.3"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-number": {
"version": "7.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.12.0"
}
},
"node_modules/is-number-object": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz",
"integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.3",
"has-tostringtag": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-obj": {
"version": "1.0.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/is-path-inside": {
"version": "3.0.3",
"dev": true,
"license": "MIT",
"optional": true,
"peer": true,
"engines": {
"node": ">=8"
}
},
"node_modules/is-plain-obj": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/is-potential-custom-element-name": {
"version": "1.0.1",
"dev": true,
"license": "MIT"
},
"node_modules/is-regex": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz",
"integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.2",
"gopd": "^1.2.0",
"has-tostringtag": "^1.0.2",
"hasown": "^2.0.2"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-regexp": {
"version": "1.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/is-root": {
"version": "2.1.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/is-set": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz",
"integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-shared-array-buffer": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz",
"integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.3"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-stream": {
"version": "2.0.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/is-string": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz",
"integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.3",
"has-tostringtag": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-symbol": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz",
"integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.2",
"has-symbols": "^1.1.0",
"safe-regex-test": "^1.1.0"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-typed-array": {
"version": "1.1.15",
"resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz",
"integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"which-typed-array": "^1.1.16"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-weakmap": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz",
"integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-weakref": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz",
"integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.3"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-weakset": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz",
"integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.3",
"get-intrinsic": "^1.2.6"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-what": {
"version": "3.14.1",
"dev": true,
"license": "MIT"
},
"node_modules/is-wsl": {
"version": "2.2.0",
"dev": true,
"license": "MIT",
"dependencies": {
"is-docker": "^2.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/isarray": {
"version": "1.0.0",
"dev": true,
"license": "MIT"
},
"node_modules/isexe": {
"version": "2.0.0",
"dev": true,
"license": "ISC"
},
"node_modules/istanbul-lib-coverage": {
"version": "3.2.2",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": ">=8"
}
},
"node_modules/istanbul-lib-instrument": {
"version": "5.2.1",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"@babel/core": "^7.12.3",
"@babel/parser": "^7.14.7",
"@istanbuljs/schema": "^0.1.2",
"istanbul-lib-coverage": "^3.2.0",
"semver": "^6.3.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/istanbul-lib-instrument/node_modules/semver": {
"version": "6.3.1",
"dev": true,
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
}
},
"node_modules/istanbul-lib-report": {
"version": "3.0.1",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"istanbul-lib-coverage": "^3.0.0",
"make-dir": "^4.0.0",
"supports-color": "^7.1.0"
},
"engines": {
"node": ">=10"
}
},
"node_modules/istanbul-lib-report/node_modules/make-dir": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"semver": "^7.5.3"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/istanbul-lib-source-maps": {
"version": "4.0.1",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"debug": "^4.1.1",
"istanbul-lib-coverage": "^3.0.0",
"source-map": "^0.6.1"
},
"engines": {
"node": ">=10"
}
},
"node_modules/istanbul-lib-source-maps/node_modules/source-map": {
"version": "0.6.1",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/istanbul-reports": {
"version": "3.1.7",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"html-escaper": "^2.0.0",
"istanbul-lib-report": "^3.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/jackspeak": {
"version": "3.4.3",
"dev": true,
"license": "BlueOak-1.0.0",
"dependencies": {
"@isaacs/cliui": "^8.0.2"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
},
"optionalDependencies": {
"@pkgjs/parseargs": "^0.11.0"
}
},
"node_modules/jake": {
"version": "10.9.2",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"async": "^3.2.3",
"chalk": "^4.0.2",
"filelist": "^1.0.4",
"minimatch": "^3.1.2"
},
"bin": {
"jake": "bin/cli.js"
},
"engines": {
"node": ">=10"
}
},
"node_modules/jest": {
"version": "29.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@jest/core": "^29.7.0",
"@jest/types": "^29.6.3",
"import-local": "^3.0.2",
"jest-cli": "^29.7.0"
},
"bin": {
"jest": "bin/jest.js"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
},
"peerDependencies": {
"node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
},
"peerDependenciesMeta": {
"node-notifier": {
"optional": true
}
}
},
"node_modules/jest-canvas-mock": {
"version": "2.5.2",
"dev": true,
"license": "MIT",
"dependencies": {
"cssfontparser": "^1.2.1",
"moo-color": "^1.0.2"
}
},
"node_modules/jest-changed-files": {
"version": "29.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"execa": "^5.0.0",
"jest-util": "^29.7.0",
"p-limit": "^3.1.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-circus": {
"version": "29.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@jest/environment": "^29.7.0",
"@jest/expect": "^29.7.0",
"@jest/test-result": "^29.7.0",
"@jest/types": "^29.6.3",
"@types/node": "*",
"chalk": "^4.0.0",
"co": "^4.6.0",
"dedent": "^1.0.0",
"is-generator-fn": "^2.0.0",
"jest-each": "^29.7.0",
"jest-matcher-utils": "^29.7.0",
"jest-message-util": "^29.7.0",
"jest-runtime": "^29.7.0",
"jest-snapshot": "^29.7.0",
"jest-util": "^29.7.0",
"p-limit": "^3.1.0",
"pretty-format": "^29.7.0",
"pure-rand": "^6.0.0",
"slash": "^3.0.0",
"stack-utils": "^2.0.3"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-circus/node_modules/ansi-styles": {
"version": "5.2.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/jest-circus/node_modules/pretty-format": {
"version": "29.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@jest/schemas": "^29.6.3",
"ansi-styles": "^5.0.0",
"react-is": "^18.0.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-circus/node_modules/react-is": {
"version": "18.3.1",
"dev": true,
"license": "MIT"
},
"node_modules/jest-cli": {
"version": "29.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@jest/core": "^29.7.0",
"@jest/test-result": "^29.7.0",
"@jest/types": "^29.6.3",
"chalk": "^4.0.0",
"create-jest": "^29.7.0",
"exit": "^0.1.2",
"import-local": "^3.0.2",
"jest-config": "^29.7.0",
"jest-util": "^29.7.0",
"jest-validate": "^29.7.0",
"yargs": "^17.3.1"
},
"bin": {
"jest": "bin/jest.js"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
},
"peerDependencies": {
"node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
},
"peerDependenciesMeta": {
"node-notifier": {
"optional": true
}
}
},
"node_modules/jest-config": {
"version": "29.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/core": "^7.11.6",
"@jest/test-sequencer": "^29.7.0",
"@jest/types": "^29.6.3",
"babel-jest": "^29.7.0",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
"deepmerge": "^4.2.2",
"glob": "^7.1.3",
"graceful-fs": "^4.2.9",
"jest-circus": "^29.7.0",
"jest-environment-node": "^29.7.0",
"jest-get-type": "^29.6.3",
"jest-regex-util": "^29.6.3",
"jest-resolve": "^29.7.0",
"jest-runner": "^29.7.0",
"jest-util": "^29.7.0",
"jest-validate": "^29.7.0",
"micromatch": "^4.0.4",
"parse-json": "^5.2.0",
"pretty-format": "^29.7.0",
"slash": "^3.0.0",
"strip-json-comments": "^3.1.1"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
},
"peerDependencies": {
"@types/node": "*",
"ts-node": ">=9.0.0"
},
"peerDependenciesMeta": {
"@types/node": {
"optional": true
},
"ts-node": {
"optional": true
}
}
},
"node_modules/jest-config/node_modules/ansi-styles": {
"version": "5.2.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/jest-config/node_modules/pretty-format": {
"version": "29.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@jest/schemas": "^29.6.3",
"ansi-styles": "^5.0.0",
"react-is": "^18.0.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-config/node_modules/react-is": {
"version": "18.3.1",
"dev": true,
"license": "MIT"
},
"node_modules/jest-diff": {
"version": "29.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"chalk": "^4.0.0",
"diff-sequences": "^29.6.3",
"jest-get-type": "^29.6.3",
"pretty-format": "^29.7.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-diff/node_modules/ansi-styles": {
"version": "5.2.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/jest-diff/node_modules/pretty-format": {
"version": "29.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@jest/schemas": "^29.6.3",
"ansi-styles": "^5.0.0",
"react-is": "^18.0.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-diff/node_modules/react-is": {
"version": "18.3.1",
"dev": true,
"license": "MIT"
},
"node_modules/jest-docblock": {
"version": "29.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"detect-newline": "^3.0.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-each": {
"version": "29.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@jest/types": "^29.6.3",
"chalk": "^4.0.0",
"jest-get-type": "^29.6.3",
"jest-util": "^29.7.0",
"pretty-format": "^29.7.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-each/node_modules/ansi-styles": {
"version": "5.2.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/jest-each/node_modules/pretty-format": {
"version": "29.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@jest/schemas": "^29.6.3",
"ansi-styles": "^5.0.0",
"react-is": "^18.0.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-each/node_modules/react-is": {
"version": "18.3.1",
"dev": true,
"license": "MIT"
},
"node_modules/jest-environment-jsdom": {
"version": "29.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@jest/environment": "^29.7.0",
"@jest/fake-timers": "^29.7.0",
"@jest/types": "^29.6.3",
"@types/jsdom": "^20.0.0",
"@types/node": "*",
"jest-mock": "^29.7.0",
"jest-util": "^29.7.0",
"jsdom": "^20.0.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
},
"peerDependencies": {
"canvas": "^2.5.0"
},
"peerDependenciesMeta": {
"canvas": {
"optional": true
}
}
},
"node_modules/jest-environment-node": {
"version": "29.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@jest/environment": "^29.7.0",
"@jest/fake-timers": "^29.7.0",
"@jest/types": "^29.6.3",
"@types/node": "*",
"jest-mock": "^29.7.0",
"jest-util": "^29.7.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-get-type": {
"version": "29.6.3",
"dev": true,
"license": "MIT",
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-haste-map": {
"version": "29.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@jest/types": "^29.6.3",
"@types/graceful-fs": "^4.1.3",
"@types/node": "*",
"anymatch": "^3.0.3",
"fb-watchman": "^2.0.0",
"graceful-fs": "^4.2.9",
"jest-regex-util": "^29.6.3",
"jest-util": "^29.7.0",
"jest-worker": "^29.7.0",
"micromatch": "^4.0.4",
"walker": "^1.0.8"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
},
"optionalDependencies": {
"fsevents": "^2.3.2"
}
},
"node_modules/jest-haste-map/node_modules/jest-worker": {
"version": "29.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/node": "*",
"jest-util": "^29.7.0",
"merge-stream": "^2.0.0",
"supports-color": "^8.0.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-haste-map/node_modules/supports-color": {
"version": "8.1.1",
"dev": true,
"license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/supports-color?sponsor=1"
}
},
"node_modules/jest-junit": {
"version": "16.0.0",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"mkdirp": "^1.0.4",
"strip-ansi": "^6.0.1",
"uuid": "^8.3.2",
"xml": "^1.0.1"
},
"engines": {
"node": ">=10.12.0"
}
},
"node_modules/jest-leak-detector": {
"version": "29.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"jest-get-type": "^29.6.3",
"pretty-format": "^29.7.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-leak-detector/node_modules/ansi-styles": {
"version": "5.2.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/jest-leak-detector/node_modules/pretty-format": {
"version": "29.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@jest/schemas": "^29.6.3",
"ansi-styles": "^5.0.0",
"react-is": "^18.0.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-leak-detector/node_modules/react-is": {
"version": "18.3.1",
"dev": true,
"license": "MIT"
},
"node_modules/jest-matcher-utils": {
"version": "29.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"chalk": "^4.0.0",
"jest-diff": "^29.7.0",
"jest-get-type": "^29.6.3",
"pretty-format": "^29.7.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-matcher-utils/node_modules/ansi-styles": {
"version": "5.2.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/jest-matcher-utils/node_modules/pretty-format": {
"version": "29.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@jest/schemas": "^29.6.3",
"ansi-styles": "^5.0.0",
"react-is": "^18.0.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-matcher-utils/node_modules/react-is": {
"version": "18.3.1",
"dev": true,
"license": "MIT"
},
"node_modules/jest-message-util": {
"version": "29.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.12.13",
"@jest/types": "^29.6.3",
"@types/stack-utils": "^2.0.0",
"chalk": "^4.0.0",
"graceful-fs": "^4.2.9",
"micromatch": "^4.0.4",
"pretty-format": "^29.7.0",
"slash": "^3.0.0",
"stack-utils": "^2.0.3"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-message-util/node_modules/ansi-styles": {
"version": "5.2.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/jest-message-util/node_modules/pretty-format": {
"version": "29.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@jest/schemas": "^29.6.3",
"ansi-styles": "^5.0.0",
"react-is": "^18.0.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-message-util/node_modules/react-is": {
"version": "18.3.1",
"dev": true,
"license": "MIT"
},
"node_modules/jest-mock": {
"version": "29.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@jest/types": "^29.6.3",
"@types/node": "*",
"jest-util": "^29.7.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-pnp-resolver": {
"version": "1.2.3",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
},
"peerDependencies": {
"jest-resolve": "*"
},
"peerDependenciesMeta": {
"jest-resolve": {
"optional": true
}
}
},
"node_modules/jest-regex-util": {
"version": "29.6.3",
"dev": true,
"license": "MIT",
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-resolve": {
"version": "29.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"chalk": "^4.0.0",
"graceful-fs": "^4.2.9",
"jest-haste-map": "^29.7.0",
"jest-pnp-resolver": "^1.2.2",
"jest-util": "^29.7.0",
"jest-validate": "^29.7.0",
"resolve": "^1.20.0",
"resolve.exports": "^2.0.0",
"slash": "^3.0.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-resolve-dependencies": {
"version": "29.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"jest-regex-util": "^29.6.3",
"jest-snapshot": "^29.7.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-runner": {
"version": "29.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@jest/console": "^29.7.0",
"@jest/environment": "^29.7.0",
"@jest/test-result": "^29.7.0",
"@jest/transform": "^29.7.0",
"@jest/types": "^29.6.3",
"@types/node": "*",
"chalk": "^4.0.0",
"emittery": "^0.13.1",
"graceful-fs": "^4.2.9",
"jest-docblock": "^29.7.0",
"jest-environment-node": "^29.7.0",
"jest-haste-map": "^29.7.0",
"jest-leak-detector": "^29.7.0",
"jest-message-util": "^29.7.0",
"jest-resolve": "^29.7.0",
"jest-runtime": "^29.7.0",
"jest-util": "^29.7.0",
"jest-watcher": "^29.7.0",
"jest-worker": "^29.7.0",
"p-limit": "^3.1.0",
"source-map-support": "0.5.13"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-runner/node_modules/jest-worker": {
"version": "29.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/node": "*",
"jest-util": "^29.7.0",
"merge-stream": "^2.0.0",
"supports-color": "^8.0.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-runner/node_modules/supports-color": {
"version": "8.1.1",
"dev": true,
"license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/supports-color?sponsor=1"
}
},
"node_modules/jest-runtime": {
"version": "29.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@jest/environment": "^29.7.0",
"@jest/fake-timers": "^29.7.0",
"@jest/globals": "^29.7.0",
"@jest/source-map": "^29.6.3",
"@jest/test-result": "^29.7.0",
"@jest/transform": "^29.7.0",
"@jest/types": "^29.6.3",
"@types/node": "*",
"chalk": "^4.0.0",
"cjs-module-lexer": "^1.0.0",
"collect-v8-coverage": "^1.0.0",
"glob": "^7.1.3",
"graceful-fs": "^4.2.9",
"jest-haste-map": "^29.7.0",
"jest-message-util": "^29.7.0",
"jest-mock": "^29.7.0",
"jest-regex-util": "^29.6.3",
"jest-resolve": "^29.7.0",
"jest-snapshot": "^29.7.0",
"jest-util": "^29.7.0",
"slash": "^3.0.0",
"strip-bom": "^4.0.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-snapshot": {
"version": "29.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/core": "^7.11.6",
"@babel/generator": "^7.7.2",
"@babel/plugin-syntax-jsx": "^7.7.2",
"@babel/plugin-syntax-typescript": "^7.7.2",
"@babel/types": "^7.3.3",
"@jest/expect-utils": "^29.7.0",
"@jest/transform": "^29.7.0",
"@jest/types": "^29.6.3",
"babel-preset-current-node-syntax": "^1.0.0",
"chalk": "^4.0.0",
"expect": "^29.7.0",
"graceful-fs": "^4.2.9",
"jest-diff": "^29.7.0",
"jest-get-type": "^29.6.3",
"jest-matcher-utils": "^29.7.0",
"jest-message-util": "^29.7.0",
"jest-util": "^29.7.0",
"natural-compare": "^1.4.0",
"pretty-format": "^29.7.0",
"semver": "^7.5.3"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-snapshot/node_modules/ansi-styles": {
"version": "5.2.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/jest-snapshot/node_modules/pretty-format": {
"version": "29.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@jest/schemas": "^29.6.3",
"ansi-styles": "^5.0.0",
"react-is": "^18.0.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-snapshot/node_modules/react-is": {
"version": "18.3.1",
"dev": true,
"license": "MIT"
},
"node_modules/jest-util": {
"version": "29.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@jest/types": "^29.6.3",
"@types/node": "*",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
"graceful-fs": "^4.2.9",
"picomatch": "^2.2.3"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-validate": {
"version": "29.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@jest/types": "^29.6.3",
"camelcase": "^6.2.0",
"chalk": "^4.0.0",
"jest-get-type": "^29.6.3",
"leven": "^3.1.0",
"pretty-format": "^29.7.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-validate/node_modules/ansi-styles": {
"version": "5.2.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/jest-validate/node_modules/pretty-format": {
"version": "29.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@jest/schemas": "^29.6.3",
"ansi-styles": "^5.0.0",
"react-is": "^18.0.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-validate/node_modules/react-is": {
"version": "18.3.1",
"dev": true,
"license": "MIT"
},
"node_modules/jest-watch-typeahead": {
"version": "2.2.2",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-escapes": "^6.0.0",
"chalk": "^5.2.0",
"jest-regex-util": "^29.0.0",
"jest-watcher": "^29.0.0",
"slash": "^5.0.0",
"string-length": "^5.0.1",
"strip-ansi": "^7.0.1"
},
"engines": {
"node": "^14.17.0 || ^16.10.0 || >=18.0.0"
},
"peerDependencies": {
"jest": "^27.0.0 || ^28.0.0 || ^29.0.0"
}
},
"node_modules/jest-watch-typeahead/node_modules/ansi-escapes": {
"version": "6.2.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=14.16"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/jest-watch-typeahead/node_modules/ansi-regex": {
"version": "6.1.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/chalk/ansi-regex?sponsor=1"
}
},
"node_modules/jest-watch-typeahead/node_modules/chalk": {
"version": "5.3.0",
"dev": true,
"license": "MIT",
"engines": {
"node": "^12.17.0 || ^14.13 || >=16.0.0"
},
"funding": {
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
"node_modules/jest-watch-typeahead/node_modules/char-regex": {
"version": "2.0.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=12.20"
}
},
"node_modules/jest-watch-typeahead/node_modules/slash": {
"version": "5.1.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=14.16"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/jest-watch-typeahead/node_modules/string-length": {
"version": "5.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"char-regex": "^2.0.0",
"strip-ansi": "^7.0.1"
},
"engines": {
"node": ">=12.20"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/jest-watch-typeahead/node_modules/strip-ansi": {
"version": "7.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-regex": "^6.0.1"
},
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/chalk/strip-ansi?sponsor=1"
}
},
"node_modules/jest-watcher": {
"version": "29.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@jest/test-result": "^29.7.0",
"@jest/types": "^29.6.3",
"@types/node": "*",
"ansi-escapes": "^4.2.1",
"chalk": "^4.0.0",
"emittery": "^0.13.1",
"jest-util": "^29.7.0",
"string-length": "^4.0.1"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-when": {
"version": "3.6.0",
"dev": true,
"license": "MIT",
"peerDependencies": {
"jest": ">= 25"
}
},
"node_modules/jest-worker": {
"version": "27.5.1",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/node": "*",
"merge-stream": "^2.0.0",
"supports-color": "^8.0.0"
},
"engines": {
"node": ">= 10.13.0"
}
},
"node_modules/jest-worker/node_modules/supports-color": {
"version": "8.1.1",
"dev": true,
"license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/supports-color?sponsor=1"
}
},
"node_modules/jiti": {
"version": "1.21.6",
"dev": true,
"license": "MIT",
"bin": {
"jiti": "bin/jiti.js"
}
},
"node_modules/js-sha256": {
"version": "0.11.0",
"license": "MIT"
},
"node_modules/js-tokens": {
"version": "4.0.0",
"license": "MIT"
},
"node_modules/js-yaml": {
"version": "3.14.1",
"dev": true,
"license": "MIT",
"dependencies": {
"argparse": "^1.0.7",
"esprima": "^4.0.0"
},
"bin": {
"js-yaml": "bin/js-yaml.js"
}
},
"node_modules/jsdom": {
"version": "20.0.3",
"dev": true,
"license": "MIT",
"dependencies": {
"abab": "^2.0.6",
"acorn": "^8.8.1",
"acorn-globals": "^7.0.0",
"cssom": "^0.5.0",
"cssstyle": "^2.3.0",
"data-urls": "^3.0.2",
"decimal.js": "^10.4.2",
"domexception": "^4.0.0",
"escodegen": "^2.0.0",
"form-data": "^4.0.0",
"html-encoding-sniffer": "^3.0.0",
"http-proxy-agent": "^5.0.0",
"https-proxy-agent": "^5.0.1",
"is-potential-custom-element-name": "^1.0.1",
"nwsapi": "^2.2.2",
"parse5": "^7.1.1",
"saxes": "^6.0.0",
"symbol-tree": "^3.2.4",
"tough-cookie": "^4.1.2",
"w3c-xmlserializer": "^4.0.0",
"webidl-conversions": "^7.0.0",
"whatwg-encoding": "^2.0.0",
"whatwg-mimetype": "^3.0.0",
"whatwg-url": "^11.0.0",
"ws": "^8.11.0",
"xml-name-validator": "^4.0.0"
},
"engines": {
"node": ">=14"
},
"peerDependencies": {
"canvas": "^2.5.0"
},
"peerDependenciesMeta": {
"canvas": {
"optional": true
}
}
},
"node_modules/jsesc": {
"version": "3.0.2",
"dev": true,
"license": "MIT",
"bin": {
"jsesc": "bin/jsesc"
},
"engines": {
"node": ">=6"
}
},
"node_modules/json-buffer": {
"version": "3.0.1",
"dev": true,
"license": "MIT",
"optional": true,
"peer": true
},
"node_modules/json-parse-even-better-errors": {
"version": "2.3.1",
"dev": true,
"license": "MIT"
},
"node_modules/json-schema": {
"version": "0.4.0",
"dev": true,
"license": "(AFL-2.1 OR BSD-3-Clause)"
},
"node_modules/json-schema-traverse": {
"version": "0.4.1",
"dev": true,
"license": "MIT"
},
"node_modules/json-stable-stringify-without-jsonify": {
"version": "1.0.1",
"dev": true,
"license": "MIT",
"optional": true,
"peer": true
},
"node_modules/json5": {
"version": "2.2.3",
"dev": true,
"license": "MIT",
"bin": {
"json5": "lib/cli.js"
},
"engines": {
"node": ">=6"
}
},
"node_modules/jsonfile": {
"version": "6.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"universalify": "^2.0.0"
},
"optionalDependencies": {
"graceful-fs": "^4.1.6"
}
},
"node_modules/jsonpath": {
"version": "1.1.1",
"dev": true,
"license": "MIT",
"dependencies": {
"esprima": "1.2.2",
"static-eval": "2.0.2",
"underscore": "1.12.1"
}
},
"node_modules/jsonpath/node_modules/esprima": {
"version": "1.2.2",
"dev": true,
"bin": {
"esparse": "bin/esparse.js",
"esvalidate": "bin/esvalidate.js"
},
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/jsonpointer": {
"version": "5.0.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/keyv": {
"version": "4.5.4",
"dev": true,
"license": "MIT",
"optional": true,
"peer": true,
"dependencies": {
"json-buffer": "3.0.1"
}
},
"node_modules/kind-of": {
"version": "6.0.3",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/kleur": {
"version": "3.0.3",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/klona": {
"version": "2.0.6",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 8"
}
},
"node_modules/launch-editor": {
"version": "2.9.1",
"dev": true,
"license": "MIT",
"dependencies": {
"picocolors": "^1.0.0",
"shell-quote": "^1.8.1"
}
},
"node_modules/leven": {
"version": "3.1.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/levn": {
"version": "0.4.1",
"dev": true,
"license": "MIT",
"optional": true,
"peer": true,
"dependencies": {
"prelude-ls": "^1.2.1",
"type-check": "~0.4.0"
},
"engines": {
"node": ">= 0.8.0"
}
},
"node_modules/lie": {
"version": "3.1.1",
"license": "MIT",
"dependencies": {
"immediate": "~3.0.5"
}
},
"node_modules/lilconfig": {
"version": "2.1.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
}
},
"node_modules/lines-and-columns": {
"version": "1.2.4",
"dev": true,
"license": "MIT"
},
"node_modules/loader-runner": {
"version": "4.3.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.11.5"
}
},
"node_modules/loader-utils": {
"version": "2.0.4",
"dev": true,
"license": "MIT",
"dependencies": {
"big.js": "^5.2.2",
"emojis-list": "^3.0.0",
"json5": "^2.1.2"
},
"engines": {
"node": ">=8.9.0"
}
},
"node_modules/localforage": {
"version": "1.10.0",
"license": "Apache-2.0",
"dependencies": {
"lie": "3.1.1"
}
},
"node_modules/locate-path": {
"version": "5.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-locate": "^4.1.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/lodash": {
"version": "4.17.21",
"dev": true,
"license": "MIT"
},
"node_modules/lodash.debounce": {
"version": "4.0.8",
"dev": true,
"license": "MIT"
},
"node_modules/lodash.memoize": {
"version": "4.1.2",
"dev": true,
"license": "MIT"
},
"node_modules/lodash.merge": {
"version": "4.6.2",
"dev": true,
"license": "MIT",
"optional": true,
"peer": true
},
"node_modules/lodash.sortby": {
"version": "4.7.0",
"dev": true,
"license": "MIT"
},
"node_modules/lodash.uniq": {
"version": "4.5.0",
"dev": true,
"license": "MIT"
},
"node_modules/loose-envify": {
"version": "1.4.0",
"license": "MIT",
"dependencies": {
"js-tokens": "^3.0.0 || ^4.0.0"
},
"bin": {
"loose-envify": "cli.js"
}
},
"node_modules/lower-case": {
"version": "2.0.2",
"dev": true,
"license": "MIT",
"dependencies": {
"tslib": "^2.0.3"
}
},
"node_modules/lru-cache": {
"version": "5.1.1",
"dev": true,
"license": "ISC",
"dependencies": {
"yallist": "^3.0.2"
}
},
"node_modules/lz-string": {
"version": "1.5.0",
"dev": true,
"license": "MIT",
"peer": true,
"bin": {
"lz-string": "bin/bin.js"
}
},
"node_modules/magic-string": {
"version": "0.25.9",
"dev": true,
"license": "MIT",
"dependencies": {
"sourcemap-codec": "^1.4.8"
}
},
"node_modules/make-dir": {
"version": "3.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"semver": "^6.0.0"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/make-dir/node_modules/semver": {
"version": "6.3.1",
"dev": true,
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
}
},
"node_modules/makeerror": {
"version": "1.0.12",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"tmpl": "1.0.5"
}
},
"node_modules/math-intrinsics": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
"integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
}
},
"node_modules/md5.js": {
"version": "1.3.5",
"dev": true,
"license": "MIT",
"dependencies": {
"hash-base": "^3.0.0",
"inherits": "^2.0.1",
"safe-buffer": "^5.1.2"
}
},
"node_modules/mdn-data": {
"version": "2.0.14",
"dev": true,
"license": "CC0-1.0"
},
"node_modules/media-typer": {
"version": "0.3.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/memfs": {
"version": "3.5.3",
"dev": true,
"license": "Unlicense",
"dependencies": {
"fs-monkey": "^1.0.4"
},
"engines": {
"node": ">= 4.0.0"
}
},
"node_modules/memoize-one": {
"version": "5.2.1",
"dev": true,
"license": "MIT"
},
"node_modules/merge-anything": {
"version": "2.4.4",
"dev": true,
"license": "MIT",
"dependencies": {
"is-what": "^3.3.1"
}
},
"node_modules/merge-descriptors": {
"version": "1.0.3",
"dev": true,
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/merge-stream": {
"version": "2.0.0",
"dev": true,
"license": "MIT"
},
"node_modules/merge2": {
"version": "1.4.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 8"
}
},
"node_modules/methods": {
"version": "1.1.2",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/micromatch": {
"version": "4.0.8",
"dev": true,
"license": "MIT",
"dependencies": {
"braces": "^3.0.3",
"picomatch": "^2.3.1"
},
"engines": {
"node": ">=8.6"
}
},
"node_modules/miller-rabin": {
"version": "4.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"bn.js": "^4.0.0",
"brorand": "^1.0.1"
},
"bin": {
"miller-rabin": "bin/miller-rabin"
}
},
"node_modules/miller-rabin/node_modules/bn.js": {
"version": "4.12.0",
"dev": true,
"license": "MIT"
},
"node_modules/mime": {
"version": "1.6.0",
"dev": true,
"license": "MIT",
"bin": {
"mime": "cli.js"
},
"engines": {
"node": ">=4"
}
},
"node_modules/mime-db": {
"version": "1.52.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/mime-types": {
"version": "2.1.35",
"dev": true,
"license": "MIT",
"dependencies": {
"mime-db": "1.52.0"
},
"engines": {
"node": ">= 0.6"
}
},
"node_modules/mimic-fn": {
"version": "2.1.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/min-indent": {
"version": "1.0.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/mini-css-extract-plugin": {
"version": "2.9.2",
"dev": true,
"license": "MIT",
"dependencies": {
"schema-utils": "^4.0.0",
"tapable": "^2.2.1"
},
"engines": {
"node": ">= 12.13.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/webpack"
},
"peerDependencies": {
"webpack": "^5.0.0"
}
},
"node_modules/minimalistic-assert": {
"version": "1.0.1",
"dev": true,
"license": "ISC"
},
"node_modules/minimalistic-crypto-utils": {
"version": "1.0.1",
"dev": true,
"license": "MIT"
},
"node_modules/minimatch": {
"version": "3.1.2",
"dev": true,
"license": "ISC",
"dependencies": {
"brace-expansion": "^1.1.7"
},
"engines": {
"node": "*"
}
},
"node_modules/minipass": {
"version": "7.1.2",
"dev": true,
"license": "ISC",
"engines": {
"node": ">=16 || 14 >=14.17"
}
},
"node_modules/mkdirp": {
"version": "1.0.4",
"dev": true,
"license": "MIT",
"bin": {
"mkdirp": "bin/cmd.js"
},
"engines": {
"node": ">=10"
}
},
"node_modules/moo-color": {
"version": "1.0.3",
"dev": true,
"license": "MIT",
"dependencies": {
"color-name": "^1.1.4"
}
},
"node_modules/ms": {
"version": "2.1.3",
"dev": true,
"license": "MIT"
},
"node_modules/multicast-dns": {
"version": "7.2.5",
"dev": true,
"license": "MIT",
"dependencies": {
"dns-packet": "^5.2.2",
"thunky": "^1.0.2"
},
"bin": {
"multicast-dns": "cli.js"
}
},
"node_modules/mz": {
"version": "2.7.0",
"dev": true,
"license": "MIT",
"dependencies": {
"any-promise": "^1.0.0",
"object-assign": "^4.0.1",
"thenify-all": "^1.0.0"
}
},
"node_modules/nanoid": {
"version": "3.3.8",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz",
"integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==",
"dev": true,
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
"license": "MIT",
"bin": {
"nanoid": "bin/nanoid.cjs"
},
"engines": {
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
}
},
"node_modules/natural-compare": {
"version": "1.4.0",
"dev": true,
"license": "MIT"
},
"node_modules/negotiator": {
"version": "0.6.4",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/neo-async": {
"version": "2.6.2",
"dev": true,
"license": "MIT"
},
"node_modules/no-case": {
"version": "3.0.4",
"dev": true,
"license": "MIT",
"dependencies": {
"lower-case": "^2.0.2",
"tslib": "^2.0.3"
}
},
"node_modules/node-forge": {
"version": "1.3.1",
"dev": true,
"license": "(BSD-3-Clause OR GPL-2.0)",
"engines": {
"node": ">= 6.13.0"
}
},
"node_modules/node-int64": {
"version": "0.4.0",
"dev": true,
"license": "MIT"
},
"node_modules/node-polyfill-webpack-plugin": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"assert": "^2.1.0",
"browserify-zlib": "^0.2.0",
"buffer": "^6.0.3",
"console-browserify": "^1.2.0",
"constants-browserify": "^1.0.0",
"crypto-browserify": "^3.12.0",
"domain-browser": "^5.7.0",
"events": "^3.3.0",
"https-browserify": "^1.0.0",
"os-browserify": "^0.3.0",
"path-browserify": "^1.0.1",
"process": "^0.11.10",
"punycode": "^2.3.1",
"querystring-es3": "^0.2.1",
"readable-stream": "^4.5.2",
"stream-browserify": "^3.0.0",
"stream-http": "^3.2.0",
"string_decoder": "^1.3.0",
"timers-browserify": "^2.0.12",
"tty-browserify": "^0.0.1",
"type-fest": "^4.18.2",
"url": "^0.11.3",
"util": "^0.12.5",
"vm-browserify": "^1.1.2"
},
"engines": {
"node": ">=14"
},
"peerDependencies": {
"webpack": ">=5"
}
},
"node_modules/node-polyfill-webpack-plugin/node_modules/readable-stream": {
"version": "4.5.2",
"dev": true,
"license": "MIT",
"dependencies": {
"abort-controller": "^3.0.0",
"buffer": "^6.0.3",
"events": "^3.3.0",
"process": "^0.11.10",
"string_decoder": "^1.3.0"
},
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
}
},
"node_modules/node-polyfill-webpack-plugin/node_modules/type-fest": {
"version": "4.26.1",
"dev": true,
"license": "(MIT OR CC0-1.0)",
"engines": {
"node": ">=16"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/node-releases": {
"version": "2.0.18",
"dev": true,
"license": "MIT"
},
"node_modules/normalize-path": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/normalize-range": {
"version": "0.1.2",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/normalize-url": {
"version": "6.1.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/normalize-wheel": {
"version": "1.0.1",
"license": "BSD-3-Clause"
},
"node_modules/npm-run-path": {
"version": "4.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"path-key": "^3.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/nth-check": {
"version": "2.1.1",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
"boolbase": "^1.0.0"
},
"funding": {
"url": "https://github.com/fb55/nth-check?sponsor=1"
}
},
"node_modules/nwsapi": {
"version": "2.2.13",
"dev": true,
"license": "MIT"
},
"node_modules/object-assign": {
"version": "4.1.1",
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/object-hash": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 6"
}
},
"node_modules/object-inspect": {
"version": "1.13.4",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
"integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/object-is": {
"version": "1.1.6",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.7",
"define-properties": "^1.2.1"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/object-keys": {
"version": "1.1.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
}
},
"node_modules/object.assign": {
"version": "4.1.7",
"resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz",
"integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.8",
"call-bound": "^1.0.3",
"define-properties": "^1.2.1",
"es-object-atoms": "^1.0.0",
"has-symbols": "^1.1.0",
"object-keys": "^1.1.1"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/obuf": {
"version": "1.1.2",
"dev": true,
"license": "MIT"
},
"node_modules/on-finished": {
"version": "2.4.1",
"dev": true,
"license": "MIT",
"dependencies": {
"ee-first": "1.1.1"
},
"engines": {
"node": ">= 0.8"
}
},
"node_modules/on-headers": {
"version": "1.0.2",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.8"
}
},
"node_modules/once": {
"version": "1.4.0",
"dev": true,
"license": "ISC",
"dependencies": {
"wrappy": "1"
}
},
"node_modules/onetime": {
"version": "5.1.2",
"dev": true,
"license": "MIT",
"dependencies": {
"mimic-fn": "^2.1.0"
},
"engines": {
"node": ">=6"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/open": {
"version": "8.4.2",
"dev": true,
"license": "MIT",
"dependencies": {
"define-lazy-prop": "^2.0.0",
"is-docker": "^2.1.1",
"is-wsl": "^2.2.0"
},
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/optionator": {
"version": "0.9.4",
"dev": true,
"license": "MIT",
"optional": true,
"peer": true,
"dependencies": {
"deep-is": "^0.1.3",
"fast-levenshtein": "^2.0.6",
"levn": "^0.4.1",
"prelude-ls": "^1.2.1",
"type-check": "^0.4.0",
"word-wrap": "^1.2.5"
},
"engines": {
"node": ">= 0.8.0"
}
},
"node_modules/os-browserify": {
"version": "0.3.0",
"dev": true,
"license": "MIT"
},
"node_modules/own-keys": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz",
"integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==",
"dev": true,
"license": "MIT",
"dependencies": {
"get-intrinsic": "^1.2.6",
"object-keys": "^1.1.1",
"safe-push-apply": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/p-limit": {
"version": "3.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"yocto-queue": "^0.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/p-locate": {
"version": "4.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-limit": "^2.2.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/p-locate/node_modules/p-limit": {
"version": "2.3.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-try": "^2.0.0"
},
"engines": {
"node": ">=6"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/p-retry": {
"version": "4.6.2",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/retry": "0.12.0",
"retry": "^0.13.1"
},
"engines": {
"node": ">=8"
}
},
"node_modules/p-try": {
"version": "2.2.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/package-json-from-dist": {
"version": "1.0.1",
"dev": true,
"license": "BlueOak-1.0.0"
},
"node_modules/pako": {
"version": "1.0.11",
"dev": true,
"license": "(MIT AND Zlib)"
},
"node_modules/param-case": {
"version": "3.0.4",
"dev": true,
"license": "MIT",
"dependencies": {
"dot-case": "^3.0.4",
"tslib": "^2.0.3"
}
},
"node_modules/parent-module": {
"version": "1.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"callsites": "^3.0.0"
},
"engines": {
"node": ">=6"
}
},
"node_modules/parse-asn1": {
"version": "5.1.7",
"dev": true,
"license": "ISC",
"dependencies": {
"asn1.js": "^4.10.1",
"browserify-aes": "^1.2.0",
"evp_bytestokey": "^1.0.3",
"hash-base": "~3.0",
"pbkdf2": "^3.1.2",
"safe-buffer": "^5.2.1"
},
"engines": {
"node": ">= 0.10"
}
},
"node_modules/parse-json": {
"version": "5.2.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.0.0",
"error-ex": "^1.3.1",
"json-parse-even-better-errors": "^2.3.0",
"lines-and-columns": "^1.1.6"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/parse5": {
"version": "7.2.1",
"dev": true,
"license": "MIT",
"dependencies": {
"entities": "^4.5.0"
},
"funding": {
"url": "https://github.com/inikulin/parse5?sponsor=1"
}
},
"node_modules/parseurl": {
"version": "1.3.3",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.8"
}
},
"node_modules/pascal-case": {
"version": "3.1.2",
"dev": true,
"license": "MIT",
"dependencies": {
"no-case": "^3.0.4",
"tslib": "^2.0.3"
}
},
"node_modules/path-browserify": {
"version": "1.0.1",
"dev": true,
"license": "MIT"
},
"node_modules/path-exists": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/path-is-absolute": {
"version": "1.0.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/path-key": {
"version": "3.1.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/path-parse": {
"version": "1.0.7",
"dev": true,
"license": "MIT"
},
"node_modules/path-scurry": {
"version": "1.11.1",
"dev": true,
"license": "BlueOak-1.0.0",
"dependencies": {
"lru-cache": "^10.2.0",
"minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
},
"engines": {
"node": ">=16 || 14 >=14.18"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/path-scurry/node_modules/lru-cache": {
"version": "10.4.3",
"dev": true,
"license": "ISC"
},
"node_modules/path-to-regexp": {
"version": "0.1.12",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz",
"integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==",
"dev": true,
"license": "MIT"
},
"node_modules/path-type": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/pbkdf2": {
"version": "3.1.2",
"dev": true,
"license": "MIT",
"dependencies": {
"create-hash": "^1.1.2",
"create-hmac": "^1.1.4",
"ripemd160": "^2.0.1",
"safe-buffer": "^5.0.1",
"sha.js": "^2.4.8"
},
"engines": {
"node": ">=0.12"
}
},
"node_modules/performance-now": {
"version": "2.1.0",
"dev": true,
"license": "MIT"
},
"node_modules/picocolors": {
"version": "1.1.1",
"dev": true,
"license": "ISC"
},
"node_modules/picomatch": {
"version": "2.3.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8.6"
},
"funding": {
"url": "https://github.com/sponsors/jonschlinkert"
}
},
"node_modules/pify": {
"version": "2.3.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/pirates": {
"version": "4.0.6",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 6"
}
},
"node_modules/pkg-dir": {
"version": "4.2.0",
"dev": true,
"license": "MIT",
"dependencies": {
"find-up": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/pkg-up": {
"version": "3.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"find-up": "^3.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/pkg-up/node_modules/find-up": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"locate-path": "^3.0.0"
},
"engines": {
"node": ">=6"
}
},
"node_modules/pkg-up/node_modules/locate-path": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-locate": "^3.0.0",
"path-exists": "^3.0.0"
},
"engines": {
"node": ">=6"
}
},
"node_modules/pkg-up/node_modules/p-limit": {
"version": "2.3.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-try": "^2.0.0"
},
"engines": {
"node": ">=6"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/pkg-up/node_modules/p-locate": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-limit": "^2.0.0"
},
"engines": {
"node": ">=6"
}
},
"node_modules/pkg-up/node_modules/path-exists": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/possible-typed-array-names": {
"version": "1.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
}
},
"node_modules/postcss": {
"version": "8.4.47",
"dev": true,
"funding": [
{
"type": "opencollective",
"url": "https://opencollective.com/postcss/"
},
{
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/postcss"
},
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
"license": "MIT",
"dependencies": {
"nanoid": "^3.3.7",
"picocolors": "^1.1.0",
"source-map-js": "^1.2.1"
},
"engines": {
"node": "^10 || ^12 || >=14"
}
},
"node_modules/postcss-attribute-case-insensitive": {
"version": "5.0.2",
"dev": true,
"license": "MIT",
"dependencies": {
"postcss-selector-parser": "^6.0.10"
},
"engines": {
"node": "^12 || ^14 || >=16"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/csstools"
},
"peerDependencies": {
"postcss": "^8.2"
}
},
"node_modules/postcss-browser-comments": {
"version": "4.0.0",
"dev": true,
"license": "CC0-1.0",
"engines": {
"node": ">=8"
},
"peerDependencies": {
"browserslist": ">=4",
"postcss": ">=8"
}
},
"node_modules/postcss-calc": {
"version": "8.2.4",
"dev": true,
"license": "MIT",
"dependencies": {
"postcss-selector-parser": "^6.0.9",
"postcss-value-parser": "^4.2.0"
},
"peerDependencies": {
"postcss": "^8.2.2"
}
},
"node_modules/postcss-clamp": {
"version": "4.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
"engines": {
"node": ">=7.6.0"
},
"peerDependencies": {
"postcss": "^8.4.6"
}
},
"node_modules/postcss-color-functional-notation": {
"version": "4.2.4",
"dev": true,
"license": "CC0-1.0",
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
"engines": {
"node": "^12 || ^14 || >=16"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/csstools"
},
"peerDependencies": {
"postcss": "^8.2"
}
},
"node_modules/postcss-color-hex-alpha": {
"version": "8.0.4",
"dev": true,
"license": "MIT",
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
"engines": {
"node": "^12 || ^14 || >=16"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/csstools"
},
"peerDependencies": {
"postcss": "^8.4"
}
},
"node_modules/postcss-color-rebeccapurple": {
"version": "7.1.1",
"dev": true,
"license": "CC0-1.0",
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
"engines": {
"node": "^12 || ^14 || >=16"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/csstools"
},
"peerDependencies": {
"postcss": "^8.2"
}
},
"node_modules/postcss-colormin": {
"version": "5.3.1",
"dev": true,
"license": "MIT",
"dependencies": {
"browserslist": "^4.21.4",
"caniuse-api": "^3.0.0",
"colord": "^2.9.1",
"postcss-value-parser": "^4.2.0"
},
"engines": {
"node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
"postcss": "^8.2.15"
}
},
"node_modules/postcss-convert-values": {
"version": "5.1.3",
"dev": true,
"license": "MIT",
"dependencies": {
"browserslist": "^4.21.4",
"postcss-value-parser": "^4.2.0"
},
"engines": {
"node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
"postcss": "^8.2.15"
}
},
"node_modules/postcss-custom-media": {
"version": "8.0.2",
"dev": true,
"license": "MIT",
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
"engines": {
"node": "^12 || ^14 || >=16"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/csstools"
},
"peerDependencies": {
"postcss": "^8.3"
}
},
"node_modules/postcss-custom-properties": {
"version": "12.1.11",
"dev": true,
"license": "MIT",
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
"engines": {
"node": "^12 || ^14 || >=16"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/csstools"
},
"peerDependencies": {
"postcss": "^8.2"
}
},
"node_modules/postcss-custom-selectors": {
"version": "6.0.3",
"dev": true,
"license": "MIT",
"dependencies": {
"postcss-selector-parser": "^6.0.4"
},
"engines": {
"node": "^12 || ^14 || >=16"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/csstools"
},
"peerDependencies": {
"postcss": "^8.3"
}
},
"node_modules/postcss-dir-pseudo-class": {
"version": "6.0.5",
"dev": true,
"license": "CC0-1.0",
"dependencies": {
"postcss-selector-parser": "^6.0.10"
},
"engines": {
"node": "^12 || ^14 || >=16"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/csstools"
},
"peerDependencies": {
"postcss": "^8.2"
}
},
"node_modules/postcss-discard-comments": {
"version": "5.1.2",
"dev": true,
"license": "MIT",
"engines": {
"node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
"postcss": "^8.2.15"
}
},
"node_modules/postcss-discard-duplicates": {
"version": "5.1.0",
"dev": true,
"license": "MIT",
"engines": {
"node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
"postcss": "^8.2.15"
}
},
"node_modules/postcss-discard-empty": {
"version": "5.1.1",
"dev": true,
"license": "MIT",
"engines": {
"node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
"postcss": "^8.2.15"
}
},
"node_modules/postcss-discard-overridden": {
"version": "5.1.0",
"dev": true,
"license": "MIT",
"engines": {
"node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
"postcss": "^8.2.15"
}
},
"node_modules/postcss-double-position-gradients": {
"version": "3.1.2",
"dev": true,
"license": "CC0-1.0",
"dependencies": {
"@csstools/postcss-progressive-custom-properties": "^1.1.0",
"postcss-value-parser": "^4.2.0"
},
"engines": {
"node": "^12 || ^14 || >=16"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/csstools"
},
"peerDependencies": {
"postcss": "^8.2"
}
},
"node_modules/postcss-env-function": {
"version": "4.0.6",
"dev": true,
"license": "CC0-1.0",
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
"engines": {
"node": "^12 || ^14 || >=16"
},
"peerDependencies": {
"postcss": "^8.4"
}
},
"node_modules/postcss-flexbugs-fixes": {
"version": "5.0.2",
"dev": true,
"license": "MIT",
"peerDependencies": {
"postcss": "^8.1.4"
}
},
"node_modules/postcss-focus-visible": {
"version": "6.0.4",
"dev": true,
"license": "CC0-1.0",
"dependencies": {
"postcss-selector-parser": "^6.0.9"
},
"engines": {
"node": "^12 || ^14 || >=16"
},
"peerDependencies": {
"postcss": "^8.4"
}
},
"node_modules/postcss-focus-within": {
"version": "5.0.4",
"dev": true,
"license": "CC0-1.0",
"dependencies": {
"postcss-selector-parser": "^6.0.9"
},
"engines": {
"node": "^12 || ^14 || >=16"
},
"peerDependencies": {
"postcss": "^8.4"
}
},
"node_modules/postcss-font-variant": {
"version": "5.0.0",
"dev": true,
"license": "MIT",
"peerDependencies": {
"postcss": "^8.1.0"
}
},
"node_modules/postcss-gap-properties": {
"version": "3.0.5",
"dev": true,
"license": "CC0-1.0",
"engines": {
"node": "^12 || ^14 || >=16"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/csstools"
},
"peerDependencies": {
"postcss": "^8.2"
}
},
"node_modules/postcss-image-set-function": {
"version": "4.0.7",
"dev": true,
"license": "CC0-1.0",
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
"engines": {
"node": "^12 || ^14 || >=16"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/csstools"
},
"peerDependencies": {
"postcss": "^8.2"
}
},
"node_modules/postcss-import": {
"version": "15.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"postcss-value-parser": "^4.0.0",
"read-cache": "^1.0.0",
"resolve": "^1.1.7"
},
"engines": {
"node": ">=14.0.0"
},
"peerDependencies": {
"postcss": "^8.0.0"
}
},
"node_modules/postcss-initial": {
"version": "4.0.1",
"dev": true,
"license": "MIT",
"peerDependencies": {
"postcss": "^8.0.0"
}
},
"node_modules/postcss-js": {
"version": "4.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"camelcase-css": "^2.0.1"
},
"engines": {
"node": "^12 || ^14 || >= 16"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/postcss/"
},
"peerDependencies": {
"postcss": "^8.4.21"
}
},
"node_modules/postcss-lab-function": {
"version": "4.2.1",
"dev": true,
"license": "CC0-1.0",
"dependencies": {
"@csstools/postcss-progressive-custom-properties": "^1.1.0",
"postcss-value-parser": "^4.2.0"
},
"engines": {
"node": "^12 || ^14 || >=16"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/csstools"
},
"peerDependencies": {
"postcss": "^8.2"
}
},
"node_modules/postcss-load-config": {
"version": "4.0.2",
"dev": true,
"funding": [
{
"type": "opencollective",
"url": "https://opencollective.com/postcss/"
},
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
"license": "MIT",
"dependencies": {
"lilconfig": "^3.0.0",
"yaml": "^2.3.4"
},
"engines": {
"node": ">= 14"
},
"peerDependencies": {
"postcss": ">=8.0.9",
"ts-node": ">=9.0.0"
},
"peerDependenciesMeta": {
"postcss": {
"optional": true
},
"ts-node": {
"optional": true
}
}
},
"node_modules/postcss-load-config/node_modules/lilconfig": {
"version": "3.1.2",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=14"
},
"funding": {
"url": "https://github.com/sponsors/antonk52"
}
},
"node_modules/postcss-load-config/node_modules/yaml": {
"version": "2.6.0",
"dev": true,
"license": "ISC",
"bin": {
"yaml": "bin.mjs"
},
"engines": {
"node": ">= 14"
}
},
"node_modules/postcss-loader": {
"version": "6.2.1",
"dev": true,
"license": "MIT",
"dependencies": {
"cosmiconfig": "^7.0.0",
"klona": "^2.0.5",
"semver": "^7.3.5"
},
"engines": {
"node": ">= 12.13.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/webpack"
},
"peerDependencies": {
"postcss": "^7.0.0 || ^8.0.1",
"webpack": "^5.0.0"
}
},
"node_modules/postcss-logical": {
"version": "5.0.4",
"dev": true,
"license": "CC0-1.0",
"engines": {
"node": "^12 || ^14 || >=16"
},
"peerDependencies": {
"postcss": "^8.4"
}
},
"node_modules/postcss-media-minmax": {
"version": "5.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10.0.0"
},
"peerDependencies": {
"postcss": "^8.1.0"
}
},
"node_modules/postcss-merge-longhand": {
"version": "5.1.7",
"dev": true,
"license": "MIT",
"dependencies": {
"postcss-value-parser": "^4.2.0",
"stylehacks": "^5.1.1"
},
"engines": {
"node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
"postcss": "^8.2.15"
}
},
"node_modules/postcss-merge-rules": {
"version": "5.1.4",
"dev": true,
"license": "MIT",
"dependencies": {
"browserslist": "^4.21.4",
"caniuse-api": "^3.0.0",
"cssnano-utils": "^3.1.0",
"postcss-selector-parser": "^6.0.5"
},
"engines": {
"node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
"postcss": "^8.2.15"
}
},
"node_modules/postcss-minify-font-values": {
"version": "5.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
"engines": {
"node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
"postcss": "^8.2.15"
}
},
"node_modules/postcss-minify-gradients": {
"version": "5.1.1",
"dev": true,
"license": "MIT",
"dependencies": {
"colord": "^2.9.1",
"cssnano-utils": "^3.1.0",
"postcss-value-parser": "^4.2.0"
},
"engines": {
"node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
"postcss": "^8.2.15"
}
},
"node_modules/postcss-minify-params": {
"version": "5.1.4",
"dev": true,
"license": "MIT",
"dependencies": {
"browserslist": "^4.21.4",
"cssnano-utils": "^3.1.0",
"postcss-value-parser": "^4.2.0"
},
"engines": {
"node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
"postcss": "^8.2.15"
}
},
"node_modules/postcss-minify-selectors": {
"version": "5.2.1",
"dev": true,
"license": "MIT",
"dependencies": {
"postcss-selector-parser": "^6.0.5"
},
"engines": {
"node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
"postcss": "^8.2.15"
}
},
"node_modules/postcss-modules-extract-imports": {
"version": "3.1.0",
"dev": true,
"license": "ISC",
"engines": {
"node": "^10 || ^12 || >= 14"
},
"peerDependencies": {
"postcss": "^8.1.0"
}
},
"node_modules/postcss-modules-local-by-default": {
"version": "4.0.5",
"dev": true,
"license": "MIT",
"dependencies": {
"icss-utils": "^5.0.0",
"postcss-selector-parser": "^6.0.2",
"postcss-value-parser": "^4.1.0"
},
"engines": {
"node": "^10 || ^12 || >= 14"
},
"peerDependencies": {
"postcss": "^8.1.0"
}
},
"node_modules/postcss-modules-scope": {
"version": "3.2.0",
"dev": true,
"license": "ISC",
"dependencies": {
"postcss-selector-parser": "^6.0.4"
},
"engines": {
"node": "^10 || ^12 || >= 14"
},
"peerDependencies": {
"postcss": "^8.1.0"
}
},
"node_modules/postcss-modules-values": {
"version": "4.0.0",
"dev": true,
"license": "ISC",
"dependencies": {
"icss-utils": "^5.0.0"
},
"engines": {
"node": "^10 || ^12 || >= 14"
},
"peerDependencies": {
"postcss": "^8.1.0"
}
},
"node_modules/postcss-nested": {
"version": "6.2.0",
"dev": true,
"funding": [
{
"type": "opencollective",
"url": "https://opencollective.com/postcss/"
},
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
"license": "MIT",
"dependencies": {
"postcss-selector-parser": "^6.1.1"
},
"engines": {
"node": ">=12.0"
},
"peerDependencies": {
"postcss": "^8.2.14"
}
},
"node_modules/postcss-nesting": {
"version": "10.2.0",
"dev": true,
"license": "CC0-1.0",
"dependencies": {
"@csstools/selector-specificity": "^2.0.0",
"postcss-selector-parser": "^6.0.10"
},
"engines": {
"node": "^12 || ^14 || >=16"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/csstools"
},
"peerDependencies": {
"postcss": "^8.2"
}
},
"node_modules/postcss-normalize": {
"version": "10.0.1",
"dev": true,
"license": "CC0-1.0",
"dependencies": {
"@csstools/normalize.css": "*",
"postcss-browser-comments": "^4",
"sanitize.css": "*"
},
"engines": {
"node": ">= 12"
},
"peerDependencies": {
"browserslist": ">= 4",
"postcss": ">= 8"
}
},
"node_modules/postcss-normalize-charset": {
"version": "5.1.0",
"dev": true,
"license": "MIT",
"engines": {
"node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
"postcss": "^8.2.15"
}
},
"node_modules/postcss-normalize-display-values": {
"version": "5.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
"engines": {
"node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
"postcss": "^8.2.15"
}
},
"node_modules/postcss-normalize-positions": {
"version": "5.1.1",
"dev": true,
"license": "MIT",
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
"engines": {
"node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
"postcss": "^8.2.15"
}
},
"node_modules/postcss-normalize-repeat-style": {
"version": "5.1.1",
"dev": true,
"license": "MIT",
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
"engines": {
"node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
"postcss": "^8.2.15"
}
},
"node_modules/postcss-normalize-string": {
"version": "5.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
"engines": {
"node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
"postcss": "^8.2.15"
}
},
"node_modules/postcss-normalize-timing-functions": {
"version": "5.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
"engines": {
"node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
"postcss": "^8.2.15"
}
},
"node_modules/postcss-normalize-unicode": {
"version": "5.1.1",
"dev": true,
"license": "MIT",
"dependencies": {
"browserslist": "^4.21.4",
"postcss-value-parser": "^4.2.0"
},
"engines": {
"node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
"postcss": "^8.2.15"
}
},
"node_modules/postcss-normalize-url": {
"version": "5.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"normalize-url": "^6.0.1",
"postcss-value-parser": "^4.2.0"
},
"engines": {
"node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
"postcss": "^8.2.15"
}
},
"node_modules/postcss-normalize-whitespace": {
"version": "5.1.1",
"dev": true,
"license": "MIT",
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
"engines": {
"node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
"postcss": "^8.2.15"
}
},
"node_modules/postcss-opacity-percentage": {
"version": "1.1.3",
"dev": true,
"funding": [
{
"type": "kofi",
"url": "https://ko-fi.com/mrcgrtz"
},
{
"type": "liberapay",
"url": "https://liberapay.com/mrcgrtz"
}
],
"license": "MIT",
"engines": {
"node": "^12 || ^14 || >=16"
},
"peerDependencies": {
"postcss": "^8.2"
}
},
"node_modules/postcss-ordered-values": {
"version": "5.1.3",
"dev": true,
"license": "MIT",
"dependencies": {
"cssnano-utils": "^3.1.0",
"postcss-value-parser": "^4.2.0"
},
"engines": {
"node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
"postcss": "^8.2.15"
}
},
"node_modules/postcss-overflow-shorthand": {
"version": "3.0.4",
"dev": true,
"license": "CC0-1.0",
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
"engines": {
"node": "^12 || ^14 || >=16"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/csstools"
},
"peerDependencies": {
"postcss": "^8.2"
}
},
"node_modules/postcss-page-break": {
"version": "3.0.4",
"dev": true,
"license": "MIT",
"peerDependencies": {
"postcss": "^8"
}
},
"node_modules/postcss-place": {
"version": "7.0.5",
"dev": true,
"license": "CC0-1.0",
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
"engines": {
"node": "^12 || ^14 || >=16"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/csstools"
},
"peerDependencies": {
"postcss": "^8.2"
}
},
"node_modules/postcss-preset-env": {
"version": "7.8.3",
"dev": true,
"license": "CC0-1.0",
"dependencies": {
"@csstools/postcss-cascade-layers": "^1.1.1",
"@csstools/postcss-color-function": "^1.1.1",
"@csstools/postcss-font-format-keywords": "^1.0.1",
"@csstools/postcss-hwb-function": "^1.0.2",
"@csstools/postcss-ic-unit": "^1.0.1",
"@csstools/postcss-is-pseudo-class": "^2.0.7",
"@csstools/postcss-nested-calc": "^1.0.0",
"@csstools/postcss-normalize-display-values": "^1.0.1",
"@csstools/postcss-oklab-function": "^1.1.1",
"@csstools/postcss-progressive-custom-properties": "^1.3.0",
"@csstools/postcss-stepped-value-functions": "^1.0.1",
"@csstools/postcss-text-decoration-shorthand": "^1.0.0",
"@csstools/postcss-trigonometric-functions": "^1.0.2",
"@csstools/postcss-unset-value": "^1.0.2",
"autoprefixer": "^10.4.13",
"browserslist": "^4.21.4",
"css-blank-pseudo": "^3.0.3",
"css-has-pseudo": "^3.0.4",
"css-prefers-color-scheme": "^6.0.3",
"cssdb": "^7.1.0",
"postcss-attribute-case-insensitive": "^5.0.2",
"postcss-clamp": "^4.1.0",
"postcss-color-functional-notation": "^4.2.4",
"postcss-color-hex-alpha": "^8.0.4",
"postcss-color-rebeccapurple": "^7.1.1",
"postcss-custom-media": "^8.0.2",
"postcss-custom-properties": "^12.1.10",
"postcss-custom-selectors": "^6.0.3",
"postcss-dir-pseudo-class": "^6.0.5",
"postcss-double-position-gradients": "^3.1.2",
"postcss-env-function": "^4.0.6",
"postcss-focus-visible": "^6.0.4",
"postcss-focus-within": "^5.0.4",
"postcss-font-variant": "^5.0.0",
"postcss-gap-properties": "^3.0.5",
"postcss-image-set-function": "^4.0.7",
"postcss-initial": "^4.0.1",
"postcss-lab-function": "^4.2.1",
"postcss-logical": "^5.0.4",
"postcss-media-minmax": "^5.0.0",
"postcss-nesting": "^10.2.0",
"postcss-opacity-percentage": "^1.1.2",
"postcss-overflow-shorthand": "^3.0.4",
"postcss-page-break": "^3.0.4",
"postcss-place": "^7.0.5",
"postcss-pseudo-class-any-link": "^7.1.6",
"postcss-replace-overflow-wrap": "^4.0.0",
"postcss-selector-not": "^6.0.1",
"postcss-value-parser": "^4.2.0"
},
"engines": {
"node": "^12 || ^14 || >=16"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/csstools"
},
"peerDependencies": {
"postcss": "^8.2"
}
},
"node_modules/postcss-pseudo-class-any-link": {
"version": "7.1.6",
"dev": true,
"license": "CC0-1.0",
"dependencies": {
"postcss-selector-parser": "^6.0.10"
},
"engines": {
"node": "^12 || ^14 || >=16"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/csstools"
},
"peerDependencies": {
"postcss": "^8.2"
}
},
"node_modules/postcss-reduce-initial": {
"version": "5.1.2",
"dev": true,
"license": "MIT",
"dependencies": {
"browserslist": "^4.21.4",
"caniuse-api": "^3.0.0"
},
"engines": {
"node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
"postcss": "^8.2.15"
}
},
"node_modules/postcss-reduce-transforms": {
"version": "5.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"postcss-value-parser": "^4.2.0"
},
"engines": {
"node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
"postcss": "^8.2.15"
}
},
"node_modules/postcss-replace-overflow-wrap": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"peerDependencies": {
"postcss": "^8.0.3"
}
},
"node_modules/postcss-selector-not": {
"version": "6.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"postcss-selector-parser": "^6.0.10"
},
"engines": {
"node": "^12 || ^14 || >=16"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/csstools"
},
"peerDependencies": {
"postcss": "^8.2"
}
},
"node_modules/postcss-selector-parser": {
"version": "6.1.2",
"dev": true,
"license": "MIT",
"dependencies": {
"cssesc": "^3.0.0",
"util-deprecate": "^1.0.2"
},
"engines": {
"node": ">=4"
}
},
"node_modules/postcss-svgo": {
"version": "5.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"postcss-value-parser": "^4.2.0",
"svgo": "^2.7.0"
},
"engines": {
"node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
"postcss": "^8.2.15"
}
},
"node_modules/postcss-unique-selectors": {
"version": "5.1.1",
"dev": true,
"license": "MIT",
"dependencies": {
"postcss-selector-parser": "^6.0.5"
},
"engines": {
"node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
"postcss": "^8.2.15"
}
},
"node_modules/postcss-value-parser": {
"version": "4.2.0",
"dev": true,
"license": "MIT"
},
"node_modules/prelude-ls": {
"version": "1.2.1",
"dev": true,
"license": "MIT",
"optional": true,
"peer": true,
"engines": {
"node": ">= 0.8.0"
}
},
"node_modules/pretty-bytes": {
"version": "5.6.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/pretty-error": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"lodash": "^4.17.20",
"renderkid": "^3.0.0"
}
},
"node_modules/pretty-format": {
"version": "27.5.1",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
"ansi-regex": "^5.0.1",
"ansi-styles": "^5.0.0",
"react-is": "^17.0.1"
},
"engines": {
"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
}
},
"node_modules/pretty-format/node_modules/ansi-styles": {
"version": "5.2.0",
"dev": true,
"license": "MIT",
"peer": true,
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/pretty-format/node_modules/react-is": {
"version": "17.0.2",
"dev": true,
"license": "MIT",
"peer": true
},
"node_modules/process": {
"version": "0.11.10",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.6.0"
}
},
"node_modules/process-nextick-args": {
"version": "2.0.1",
"dev": true,
"license": "MIT"
},
"node_modules/promise": {
"version": "8.3.0",
"dev": true,
"license": "MIT",
"dependencies": {
"asap": "~2.0.6"
}
},
"node_modules/prompts": {
"version": "2.4.2",
"dev": true,
"license": "MIT",
"dependencies": {
"kleur": "^3.0.3",
"sisteransi": "^1.0.5"
},
"engines": {
"node": ">= 6"
}
},
"node_modules/prop-types": {
"version": "15.8.1",
"license": "MIT",
"dependencies": {
"loose-envify": "^1.4.0",
"object-assign": "^4.1.1",
"react-is": "^16.13.1"
}
},
"node_modules/proxy-addr": {
"version": "2.0.7",
"dev": true,
"license": "MIT",
"dependencies": {
"forwarded": "0.2.0",
"ipaddr.js": "1.9.1"
},
"engines": {
"node": ">= 0.10"
}
},
"node_modules/proxy-addr/node_modules/ipaddr.js": {
"version": "1.9.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.10"
}
},
"node_modules/psl": {
"version": "1.9.0",
"dev": true,
"license": "MIT"
},
"node_modules/public-encrypt": {
"version": "4.0.3",
"dev": true,
"license": "MIT",
"dependencies": {
"bn.js": "^4.1.0",
"browserify-rsa": "^4.0.0",
"create-hash": "^1.1.0",
"parse-asn1": "^5.0.0",
"randombytes": "^2.0.1",
"safe-buffer": "^5.1.2"
}
},
"node_modules/public-encrypt/node_modules/bn.js": {
"version": "4.12.0",
"dev": true,
"license": "MIT"
},
"node_modules/punycode": {
"version": "2.3.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/pure-rand": {
"version": "6.1.0",
"dev": true,
"funding": [
{
"type": "individual",
"url": "https://github.com/sponsors/dubzzz"
},
{
"type": "opencollective",
"url": "https://opencollective.com/fast-check"
}
],
"license": "MIT"
},
"node_modules/qrcode.react": {
"version": "3.2.0",
"license": "ISC",
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0 || ^18.0.0"
}
},
"node_modules/qs": {
"version": "6.13.0",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"side-channel": "^1.0.6"
},
"engines": {
"node": ">=0.6"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/querystring-es3": {
"version": "0.2.1",
"dev": true,
"engines": {
"node": ">=0.4.x"
}
},
"node_modules/querystringify": {
"version": "2.2.0",
"dev": true,
"license": "MIT"
},
"node_modules/queue-microtask": {
"version": "1.2.3",
"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"
}
],
"license": "MIT"
},
"node_modules/raf": {
"version": "3.4.1",
"dev": true,
"license": "MIT",
"dependencies": {
"performance-now": "^2.1.0"
}
},
"node_modules/randombytes": {
"version": "2.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"safe-buffer": "^5.1.0"
}
},
"node_modules/randomfill": {
"version": "1.0.4",
"dev": true,
"license": "MIT",
"dependencies": {
"randombytes": "^2.0.5",
"safe-buffer": "^5.1.0"
}
},
"node_modules/range-parser": {
"version": "1.2.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/raw-body": {
"version": "2.5.2",
"dev": true,
"license": "MIT",
"dependencies": {
"bytes": "3.1.2",
"http-errors": "2.0.0",
"iconv-lite": "0.4.24",
"unpipe": "1.0.0"
},
"engines": {
"node": ">= 0.8"
}
},
"node_modules/raw-body/node_modules/iconv-lite": {
"version": "0.4.24",
"dev": true,
"license": "MIT",
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/react": {
"version": "18.3.1",
"license": "MIT",
"dependencies": {
"loose-envify": "^1.1.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/react-app-polyfill": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"core-js": "^3.19.2",
"object-assign": "^4.1.1",
"promise": "^8.1.0",
"raf": "^3.4.1",
"regenerator-runtime": "^0.13.9",
"whatwg-fetch": "^3.6.2"
},
"engines": {
"node": ">=14"
}
},
"node_modules/react-app-polyfill/node_modules/regenerator-runtime": {
"version": "0.13.11",
"dev": true,
"license": "MIT"
},
"node_modules/react-dev-utils": {
"version": "12.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.16.0",
"address": "^1.1.2",
"browserslist": "^4.18.1",
"chalk": "^4.1.2",
"cross-spawn": "^7.0.3",
"detect-port-alt": "^1.1.6",
"escape-string-regexp": "^4.0.0",
"filesize": "^8.0.6",
"find-up": "^5.0.0",
"fork-ts-checker-webpack-plugin": "^6.5.0",
"global-modules": "^2.0.0",
"globby": "^11.0.4",
"gzip-size": "^6.0.0",
"immer": "^9.0.7",
"is-root": "^2.1.0",
"loader-utils": "^3.2.0",
"open": "^8.4.0",
"pkg-up": "^3.1.0",
"prompts": "^2.4.2",
"react-error-overlay": "^6.0.11",
"recursive-readdir": "^2.2.2",
"shell-quote": "^1.7.3",
"strip-ansi": "^6.0.1",
"text-table": "^0.2.0"
},
"engines": {
"node": ">=14"
}
},
"node_modules/react-dev-utils/node_modules/find-up": {
"version": "5.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"locate-path": "^6.0.0",
"path-exists": "^4.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/react-dev-utils/node_modules/loader-utils": {
"version": "3.3.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 12.13.0"
}
},
"node_modules/react-dev-utils/node_modules/locate-path": {
"version": "6.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-locate": "^5.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/react-dev-utils/node_modules/p-locate": {
"version": "5.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"p-limit": "^3.0.2"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/react-dom": {
"version": "18.3.1",
"license": "MIT",
"dependencies": {
"loose-envify": "^1.1.0",
"scheduler": "^0.23.2"
},
"peerDependencies": {
"react": "^18.3.1"
}
},
"node_modules/react-easy-crop": {
"version": "5.1.0",
"license": "MIT",
"dependencies": {
"normalize-wheel": "^1.0.1",
"tslib": "^2.0.1"
},
"peerDependencies": {
"react": ">=16.4.0",
"react-dom": ">=16.4.0"
}
},
"node_modules/react-error-overlay": {
"version": "6.0.11",
"dev": true,
"license": "MIT"
},
"node_modules/react-ga": {
"version": "3.3.1",
"license": "Apache-2.0",
"peerDependencies": {
"prop-types": "^15.6.0",
"react": "^15.6.2 || ^16.0 || ^17 || ^18"
}
},
"node_modules/react-is": {
"version": "16.13.1",
"license": "MIT"
},
"node_modules/react-refresh": {
"version": "0.11.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/react-router": {
"version": "6.28.0",
"license": "MIT",
"dependencies": {
"@remix-run/router": "1.21.0"
},
"engines": {
"node": ">=14.0.0"
},
"peerDependencies": {
"react": ">=16.8"
}
},
"node_modules/react-router-dom": {
"version": "6.28.0",
"license": "MIT",
"dependencies": {
"@remix-run/router": "1.21.0",
"react-router": "6.28.0"
},
"engines": {
"node": ">=14.0.0"
},
"peerDependencies": {
"react": ">=16.8",
"react-dom": ">=16.8"
}
},
"node_modules/react-toastify": {
"version": "11.0.2",
"resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-11.0.2.tgz",
"integrity": "sha512-GjHuGaiXMvbls3ywqv8XdWONwrcO4DXCJIY1zVLkHU73gEElKvTTXNI5Vom3s/k/M8hnkrfsqgBSX3OwmlonbA==",
"license": "MIT",
"dependencies": {
"clsx": "^2.1.1"
},
"peerDependencies": {
"react": "^18 || ^19",
"react-dom": "^18 || ^19"
}
},
"node_modules/react-tooltip": {
"version": "5.28.0",
"resolved": "https://registry.npmjs.org/react-tooltip/-/react-tooltip-5.28.0.tgz",
"integrity": "sha512-R5cO3JPPXk6FRbBHMO0rI9nkUG/JKfalBSQfZedZYzmqaZQgq7GLzF8vcCWx6IhUCKg0yPqJhXIzmIO5ff15xg==",
"license": "MIT",
"dependencies": {
"@floating-ui/dom": "^1.6.1",
"classnames": "^2.3.0"
},
"peerDependencies": {
"react": ">=16.14.0",
"react-dom": ">=16.14.0"
}
},
"node_modules/read-cache": {
"version": "1.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"pify": "^2.3.0"
}
},
"node_modules/readable-stream": {
"version": "2.3.8",
"dev": true,
"license": "MIT",
"dependencies": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
"isarray": "~1.0.0",
"process-nextick-args": "~2.0.0",
"safe-buffer": "~5.1.1",
"string_decoder": "~1.1.1",
"util-deprecate": "~1.0.1"
}
},
"node_modules/readable-stream/node_modules/safe-buffer": {
"version": "5.1.2",
"dev": true,
"license": "MIT"
},
"node_modules/readable-stream/node_modules/string_decoder": {
"version": "1.1.1",
"dev": true,
"license": "MIT",
"dependencies": {
"safe-buffer": "~5.1.0"
}
},
"node_modules/readdirp": {
"version": "3.6.0",
"dev": true,
"license": "MIT",
"dependencies": {
"picomatch": "^2.2.1"
},
"engines": {
"node": ">=8.10.0"
}
},
"node_modules/recaptcha-v3": {
"version": "1.11.3",
"license": "Apache-2.0"
},
"node_modules/recursive-readdir": {
"version": "2.2.3",
"dev": true,
"license": "MIT",
"dependencies": {
"minimatch": "^3.0.5"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/redent": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"indent-string": "^4.0.0",
"strip-indent": "^3.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/reflect.getprototypeof": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz",
"integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.8",
"define-properties": "^1.2.1",
"es-abstract": "^1.23.9",
"es-errors": "^1.3.0",
"es-object-atoms": "^1.0.0",
"get-intrinsic": "^1.2.7",
"get-proto": "^1.0.1",
"which-builtin-type": "^1.2.1"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/regenerate": {
"version": "1.4.2",
"dev": true,
"license": "MIT"
},
"node_modules/regenerate-unicode-properties": {
"version": "10.2.0",
"dev": true,
"license": "MIT",
"dependencies": {
"regenerate": "^1.4.2"
},
"engines": {
"node": ">=4"
}
},
"node_modules/regenerator-runtime": {
"version": "0.14.1",
"dev": true,
"license": "MIT"
},
"node_modules/regenerator-transform": {
"version": "0.15.2",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.8.4"
}
},
"node_modules/regex-parser": {
"version": "2.3.0",
"dev": true,
"license": "MIT"
},
"node_modules/regexp.prototype.flags": {
"version": "1.5.3",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.7",
"define-properties": "^1.2.1",
"es-errors": "^1.3.0",
"set-function-name": "^2.0.2"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/regexpu-core": {
"version": "6.1.1",
"dev": true,
"license": "MIT",
"dependencies": {
"regenerate": "^1.4.2",
"regenerate-unicode-properties": "^10.2.0",
"regjsgen": "^0.8.0",
"regjsparser": "^0.11.0",
"unicode-match-property-ecmascript": "^2.0.0",
"unicode-match-property-value-ecmascript": "^2.1.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/regjsgen": {
"version": "0.8.0",
"dev": true,
"license": "MIT"
},
"node_modules/regjsparser": {
"version": "0.11.2",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
"jsesc": "~3.0.2"
},
"bin": {
"regjsparser": "bin/parser"
}
},
"node_modules/relateurl": {
"version": "0.2.7",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.10"
}
},
"node_modules/renderkid": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"css-select": "^4.1.3",
"dom-converter": "^0.2.0",
"htmlparser2": "^6.1.0",
"lodash": "^4.17.21",
"strip-ansi": "^6.0.1"
}
},
"node_modules/require-directory": {
"version": "2.1.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/require-from-string": {
"version": "2.0.2",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/requires-port": {
"version": "1.0.0",
"dev": true,
"license": "MIT"
},
"node_modules/resolve": {
"version": "1.22.8",
"dev": true,
"license": "MIT",
"dependencies": {
"is-core-module": "^2.13.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/resolve-cwd": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"resolve-from": "^5.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/resolve-from": {
"version": "5.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/resolve-url-loader": {
"version": "5.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"adjust-sourcemap-loader": "^4.0.0",
"convert-source-map": "^1.7.0",
"loader-utils": "^2.0.0",
"postcss": "^8.2.14",
"source-map": "0.6.1"
},
"engines": {
"node": ">=12"
}
},
"node_modules/resolve-url-loader/node_modules/convert-source-map": {
"version": "1.9.0",
"dev": true,
"license": "MIT"
},
"node_modules/resolve-url-loader/node_modules/source-map": {
"version": "0.6.1",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/resolve.exports": {
"version": "2.0.2",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
}
},
"node_modules/retry": {
"version": "0.13.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 4"
}
},
"node_modules/reusify": {
"version": "1.0.4",
"dev": true,
"license": "MIT",
"engines": {
"iojs": ">=1.0.0",
"node": ">=0.10.0"
}
},
"node_modules/rimraf": {
"version": "3.0.2",
"dev": true,
"license": "ISC",
"dependencies": {
"glob": "^7.1.3"
},
"bin": {
"rimraf": "bin.js"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/ripemd160": {
"version": "2.0.2",
"dev": true,
"license": "MIT",
"dependencies": {
"hash-base": "^3.0.0",
"inherits": "^2.0.1"
}
},
"node_modules/rollup": {
"version": "2.79.2",
"dev": true,
"license": "MIT",
"bin": {
"rollup": "dist/bin/rollup"
},
"engines": {
"node": ">=10.0.0"
},
"optionalDependencies": {
"fsevents": "~2.3.2"
}
},
"node_modules/rollup-plugin-terser": {
"version": "7.0.2",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/code-frame": "^7.10.4",
"jest-worker": "^26.2.1",
"serialize-javascript": "^4.0.0",
"terser": "^5.0.0"
},
"peerDependencies": {
"rollup": "^2.0.0"
}
},
"node_modules/rollup-plugin-terser/node_modules/jest-worker": {
"version": "26.6.2",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/node": "*",
"merge-stream": "^2.0.0",
"supports-color": "^7.0.0"
},
"engines": {
"node": ">= 10.13.0"
}
},
"node_modules/rollup-plugin-terser/node_modules/serialize-javascript": {
"version": "4.0.0",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"randombytes": "^2.1.0"
}
},
"node_modules/run-parallel": {
"version": "1.2.0",
"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"
}
],
"license": "MIT",
"dependencies": {
"queue-microtask": "^1.2.2"
}
},
"node_modules/safe-array-concat": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz",
"integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.8",
"call-bound": "^1.0.2",
"get-intrinsic": "^1.2.6",
"has-symbols": "^1.1.0",
"isarray": "^2.0.5"
},
"engines": {
"node": ">=0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/safe-array-concat/node_modules/isarray": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
"integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
"dev": true,
"license": "MIT"
},
"node_modules/safe-buffer": {
"version": "5.2.1",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/feross"
},
{
"type": "patreon",
"url": "https://www.patreon.com/feross"
},
{
"type": "consulting",
"url": "https://feross.org/support"
}
],
"license": "MIT"
},
"node_modules/safe-push-apply": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz",
"integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==",
"dev": true,
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0",
"isarray": "^2.0.5"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/safe-push-apply/node_modules/isarray": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
"integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
"dev": true,
"license": "MIT"
},
"node_modules/safe-regex-test": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz",
"integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.2",
"es-errors": "^1.3.0",
"is-regex": "^1.2.1"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/safer-buffer": {
"version": "2.1.2",
"dev": true,
"license": "MIT"
},
"node_modules/sanitize.css": {
"version": "13.0.0",
"dev": true,
"license": "CC0-1.0"
},
"node_modules/sass-loader": {
"version": "12.6.0",
"dev": true,
"license": "MIT",
"dependencies": {
"klona": "^2.0.4",
"neo-async": "^2.6.2"
},
"engines": {
"node": ">= 12.13.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/webpack"
},
"peerDependencies": {
"fibers": ">= 3.1.0",
"node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0",
"sass": "^1.3.0",
"sass-embedded": "*",
"webpack": "^5.0.0"
},
"peerDependenciesMeta": {
"fibers": {
"optional": true
},
"node-sass": {
"optional": true
},
"sass": {
"optional": true
},
"sass-embedded": {
"optional": true
}
}
},
"node_modules/saxes": {
"version": "6.0.0",
"dev": true,
"license": "ISC",
"dependencies": {
"xmlchars": "^2.2.0"
},
"engines": {
"node": ">=v12.22.7"
}
},
"node_modules/scheduler": {
"version": "0.23.2",
"license": "MIT",
"dependencies": {
"loose-envify": "^1.1.0"
}
},
"node_modules/schema-utils": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz",
"integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/json-schema": "^7.0.9",
"ajv": "^8.9.0",
"ajv-formats": "^2.1.1",
"ajv-keywords": "^5.1.0"
},
"engines": {
"node": ">= 10.13.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/webpack"
}
},
"node_modules/schema-utils/node_modules/ajv": {
"version": "8.17.1",
"dev": true,
"license": "MIT",
"dependencies": {
"fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1",
"json-schema-traverse": "^1.0.0",
"require-from-string": "^2.0.2"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/epoberezkin"
}
},
"node_modules/schema-utils/node_modules/ajv-keywords": {
"version": "5.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"fast-deep-equal": "^3.1.3"
},
"peerDependencies": {
"ajv": "^8.8.2"
}
},
"node_modules/schema-utils/node_modules/json-schema-traverse": {
"version": "1.0.0",
"dev": true,
"license": "MIT"
},
"node_modules/select-hose": {
"version": "2.0.0",
"dev": true,
"license": "MIT"
},
"node_modules/selfsigned": {
"version": "2.4.1",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/node-forge": "^1.3.0",
"node-forge": "^1"
},
"engines": {
"node": ">=10"
}
},
"node_modules/semver": {
"version": "7.6.3",
"dev": true,
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
},
"engines": {
"node": ">=10"
}
},
"node_modules/send": {
"version": "0.19.0",
"dev": true,
"license": "MIT",
"dependencies": {
"debug": "2.6.9",
"depd": "2.0.0",
"destroy": "1.2.0",
"encodeurl": "~1.0.2",
"escape-html": "~1.0.3",
"etag": "~1.8.1",
"fresh": "0.5.2",
"http-errors": "2.0.0",
"mime": "1.6.0",
"ms": "2.1.3",
"on-finished": "2.4.1",
"range-parser": "~1.2.1",
"statuses": "2.0.1"
},
"engines": {
"node": ">= 0.8.0"
}
},
"node_modules/send/node_modules/debug": {
"version": "2.6.9",
"dev": true,
"license": "MIT",
"dependencies": {
"ms": "2.0.0"
}
},
"node_modules/send/node_modules/debug/node_modules/ms": {
"version": "2.0.0",
"dev": true,
"license": "MIT"
},
"node_modules/send/node_modules/encodeurl": {
"version": "1.0.2",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.8"
}
},
"node_modules/serialize-javascript": {
"version": "6.0.2",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"randombytes": "^2.1.0"
}
},
"node_modules/serve-index": {
"version": "1.9.1",
"dev": true,
"license": "MIT",
"dependencies": {
"accepts": "~1.3.4",
"batch": "0.6.1",
"debug": "2.6.9",
"escape-html": "~1.0.3",
"http-errors": "~1.6.2",
"mime-types": "~2.1.17",
"parseurl": "~1.3.2"
},
"engines": {
"node": ">= 0.8.0"
}
},
"node_modules/serve-index/node_modules/debug": {
"version": "2.6.9",
"dev": true,
"license": "MIT",
"dependencies": {
"ms": "2.0.0"
}
},
"node_modules/serve-index/node_modules/depd": {
"version": "1.1.2",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/serve-index/node_modules/http-errors": {
"version": "1.6.3",
"dev": true,
"license": "MIT",
"dependencies": {
"depd": "~1.1.2",
"inherits": "2.0.3",
"setprototypeof": "1.1.0",
"statuses": ">= 1.4.0 < 2"
},
"engines": {
"node": ">= 0.6"
}
},
"node_modules/serve-index/node_modules/inherits": {
"version": "2.0.3",
"dev": true,
"license": "ISC"
},
"node_modules/serve-index/node_modules/ms": {
"version": "2.0.0",
"dev": true,
"license": "MIT"
},
"node_modules/serve-index/node_modules/setprototypeof": {
"version": "1.1.0",
"dev": true,
"license": "ISC"
},
"node_modules/serve-index/node_modules/statuses": {
"version": "1.5.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/serve-static": {
"version": "1.16.2",
"dev": true,
"license": "MIT",
"dependencies": {
"encodeurl": "~2.0.0",
"escape-html": "~1.0.3",
"parseurl": "~1.3.3",
"send": "0.19.0"
},
"engines": {
"node": ">= 0.8.0"
}
},
"node_modules/set-function-length": {
"version": "1.2.2",
"dev": true,
"license": "MIT",
"dependencies": {
"define-data-property": "^1.1.4",
"es-errors": "^1.3.0",
"function-bind": "^1.1.2",
"get-intrinsic": "^1.2.4",
"gopd": "^1.0.1",
"has-property-descriptors": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/set-function-name": {
"version": "2.0.2",
"dev": true,
"license": "MIT",
"dependencies": {
"define-data-property": "^1.1.4",
"es-errors": "^1.3.0",
"functions-have-names": "^1.2.3",
"has-property-descriptors": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/set-proto": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz",
"integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==",
"dev": true,
"license": "MIT",
"dependencies": {
"dunder-proto": "^1.0.1",
"es-errors": "^1.3.0",
"es-object-atoms": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/setimmediate": {
"version": "1.0.5",
"dev": true,
"license": "MIT"
},
"node_modules/setprototypeof": {
"version": "1.2.0",
"dev": true,
"license": "ISC"
},
"node_modules/sha.js": {
"version": "2.4.11",
"dev": true,
"license": "(MIT AND BSD-3-Clause)",
"dependencies": {
"inherits": "^2.0.1",
"safe-buffer": "^5.0.1"
},
"bin": {
"sha.js": "bin.js"
}
},
"node_modules/shebang-command": {
"version": "2.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"shebang-regex": "^3.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/shebang-regex": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/shell-quote": {
"version": "1.8.1",
"dev": true,
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/side-channel": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
"integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
"dev": true,
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0",
"object-inspect": "^1.13.3",
"side-channel-list": "^1.0.0",
"side-channel-map": "^1.0.1",
"side-channel-weakmap": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/side-channel-list": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
"integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
"dev": true,
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0",
"object-inspect": "^1.13.3"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/side-channel-map": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
"integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.2",
"es-errors": "^1.3.0",
"get-intrinsic": "^1.2.5",
"object-inspect": "^1.13.3"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/side-channel-weakmap": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
"integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.2",
"es-errors": "^1.3.0",
"get-intrinsic": "^1.2.5",
"object-inspect": "^1.13.3",
"side-channel-map": "^1.0.1"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/signal-exit": {
"version": "3.0.7",
"dev": true,
"license": "ISC"
},
"node_modules/sisteransi": {
"version": "1.0.5",
"dev": true,
"license": "MIT"
},
"node_modules/slash": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/sockjs": {
"version": "0.3.24",
"dev": true,
"license": "MIT",
"dependencies": {
"faye-websocket": "^0.11.3",
"uuid": "^8.3.2",
"websocket-driver": "^0.7.4"
}
},
"node_modules/source-list-map": {
"version": "2.0.1",
"dev": true,
"license": "MIT"
},
"node_modules/source-map": {
"version": "0.7.4",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": ">= 8"
}
},
"node_modules/source-map-js": {
"version": "1.2.1",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/source-map-loader": {
"version": "3.0.2",
"dev": true,
"license": "MIT",
"dependencies": {
"abab": "^2.0.5",
"iconv-lite": "^0.6.3",
"source-map-js": "^1.0.1"
},
"engines": {
"node": ">= 12.13.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/webpack"
},
"peerDependencies": {
"webpack": "^5.0.0"
}
},
"node_modules/source-map-support": {
"version": "0.5.13",
"dev": true,
"license": "MIT",
"dependencies": {
"buffer-from": "^1.0.0",
"source-map": "^0.6.0"
}
},
"node_modules/source-map-support/node_modules/source-map": {
"version": "0.6.1",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/sourcemap-codec": {
"version": "1.4.8",
"dev": true,
"license": "MIT"
},
"node_modules/spdy": {
"version": "4.0.2",
"dev": true,
"license": "MIT",
"dependencies": {
"debug": "^4.1.0",
"handle-thing": "^2.0.0",
"http-deceiver": "^1.2.7",
"select-hose": "^2.0.0",
"spdy-transport": "^3.0.0"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/spdy-transport": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"debug": "^4.1.0",
"detect-node": "^2.0.4",
"hpack.js": "^2.1.6",
"obuf": "^1.1.2",
"readable-stream": "^3.0.6",
"wbuf": "^1.7.3"
}
},
"node_modules/spdy-transport/node_modules/readable-stream": {
"version": "3.6.2",
"dev": true,
"license": "MIT",
"dependencies": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
},
"engines": {
"node": ">= 6"
}
},
"node_modules/sprintf-js": {
"version": "1.0.3",
"dev": true,
"license": "BSD-3-Clause"
},
"node_modules/stable": {
"version": "0.1.8",
"dev": true,
"license": "MIT"
},
"node_modules/stack-utils": {
"version": "2.0.6",
"dev": true,
"license": "MIT",
"dependencies": {
"escape-string-regexp": "^2.0.0"
},
"engines": {
"node": ">=10"
}
},
"node_modules/stack-utils/node_modules/escape-string-regexp": {
"version": "2.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/stackframe": {
"version": "1.3.4",
"dev": true,
"license": "MIT"
},
"node_modules/static-eval": {
"version": "2.0.2",
"dev": true,
"license": "MIT",
"dependencies": {
"escodegen": "^1.8.1"
}
},
"node_modules/static-eval/node_modules/escodegen": {
"version": "1.14.3",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
"esprima": "^4.0.1",
"estraverse": "^4.2.0",
"esutils": "^2.0.2",
"optionator": "^0.8.1"
},
"bin": {
"escodegen": "bin/escodegen.js",
"esgenerate": "bin/esgenerate.js"
},
"engines": {
"node": ">=4.0"
},
"optionalDependencies": {
"source-map": "~0.6.1"
}
},
"node_modules/static-eval/node_modules/estraverse": {
"version": "4.3.0",
"dev": true,
"license": "BSD-2-Clause",
"engines": {
"node": ">=4.0"
}
},
"node_modules/static-eval/node_modules/levn": {
"version": "0.3.0",
"dev": true,
"license": "MIT",
"dependencies": {
"prelude-ls": "~1.1.2",
"type-check": "~0.3.2"
},
"engines": {
"node": ">= 0.8.0"
}
},
"node_modules/static-eval/node_modules/optionator": {
"version": "0.8.3",
"dev": true,
"license": "MIT",
"dependencies": {
"deep-is": "~0.1.3",
"fast-levenshtein": "~2.0.6",
"levn": "~0.3.0",
"prelude-ls": "~1.1.2",
"type-check": "~0.3.2",
"word-wrap": "~1.2.3"
},
"engines": {
"node": ">= 0.8.0"
}
},
"node_modules/static-eval/node_modules/prelude-ls": {
"version": "1.1.2",
"dev": true,
"engines": {
"node": ">= 0.8.0"
}
},
"node_modules/static-eval/node_modules/source-map": {
"version": "0.6.1",
"dev": true,
"license": "BSD-3-Clause",
"optional": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/static-eval/node_modules/type-check": {
"version": "0.3.2",
"dev": true,
"license": "MIT",
"dependencies": {
"prelude-ls": "~1.1.2"
},
"engines": {
"node": ">= 0.8.0"
}
},
"node_modules/statuses": {
"version": "2.0.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.8"
}
},
"node_modules/stream-browserify": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"inherits": "~2.0.4",
"readable-stream": "^3.5.0"
}
},
"node_modules/stream-browserify/node_modules/readable-stream": {
"version": "3.6.2",
"dev": true,
"license": "MIT",
"dependencies": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
},
"engines": {
"node": ">= 6"
}
},
"node_modules/stream-http": {
"version": "3.2.0",
"dev": true,
"license": "MIT",
"dependencies": {
"builtin-status-codes": "^3.0.0",
"inherits": "^2.0.4",
"readable-stream": "^3.6.0",
"xtend": "^4.0.2"
}
},
"node_modules/stream-http/node_modules/readable-stream": {
"version": "3.6.2",
"dev": true,
"license": "MIT",
"dependencies": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
},
"engines": {
"node": ">= 6"
}
},
"node_modules/string_decoder": {
"version": "1.3.0",
"dev": true,
"license": "MIT",
"dependencies": {
"safe-buffer": "~5.2.0"
}
},
"node_modules/string-length": {
"version": "4.0.2",
"dev": true,
"license": "MIT",
"dependencies": {
"char-regex": "^1.0.2",
"strip-ansi": "^6.0.0"
},
"engines": {
"node": ">=10"
}
},
"node_modules/string-width": {
"version": "4.2.3",
"dev": true,
"license": "MIT",
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
"strip-ansi": "^6.0.1"
},
"engines": {
"node": ">=8"
}
},
"node_modules/string-width-cjs": {
"name": "string-width",
"version": "4.2.3",
"dev": true,
"license": "MIT",
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
"strip-ansi": "^6.0.1"
},
"engines": {
"node": ">=8"
}
},
"node_modules/string-width-cjs/node_modules/emoji-regex": {
"version": "8.0.0",
"dev": true,
"license": "MIT"
},
"node_modules/string-width/node_modules/emoji-regex": {
"version": "8.0.0",
"dev": true,
"license": "MIT"
},
"node_modules/string.prototype.matchall": {
"version": "4.0.12",
"resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz",
"integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.8",
"call-bound": "^1.0.3",
"define-properties": "^1.2.1",
"es-abstract": "^1.23.6",
"es-errors": "^1.3.0",
"es-object-atoms": "^1.0.0",
"get-intrinsic": "^1.2.6",
"gopd": "^1.2.0",
"has-symbols": "^1.1.0",
"internal-slot": "^1.1.0",
"regexp.prototype.flags": "^1.5.3",
"set-function-name": "^2.0.2",
"side-channel": "^1.1.0"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/string.prototype.trim": {
"version": "1.2.10",
"resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz",
"integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.8",
"call-bound": "^1.0.2",
"define-data-property": "^1.1.4",
"define-properties": "^1.2.1",
"es-abstract": "^1.23.5",
"es-object-atoms": "^1.0.0",
"has-property-descriptors": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/string.prototype.trimend": {
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz",
"integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.8",
"call-bound": "^1.0.2",
"define-properties": "^1.2.1",
"es-object-atoms": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/string.prototype.trimstart": {
"version": "1.0.8",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.7",
"define-properties": "^1.2.1",
"es-object-atoms": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/stringify-object": {
"version": "3.3.0",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
"get-own-enumerable-property-symbols": "^3.0.0",
"is-obj": "^1.0.1",
"is-regexp": "^1.0.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/strip-ansi": {
"version": "6.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-regex": "^5.0.1"
},
"engines": {
"node": ">=8"
}
},
"node_modules/strip-ansi-cjs": {
"name": "strip-ansi",
"version": "6.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-regex": "^5.0.1"
},
"engines": {
"node": ">=8"
}
},
"node_modules/strip-bom": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/strip-comments": {
"version": "2.0.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
}
},
"node_modules/strip-final-newline": {
"version": "2.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/strip-indent": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"min-indent": "^1.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/strip-json-comments": {
"version": "3.1.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/style-loader": {
"version": "3.3.4",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 12.13.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/webpack"
},
"peerDependencies": {
"webpack": "^5.0.0"
}
},
"node_modules/styled-components": {
"version": "4.4.1",
"dev": true,
"hasInstallScript": true,
"license": "MIT",
"dependencies": {
"@babel/helper-module-imports": "^7.0.0",
"@babel/traverse": "^7.0.0",
"@emotion/is-prop-valid": "^0.8.1",
"@emotion/unitless": "^0.7.0",
"babel-plugin-styled-components": ">= 1",
"css-to-react-native": "^2.2.2",
"memoize-one": "^5.0.0",
"merge-anything": "^2.2.4",
"prop-types": "^15.5.4",
"react-is": "^16.6.0",
"stylis": "^3.5.0",
"stylis-rule-sheet": "^0.0.10",
"supports-color": "^5.5.0"
},
"peerDependencies": {
"react": ">= 16.3.0",
"react-dom": ">= 16.3.0"
}
},
"node_modules/styled-components/node_modules/has-flag": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/styled-components/node_modules/supports-color": {
"version": "5.5.0",
"dev": true,
"license": "MIT",
"dependencies": {
"has-flag": "^3.0.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/stylehacks": {
"version": "5.1.1",
"dev": true,
"license": "MIT",
"dependencies": {
"browserslist": "^4.21.4",
"postcss-selector-parser": "^6.0.4"
},
"engines": {
"node": "^10 || ^12 || >=14.0"
},
"peerDependencies": {
"postcss": "^8.2.15"
}
},
"node_modules/stylis": {
"version": "3.5.4",
"dev": true,
"license": "MIT"
},
"node_modules/stylis-rule-sheet": {
"version": "0.0.10",
"dev": true,
"license": "MIT",
"peerDependencies": {
"stylis": "^3.5.0"
}
},
"node_modules/sucrase": {
"version": "3.35.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.2",
"commander": "^4.0.0",
"glob": "^10.3.10",
"lines-and-columns": "^1.1.6",
"mz": "^2.7.0",
"pirates": "^4.0.1",
"ts-interface-checker": "^0.1.9"
},
"bin": {
"sucrase": "bin/sucrase",
"sucrase-node": "bin/sucrase-node"
},
"engines": {
"node": ">=16 || 14 >=14.17"
}
},
"node_modules/sucrase/node_modules/brace-expansion": {
"version": "2.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0"
}
},
"node_modules/sucrase/node_modules/commander": {
"version": "4.1.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 6"
}
},
"node_modules/sucrase/node_modules/glob": {
"version": "10.4.5",
"dev": true,
"license": "ISC",
"dependencies": {
"foreground-child": "^3.1.0",
"jackspeak": "^3.1.2",
"minimatch": "^9.0.4",
"minipass": "^7.1.2",
"package-json-from-dist": "^1.0.0",
"path-scurry": "^1.11.1"
},
"bin": {
"glob": "dist/esm/bin.mjs"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/sucrase/node_modules/minimatch": {
"version": "9.0.5",
"dev": true,
"license": "ISC",
"dependencies": {
"brace-expansion": "^2.0.1"
},
"engines": {
"node": ">=16 || 14 >=14.17"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/supports-color": {
"version": "7.2.0",
"dev": true,
"license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/supports-preserve-symlinks-flag": {
"version": "1.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/svg-parser": {
"version": "2.0.4",
"dev": true,
"license": "MIT"
},
"node_modules/svgo": {
"version": "2.8.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@trysound/sax": "0.2.0",
"commander": "^7.2.0",
"css-select": "^4.1.3",
"css-tree": "^1.1.3",
"csso": "^4.2.0",
"picocolors": "^1.0.0",
"stable": "^0.1.8"
},
"bin": {
"svgo": "bin/svgo"
},
"engines": {
"node": ">=10.13.0"
}
},
"node_modules/svgo/node_modules/commander": {
"version": "7.2.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 10"
}
},
"node_modules/swiper": {
"version": "11.1.14",
"resolved": "https://registry.npmjs.org/swiper/-/swiper-11.1.14.tgz",
"integrity": "sha512-VbQLQXC04io6AoAjIUWuZwW4MSYozkcP9KjLdrsG/00Q/yiwvhz9RQyt0nHXV10hi9NVnDNy1/wv7Dzq1lkOCQ==",
"funding": [
{
"type": "patreon",
"url": "https://www.patreon.com/swiperjs"
},
{
"type": "open_collective",
"url": "http://opencollective.com/swiper"
}
],
"license": "MIT",
"engines": {
"node": ">= 4.7.0"
}
},
"node_modules/symbol-tree": {
"version": "3.2.4",
"dev": true,
"license": "MIT"
},
"node_modules/tailwindcss": {
"version": "3.4.14",
"dev": true,
"license": "MIT",
"dependencies": {
"@alloc/quick-lru": "^5.2.0",
"arg": "^5.0.2",
"chokidar": "^3.5.3",
"didyoumean": "^1.2.2",
"dlv": "^1.1.3",
"fast-glob": "^3.3.0",
"glob-parent": "^6.0.2",
"is-glob": "^4.0.3",
"jiti": "^1.21.0",
"lilconfig": "^2.1.0",
"micromatch": "^4.0.5",
"normalize-path": "^3.0.0",
"object-hash": "^3.0.0",
"picocolors": "^1.0.0",
"postcss": "^8.4.23",
"postcss-import": "^15.1.0",
"postcss-js": "^4.0.1",
"postcss-load-config": "^4.0.1",
"postcss-nested": "^6.0.1",
"postcss-selector-parser": "^6.0.11",
"resolve": "^1.22.2",
"sucrase": "^3.32.0"
},
"bin": {
"tailwind": "lib/cli.js",
"tailwindcss": "lib/cli.js"
},
"engines": {
"node": ">=14.0.0"
}
},
"node_modules/tapable": {
"version": "2.2.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/temp-dir": {
"version": "2.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/tempy": {
"version": "0.6.0",
"dev": true,
"license": "MIT",
"dependencies": {
"is-stream": "^2.0.0",
"temp-dir": "^2.0.0",
"type-fest": "^0.16.0",
"unique-string": "^2.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/tempy/node_modules/type-fest": {
"version": "0.16.0",
"dev": true,
"license": "(MIT OR CC0-1.0)",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/terser": {
"version": "5.36.0",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
"@jridgewell/source-map": "^0.3.3",
"acorn": "^8.8.2",
"commander": "^2.20.0",
"source-map-support": "~0.5.20"
},
"bin": {
"terser": "bin/terser"
},
"engines": {
"node": ">=10"
}
},
"node_modules/terser-webpack-plugin": {
"version": "5.3.10",
"dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/trace-mapping": "^0.3.20",
"jest-worker": "^27.4.5",
"schema-utils": "^3.1.1",
"serialize-javascript": "^6.0.1",
"terser": "^5.26.0"
},
"engines": {
"node": ">= 10.13.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/webpack"
},
"peerDependencies": {
"webpack": "^5.1.0"
},
"peerDependenciesMeta": {
"@swc/core": {
"optional": true
},
"esbuild": {
"optional": true
},
"uglify-js": {
"optional": true
}
}
},
"node_modules/terser-webpack-plugin/node_modules/schema-utils": {
"version": "3.3.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/json-schema": "^7.0.8",
"ajv": "^6.12.5",
"ajv-keywords": "^3.5.2"
},
"engines": {
"node": ">= 10.13.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/webpack"
}
},
"node_modules/terser/node_modules/commander": {
"version": "2.20.3",
"dev": true,
"license": "MIT"
},
"node_modules/terser/node_modules/source-map": {
"version": "0.6.1",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/terser/node_modules/source-map-support": {
"version": "0.5.21",
"dev": true,
"license": "MIT",
"dependencies": {
"buffer-from": "^1.0.0",
"source-map": "^0.6.0"
}
},
"node_modules/test-exclude": {
"version": "6.0.0",
"dev": true,
"license": "ISC",
"dependencies": {
"@istanbuljs/schema": "^0.1.2",
"glob": "^7.1.4",
"minimatch": "^3.0.4"
},
"engines": {
"node": ">=8"
}
},
"node_modules/text-table": {
"version": "0.2.0",
"dev": true,
"license": "MIT"
},
"node_modules/thenify": {
"version": "3.3.1",
"dev": true,
"license": "MIT",
"dependencies": {
"any-promise": "^1.0.0"
}
},
"node_modules/thenify-all": {
"version": "1.6.0",
"dev": true,
"license": "MIT",
"dependencies": {
"thenify": ">= 3.1.0 < 4"
},
"engines": {
"node": ">=0.8"
}
},
"node_modules/thunky": {
"version": "1.1.0",
"dev": true,
"license": "MIT"
},
"node_modules/timers-browserify": {
"version": "2.0.12",
"dev": true,
"license": "MIT",
"dependencies": {
"setimmediate": "^1.0.4"
},
"engines": {
"node": ">=0.6.0"
}
},
"node_modules/tmpl": {
"version": "1.0.5",
"dev": true,
"license": "BSD-3-Clause"
},
"node_modules/to-regex-range": {
"version": "5.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"is-number": "^7.0.0"
},
"engines": {
"node": ">=8.0"
}
},
"node_modules/toidentifier": {
"version": "1.0.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.6"
}
},
"node_modules/tough-cookie": {
"version": "4.1.4",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"psl": "^1.1.33",
"punycode": "^2.1.1",
"universalify": "^0.2.0",
"url-parse": "^1.5.3"
},
"engines": {
"node": ">=6"
}
},
"node_modules/tough-cookie/node_modules/universalify": {
"version": "0.2.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 4.0.0"
}
},
"node_modules/tr46": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"punycode": "^2.1.1"
},
"engines": {
"node": ">=12"
}
},
"node_modules/tryer": {
"version": "1.0.1",
"dev": true,
"license": "MIT"
},
"node_modules/ts-custom-error": {
"version": "3.3.1",
"license": "MIT",
"peer": true,
"engines": {
"node": ">=14.0.0"
}
},
"node_modules/ts-interface-checker": {
"version": "0.1.13",
"dev": true,
"license": "Apache-2.0"
},
"node_modules/tslib": {
"version": "2.8.1",
"license": "0BSD"
},
"node_modules/tty-browserify": {
"version": "0.0.1",
"dev": true,
"license": "MIT"
},
"node_modules/type-check": {
"version": "0.4.0",
"dev": true,
"license": "MIT",
"optional": true,
"peer": true,
"dependencies": {
"prelude-ls": "^1.2.1"
},
"engines": {
"node": ">= 0.8.0"
}
},
"node_modules/type-detect": {
"version": "4.0.8",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/type-fest": {
"version": "0.21.3",
"dev": true,
"license": "(MIT OR CC0-1.0)",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/type-is": {
"version": "1.6.18",
"dev": true,
"license": "MIT",
"dependencies": {
"media-typer": "0.3.0",
"mime-types": "~2.1.24"
},
"engines": {
"node": ">= 0.6"
}
},
"node_modules/typed-array-buffer": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz",
"integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.3",
"es-errors": "^1.3.0",
"is-typed-array": "^1.1.14"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/typed-array-byte-length": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz",
"integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.8",
"for-each": "^0.3.3",
"gopd": "^1.2.0",
"has-proto": "^1.2.0",
"is-typed-array": "^1.1.14"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/typed-array-byte-offset": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz",
"integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"available-typed-arrays": "^1.0.7",
"call-bind": "^1.0.8",
"for-each": "^0.3.3",
"gopd": "^1.2.0",
"has-proto": "^1.2.0",
"is-typed-array": "^1.1.15",
"reflect.getprototypeof": "^1.0.9"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/typed-array-length": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz",
"integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.7",
"for-each": "^0.3.3",
"gopd": "^1.0.1",
"is-typed-array": "^1.1.13",
"possible-typed-array-names": "^1.0.0",
"reflect.getprototypeof": "^1.0.6"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/typescript": {
"version": "4.9.5",
"dev": true,
"license": "Apache-2.0",
"peer": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
},
"engines": {
"node": ">=4.2.0"
}
},
"node_modules/unbox-primitive": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz",
"integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.3",
"has-bigints": "^1.0.2",
"has-symbols": "^1.1.0",
"which-boxed-primitive": "^1.1.1"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/underscore": {
"version": "1.12.1",
"dev": true,
"license": "MIT"
},
"node_modules/undici-types": {
"version": "6.19.8",
"dev": true,
"license": "MIT"
},
"node_modules/unicode-canonical-property-names-ecmascript": {
"version": "2.0.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/unicode-match-property-ecmascript": {
"version": "2.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"unicode-canonical-property-names-ecmascript": "^2.0.0",
"unicode-property-aliases-ecmascript": "^2.0.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/unicode-match-property-value-ecmascript": {
"version": "2.2.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/unicode-property-aliases-ecmascript": {
"version": "2.1.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/unique-string": {
"version": "2.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"crypto-random-string": "^2.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/universalify": {
"version": "2.0.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 10.0.0"
}
},
"node_modules/unpipe": {
"version": "1.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.8"
}
},
"node_modules/upath": {
"version": "1.2.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4",
"yarn": "*"
}
},
"node_modules/update-browserslist-db": {
"version": "1.1.1",
"dev": true,
"funding": [
{
"type": "opencollective",
"url": "https://opencollective.com/browserslist"
},
{
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/browserslist"
},
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
"license": "MIT",
"dependencies": {
"escalade": "^3.2.0",
"picocolors": "^1.1.0"
},
"bin": {
"update-browserslist-db": "cli.js"
},
"peerDependencies": {
"browserslist": ">= 4.21.0"
}
},
"node_modules/uri-js": {
"version": "4.4.1",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
"punycode": "^2.1.0"
}
},
"node_modules/url": {
"version": "0.11.4",
"dev": true,
"license": "MIT",
"dependencies": {
"punycode": "^1.4.1",
"qs": "^6.12.3"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/url-parse": {
"version": "1.5.10",
"dev": true,
"license": "MIT",
"dependencies": {
"querystringify": "^2.1.1",
"requires-port": "^1.0.0"
}
},
"node_modules/url/node_modules/punycode": {
"version": "1.4.1",
"dev": true,
"license": "MIT"
},
"node_modules/util": {
"version": "0.12.5",
"dev": true,
"license": "MIT",
"dependencies": {
"inherits": "^2.0.3",
"is-arguments": "^1.0.4",
"is-generator-function": "^1.0.7",
"is-typed-array": "^1.1.3",
"which-typed-array": "^1.1.2"
}
},
"node_modules/util-deprecate": {
"version": "1.0.2",
"dev": true,
"license": "MIT"
},
"node_modules/utila": {
"version": "0.4.0",
"dev": true,
"license": "MIT"
},
"node_modules/utils-merge": {
"version": "1.0.1",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4.0"
}
},
"node_modules/uuid": {
"version": "8.3.2",
"dev": true,
"license": "MIT",
"bin": {
"uuid": "dist/bin/uuid"
}
},
"node_modules/v8-to-istanbul": {
"version": "9.3.0",
"dev": true,
"license": "ISC",
"dependencies": {
"@jridgewell/trace-mapping": "^0.3.12",
"@types/istanbul-lib-coverage": "^2.0.1",
"convert-source-map": "^2.0.0"
},
"engines": {
"node": ">=10.12.0"
}
},
"node_modules/vary": {
"version": "1.1.2",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.8"
}
},
"node_modules/vm-browserify": {
"version": "1.1.2",
"dev": true,
"license": "MIT"
},
"node_modules/w3c-xmlserializer": {
"version": "4.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"xml-name-validator": "^4.0.0"
},
"engines": {
"node": ">=14"
}
},
"node_modules/walker": {
"version": "1.0.8",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"makeerror": "1.0.12"
}
},
"node_modules/watchpack": {
"version": "2.4.2",
"dev": true,
"license": "MIT",
"dependencies": {
"glob-to-regexp": "^0.4.1",
"graceful-fs": "^4.1.2"
},
"engines": {
"node": ">=10.13.0"
}
},
"node_modules/wbuf": {
"version": "1.7.3",
"dev": true,
"license": "MIT",
"dependencies": {
"minimalistic-assert": "^1.0.0"
}
},
"node_modules/web-vitals": {
"version": "2.1.4",
"dev": true,
"license": "Apache-2.0"
},
"node_modules/webidl-conversions": {
"version": "7.0.0",
"dev": true,
"license": "BSD-2-Clause",
"engines": {
"node": ">=12"
}
},
"node_modules/webpack": {
"version": "5.96.1",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/eslint-scope": "^3.7.7",
"@types/estree": "^1.0.6",
"@webassemblyjs/ast": "^1.12.1",
"@webassemblyjs/wasm-edit": "^1.12.1",
"@webassemblyjs/wasm-parser": "^1.12.1",
"acorn": "^8.14.0",
"browserslist": "^4.24.0",
"chrome-trace-event": "^1.0.2",
"enhanced-resolve": "^5.17.1",
"es-module-lexer": "^1.2.1",
"eslint-scope": "5.1.1",
"events": "^3.2.0",
"glob-to-regexp": "^0.4.1",
"graceful-fs": "^4.2.11",
"json-parse-even-better-errors": "^2.3.1",
"loader-runner": "^4.2.0",
"mime-types": "^2.1.27",
"neo-async": "^2.6.2",
"schema-utils": "^3.2.0",
"tapable": "^2.1.1",
"terser-webpack-plugin": "^5.3.10",
"watchpack": "^2.4.1",
"webpack-sources": "^3.2.3"
},
"bin": {
"webpack": "bin/webpack.js"
},
"engines": {
"node": ">=10.13.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/webpack"
},
"peerDependenciesMeta": {
"webpack-cli": {
"optional": true
}
}
},
"node_modules/webpack-dev-middleware": {
"version": "5.3.4",
"dev": true,
"license": "MIT",
"dependencies": {
"colorette": "^2.0.10",
"memfs": "^3.4.3",
"mime-types": "^2.1.31",
"range-parser": "^1.2.1",
"schema-utils": "^4.0.0"
},
"engines": {
"node": ">= 12.13.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/webpack"
},
"peerDependencies": {
"webpack": "^4.0.0 || ^5.0.0"
}
},
"node_modules/webpack-dev-server": {
"version": "4.15.2",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/bonjour": "^3.5.9",
"@types/connect-history-api-fallback": "^1.3.5",
"@types/express": "^4.17.13",
"@types/serve-index": "^1.9.1",
"@types/serve-static": "^1.13.10",
"@types/sockjs": "^0.3.33",
"@types/ws": "^8.5.5",
"ansi-html-community": "^0.0.8",
"bonjour-service": "^1.0.11",
"chokidar": "^3.5.3",
"colorette": "^2.0.10",
"compression": "^1.7.4",
"connect-history-api-fallback": "^2.0.0",
"default-gateway": "^6.0.3",
"express": "^4.17.3",
"graceful-fs": "^4.2.6",
"html-entities": "^2.3.2",
"http-proxy-middleware": "^2.0.3",
"ipaddr.js": "^2.0.1",
"launch-editor": "^2.6.0",
"open": "^8.0.9",
"p-retry": "^4.5.0",
"rimraf": "^3.0.2",
"schema-utils": "^4.0.0",
"selfsigned": "^2.1.1",
"serve-index": "^1.9.1",
"sockjs": "^0.3.24",
"spdy": "^4.0.2",
"webpack-dev-middleware": "^5.3.4",
"ws": "^8.13.0"
},
"bin": {
"webpack-dev-server": "bin/webpack-dev-server.js"
},
"engines": {
"node": ">= 12.13.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/webpack"
},
"peerDependencies": {
"webpack": "^4.37.0 || ^5.0.0"
},
"peerDependenciesMeta": {
"webpack": {
"optional": true
},
"webpack-cli": {
"optional": true
}
}
},
"node_modules/webpack-manifest-plugin": {
"version": "4.1.1",
"dev": true,
"license": "MIT",
"dependencies": {
"tapable": "^2.0.0",
"webpack-sources": "^2.2.0"
},
"engines": {
"node": ">=12.22.0"
},
"peerDependencies": {
"webpack": "^4.44.2 || ^5.47.0"
}
},
"node_modules/webpack-manifest-plugin/node_modules/source-map": {
"version": "0.6.1",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/webpack-manifest-plugin/node_modules/webpack-sources": {
"version": "2.3.1",
"dev": true,
"license": "MIT",
"dependencies": {
"source-list-map": "^2.0.1",
"source-map": "^0.6.1"
},
"engines": {
"node": ">=10.13.0"
}
},
"node_modules/webpack-sources": {
"version": "3.2.3",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10.13.0"
}
},
"node_modules/webpack/node_modules/eslint-scope": {
"version": "5.1.1",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
"esrecurse": "^4.3.0",
"estraverse": "^4.1.1"
},
"engines": {
"node": ">=8.0.0"
}
},
"node_modules/webpack/node_modules/estraverse": {
"version": "4.3.0",
"dev": true,
"license": "BSD-2-Clause",
"engines": {
"node": ">=4.0"
}
},
"node_modules/webpack/node_modules/schema-utils": {
"version": "3.3.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/json-schema": "^7.0.8",
"ajv": "^6.12.5",
"ajv-keywords": "^3.5.2"
},
"engines": {
"node": ">= 10.13.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/webpack"
}
},
"node_modules/websocket-driver": {
"version": "0.7.4",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"http-parser-js": ">=0.5.1",
"safe-buffer": ">=5.1.0",
"websocket-extensions": ">=0.1.1"
},
"engines": {
"node": ">=0.8.0"
}
},
"node_modules/websocket-extensions": {
"version": "0.1.4",
"dev": true,
"license": "Apache-2.0",
"engines": {
"node": ">=0.8.0"
}
},
"node_modules/whatwg-encoding": {
"version": "2.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"iconv-lite": "0.6.3"
},
"engines": {
"node": ">=12"
}
},
"node_modules/whatwg-fetch": {
"version": "3.6.20",
"dev": true,
"license": "MIT"
},
"node_modules/whatwg-mimetype": {
"version": "3.0.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=12"
}
},
"node_modules/whatwg-url": {
"version": "11.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"tr46": "^3.0.0",
"webidl-conversions": "^7.0.0"
},
"engines": {
"node": ">=12"
}
},
"node_modules/which": {
"version": "2.0.2",
"dev": true,
"license": "ISC",
"dependencies": {
"isexe": "^2.0.0"
},
"bin": {
"node-which": "bin/node-which"
},
"engines": {
"node": ">= 8"
}
},
"node_modules/which-boxed-primitive": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz",
"integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==",
"dev": true,
"license": "MIT",
"dependencies": {
"is-bigint": "^1.1.0",
"is-boolean-object": "^1.2.1",
"is-number-object": "^1.1.1",
"is-string": "^1.1.1",
"is-symbol": "^1.1.1"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/which-builtin-type": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz",
"integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.2",
"function.prototype.name": "^1.1.6",
"has-tostringtag": "^1.0.2",
"is-async-function": "^2.0.0",
"is-date-object": "^1.1.0",
"is-finalizationregistry": "^1.1.0",
"is-generator-function": "^1.0.10",
"is-regex": "^1.2.1",
"is-weakref": "^1.0.2",
"isarray": "^2.0.5",
"which-boxed-primitive": "^1.1.0",
"which-collection": "^1.0.2",
"which-typed-array": "^1.1.16"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/which-builtin-type/node_modules/isarray": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
"integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
"dev": true,
"license": "MIT"
},
"node_modules/which-collection": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz",
"integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==",
"dev": true,
"license": "MIT",
"dependencies": {
"is-map": "^2.0.3",
"is-set": "^2.0.3",
"is-weakmap": "^2.0.2",
"is-weakset": "^2.0.3"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/which-typed-array": {
"version": "1.1.18",
"resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz",
"integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==",
"dev": true,
"license": "MIT",
"dependencies": {
"available-typed-arrays": "^1.0.7",
"call-bind": "^1.0.8",
"call-bound": "^1.0.3",
"for-each": "^0.3.3",
"gopd": "^1.2.0",
"has-tostringtag": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/wif": {
"version": "4.0.0",
"license": "MIT",
"dependencies": {
"bs58check": "^3.0.1"
}
},
"node_modules/wif/node_modules/base-x": {
"version": "4.0.0",
"license": "MIT"
},
"node_modules/wif/node_modules/bs58": {
"version": "5.0.0",
"license": "MIT",
"dependencies": {
"base-x": "^4.0.0"
}
},
"node_modules/wif/node_modules/bs58check": {
"version": "3.0.1",
"license": "MIT",
"dependencies": {
"@noble/hashes": "^1.2.0",
"bs58": "^5.0.0"
}
},
"node_modules/word-wrap": {
"version": "1.2.5",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/workbox-background-sync": {
"version": "6.6.0",
"dev": true,
"license": "MIT",
"dependencies": {
"idb": "^7.0.1",
"workbox-core": "6.6.0"
}
},
"node_modules/workbox-broadcast-update": {
"version": "6.6.0",
"dev": true,
"license": "MIT",
"dependencies": {
"workbox-core": "6.6.0"
}
},
"node_modules/workbox-build": {
"version": "6.6.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@apideck/better-ajv-errors": "^0.3.1",
"@babel/core": "^7.11.1",
"@babel/preset-env": "^7.11.0",
"@babel/runtime": "^7.11.2",
"@rollup/plugin-babel": "^5.2.0",
"@rollup/plugin-node-resolve": "^11.2.1",
"@rollup/plugin-replace": "^2.4.1",
"@surma/rollup-plugin-off-main-thread": "^2.2.3",
"ajv": "^8.6.0",
"common-tags": "^1.8.0",
"fast-json-stable-stringify": "^2.1.0",
"fs-extra": "^9.0.1",
"glob": "^7.1.6",
"lodash": "^4.17.20",
"pretty-bytes": "^5.3.0",
"rollup": "^2.43.1",
"rollup-plugin-terser": "^7.0.0",
"source-map": "^0.8.0-beta.0",
"stringify-object": "^3.3.0",
"strip-comments": "^2.0.1",
"tempy": "^0.6.0",
"upath": "^1.2.0",
"workbox-background-sync": "6.6.0",
"workbox-broadcast-update": "6.6.0",
"workbox-cacheable-response": "6.6.0",
"workbox-core": "6.6.0",
"workbox-expiration": "6.6.0",
"workbox-google-analytics": "6.6.0",
"workbox-navigation-preload": "6.6.0",
"workbox-precaching": "6.6.0",
"workbox-range-requests": "6.6.0",
"workbox-recipes": "6.6.0",
"workbox-routing": "6.6.0",
"workbox-strategies": "6.6.0",
"workbox-streams": "6.6.0",
"workbox-sw": "6.6.0",
"workbox-window": "6.6.0"
},
"engines": {
"node": ">=10.0.0"
}
},
"node_modules/workbox-build/node_modules/@apideck/better-ajv-errors": {
"version": "0.3.6",
"dev": true,
"license": "MIT",
"dependencies": {
"json-schema": "^0.4.0",
"jsonpointer": "^5.0.0",
"leven": "^3.1.0"
},
"engines": {
"node": ">=10"
},
"peerDependencies": {
"ajv": ">=8"
}
},
"node_modules/workbox-build/node_modules/ajv": {
"version": "8.17.1",
"dev": true,
"license": "MIT",
"dependencies": {
"fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1",
"json-schema-traverse": "^1.0.0",
"require-from-string": "^2.0.2"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/epoberezkin"
}
},
"node_modules/workbox-build/node_modules/fs-extra": {
"version": "9.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"at-least-node": "^1.0.0",
"graceful-fs": "^4.2.0",
"jsonfile": "^6.0.1",
"universalify": "^2.0.0"
},
"engines": {
"node": ">=10"
}
},
"node_modules/workbox-build/node_modules/json-schema-traverse": {
"version": "1.0.0",
"dev": true,
"license": "MIT"
},
"node_modules/workbox-build/node_modules/source-map": {
"version": "0.8.0-beta.0",
"dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"whatwg-url": "^7.0.0"
},
"engines": {
"node": ">= 8"
}
},
"node_modules/workbox-build/node_modules/tr46": {
"version": "1.0.1",
"dev": true,
"license": "MIT",
"dependencies": {
"punycode": "^2.1.0"
}
},
"node_modules/workbox-build/node_modules/webidl-conversions": {
"version": "4.0.2",
"dev": true,
"license": "BSD-2-Clause"
},
"node_modules/workbox-build/node_modules/whatwg-url": {
"version": "7.1.0",
"dev": true,
"license": "MIT",
"dependencies": {
"lodash.sortby": "^4.7.0",
"tr46": "^1.0.1",
"webidl-conversions": "^4.0.2"
}
},
"node_modules/workbox-cacheable-response": {
"version": "6.6.0",
"dev": true,
"license": "MIT",
"dependencies": {
"workbox-core": "6.6.0"
}
},
"node_modules/workbox-core": {
"version": "6.6.0",
"dev": true,
"license": "MIT"
},
"node_modules/workbox-expiration": {
"version": "6.6.0",
"dev": true,
"license": "MIT",
"dependencies": {
"idb": "^7.0.1",
"workbox-core": "6.6.0"
}
},
"node_modules/workbox-google-analytics": {
"version": "6.6.0",
"dev": true,
"license": "MIT",
"dependencies": {
"workbox-background-sync": "6.6.0",
"workbox-core": "6.6.0",
"workbox-routing": "6.6.0",
"workbox-strategies": "6.6.0"
}
},
"node_modules/workbox-navigation-preload": {
"version": "6.6.0",
"dev": true,
"license": "MIT",
"dependencies": {
"workbox-core": "6.6.0"
}
},
"node_modules/workbox-precaching": {
"version": "6.6.0",
"dev": true,
"license": "MIT",
"dependencies": {
"workbox-core": "6.6.0",
"workbox-routing": "6.6.0",
"workbox-strategies": "6.6.0"
}
},
"node_modules/workbox-range-requests": {
"version": "6.6.0",
"dev": true,
"license": "MIT",
"dependencies": {
"workbox-core": "6.6.0"
}
},
"node_modules/workbox-recipes": {
"version": "6.6.0",
"dev": true,
"license": "MIT",
"dependencies": {
"workbox-cacheable-response": "6.6.0",
"workbox-core": "6.6.0",
"workbox-expiration": "6.6.0",
"workbox-precaching": "6.6.0",
"workbox-routing": "6.6.0",
"workbox-strategies": "6.6.0"
}
},
"node_modules/workbox-routing": {
"version": "6.6.0",
"dev": true,
"license": "MIT",
"dependencies": {
"workbox-core": "6.6.0"
}
},
"node_modules/workbox-strategies": {
"version": "6.6.0",
"dev": true,
"license": "MIT",
"dependencies": {
"workbox-core": "6.6.0"
}
},
"node_modules/workbox-streams": {
"version": "6.6.0",
"dev": true,
"license": "MIT",
"dependencies": {
"workbox-core": "6.6.0",
"workbox-routing": "6.6.0"
}
},
"node_modules/workbox-sw": {
"version": "6.6.0",
"dev": true,
"license": "MIT"
},
"node_modules/workbox-webpack-plugin": {
"version": "6.6.0",
"dev": true,
"license": "MIT",
"dependencies": {
"fast-json-stable-stringify": "^2.1.0",
"pretty-bytes": "^5.4.1",
"upath": "^1.2.0",
"webpack-sources": "^1.4.3",
"workbox-build": "6.6.0"
},
"engines": {
"node": ">=10.0.0"
},
"peerDependencies": {
"webpack": "^4.4.0 || ^5.9.0"
}
},
"node_modules/workbox-webpack-plugin/node_modules/source-map": {
"version": "0.6.1",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/workbox-webpack-plugin/node_modules/webpack-sources": {
"version": "1.4.3",
"dev": true,
"license": "MIT",
"dependencies": {
"source-list-map": "^2.0.0",
"source-map": "~0.6.1"
}
},
"node_modules/workbox-window": {
"version": "6.6.0",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/trusted-types": "^2.0.2",
"workbox-core": "6.6.0"
}
},
"node_modules/wrap-ansi": {
"version": "7.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
"strip-ansi": "^6.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
"node_modules/wrap-ansi-cjs": {
"name": "wrap-ansi",
"version": "7.0.0",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
"strip-ansi": "^6.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
"node_modules/wrappy": {
"version": "1.0.2",
"dev": true,
"license": "ISC"
},
"node_modules/write-file-atomic": {
"version": "4.0.2",
"dev": true,
"license": "ISC",
"dependencies": {
"imurmurhash": "^0.1.4",
"signal-exit": "^3.0.7"
},
"engines": {
"node": "^12.13.0 || ^14.15.0 || >=16.0.0"
}
},
"node_modules/ws": {
"version": "8.18.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10.0.0"
},
"peerDependencies": {
"bufferutil": "^4.0.1",
"utf-8-validate": ">=5.0.2"
},
"peerDependenciesMeta": {
"bufferutil": {
"optional": true
},
"utf-8-validate": {
"optional": true
}
}
},
"node_modules/xml": {
"version": "1.0.1",
"dev": true,
"license": "MIT"
},
"node_modules/xml-name-validator": {
"version": "4.0.0",
"dev": true,
"license": "Apache-2.0",
"engines": {
"node": ">=12"
}
},
"node_modules/xmlchars": {
"version": "2.2.0",
"dev": true,
"license": "MIT"
},
"node_modules/xtend": {
"version": "4.0.2",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.4"
}
},
"node_modules/y18n": {
"version": "5.0.8",
"dev": true,
"license": "ISC",
"engines": {
"node": ">=10"
}
},
"node_modules/yallist": {
"version": "3.1.1",
"dev": true,
"license": "ISC"
},
"node_modules/yaml": {
"version": "1.10.2",
"dev": true,
"license": "ISC",
"engines": {
"node": ">= 6"
}
},
"node_modules/yargs": {
"version": "17.7.2",
"dev": true,
"license": "MIT",
"dependencies": {
"cliui": "^8.0.1",
"escalade": "^3.1.1",
"get-caller-file": "^2.0.5",
"require-directory": "^2.1.1",
"string-width": "^4.2.3",
"y18n": "^5.0.5",
"yargs-parser": "^21.1.1"
},
"engines": {
"node": ">=12"
}
},
"node_modules/yargs-parser": {
"version": "21.1.1",
"dev": true,
"license": "ISC",
"engines": {
"node": ">=12"
}
},
"node_modules/yocto-queue": {
"version": "0.1.0",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
}
}
}
diff --git a/cashtab/package.json b/cashtab/package.json
index af876e4ad..4f1d24832 100644
--- a/cashtab/package.json
+++ b/cashtab/package.json
@@ -1,125 +1,125 @@
{
"name": "cashtab",
- "version": "3.23.0",
+ "version": "3.24.0",
"private": true,
"scripts": {
"start": "node scripts/start.js",
"build": "node scripts/build.js",
"test": "node scripts/test.js",
"debug": "DEBUG=true node scripts/test.js",
"test:coverage": "CI=true npm run test --coverage",
"preextension": "npm i -g browserify",
"extension": "REACT_APP_BUILD_ENV=extension ./scripts/extension.sh"
},
"browserslist": {
"production": [
"chrome >= 67",
"edge >= 79",
"firefox >= 68",
"opera >= 54",
"safari >= 14"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
"dependencies": {
"@zxing/browser": "^0.1.4",
"bignumber.js": "^9.1.2",
"bip39": "^3.0.2",
"bip66": "^1.1.5",
"chronik-client": "file:../modules/chronik-client",
"ecash-agora": "file:../modules/ecash-agora",
"ecash-lib": "file:../modules/ecash-lib",
"ecash-script": "file:../modules/ecash-script",
"ecashaddrjs": "file:../modules/ecashaddrjs",
"js-sha256": "^0.11.0",
"localforage": "^1.9.0",
"qrcode.react": "^3.1.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-easy-crop": "^5.0.6",
"react-ga": "^3.3.0",
"react-router-dom": "^6.22.0",
"react-toastify": "^11.0.2",
"react-tooltip": "^5.28.0",
"recaptcha-v3": "^1.11.3",
"swiper": "^11.1.14",
"wif": "^4.0.0"
},
"devDependencies": {
"@babel/core": "^7.16.0",
"@babel/plugin-proposal-private-property-in-object": "^7.21.11",
"@babel/preset-typescript": "^7.26.0",
"@pmmmwh/react-refresh-webpack-plugin": "^0.5.3",
"@svgr/webpack": "^6.3.1",
"@testing-library/jest-dom": "^6.4.2",
"@testing-library/react": "^16.0.1",
"@testing-library/user-event": "^14.5.2",
"@types/jest": "^29.5.14",
"@types/jest-when": "^3.5.5",
"@types/lodash.debounce": "^4.0.9",
"@types/randombytes": "^2.0.3",
"@types/react": "^18.3.12",
"@types/react-dom": "^18.3.1",
"@types/styled-components": "^5.1.34",
"@types/webpack-env": "^1.18.5",
"@types/wif": "^2.0.5",
"assert": "^2.0.0",
"babel-jest": "^29.7.0",
"babel-loader": "^8.2.3",
"babel-plugin-named-asset-import": "^0.3.8",
"babel-preset-react-app": "^10.0.1",
"bfj": "^7.0.2",
"browserslist": "^4.18.1",
"buffer": "^6.0.3",
"camelcase": "^6.2.1",
"case-sensitive-paths-webpack-plugin": "^2.4.0",
"crypto-browserify": "^3.12.1",
"css-loader": "^6.5.1",
"css-minimizer-webpack-plugin": "^3.2.0",
"dotenv": "^10.0.0",
"dotenv-expand": "^5.1.0",
"extensionizer": "^1.0.1",
"fake-indexeddb": "^5.0.2",
"file-loader": "^6.2.0",
"fs-extra": "^10.0.0",
"html-webpack-plugin": "^5.5.0",
"identity-obj-proxy": "^3.0.0",
"jest": "^29.7.0",
"jest-canvas-mock": "^2.5.2",
"jest-environment-jsdom": "^29.7.0",
"jest-junit": "^16.0.0",
"jest-watch-typeahead": "^2.2.2",
"jest-when": "^3.6.0",
"mini-css-extract-plugin": "^2.4.5",
"node-polyfill-webpack-plugin": "^4.0.0",
"postcss": "^8.4.4",
"postcss-flexbugs-fixes": "^5.0.2",
"postcss-loader": "^6.2.1",
"postcss-normalize": "^10.0.1",
"postcss-preset-env": "^7.0.1",
"prop-types": "^15.8.1",
"react-app-polyfill": "^3.0.0",
"react-dev-utils": "^12.0.0",
"react-refresh": "^0.11.0",
"resolve": "^1.20.0",
"resolve-url-loader": "^5.0.0",
"sass-loader": "^12.3.0",
"semver": "^7.3.5",
"source-map-loader": "^3.0.0",
"stream-browserify": "^3.0.0",
"style-loader": "^3.3.1",
"styled-components": "^4.4.0",
"tailwindcss": "^3.0.2",
"terser-webpack-plugin": "^5.2.5",
"util": "^0.12.5",
"web-vitals": "^2.1.4",
"webpack": "^5.90.1",
"webpack-dev-server": "^4.6.0",
"webpack-manifest-plugin": "^4.0.2",
"workbox-webpack-plugin": "^6.4.1"
}
}
diff --git a/cashtab/src/components/Etokens/Token/index.tsx b/cashtab/src/components/Etokens/Token/index.tsx
index 0103ec694..e7e17de87 100644
--- a/cashtab/src/components/Etokens/Token/index.tsx
+++ b/cashtab/src/components/Etokens/Token/index.tsx
@@ -1,3877 +1,3893 @@
// Copyright (c) 2024 The Bitcoin developers
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
import React, { useState, useEffect, useContext } from 'react';
import { Link, useParams } from 'react-router-dom';
import { WalletContext, isWalletContextLoaded } from 'wallet/context';
import PrimaryButton, {
SecondaryButton,
IconButton,
CopyIconButton,
} from 'components/Common/Buttons';
import { SwitchLabel, Info, Alert } from 'components/Common/Atoms';
import Spinner from 'components/Common/Spinner';
import { Event } from 'components/Common/GoogleAnalytics';
import ApiError from 'components/Common/ApiError';
import {
isValidTokenSendOrBurnAmount,
parseAddressInput,
isValidTokenMintAmount,
getXecListPriceError,
getAgoraPartialListPriceError,
NANOSAT_DECIMALS,
isValidTokenId,
getAgoraMinBuyError,
} from 'validation';
import BigNumber from 'bignumber.js';
import {
formatDate,
getFormattedFiatPrice,
getAgoraSpotPriceXec,
decimalizedTokenQtyToLocaleFormat,
toFormattedXec,
} from 'formatting';
import TokenIcon from 'components/Etokens/TokenIcon';
import { explorer } from 'config/explorer';
import { token as tokenConfig } from 'config/token';
import { isValidCashAddress } from 'ecashaddrjs';
import appConfig from 'config/app';
import { getUserLocale } from 'helpers';
import {
getSlpSendTargetOutputs,
getSlpBurnTargetOutputs,
getMintBatons,
getMintTargetOutputs,
getNftChildGenesisInput,
getNftParentFanInputs,
getNftParentFanTxTargetOutputs,
getNft,
getNftChildSendTargetOutputs,
getAgoraAdFuelSats,
SUPPORTED_MINT_TYPES,
} from 'token-protocols/slpv1';
import {
getAlpSendTargetOutputs,
getAlpBurnTargetOutputs,
getAlpMintTargetOutputs,
getAlpAgoraListTargetOutputs,
} from 'token-protocols/alp';
import {
getSendTokenInputs,
TokenInputInfo,
TokenTargetOutput,
getMaxDecimalizedQty,
} from 'token-protocols';
import { sendXec } from 'transactions';
import {
hasEnoughToken,
decimalizeTokenAmount,
toSatoshis,
toXec,
undecimalizeTokenAmount,
xecToNanoSatoshis,
TokenUtxo,
SlpDecimals,
CashtabPathInfo,
ScriptUtxoWithToken,
} from 'wallet';
import Modal from 'components/Common/Modal';
import { toast } from 'react-toastify';
import {
InputWithScanner,
SendTokenInput,
ModalInput,
InputFlex,
ListPriceInput,
Slider,
LabelAndInputFlex,
SliderLabel,
} from 'components/Common/Inputs';
import { QuestionIcon } from 'components/Common/CustomIcons';
import Switch from 'components/Common/Switch';
import {
DataAndQuestionButton,
TokenIconExpandButton,
SendTokenForm,
SendTokenFormRow,
InputRow,
TokenStatsTable,
TokenStatsRow,
TokenStatsCol,
TokenUrlCol,
TokenStatsTableRow,
SwitchHolder,
InfoModalParagraph,
ButtonDisabledMsg,
ButtonDisabledSpan,
NftTitle,
NftTable,
NftRow,
NftCol,
NftTokenIdAndCopyIcon,
NftNameTitle,
NftCollectionTitle,
ListPricePreview,
AgoraPreviewParagraph,
AgoraPreviewTable,
AgoraPreviewRow,
AgoraPreviewLabel,
AgoraPreviewCol,
TokenScreenWrapper,
NftOfferWrapper,
OuterCtn,
TokenStatsRowCtn,
} from 'components/Etokens/Token/styled';
import CreateTokenForm from 'components/Etokens/CreateTokenForm';
import {
getAllTxHistoryByTokenId,
getChildNftsFromParent,
getTokenGenesisInfo,
} from 'chronik';
import { GenesisInfo, TokenType } from 'chronik-client';
import { supportedFiatCurrencies } from 'config/CashtabSettings';
import {
slpSend,
SLP_NFT1_CHILD,
- SLP_FUNGIBLE,
Script,
fromHex,
shaRmd160,
P2PKHSignatory,
ALL_BIP143,
} from 'ecash-lib';
import { InlineLoader } from 'components/Common/Spinner';
import {
AgoraOneshot,
AgoraOneshotAdSignatory,
AgoraPartialAdSignatory,
AgoraPartial,
} from 'ecash-agora';
import OrderBook from 'components/Agora/OrderBook';
import Collection, {
OneshotSwiper,
OneshotOffer,
} from 'components/Agora/Collection';
import { CashtabCachedTokenInfo } from 'config/CashtabCache';
import { confirmRawTx } from 'components/Send/helpers';
import { FIRMA, XECX_SWEEPER_ADDRESS } from 'constants/tokens';
const Token: React.FC = () => {
const ContextValue = useContext(WalletContext);
if (!isWalletContextLoaded(ContextValue)) {
// Confirm we have all context required to load the page
return null;
}
const {
apiError,
cashtabState,
updateCashtabState,
chronik,
agora,
ecc,
chaintipBlockheight,
fiatPrice,
} = ContextValue;
const { settings, wallets, cashtabCache } = cashtabState;
const wallet = wallets[0];
// We get sk/pk/hash when wallet changes
const { sk, pk, address } = wallet.paths.get(
appConfig.derivationPath,
) as CashtabPathInfo;
const changeScript = Script.fromAddress(address);
const { tokens, balanceSats } = wallet.state;
const { tokenId } = useParams();
if (typeof tokenId === 'undefined') {
// We can't render this component without tokenId, any tokenId
return null;
}
const validTokenId = isValidTokenId(tokenId);
const tokenBalance = tokens.get(tokenId);
const cachedInfo: undefined | CashtabCachedTokenInfo =
cashtabCache.tokens.get(tokenId);
const cachedInfoLoaded = typeof cachedInfo !== 'undefined';
let tokenType: undefined | TokenType,
protocol: undefined | 'SLP' | 'ALP',
genesisInfo: undefined | GenesisInfo,
genesisSupply: undefined | string,
tokenName: undefined | string,
tokenTicker: undefined | string,
url: undefined | string,
hash: undefined | string,
decimals: undefined | number;
if (cachedInfoLoaded) {
({ tokenType, genesisInfo, genesisSupply } = cachedInfo);
({ protocol } = tokenType);
({ tokenName, tokenTicker, url, hash, decimals } = genesisInfo);
}
let isSupportedToken = false;
let isNftParent = false;
let isNftChild = false;
let isAlp = false;
// Assign default values which will be presented for any token without explicit support
let renderedTokenType =
typeof tokenType !== 'undefined'
? `${protocol} ${tokenType.number} ${tokenType.type}`
: 'Loading token info...';
let renderedTokenDescription =
'This token is not yet supported by Cashtab.';
switch (protocol) {
case 'SLP': {
switch (tokenType?.type) {
case 'SLP_TOKEN_TYPE_FUNGIBLE': {
renderedTokenType = 'SLP';
renderedTokenDescription =
'SLP 1 fungible token. Token may be of fixed supply if no mint batons exist. If you have a mint baton, you can mint more of this token at any time. May have up to 9 decimal places.';
isSupportedToken = true;
break;
}
case 'SLP_TOKEN_TYPE_NFT1_GROUP': {
renderedTokenType = 'NFT Collection';
renderedTokenDescription =
'The parent tokens for an NFT collection. Can be used to mint NFTs. No decimal places. The supply of this token is the potential quantity of NFTs which could be minted. If no mint batons exist, the supply is fixed.';
isSupportedToken = true;
isNftParent = true;
break;
}
case 'SLP_TOKEN_TYPE_NFT1_CHILD': {
renderedTokenType = 'NFT';
renderedTokenDescription =
'eCash NFT. NFT supply is always 1. This NFT may belong to an NFT collection.';
isSupportedToken = true;
isNftChild = true;
break;
}
+ case 'SLP_TOKEN_TYPE_MINT_VAULT': {
+ renderedTokenType = 'SLP 2';
+ renderedTokenDescription =
+ 'SLP 2 mint vault token. Any utxo at the mint vault address may mint additional supply.';
+ isSupportedToken = true;
+ break;
+ }
default: {
// leave renderedTokenType and renderedTokenDescription as defaults
break;
}
}
break;
}
case 'ALP': {
renderedTokenType = 'ALP';
switch (tokenType?.type) {
case 'ALP_TOKEN_TYPE_STANDARD': {
renderedTokenType = 'ALP';
renderedTokenDescription =
'ALP v1 fungible token. Token may be of fixed or variable supply. If you have a mint baton, you can mint more of this token at any time. May have up to 9 decimal places. ALP tokens use EMPP technology, which supports more token actions compared to SLP and more complex combinations of token and app actions. ALP token txs may have up to 127 outputs, though current OP_RETURN size de facto limits a single tx to 29 outputs.';
isSupportedToken = true;
isAlp = true;
break;
}
default: {
// leave renderedTokenType and renderedTokenDescription as defaults
break;
}
}
break;
}
default: {
// leave renderedTokenType and renderedTokenDescription as defaults
break;
}
}
const [isBlacklisted, setIsBlacklisted] = useState<null | boolean>(null);
const [chronikQueryError, setChronikQueryError] = useState<boolean>(false);
const [nftTokenIds, setNftTokenIds] = useState<string[]>([]);
const [nftChildGenesisInput, setNftChildGenesisInput] = useState<
TokenUtxo[]
>([]);
const [nftFanInputs, setNftFanInputs] = useState<TokenUtxo[]>([]);
const [availableNftInputs, setAvailableNftInputs] = useState<number>(0);
const [showTokenTypeInfo, setShowTokenTypeInfo] = useState<boolean>(false);
const [showAgoraPartialInfo, setShowAgoraPartialInfo] =
useState<boolean>(false);
const [showFanoutInfo, setShowFanoutInfo] = useState<boolean>(false);
const [showMintNftInfo, setShowMintNftInfo] = useState<boolean>(false);
const [sendTokenAddressError, setSendTokenAddressError] = useState<
false | string
>(false);
const [sendTokenAmountError, setSendTokenAmountError] = useState<
false | string
>(false);
const [showConfirmBurnEtoken, setShowConfirmBurnEtoken] =
useState<boolean>(false);
const [burnTokenAmountError, setBurnTokenAmountError] = useState<
false | string
>(false);
const [mintAmountError, setMintAmountError] = useState<false | string>(
false,
);
const [burnConfirmationError, setBurnConfirmationError] = useState<
false | string
>(false);
const [confirmationOfEtokenToBeBurnt, setConfirmationOfEtokenToBeBurnt] =
useState<string>('');
const [selectedCurrency, setSelectedCurrency] = useState<string>(
appConfig.ticker,
);
const [nftListPriceError, setNftListPriceError] = useState<false | string>(
false,
);
const [tokenListPriceError, setTokenListPriceError] = useState<
false | string
>(false);
const [showConfirmListNft, setShowConfirmListNft] =
useState<boolean>(false);
const [showConfirmListPartialSlp, setShowConfirmListPartialSlp] =
useState<boolean>(false);
const [agoraPartialTokenQty, setAgoraPartialTokenQty] =
useState<string>('');
const [agoraPartialTokenQtyError, setAgoraPartialTokenQtyError] = useState<
false | string
>(false);
const [agoraPartialMin, setAgoraPartialMin] = useState<string>('');
const [agoraPartialMinError, setAgoraPartialMinError] = useState<
false | string
>(false);
// We need to build an agora partial and keep it in state so the user is able
// to confirm the actual offer is reasonable vs their inputs, which are approximations
const [previewedAgoraPartial, setPreviewedAgoraPartial] =
useState<null | AgoraPartial>(null);
const [
previewedAgoraPartialUnacceptable,
setPreviewedAgoraPartialUnacceptable,
] = useState<boolean>(false);
const [nftActiveOffer, setNftActiveOffer] = useState<null | OneshotOffer[]>(
null,
);
const [nftOfferAgoraQueryError, setNftOfferAgoraQueryError] =
useState<boolean>(false);
// By default, we load the app with all switches disabled
// For SLP v1 tokens, we want showSend to be enabled by default
// But we may not want this to be default for other token types in the future
interface TokenScreenSwitches {
showRedeemXecx: boolean;
showRedeemFirma: boolean;
showSend: boolean;
showAirdrop: boolean;
showBurn: boolean;
showMint: boolean;
showFanout: boolean;
showMintNft: boolean;
showSellNft: boolean;
showSellSlp: boolean;
}
const switchesOff: TokenScreenSwitches = {
showRedeemXecx: false,
showRedeemFirma: false,
showSend: false,
showAirdrop: false,
showBurn: false,
showMint: false,
showFanout: false,
showMintNft: false,
showSellNft: false,
showSellSlp: false,
};
const [switches, setSwitches] = useState<TokenScreenSwitches>(switchesOff);
const [showLargeIconModal, setShowLargeIconModal] =
useState<boolean>(false);
const [showLargeNftIcon, setShowLargeNftIcon] = useState<string>('');
interface UncachedTokenInfo {
circulatingSupply: null | string;
mintBatons: null | number;
}
const defaultUncachedTokenInfo: UncachedTokenInfo = {
circulatingSupply: null,
mintBatons: null,
};
const [uncachedTokenInfo, setUncachedTokenInfo] =
useState<UncachedTokenInfo>(defaultUncachedTokenInfo);
const [uncachedTokenInfoError, setUncachedTokenInfoError] =
useState<boolean>(false);
// Check if the user has mint batons for this token
// If they don't, disable the mint switch and label why
const mintBatons = getMintBatons(wallet.state.slpUtxos, tokenId as string);
const [isModalVisible, setIsModalVisible] = useState<boolean>(false);
const [confirmMintModalVisible, setConfirmMintModalVisible] =
useState<boolean>(false);
interface TokenScreenFormData {
amount: string;
address: string;
burnAmount: string;
mintAmount: string;
nftListPrice: string;
tokenListPrice: string;
}
const emptyFormData: TokenScreenFormData = {
amount: '',
address: '',
burnAmount: '',
mintAmount: '',
nftListPrice: '',
tokenListPrice: '',
};
const [formData, setFormData] =
useState<TokenScreenFormData>(emptyFormData);
const [isCalculatingRedeemFirma, setIsCalculatingRedeemFirma] =
useState<boolean>(false);
const [xecxSweeperBalanceSats, setXecxSweeperBalanceSats] = useState<
null | bigint
>(null);
const userLocale = getUserLocale(navigator);
/**
* Convenience method to compartmentalize comparison of state
* variables that require calculations
*
* TODO dynamically size modals
*/
const getRedeemXecxModalHeight = () => {
const askedQtyStr = Number(agoraPartialTokenQty).toFixed(2);
const actualQtyStr = decimalizeTokenAmount(
previewedAgoraPartial!.offeredAtoms().toString(),
decimals as SlpDecimals,
);
const offeredXecxSats = previewedAgoraPartial!.offeredAtoms();
let baseHeight = 175;
if (
xecxSweeperBalanceSats !== null &&
offeredXecxSats > xecxSweeperBalanceSats
) {
// If we need to show the "redemption may take 24 hrs" notice
baseHeight += 125;
}
if (askedQtyStr !== actualQtyStr) {
// If we need to show the "agora values differ" notice
baseHeight += 125;
}
return baseHeight;
};
const getAgoraPartialActualPrice = () => {
if (previewedAgoraPartial === null) {
return;
}
// Due to encoding limitations of agora offers, the actual price may vary depending on how
// much of an offer the buyer accepts
// Calculate the actual price by determining the price per token for the minimum buy of the created preview offer
// Get min accepted tokens
// Note this value is in token satoshis
const minAcceptedTokenSatoshis =
previewedAgoraPartial.minAcceptedAtoms();
// Get the cost for accepting the min offer
// Note this price is in satoshis (per token satoshi)
const minAcceptPriceSats = previewedAgoraPartial.askedSats(
minAcceptedTokenSatoshis,
);
const minAcceptedPriceXec = toXec(Number(minAcceptPriceSats));
// Decimalize token amount
const minAcceptedTokens = decimalizeTokenAmount(
minAcceptedTokenSatoshis.toString(),
decimals as SlpDecimals,
);
// Get the unit price
// Use BigNumber because this could be less than 1 satoshi
const actualPricePerToken = new BigNumber(minAcceptedPriceXec).div(
new BigNumber(minAcceptedTokens),
);
// Get formatted price in XEC
const renderedActualPrice = getAgoraSpotPriceXec(
actualPricePerToken.toNumber(),
userLocale,
);
return renderedActualPrice;
};
const getAgoraPartialTargetPriceXec = () => {
if (formData.tokenListPrice === '') {
return;
}
// Get the price per token, in XEC, based on the user's input settings
// Used for a visual comparison with the calculated actual price in XEC
// from the created Agora Partial (which we get from getAgoraPartialActualPrice())
const targetPriceXec =
selectedCurrency === appConfig.ticker
? formData.tokenListPrice
: // NB for selectedCurrency to be fiat fiatPrice is not null
parseFloat(formData.tokenListPrice) / (fiatPrice as number);
return getAgoraSpotPriceXec(targetPriceXec, userLocale);
};
/**
* Get price preview of per-token agora partial pricing
* Depends on user currency selection and locale
*/
const getAgoraPartialPricePreview = () => {
// Make sure you have the state fields you need to render
if (
typeof userLocale !== 'string' ||
typeof formData === 'undefined' ||
formData.tokenListPrice === '' ||
typeof settings !== 'object' ||
typeof fiatPrice === 'undefined'
) {
return;
}
let inputPrice = formData.tokenListPrice;
if (inputPrice === '') {
inputPrice = '0';
}
return selectedCurrency === appConfig.ticker
? `${getAgoraSpotPriceXec(
inputPrice,
userLocale,
)} (${getFormattedFiatPrice(
settings.fiatCurrency,
userLocale,
inputPrice,
fiatPrice,
)}) per token`
: `${supportedFiatCurrencies[settings.fiatCurrency].symbol}${
parseFloat(inputPrice) > 1
? parseFloat(inputPrice).toLocaleString(userLocale)
: inputPrice
} ${selectedCurrency.toUpperCase()} (${getAgoraSpotPriceXec(
parseFloat(inputPrice) / (fiatPrice as number),
userLocale,
)}) per token`;
};
const getTokenBlacklistStatus = async () => {
// Fetch server-maintained blacklist
let blacklistStatus;
try {
blacklistStatus = (
await (
await fetch(
`${tokenConfig.blacklistServerUrl}/blacklist/${tokenId}`,
)
).json()
).isBlacklisted;
setIsBlacklisted(blacklistStatus);
} catch (err) {
console.error(
`Error fetching blacklistStatus from ${tokenConfig.blacklistServerUrl}/blacklist/${tokenId}`,
err,
);
// Assume it's ok
setIsBlacklisted(false);
}
};
const getUncachedTokenInfo = async () => {
let tokenUtxos;
try {
tokenUtxos = await chronik.tokenId(tokenId).utxos();
let undecimalizedBigIntCirculatingSupply = 0n;
let mintBatons = 0;
for (const utxo of tokenUtxos.utxos) {
// getting utxos by tokenId returns only token utxos
const { token } = utxo as ScriptUtxoWithToken;
const { atoms, isMintBaton } = token;
undecimalizedBigIntCirculatingSupply += atoms;
if (isMintBaton) {
mintBatons += 1;
}
}
const circulatingSupply = decimalizeTokenAmount(
undecimalizedBigIntCirculatingSupply.toString(),
decimals as SlpDecimals,
);
setUncachedTokenInfo({ circulatingSupply, mintBatons });
} catch (err) {
console.error(`Error in chronik.tokenId(${tokenId}).utxos()`, err);
setUncachedTokenInfoError(true);
}
};
const addTokenToCashtabCache = async (tokenId: string) => {
try {
const cachedInfoWithGroupTokenId = await getTokenGenesisInfo(
chronik,
tokenId,
);
cashtabCache.tokens.set(tokenId, cachedInfoWithGroupTokenId);
updateCashtabState('cashtabCache', cashtabCache);
} catch (err) {
console.error(`Error getting token details for ${tokenId}`, err);
setChronikQueryError(true);
}
};
const getXecxSweeperBalance = async () => {
let sweeperUtxos;
try {
sweeperUtxos = (await chronik.address(XECX_SWEEPER_ADDRESS).utxos())
.utxos;
const balanceSats = sweeperUtxos
.map(utxo => utxo.sats)
.reduce((prev, curr) => prev + curr, 0n);
setXecxSweeperBalanceSats(balanceSats);
} catch (err) {
// If there is some error in getting the utxo set of the sweeper address,
// we will not be able to get the balance, and Cashtab will simply not show
// this information
console.error(`Error getting XECX Sweeper balance`, err);
}
};
useEffect(() => {
if (tokenId === appConfig.vipTokens.xecx.tokenId) {
// Get XECX sweeper balance when user is on xecx token page
getXecxSweeperBalance();
}
}, [tokenId]);
useEffect(() => {
if (
typeof tokenId === 'undefined' ||
typeof tokenType === 'undefined' ||
!cachedInfoLoaded
) {
return;
}
if (tokenType.type === 'SLP_TOKEN_TYPE_NFT1_CHILD') {
// Check if we have its groupTokenId
if (typeof cachedInfo.groupTokenId === 'undefined') {
// If this is an NFT and its groupTokenId is not cached
// Update this tokens cached info
// Note, use of "tokenId" here and not "groupTokenId" is not an error
// cashtabCache used to not track groupTokenIds, now it does, so we update it
addTokenToCashtabCache(tokenId);
} else {
// If we do have a groupTokenId, check if we have cached token info about the group
const nftCollectionCachedInfo = cashtabCache.tokens.get(
cachedInfo.groupTokenId,
);
if (typeof nftCollectionCachedInfo === 'undefined') {
// If we do not have the NFT collection token info in cache, add it
addTokenToCashtabCache(cachedInfo.groupTokenId);
}
}
}
}, [tokenId, cachedInfo]);
useEffect(() => {
if (!validTokenId) {
// No need to ask chronik for an expected error
return;
}
if (typeof cashtabCache.tokens.get(tokenId) === 'undefined') {
// If we do not have this token's info, get it
addTokenToCashtabCache(tokenId as string);
} else {
// Get token info that is not practical to cache as it is subject to change
// Note that we need decimals from cache for supply to be accurate
getUncachedTokenInfo();
// Get token blacklist status
getTokenBlacklistStatus();
}
}, [tokenId, cashtabCache.tokens.get(tokenId)]);
useEffect(() => {
if (formData.tokenListPrice === '' || agoraPartialTokenQty === '') {
// If we have no price or no offered qty, do nothing
// Min buy is the last field entered
return;
}
const isRedeemingXecx =
tokenId === appConfig.vipTokens.xecx.tokenId &&
switches.showRedeemXecx;
let agoraPartialMinToValidate = agoraPartialMin;
// If the user has not yet entered the min quantity, enter THE MINIMUM ALLOWED min qty as default
if (agoraPartialMin === '' || isRedeemingXecx) {
// If agoraPartialMin is unset OR if we are redeeming XECX
// Then we must update agoraPartialMin when agoraPartialTokenQty changes
if (parseFloat(formData.tokenListPrice) === 0) {
// We can get here if the user is typing, e.g. 0.0001
// We do not want to setAgoraPartialMin(Infinity)
return;
}
const requiredMinBuyTokenQty = isRedeemingXecx
? // If this is XECX and the user is trying to redeem, the min is the total offered
agoraPartialTokenQty
: // Otherwise it is the value that would be worth dust if sold
new BigNumber(toXec(appConfig.dustSats))
.div(formData.tokenListPrice)
.decimalPlaces(
decimals as SlpDecimals,
BigNumber.ROUND_UP,
)
.toString();
// Set it as the min
// "return" as this change will trigger validation, we will re-enter this useEffect
// "should" always be valid tho
setAgoraPartialMin(requiredMinBuyTokenQty);
// We want to validate this here because the calculated min could be higher than the
// total offered qty
agoraPartialMinToValidate = requiredMinBuyTokenQty;
}
// Normal validation, there may be some other reason agoraPartialMin is still invalid
const agoraMinBuyError = getAgoraMinBuyError(
formData.tokenListPrice as string,
selectedCurrency,
fiatPrice,
agoraPartialMinToValidate,
agoraPartialTokenQty,
decimals as SlpDecimals,
// Component does not render until token info is defined
protocol as 'ALP' | 'SLP',
tokenBalance as string, // we do not render the slide without tokenBalance
userLocale,
);
setAgoraPartialMinError(agoraMinBuyError);
}, [formData.tokenListPrice, agoraPartialTokenQty]);
const getNftOffer = async () => {
try {
const thisNftOffer = await agora.activeOffersByTokenId(tokenId);
// Note we only expect an array of length 0 or 1 here
// We only call this function on NFTs so we only expect OneshotOffer[]
setNftActiveOffer(thisNftOffer as OneshotOffer[]);
} catch {
console.error(
`Error querying agora.activeOffersByTokenId(${tokenId})`,
);
setNftOfferAgoraQueryError(true);
}
};
useEffect(() => {
if (!isSupportedToken || typeof tokenType === 'undefined') {
// Do nothing for unsupported tokens
// Do nothing if we haven't loaded the cached info yet
return;
}
// This useEffect block works as a de-facto "on load" block,
// for after we have the tokenId from the url params of this page
if (!isNftParent) {
if (tokenId === appConfig.vipTokens.xecx.tokenId) {
// If this is the XECX token page, default option is redeeming XECX
// i.e. selling XECX for XEC, 1:1
setSwitches({ ...switchesOff, showRedeemXecx: true });
} else if (tokenId === FIRMA.tokenId) {
// If this is the Firma token page, default option is redeeming Firma
// i.e. selling Firma for XEC at the Firma bid price
setSwitches({ ...switchesOff, showRedeemFirma: true });
} else if (isNftChild) {
// Default action is list
setSwitches({ ...switchesOff, showSellNft: true });
// Check if it is listed
getNftOffer();
- } else if (tokenType.type === 'SLP_TOKEN_TYPE_FUNGIBLE' || isAlp) {
+ } else if (
+ tokenType.type === 'SLP_TOKEN_TYPE_FUNGIBLE' ||
+ tokenType.type === 'SLP_TOKEN_TYPE_MINT_VAULT' ||
+ isAlp
+ ) {
+ // Default action is List for non-NFT tokens
setSwitches({ ...switchesOff, showSellSlp: true });
} else {
// Default action is send
setSwitches({ ...switchesOff, showSend: true });
}
}
}, [isSupportedToken, isNftParent, isNftChild]);
useEffect(() => {
if (switches.showRedeemXecx) {
// If the user is redeeming XECX
// Set selected currency to XEC
setSelectedCurrency(appConfig.ticker);
// Set the listing price to 1 XEC
setFormData({
...formData,
tokenListPrice: '1',
});
}
}, [switches]);
useEffect(() => {
if (fiatPrice === null && selectedCurrency !== 'XEC') {
// Clear NFT and Token list prices and de-select fiat currency if rate is unavailable
handleSelectedCurrencyChange({
target: { value: 'XEC' },
} as React.ChangeEvent<HTMLSelectElement>);
}
}, [fiatPrice]);
const getNfts = async (tokenId: string) => {
const nftParentTxHistory = await getAllTxHistoryByTokenId(
chronik,
tokenId,
);
const childNfts = getChildNftsFromParent(tokenId, nftParentTxHistory);
setNftTokenIds(childNfts);
};
useEffect(() => {
// On change of wallet token utxo set
if (isNftParent) {
// If this is an SLP1 NFT Parent
// Update nft fan inputs
setNftFanInputs(
getNftParentFanInputs(tokenId as string, wallet.state.slpUtxos),
);
// Update nft child genesis input
// Note this is always an array, either empty or of 1 qty-1 utxo
setNftChildGenesisInput(
getNftChildGenesisInput(
tokenId as string,
wallet.state.slpUtxos,
),
);
// Update the child NFTs
getNfts(tokenId as string);
// Get total amount of child genesis inputs
const availableNftMintInputs = wallet.state.slpUtxos.filter(
(slpUtxo: TokenUtxo) =>
slpUtxo?.token?.tokenId === tokenId &&
slpUtxo?.token?.atoms === 1n,
);
setAvailableNftInputs(availableNftMintInputs.length);
}
}, [wallet.state.slpUtxos, isNftParent]);
useEffect(() => {
if (nftChildGenesisInput.length > 0) {
// If we have inputs to mint an NFT, NFT1 default action should be Mint NFT
setSwitches({
...switchesOff,
showMintNft: true,
});
} else if (nftFanInputs.length > 0) {
// If we have no nftChildGenesisInput but we do have nftFanInputs
// default action should be a fan-out tx to get these inputs
setSwitches({
...switchesOff,
showFanout: true,
});
}
// Otherwise all switches are off
}, [nftFanInputs, nftChildGenesisInput]);
useEffect(() => {
if (previewedAgoraPartial === null) {
// Hide the confirm modal if the user cancels the listing
// This happens
// 1 - on screen load
// 2 - on user canceling an SLP listing at confirmation modal
return setShowConfirmListPartialSlp(false);
}
// Is this an unacceptable offer?
// Note: we need to catch these in library validation, but it's
// important to make sure they stop getting created rightnow
const isUnacceptableOffer =
previewedAgoraPartial.minAcceptedAtoms() >
previewedAgoraPartial.offeredAtoms();
setPreviewedAgoraPartialUnacceptable(isUnacceptableOffer);
// Show the Agora Partial summary and confirm modal when we have a non-null previewedAgoraPartial
setShowConfirmListPartialSlp(true);
}, [previewedAgoraPartial]);
// Clears address and amount fields following a send token notification
const clearInputForms = () => {
setFormData(emptyFormData);
};
async function sendToken() {
// GA event
Event('SendToken.js', 'Send', tokenId as string);
const { address, amount } = formData;
const cleanAddress = address.split('?')[0];
try {
// Get input utxos for slpv1 or ALP send tx
const tokenInputInfo = !isNftChild
? // Note this works for ALP or SLP
getSendTokenInputs(
wallet.state.slpUtxos,
tokenId as string,
amount,
decimals as SlpDecimals,
)
: undefined;
// Get targetOutputs for an slpv1 send tx
const tokenSendTargetOutputs = isNftChild
? getNftChildSendTargetOutputs(tokenId as string, cleanAddress)
: isAlp
? getAlpSendTargetOutputs(
tokenInputInfo as TokenInputInfo,
cleanAddress,
)
: getSlpSendTargetOutputs(
tokenInputInfo as TokenInputInfo,
cleanAddress,
+ tokenType!.number,
);
// Build and broadcast the tx
const { response } = await sendXec(
chronik,
ecc,
wallet,
tokenSendTargetOutputs,
settings.minFeeSends &&
(hasEnoughToken(
tokens,
appConfig.vipTokens.grumpy.tokenId,
appConfig.vipTokens.grumpy.vipBalance,
) ||
hasEnoughToken(
tokens,
appConfig.vipTokens.cachet.tokenId,
appConfig.vipTokens.cachet.vipBalance,
))
? appConfig.minFee
: appConfig.defaultFee,
chaintipBlockheight,
isNftChild
? getNft(tokenId as string, wallet.state.slpUtxos)
: (tokenInputInfo as TokenInputInfo).tokenInputs,
);
confirmRawTx(
<a
href={`${explorer.blockExplorerUrl}/tx/${response.txid}`}
target="_blank"
rel="noopener noreferrer"
>
{isNftChild ? 'NFT sent' : 'eToken sent'}
</a>,
);
clearInputForms();
} catch (e) {
console.error(`Error sending ${isNftChild ? 'NFT' : 'token'}`, e);
toast.error(`${e}`);
}
}
/**
* Create SLP1 NFT Mint Fan Inputs
* Function may only be called if nftFanInputs is not an empty array
* Note the only button that calls this function is disabled if nftFanInputs.length === 0
*/
async function createNftMintInputs() {
try {
// Get targetOutputs for an slpv1 nft parent fan-out tx
const nftFanTargetOutputs =
getNftParentFanTxTargetOutputs(nftFanInputs);
// Build and broadcast the tx
const { response } = await sendXec(
chronik,
ecc,
wallet,
nftFanTargetOutputs,
settings.minFeeSends &&
(hasEnoughToken(
tokens,
appConfig.vipTokens.grumpy.tokenId,
appConfig.vipTokens.grumpy.vipBalance,
) ||
hasEnoughToken(
tokens,
appConfig.vipTokens.cachet.tokenId,
appConfig.vipTokens.cachet.vipBalance,
))
? appConfig.minFee
: appConfig.defaultFee,
chaintipBlockheight,
nftFanInputs,
);
confirmRawTx(
<a
href={`${explorer.blockExplorerUrl}/tx/${response.txid}`}
target="_blank"
rel="noopener noreferrer"
>
NFT Mint inputs created
</a>,
);
clearInputForms();
} catch (e) {
console.error(`Error creating NFT mint inputs`, e);
toast.error(`${e}`);
}
}
const handleTokenOfferedSlide = (
e: React.ChangeEvent<HTMLInputElement>,
) => {
const amount = e.target.value;
const isValidAmountOrErrorMsg = isValidTokenSendOrBurnAmount(
amount,
tokenBalance as string, // we do not render the slide without tokenBalance
decimals as SlpDecimals,
// Component does not render until token info is defined
protocol as 'ALP' | 'SLP',
);
// For XECX redemptions, we have the price, so validate for this
const isRedeemingXecx =
tokenId === appConfig.vipTokens.xecx.tokenId &&
switches.showRedeemXecx;
const xecxRedeemError =
isRedeemingXecx && Number(amount) < toXec(appConfig.dustSats);
// For Firma redemptions, use 0.01 min
const FIRMA_MINIMUM_REDEMPTION = 0.01; // 1 cent
const isRedeemingFirma =
tokenId === FIRMA.tokenId && switches.showRedeemFirma;
const firmaRedeemError =
isRedeemingFirma && Number(amount) < FIRMA_MINIMUM_REDEMPTION;
setAgoraPartialTokenQtyError(
isValidAmountOrErrorMsg === true
? xecxRedeemError
? `Cannot redeem less than 5.46 XECX`
: firmaRedeemError
? `Cannot redeem less than ${FIRMA_MINIMUM_REDEMPTION} FIRMA`
: false
: isValidAmountOrErrorMsg,
);
setAgoraPartialTokenQty(amount);
};
const handleTokenMinSlide = (e: React.ChangeEvent<HTMLInputElement>) => {
const amount = e.target.value;
const agoraMinBuyError = getAgoraMinBuyError(
formData.tokenListPrice as string,
selectedCurrency,
fiatPrice,
amount,
agoraPartialTokenQty,
decimals as SlpDecimals,
// Component does not render until token info is defined
protocol as 'ALP' | 'SLP',
tokenBalance as string, // we do not render the slide without tokenBalance
userLocale,
);
setAgoraPartialMinError(agoraMinBuyError);
setAgoraPartialMin(amount);
};
const handleTokenAmountChange = (
e: React.ChangeEvent<HTMLInputElement>,
) => {
const { value, name } = e.target;
const isValidAmountOrErrorMsg = isValidTokenSendOrBurnAmount(
value,
tokenBalance as string, // we do not render token actions without tokenBalance
decimals as SlpDecimals,
// Component does not render until token info is defined
protocol as 'ALP' | 'SLP',
);
setSendTokenAmountError(
isValidAmountOrErrorMsg === true ? false : isValidAmountOrErrorMsg,
);
setFormData(p => ({
...p,
[name]: value,
}));
};
const handleTokenAddressChange = async (
e: React.ChangeEvent<HTMLInputElement>,
) => {
const { value, name } = e.target;
// validate for token address
// validate for parameters
// show warning that query strings are not supported
const parsedAddressInput = parseAddressInput(
value,
balanceSats,
userLocale,
);
const address = parsedAddressInput.address.value;
let renderedError = parsedAddressInput.address.error;
if ('queryString' in parsedAddressInput) {
// Token sends do not support a queryString
// If you have one, this is the address validation error
renderedError = 'eToken sends do not support bip21 query strings';
} else if (
parsedAddressInput.address.error &&
typeof address === 'string' &&
isValidCashAddress(address, 'etoken')
) {
// If address is a valid eToken address, no error
// We support sending to etoken: addresses on SendToken screen
renderedError = false;
}
setSendTokenAddressError(renderedError);
setFormData(p => ({
...p,
[name]: value,
}));
};
const onMax = async () => {
// Clear this error before updating field
setSendTokenAmountError(false);
try {
setFormData({
...formData,
amount: tokenBalance as string, // we do not render token actions without tokenBalance
});
} catch (err) {
console.error(`Error in onMax:`);
console.error(err);
}
};
const onMaxMint = () => {
const maxMintAmount = getMaxDecimalizedQty(
decimals as SlpDecimals,
protocol as 'ALP' | 'SLP',
);
handleMintAmountChange({
target: {
name: 'mintAmount',
value: maxMintAmount,
},
} as React.ChangeEvent<HTMLInputElement>);
};
const checkForConfirmationBeforeSendEtoken = () => {
if (settings.sendModal) {
setIsModalVisible(settings.sendModal);
} else {
// if the user does not have the send confirmation enabled in settings then send directly
sendToken();
}
};
const mintOrShowConfirmationModal = () => {
if (settings.sendModal) {
// If the user has enabled send confirmations,
// show a modal before the tx is sent
setConfirmMintModalVisible(settings.sendModal);
} else {
// Mint
handleMint();
}
};
const handleOk = () => {
setIsModalVisible(false);
sendToken();
};
const handleCancel = () => {
setIsModalVisible(false);
};
const handleEtokenBurnAmountChange = (
e: React.ChangeEvent<HTMLInputElement>,
) => {
const { name, value } = e.target;
const isValidBurnAmountOrErrorMsg = isValidTokenSendOrBurnAmount(
value,
tokenBalance as string, // we do not render token actions without tokenBalance
decimals as SlpDecimals,
// Component does not render until token info is defined
protocol as 'ALP' | 'SLP',
);
setBurnTokenAmountError(
isValidBurnAmountOrErrorMsg === true
? false
: isValidBurnAmountOrErrorMsg,
);
setFormData(p => ({
...p,
[name]: value,
}));
};
const handleMintAmountChange = (e: React.ChangeEvent<HTMLInputElement>) => {
const { name, value } = e.target;
const isValidMintAmountOrErrorMsg = isValidTokenMintAmount(
value,
decimals as SlpDecimals,
// Component does not render until token info is defined
protocol as 'ALP' | 'SLP',
);
setMintAmountError(
isValidMintAmountOrErrorMsg === true
? false
: isValidMintAmountOrErrorMsg,
);
setFormData(p => ({
...p,
[name]: value,
}));
};
const onMaxBurn = () => {
// trigger validation on the inserted max value
handleEtokenBurnAmountChange({
target: {
name: 'burnAmount',
value: tokenBalance,
},
} as React.ChangeEvent<HTMLInputElement>);
};
async function burn() {
if (burnConfirmationError || formData.burnAmount === '') {
return;
}
Event('SendToken.js', 'Burn eToken', tokenId as string);
try {
// Get input utxos for slpv1 burn tx
// This is done the same way as for an slpv1 send tx
const tokenInputInfo = getSendTokenInputs(
wallet.state.slpUtxos,
tokenId as string,
formData.burnAmount,
decimals as SlpDecimals,
);
// Get targetOutputs for an slpv1 burn tx
// this is NOT like an slpv1 send tx
const tokenBurnTargetOutputs = isAlp
? getAlpBurnTargetOutputs(tokenInputInfo)
- : getSlpBurnTargetOutputs(tokenInputInfo);
+ : getSlpBurnTargetOutputs(tokenInputInfo, tokenType!.number);
// Build and broadcast the tx
const { response } = await sendXec(
chronik,
ecc,
wallet,
tokenBurnTargetOutputs,
settings.minFeeSends &&
(hasEnoughToken(
tokens,
appConfig.vipTokens.grumpy.tokenId,
appConfig.vipTokens.grumpy.vipBalance,
) ||
hasEnoughToken(
tokens,
appConfig.vipTokens.cachet.tokenId,
appConfig.vipTokens.cachet.vipBalance,
))
? appConfig.minFee
: appConfig.defaultFee,
chaintipBlockheight,
tokenInputInfo.tokenInputs,
true, // skip SLP burn checks
);
confirmRawTx(
<a
href={`${explorer.blockExplorerUrl}/tx/${response.txid}`}
target="_blank"
rel="noopener noreferrer"
>
🔥 Burn successful
</a>,
);
clearInputForms();
setShowConfirmBurnEtoken(false);
setConfirmationOfEtokenToBeBurnt('');
} catch (e) {
setShowConfirmBurnEtoken(false);
setConfirmationOfEtokenToBeBurnt('');
toast.error(`${e}`);
}
}
async function handleMint() {
Event('SendToken.js', 'Mint eToken', tokenId as string);
// We only use 1 mint baton
const mintBaton = mintBatons[0];
const tokenTypeNumberFromUtxo = mintBaton.token.tokenType.number;
try {
// Get targetOutputs for an slpv1 burn tx
// this is NOT like an slpv1 send tx
const mintTargetOutputs = isAlp
? getAlpMintTargetOutputs(
tokenId as string,
BigInt(
undecimalizeTokenAmount(
formData.mintAmount,
decimals as SlpDecimals,
),
),
)
: getMintTargetOutputs(
tokenId as string,
decimals as SlpDecimals,
formData.mintAmount,
tokenTypeNumberFromUtxo as SUPPORTED_MINT_TYPES,
);
// We should not be able to get here without at least one mint baton,
// as the mint switch would be disabled
// Still, handle
if (mintBatons.length < 1) {
throw new Error(`Unable to find mint baton for ${tokenName}`);
}
// Build and broadcast the tx
const { response } = await sendXec(
chronik,
ecc,
wallet,
mintTargetOutputs,
settings.minFeeSends &&
(hasEnoughToken(
tokens,
appConfig.vipTokens.grumpy.tokenId,
appConfig.vipTokens.grumpy.vipBalance,
) ||
hasEnoughToken(
tokens,
appConfig.vipTokens.cachet.tokenId,
appConfig.vipTokens.cachet.vipBalance,
))
? appConfig.minFee
: appConfig.defaultFee,
chaintipBlockheight,
[mintBaton],
);
confirmRawTx(
<a
href={`${explorer.blockExplorerUrl}/tx/${response.txid}`}
target="_blank"
rel="noopener noreferrer"
>
⚗️ Minted {formData.mintAmount} {tokenTicker}
</a>,
);
clearInputForms();
} catch (e) {
toast.error(`${e}`);
}
}
const handleBurnConfirmationInput = (
e: React.ChangeEvent<HTMLInputElement>,
) => {
const { value } = e.target;
if (value && value === `burn ${tokenTicker}`) {
setBurnConfirmationError(false);
} else {
setBurnConfirmationError(
`Input must exactly match "burn ${tokenTicker}"`,
);
}
setConfirmationOfEtokenToBeBurnt(value);
};
const handleBurnAmountInput = () => {
if (!burnTokenAmountError) {
setShowConfirmBurnEtoken(true);
}
};
const handleSelectedCurrencyChange = (
e: React.ChangeEvent<HTMLSelectElement>,
) => {
setSelectedCurrency(e.target.value);
// Clear SLP and NFT price input fields to prevent unit confusion
// User must re-specify price in new units
setFormData(p => ({
...p,
nftListPrice: '',
tokenListPrice: '',
}));
};
const handleNftListPriceChange = (
e: React.ChangeEvent<HTMLInputElement>,
) => {
const { name, value } = e.target;
setNftListPriceError(
getXecListPriceError(value, selectedCurrency, fiatPrice),
);
setFormData(p => ({
...p,
[name]: value,
}));
};
const handleTokenListPriceChange = (
e: React.ChangeEvent<HTMLInputElement>,
) => {
const { name, value } = e.target;
setTokenListPriceError(
getAgoraPartialListPriceError(
value,
selectedCurrency,
fiatPrice,
decimals as SlpDecimals,
),
);
setFormData(p => ({
...p,
[name]: value,
}));
};
const listNft = async () => {
const listPriceSatoshis =
selectedCurrency === appConfig.ticker
? toSatoshis(Number(formData.nftListPrice))
: toSatoshis(
parseFloat(
(
parseFloat(formData.nftListPrice as string) /
(fiatPrice as number)
).toFixed(2),
),
);
const satsPerKb =
settings.minFeeSends &&
(hasEnoughToken(
tokens,
appConfig.vipTokens.grumpy.tokenId,
appConfig.vipTokens.grumpy.vipBalance,
) ||
hasEnoughToken(
tokens,
appConfig.vipTokens.cachet.tokenId,
appConfig.vipTokens.cachet.vipBalance,
))
? appConfig.minFee
: appConfig.defaultFee;
// Build the ad tx
// The advertisement tx is an SLP send tx of the listed NFT to the seller's wallet
const enforcedOutputs = [
{
sats: 0n,
script: slpSend(tokenId as string, SLP_NFT1_CHILD, [0n, 1n]),
},
{
sats: BigInt(listPriceSatoshis),
script: Script.p2pkh(
fromHex(
(
wallet.paths.get(
appConfig.derivationPath,
) as CashtabPathInfo
).hash,
),
),
},
];
const agoraOneshot = new AgoraOneshot({
enforcedOutputs,
cancelPk: pk,
});
const agoraAdScript = agoraOneshot.adScript();
const agoraAdP2sh = Script.p2sh(shaRmd160(agoraAdScript.bytecode));
// We need to calculate the fee of the offer tx before we build the
// "ad prep" tx
// Determine the offerTx parameters before building txs, so we can
// accurately calculate its fee
const agoraScript = agoraOneshot.script();
const agoraP2sh = Script.p2sh(shaRmd160(agoraScript.bytecode));
const offerTargetOutputs = [
{
sats: 0n,
script: slpSend(tokenId as string, SLP_NFT1_CHILD, [1n]),
},
{ sats: BigInt(appConfig.dustSats), script: agoraP2sh },
];
const offerTxFuelSats = getAgoraAdFuelSats(
agoraAdScript,
AgoraOneshotAdSignatory(sk),
offerTargetOutputs,
satsPerKb,
);
// So, the ad prep tx must include an output with an input that covers this fee
// This will be dust + fee
const adFuelOutputSats = appConfig.dustSats + offerTxFuelSats;
// Input needs to be the child NFT utxo with appropriate signData
// Get the NFT utxo from Cashtab wallet
const [thisNftUtxo] = getNft(tokenId as string, wallet.state.slpUtxos);
// Prepare it for an ecash-lib tx
const adSetupInputs = [
{
input: {
prevOut: {
txid: thisNftUtxo.outpoint.txid,
outIdx: thisNftUtxo.outpoint.outIdx,
},
signData: {
sats: BigInt(appConfig.dustSats),
outputScript: changeScript,
},
},
signatory: P2PKHSignatory(sk, pk, ALL_BIP143),
},
];
const adSetupTargetOutputs = [
{
sats: 0n,
script: slpSend(tokenId as string, SLP_NFT1_CHILD, [1n]),
},
{ sats: BigInt(adFuelOutputSats), script: agoraAdP2sh },
];
// Broadcast the ad setup tx
let adSetupTxid;
try {
// Build and broadcast the ad setup tx
const { response } = await sendXec(
chronik,
ecc,
wallet,
adSetupTargetOutputs,
satsPerKb,
chaintipBlockheight,
adSetupInputs,
);
adSetupTxid = response.txid;
confirmRawTx(
<a
href={`${explorer.blockExplorerUrl}/tx/${adSetupTxid}`}
target="_blank"
rel="noopener noreferrer"
>
Created NFT ad
</a>,
);
} catch (err) {
console.error(`Error creating NFT listing ad`, err);
toast.error(`Error creating NFT listing ad: ${err}`);
// Do not attempt to list the NFT if the ad tx fails
return;
}
const offerInputs = [
// The actual NFT
{
input: {
prevOut: {
// Since we just broadcast the ad tx and know how it was built,
// this prevOut will always look like this
txid: adSetupTxid,
outIdx: 1,
},
signData: {
sats: BigInt(adFuelOutputSats),
redeemScript: agoraAdScript,
},
},
signatory: AgoraOneshotAdSignatory(sk),
},
];
let offerTxid;
try {
// Build and broadcast the ad setup tx
const { response } = await sendXec(
chronik,
ecc,
wallet,
offerTargetOutputs,
satsPerKb,
chaintipBlockheight,
offerInputs,
);
offerTxid = response.txid;
// Maintain this notification as we do not parse listing prices in websocket
toast(
<a
href={`${explorer.blockExplorerUrl}/tx/${offerTxid}`}
target="_blank"
rel="noopener noreferrer"
>
NFT listed for{' '}
{toXec(listPriceSatoshis).toLocaleString(userLocale, {
minimumFractionDigits: 2,
maximumFractionDigits: 2,
})}{' '}
XEC
</a>,
{
icon: <TokenIcon size={32} tokenId={tokenId as string} />,
},
);
// Hide the confirmation modal
setShowConfirmListNft(false);
// Update nft offers
getNftOffer();
} catch (err) {
console.error(`Error listing NFT`, err);
toast.error(`Error listing NFT: ${err}`);
}
};
const previewAgoraPartial = async () => {
// We can't expect users to enter numbers that exactly fit the encoding requirements of
// agora partial offers
// So, we build offers with agora.selectParams(), which calls AgoraPartial.approximateParams()
// These are not guaranteed to be ideal.
// So, the user should review the actual offer before it is created.
// Convert formData price input to nanosats per token
// note this is nanosats per token sat
// So, you must account for token decimals
const priceInXec =
selectedCurrency === appConfig.ticker
? parseFloat(formData.tokenListPrice as string)
: new BigNumber(
new BigNumber(
parseFloat(formData.tokenListPrice as string) /
(fiatPrice as number),
).toFixed(NANOSAT_DECIMALS),
);
const priceNanoSatsPerDecimalizedToken = xecToNanoSatoshis(priceInXec);
// Adjust for token satoshis
// e.g. a 9-decimal token, the user sets the the price for 1.000000000 tokens
// but you must create the offer with priceNanoSatsPerToken for 1 token satoshi
// i.e. 0.000000001 token
const priceNanoSatsPerTokenSatoshi =
BigInt(priceNanoSatsPerDecimalizedToken) /
BigInt(Math.pow(10, decimals as SlpDecimals));
// Convert formData list qty (a decimalized token qty) to BigInt token sats
const userSuggestedOfferedTokens = BigInt(
undecimalizeTokenAmount(
agoraPartialTokenQty,
decimals as SlpDecimals,
),
);
// Convert formData min buy qty to BigInt
const minAcceptedAtoms = BigInt(
undecimalizeTokenAmount(agoraPartialMin, decimals as SlpDecimals),
);
let agoraPartial;
try {
agoraPartial = await agora.selectParams({
tokenId: tokenId,
// We cannot render the Token screen until tokenType is defined
tokenType: (tokenType as TokenType).number,
// We cannot render the Token screen until protocol is defined
tokenProtocol: protocol as 'ALP' | 'SLP',
offeredAtoms: userSuggestedOfferedTokens,
priceNanoSatsPerAtom: priceNanoSatsPerTokenSatoshi,
makerPk: pk,
minAcceptedAtoms,
});
return setPreviewedAgoraPartial(agoraPartial);
} catch (err) {
// We can run into errors trying to create an agora partial
// Most of these are prevented by validation in Cashtab
// However some are a bit testier, e.g.
// "Parameters cannot be represented in Script"
// "minAcceptedTokens too small, got truncated to 0"
// Catch and give a generic error
console.error(`Error creating AgoraPartial`, err);
toast.error(
`Unable to create Agora offer with these parameters, try increasing the min buy.`,
);
// Do not show the preview modal
return;
}
};
const getFirmaPartialUnitPrice = (firmaPartial: AgoraPartial) => {
const offeredAtoms = firmaPartial.offeredAtoms();
const acceptPriceSats = firmaPartial.askedSats(offeredAtoms);
const acceptPriceXec = toXec(Number(acceptPriceSats));
// Convert atoms to FIRMA
const minAcceptedTokens = decimalizeTokenAmount(
offeredAtoms.toString(),
decimals as SlpDecimals,
);
// Get the unit price
// For FIRMA, we expect this to be > 1 XEC
// So, limit to 2 decimal places
const actualPricePerToken = new BigNumber(acceptPriceXec)
.div(minAcceptedTokens)
.dp(2);
// Return price as a number
return actualPricePerToken.toNumber();
};
/**
* Firma redemption has a dynamic price which must be fetched from an API endpoint
* We want to sell for as close as we can get to the bid price (due to discrete values
* of agora offers, it is unlikely we can get the exact bid price)
*/
const previewFirmaPartial = async () => {
// Set spinner on button
setIsCalculatingRedeemFirma(true);
// Get the bid price
let firmaBidPrice;
try {
const firmaBidPriceResp = await fetch(`https://firma.cash/api/bid`);
const firmaBidPriceJson = await firmaBidPriceResp.json();
firmaBidPrice = firmaBidPriceJson.bid;
console.info(`FIRMA buys at: ${firmaBidPrice} XEC`);
} catch (err) {
console.error(`Error fetching FIRMA bid price`, err);
toast.error(`Error determining FIRMA bid price: ${err}`);
setIsCalculatingRedeemFirma(false);
return;
}
const priceNanoSatsPerDecimalizedToken =
xecToNanoSatoshis(firmaBidPrice);
// Adjust for atoms
// e.g. a 9-decimal token, the user sets the the price for 1.000000000 tokens
// but you must create the offer with priceNanoSatsPerToken for 1 atom
// i.e. 0.000000001 token
let priceNanoSatsPerAtom =
BigInt(priceNanoSatsPerDecimalizedToken) /
BigInt(Math.pow(10, decimals as SlpDecimals));
// Convert formData list qty (a decimalized token qty) to BigInt token sats
const userSuggestedOfferedTokens = BigInt(
undecimalizeTokenAmount(
agoraPartialTokenQty,
decimals as SlpDecimals,
),
);
let firmaPartial;
try {
const firmaPartialParams = {
tokenId: tokenId,
// We cannot render the Token screen until tokenType is defined
tokenType: (tokenType as TokenType).number,
// We cannot render the Token screen until protocol is defined
tokenProtocol: protocol as 'ALP' | 'SLP',
offeredAtoms: userSuggestedOfferedTokens,
priceNanoSatsPerAtom: priceNanoSatsPerAtom,
makerPk: pk,
minAcceptedAtoms: userSuggestedOfferedTokens,
};
firmaPartial = await agora.selectParams(firmaPartialParams);
let actualPrice = getFirmaPartialUnitPrice(firmaPartial);
// Keep making firmaPartials until we have one that is acceptable
// Reduce price by 50 XEC at a time
// In practice, this usually takes 2 or 3 iterations, though I have observed up to 11
// The quanta are such that we get "the next tick down", we won't
// skip it
const NANOSATS_PER_ATOM_REDUCTION_PER_ITERATION = 500000000n;
// Counter to prevent infinite loop
let attempts = 0;
const MAX_ATTEMPTS = 25;
while (actualPrice > firmaBidPrice && attempts < MAX_ATTEMPTS) {
priceNanoSatsPerAtom -=
NANOSATS_PER_ATOM_REDUCTION_PER_ITERATION;
// This time we only update the price, we do not need to update locktime
firmaPartial = await agora.selectParams({
...firmaPartialParams,
priceNanoSatsPerAtom,
});
actualPrice = getFirmaPartialUnitPrice(firmaPartial);
// loop repeats until actualPrice <= firmaBidPrice
attempts += 1;
}
if (attempts >= MAX_ATTEMPTS) {
// If we try more than MAX_ATTEMPTS times, there is probably something wrong
// or weird about this specific request
// Maybe some quantities are difficult to price properly
toast.error(
'Unable to create partial at or below FIRMA redemption price. Try a different quantity.',
);
setIsCalculatingRedeemFirma(false);
return;
}
setIsCalculatingRedeemFirma(false);
return setPreviewedAgoraPartial(firmaPartial);
} catch (err) {
// We can run into errors trying to create an agora partial
// Most of these are prevented by validation in Cashtab
// However some are a bit testier, e.g.
// "Parameters cannot be represented in Script"
// "minAcceptedTokens too small, got truncated to 0"
// Catch and give a generic error
console.error(`Error creating AgoraPartial`, err);
toast.error(
`Unable to create Agora offer with these parameters, try increasing the min buy.`,
);
setIsCalculatingRedeemFirma(false);
// Do not show the preview modal
return;
}
};
/**
* Note that listing ALP tokens is simpler than listing SLP tokens
* Thanks to EMPP, can be done in a single tx, instead of the required
* chained 2 txs for SLP
*
* Means we need a distinct function for this operation
*/
const listAlpPartial = async () => {
if (previewedAgoraPartial === null) {
// Should never happen
toast.error(
`Error listing ALP partial: Agora preview is undefined`,
);
return;
}
if (typeof tokenId !== 'string') {
// Should never happen
toast.error(`Error listing ALP partial: tokenId is undefined`);
return;
}
// offeredTokens is in units of token satoshis
const offeredTokens = previewedAgoraPartial.offeredAtoms();
const satsPerKb =
settings.minFeeSends &&
(hasEnoughToken(
tokens,
appConfig.vipTokens.grumpy.tokenId,
appConfig.vipTokens.grumpy.vipBalance,
) ||
hasEnoughToken(
tokens,
appConfig.vipTokens.cachet.tokenId,
appConfig.vipTokens.cachet.vipBalance,
))
? appConfig.minFee
: appConfig.defaultFee;
// Get enough token utxos to cover the listing
// Note that getSendTokenInputs expects decimalized tokens as a string and decimals as a param
// Because we have undecimalized tokens in token sats from the AgoraPartial object,
// We pass this and "0" as decimals
const alpInputsInfo = getSendTokenInputs(
wallet.state.slpUtxos,
tokenId,
// This is already in units of token sats
offeredTokens.toString(),
0, // offeredTokens is already undecimalized
);
// Get sendAmounts and input token utxos like a normal token send tx
const { tokenInputs } = alpInputsInfo;
const offerTargetOutputs = getAlpAgoraListTargetOutputs(
alpInputsInfo,
previewedAgoraPartial,
);
let offerTxid;
try {
// Build and broadcast the ad setup tx
const { response } = await sendXec(
chronik,
ecc,
wallet,
offerTargetOutputs,
satsPerKb,
chaintipBlockheight,
tokenInputs,
);
offerTxid = response.txid;
// Calculate decimalized total offered amount for notifications
const decimalizedOfferedTokens = decimalizeTokenAmount(
offeredTokens.toString(),
decimals as SlpDecimals,
);
// Maintain this notification as we do not parse listing prices in websocket
toast(
<a
href={`${explorer.blockExplorerUrl}/tx/${offerTxid}`}
target="_blank"
rel="noopener noreferrer"
>
{`${decimalizedTokenQtyToLocaleFormat(
decimalizedOfferedTokens,
userLocale,
)} ${tokenName} listed for ${getAgoraPartialActualPrice()} per token`}
</a>,
{
icon: <TokenIcon size={32} tokenId={tokenId as string} />,
},
);
// We stay on this token page as, unlike with NFTs, we may still have more of this token
} catch (err) {
console.error(`Error listing ALP Partial`, err);
toast.error(`Error listing ALP Partial: ${err}`);
}
// Clear the offer
// Note this will also clear the confirmation modal
setPreviewedAgoraPartial(null);
};
const listSlpPartial = async () => {
// offeredTokens is in units of token satoshis
const offeredTokens = (
previewedAgoraPartial as AgoraPartial
).offeredAtoms();
// To guarantee we have no utxo conflicts while sending a chain of 2 txs
// We ensure that the target output of the ad setup tx will include enough XEC
// to cover the offer tx
const satsPerKb =
settings.minFeeSends &&
(hasEnoughToken(
tokens,
appConfig.vipTokens.grumpy.tokenId,
appConfig.vipTokens.grumpy.vipBalance,
) ||
hasEnoughToken(
tokens,
appConfig.vipTokens.cachet.tokenId,
appConfig.vipTokens.cachet.vipBalance,
))
? appConfig.minFee
: appConfig.defaultFee;
const agoraAdScript = (
previewedAgoraPartial as AgoraPartial
).adScript();
const agoraAdP2sh = Script.p2sh(shaRmd160(agoraAdScript.bytecode));
// Get enough token utxos to cover the listing
// Note that getSendTokenInputs expects decimalized tokens as a string and decimals as a param
// Because we have undecimalized tokens in token sats from the AgoraPartial object,
// We pass this and "0" as decimals
const slpInputsInfo = getSendTokenInputs(
wallet.state.slpUtxos,
tokenId as string,
// This is already in units of token sats
offeredTokens.toString(),
0, // offeredTokens is already undecimalized
);
const { tokenInputs, sendAmounts } = slpInputsInfo;
// Seller finishes offer setup + sends tokens to the advertised P2SH
const agoraScript = (previewedAgoraPartial as AgoraPartial).script();
const agoraP2sh = Script.p2sh(shaRmd160(agoraScript.bytecode));
const offerTargetOutputs = [
{
sats: 0n,
// We will not have any token change for the tx that creates the offer
// This is bc the ad setup tx sends the exact amount of tokens we need
// for the ad tx (the offer)
- script: slpSend(tokenId as string, SLP_FUNGIBLE, [
+ script: slpSend(tokenId as string, tokenType!.number, [
sendAmounts[0],
]),
},
{ sats: BigInt(appConfig.dustSats), script: agoraP2sh },
];
const adSetupSatoshis = getAgoraAdFuelSats(
agoraAdScript,
AgoraPartialAdSignatory(sk),
offerTargetOutputs,
satsPerKb,
);
// The ad setup tx itself is sending tokens to a dust output
// So, the fuel input must be adSetupSatoshis more than dust
const agoraAdFuelInputSats = appConfig.dustSats + adSetupSatoshis;
const adSetupInputs = [];
for (const slpTokenInput of tokenInputs) {
adSetupInputs.push({
input: {
prevOut: slpTokenInput.outpoint,
signData: {
sats: BigInt(appConfig.dustSats),
outputScript: changeScript,
},
},
signatory: P2PKHSignatory(sk, pk, ALL_BIP143),
});
}
const adSetupTargetOutputs: TokenTargetOutput[] = [
{
sats: 0n,
// We use sendAmounts here instead of sendAmounts[0] used in offerTargetOutputs
// They may be the same thing, i.e. sendAmounts may be an array of length one
// But we could have token change for the ad setup tx
script: slpSend(
tokenId as string,
(previewedAgoraPartial as AgoraPartial).tokenType,
sendAmounts,
),
},
{
sats: BigInt(agoraAdFuelInputSats),
script: agoraAdP2sh,
},
];
// Include token change output for the ad setup tx if we have change
if (sendAmounts.length > 1) {
adSetupTargetOutputs.push({ sats: BigInt(appConfig.dustSats) });
}
// Calculate decimalized total offered amount for notifications
const decimalizedOfferedTokens = decimalizeTokenAmount(
offeredTokens.toString(),
decimals as SlpDecimals,
);
// Broadcast the ad setup tx
let adSetupTxid;
try {
// Build and broadcast the ad setup tx
const { response } = await sendXec(
chronik,
ecc,
wallet,
adSetupTargetOutputs,
satsPerKb,
chaintipBlockheight,
adSetupInputs,
);
adSetupTxid = response.txid;
confirmRawTx(
<a
href={`${explorer.blockExplorerUrl}/tx/${adSetupTxid}`}
target="_blank"
rel="noopener noreferrer"
>
{`Successful ad setup tx to offer ${decimalizedOfferedTokens} ${tokenName} for ${getAgoraPartialActualPrice()} per token`}
</a>,
);
} catch (err) {
console.error(`Error creating SLP Partial listing ad`, err);
toast.error(`Error creating SLP Partial listing ad: ${err}`);
// Do not attempt to list the SLP Partial if the ad tx fails
return;
}
// Now that we know the prevOut txid, we can make the real input
const offerInputs = [
// The utxo storing the tokens to be offered
{
input: {
prevOut: {
// Since we just broadcast the ad tx and know how it was built,
// this prevOut will always look like this
txid: adSetupTxid,
outIdx: 1,
},
signData: {
sats: BigInt(agoraAdFuelInputSats),
redeemScript: agoraAdScript,
},
},
signatory: AgoraPartialAdSignatory(sk),
},
];
let offerTxid;
try {
// Build and broadcast the ad setup tx
const { response } = await sendXec(
chronik,
ecc,
wallet,
offerTargetOutputs,
satsPerKb,
chaintipBlockheight,
offerInputs,
);
offerTxid = response.txid;
// Maintain this notification as we do not parse listing prices in websocket
toast(
<a
href={`${explorer.blockExplorerUrl}/tx/${offerTxid}`}
target="_blank"
rel="noopener noreferrer"
>
{`${decimalizedTokenQtyToLocaleFormat(
decimalizedOfferedTokens,
userLocale,
)} ${tokenName} listed for ${getAgoraPartialActualPrice()} per token`}
</a>,
{
icon: <TokenIcon size={32} tokenId={tokenId as string} />,
},
);
// We stay on this token page as, unlike with NFTs, we may still have more of this token
} catch (err) {
console.error(`Error listing SLP Partial`, err);
toast.error(`Error listing SLP Partial: ${err}`);
}
// Clear the offer
// Note this will also clear the confirmation modal
setPreviewedAgoraPartial(null);
};
return (
<OuterCtn>
{typeof cashtabCache.tokens.get(tokenId) === 'undefined' ? (
<>
<TokenScreenWrapper title="Token Info">
{chronikQueryError ? (
<Alert>
Error querying token info. Please try again
later.
</Alert>
) : !validTokenId ? (
<Alert>Invalid tokenId {tokenId}</Alert>
) : (
<Spinner />
)}
{typeof tokenBalance === 'undefined' &&
validTokenId && (
<Info>You do not hold this token.</Info>
)}
</TokenScreenWrapper>
</>
) : (
<>
{showTokenTypeInfo && (
<Modal
title={renderedTokenType}
description={renderedTokenDescription}
handleOk={() => setShowTokenTypeInfo(false)}
handleCancel={() => setShowTokenTypeInfo(false)}
/>
)}
{showAgoraPartialInfo && (
<Modal
title={`Sell Tokens`}
description={`List tokens for sale with Agora Partial offers. Decide how many tokens you would like to sell, the minimum amount a user must buy to accept an offer, and the price per token. Due to encoding, input values here are approximate. The actual offer may have slightly different parameters. Price can be set lower than 1 XEC per token (no lower than 1 nanosat per 1 token satoshi). To ensure accurate pricing, the minimum buy should be set to at least 0.1% of the total tokens offered.`}
handleOk={() => setShowAgoraPartialInfo(false)}
handleCancel={() => setShowAgoraPartialInfo(false)}
/>
)}
{showFanoutInfo && (
<Modal
title="Creating NFT mint inputs"
handleOk={() => setShowFanoutInfo(false)}
handleCancel={() => setShowFanoutInfo(false)}
height={300}
>
<InfoModalParagraph>
A genesis tx for an NFT collection determines
the size of your NFT collection.
</InfoModalParagraph>
<InfoModalParagraph>
For example, if you created an NFT Collection
with a supply of 100, you can mint 100 NFTs.{' '}
</InfoModalParagraph>
<InfoModalParagraph>
However, each NFT must be minted from an input
UTXO with qty 1. Cashtab creates these by
splitting your original UTXO into utxos with qty
1.{' '}
</InfoModalParagraph>
<InfoModalParagraph>
These qty 1 NFT Collection utxos can be used to
mint NFTs.
</InfoModalParagraph>
</Modal>
)}
{showMintNftInfo && (
<Modal
title="Minting an NFT"
handleOk={() => setShowMintNftInfo(false)}
handleCancel={() => setShowMintNftInfo(false)}
height={300}
>
<InfoModalParagraph>
You can use an NFT Mint Input (a qty-1 utxo from
an NFT Collection token) to mint an NFT.
</InfoModalParagraph>
<InfoModalParagraph>
NFTs from the same Collection are usually
related somehow. They will be indexed by the
tokenId of the NFT Collection.
</InfoModalParagraph>
<InfoModalParagraph>
For example, popular NFT Collections include
Cryptopunks and Bored Apes. Each individual
Cryptopunk or Bored Ape is its own NFT.
</InfoModalParagraph>
</Modal>
)}
{showLargeIconModal && (
<Modal
height={275}
showButtons={false}
handleCancel={() => setShowLargeIconModal(false)}
>
<TokenIcon size={256} tokenId={tokenId} />
</Modal>
)}
{showLargeNftIcon !== '' && (
<Modal
height={275}
showButtons={false}
handleCancel={() => setShowLargeNftIcon('')}
>
<TokenIcon size={256} tokenId={showLargeNftIcon} />
</Modal>
)}
{isModalVisible && (
<Modal
title="Confirm Send"
description={`Send ${formData.amount}${' '}
${tokenTicker} to ${formData.address}?`}
handleOk={handleOk}
handleCancel={handleCancel}
showCancelButton
>
<p>
Are you sure you want to send {formData.amount}{' '}
{tokenTicker} to {formData.address}?
</p>
</Modal>
)}
{confirmMintModalVisible && (
<Modal
title="Confirm Mint"
description={`Are you sure you want to mint ${formData.mintAmount} ${tokenTicker}?`}
handleOk={() => {
handleMint();
setConfirmMintModalVisible(false);
}}
handleCancel={() =>
setConfirmMintModalVisible(false)
}
showCancelButton
/>
)}
{showConfirmBurnEtoken && (
<Modal
title={`Confirm ${tokenTicker} burn`}
description={`Burn ${formData.burnAmount} ${tokenTicker}?`}
handleOk={burn}
handleCancel={() => setShowConfirmBurnEtoken(false)}
showCancelButton
height={250}
>
<ModalInput
placeholder={`Type "burn ${tokenTicker}" to confirm`}
name="etokenToBeBurnt"
value={confirmationOfEtokenToBeBurnt}
error={burnConfirmationError}
handleInput={handleBurnConfirmationInput}
/>
</Modal>
)}
{showConfirmListNft &&
formData.nftListPrice !== '' &&
formData.nftListPrice !== null && (
<Modal
title={`List ${tokenTicker} for ${
selectedCurrency === appConfig.ticker
? `${parseFloat(
formData.nftListPrice,
).toLocaleString(userLocale)}
XEC ${getFormattedFiatPrice(
settings.fiatCurrency,
userLocale,
formData.nftListPrice,
fiatPrice,
)}?`
: `${
supportedFiatCurrencies[
settings.fiatCurrency
].symbol
}${parseFloat(
formData.nftListPrice,
).toLocaleString(userLocale)} ${
settings && settings.fiatCurrency
? settings.fiatCurrency.toUpperCase()
: 'USD'
} (${(
parseFloat(
formData.nftListPrice,
) / (fiatPrice as number)
).toLocaleString(userLocale, {
minimumFractionDigits:
appConfig.cashDecimals,
maximumFractionDigits:
appConfig.cashDecimals,
})}
XEC)?`
}`}
handleOk={listNft}
handleCancel={() =>
setShowConfirmListNft(false)
}
showCancelButton
description={`This will create a sell offer. Your NFT is only transferred if your full price is paid. The price is fixed in XEC. If your NFT is not purchased, you can cancel or renew your listing at any time.`}
height={275}
/>
)}
{showConfirmListPartialSlp &&
tokenId === appConfig.vipTokens.xecx.tokenId &&
switches.showRedeemXecx &&
previewedAgoraPartial !== null && (
<Modal
title={`Redeem ${decimalizedTokenQtyToLocaleFormat(
decimalizeTokenAmount(
previewedAgoraPartial
.offeredAtoms()
.toString(),
decimals as SlpDecimals,
),
userLocale,
)} XECX?`}
disabled={previewedAgoraPartialUnacceptable}
handleOk={listAlpPartial}
handleCancel={() => {
setPreviewedAgoraPartial(null);
}}
showCancelButton
height={getRedeemXecxModalHeight()}
>
{decimalizeTokenAmount(
previewedAgoraPartial
.offeredAtoms()
.toString(),
decimals as SlpDecimals,
) !==
Number(agoraPartialTokenQty).toFixed(2) && (
<AgoraPreviewTable>
<AgoraPreviewRow>
<AgoraPreviewLabel>
Requested qty:{' '}
</AgoraPreviewLabel>
<AgoraPreviewCol>
{Number(
agoraPartialTokenQty,
).toLocaleString(userLocale, {
minimumFractionDigits: 2,
maximumFractionDigits: 2,
})}{' '}
XECX
</AgoraPreviewCol>
</AgoraPreviewRow>
<AgoraPreviewRow>
<AgoraPreviewLabel>
Actual qty:{' '}
</AgoraPreviewLabel>
<AgoraPreviewCol>
{decimalizedTokenQtyToLocaleFormat(
decimalizeTokenAmount(
previewedAgoraPartial
.offeredAtoms()
.toString(),
decimals as SlpDecimals,
),
userLocale,
)}{' '}
XECX
</AgoraPreviewCol>
</AgoraPreviewRow>
<AgoraPreviewRow>
<AgoraPreviewLabel>
Delta:{' '}
</AgoraPreviewLabel>
<AgoraPreviewCol>
{(
Number(
agoraPartialTokenQty,
) -
Number(
decimalizeTokenAmount(
previewedAgoraPartial
.offeredAtoms()
.toString(),
decimals as SlpDecimals,
),
)
).toFixed(2)}
</AgoraPreviewCol>
</AgoraPreviewRow>
<Info>
Note: Actual qty does not exactly
match requested qty due to agora
encoding.
</Info>
</AgoraPreviewTable>
)}
<AgoraPreviewTable>
{previewedAgoraPartialUnacceptable && (
<Alert noWordBreak>
Error in agora encoding:
unacceptable offer created. Adjust
redeem amount.
</Alert>
)}
<AgoraPreviewRow>
<AgoraPreviewLabel>
You receive:{' '}
</AgoraPreviewLabel>
<AgoraPreviewCol>
{decimalizedTokenQtyToLocaleFormat(
decimalizeTokenAmount(
previewedAgoraPartial
.offeredAtoms()
.toString(),
decimals as SlpDecimals,
),
userLocale,
)}{' '}
XEC
</AgoraPreviewCol>
</AgoraPreviewRow>
{xecxSweeperBalanceSats !== null &&
previewedAgoraPartial.offeredAtoms() >
xecxSweeperBalanceSats && (
<Alert noWordBreak>
⚠️ XECX redemption larger than
hot wallet balance of{' '}
{toFormattedXec(
Number(
xecxSweeperBalanceSats,
),
userLocale,
)}{' '}
XEC. Execution may take up to 24
hours.
</Alert>
)}
</AgoraPreviewTable>
</Modal>
)}
{showConfirmListPartialSlp &&
!switches.showRedeemXecx &&
(formData.tokenListPrice !== '' ||
tokenId === FIRMA.tokenId) &&
previewedAgoraPartial !== null && (
<Modal
title={`List ${tokenTicker}?`}
disabled={previewedAgoraPartialUnacceptable}
handleOk={
isAlp ? listAlpPartial : listSlpPartial
}
handleCancel={() =>
setPreviewedAgoraPartial(null)
}
showCancelButton
height={450}
>
<AgoraPreviewParagraph>
Agora offers require special encoding and
may not match your input.
</AgoraPreviewParagraph>
<AgoraPreviewParagraph>
Create the following sell offer?
</AgoraPreviewParagraph>
<AgoraPreviewTable>
<AgoraPreviewRow>
<AgoraPreviewLabel>
Offered qty:{' '}
</AgoraPreviewLabel>
<AgoraPreviewCol>
{decimalizedTokenQtyToLocaleFormat(
decimalizeTokenAmount(
previewedAgoraPartial
.offeredAtoms()
.toString(),
decimals as SlpDecimals,
),
userLocale,
)}
</AgoraPreviewCol>
</AgoraPreviewRow>
<AgoraPreviewRow>
<AgoraPreviewLabel>
Min qty:{' '}
</AgoraPreviewLabel>
<AgoraPreviewCol>
{decimalizedTokenQtyToLocaleFormat(
decimalizeTokenAmount(
previewedAgoraPartial
.minAcceptedAtoms()
.toString(),
decimals as SlpDecimals,
),
userLocale,
)}
</AgoraPreviewCol>
</AgoraPreviewRow>
{previewedAgoraPartialUnacceptable && (
<Alert noWordBreak>
This offer cannot be accepted
because the min buy is higher than
the total offered tokens. Cashtab
does not support creating this type
of offer. Please update your params
and try again.
</Alert>
)}
<AgoraPreviewRow>
<AgoraPreviewLabel>
Actual price:{' '}
</AgoraPreviewLabel>
<AgoraPreviewCol>
{getAgoraPartialActualPrice()}
</AgoraPreviewCol>
</AgoraPreviewRow>
{tokenId === FIRMA.tokenId && (
<AgoraPreviewRow>
<AgoraPreviewLabel>
You receive:{' '}
</AgoraPreviewLabel>
<AgoraPreviewCol>
{toXec(
Number(
previewedAgoraPartial.askedSats(
previewedAgoraPartial.offeredAtoms(),
),
),
).toLocaleString(userLocale, {
minimumFractionDigits: 2,
maximumFractionDigits: 2,
})}{' '}
XEC
</AgoraPreviewCol>
</AgoraPreviewRow>
)}
{tokenId !== FIRMA.tokenId && (
<AgoraPreviewRow>
<AgoraPreviewLabel>
Target price:{' '}
</AgoraPreviewLabel>
<AgoraPreviewCol>
{getAgoraPartialTargetPriceXec()}
</AgoraPreviewCol>
</AgoraPreviewRow>
)}
</AgoraPreviewTable>
<AgoraPreviewParagraph>
If actual price is not close to target
price, increase your min buy.
</AgoraPreviewParagraph>
<AgoraPreviewParagraph>
You can cancel this listing at any time.
</AgoraPreviewParagraph>
</Modal>
)}
{renderedTokenType === 'NFT' && (
<>
<NftNameTitle>{tokenName}</NftNameTitle>
{typeof cachedInfo?.groupTokenId !== 'undefined' &&
typeof cashtabCache.tokens.get(
cachedInfo.groupTokenId,
) !== 'undefined' && (
<NftCollectionTitle>
NFT from collection &quot;
<Link
to={`/token/${cachedInfo.groupTokenId}`}
>
{
(
cashtabCache.tokens.get(
cachedInfo.groupTokenId,
) as CashtabCachedTokenInfo
).genesisInfo.tokenName
}
</Link>
&quot;
</NftCollectionTitle>
)}
</>
)}
<TokenStatsTable title="Token Stats">
<TokenStatsCol>
<TokenIconExpandButton
onClick={() => setShowLargeIconModal(true)}
>
<TokenIcon size={128} tokenId={tokenId} />
</TokenIconExpandButton>
{renderedTokenType !== 'NFT' && (
<>
{tokenName !== undefined && (
<h2>{tokenName}</h2>
)}
{tokenTicker !== undefined && (
<span>{tokenTicker}</span>
)}
</>
)}
</TokenStatsCol>
<TokenStatsRowCtn>
{typeof tokenBalance === 'string' && (
<TokenStatsTableRow balance>
<label>Your Balance</label>
<div>
{decimalizedTokenQtyToLocaleFormat(
tokenBalance,
userLocale,
)}
{tokenTicker !== undefined &&
tokenTicker !== '' &&
` ${tokenTicker}`}
</div>
</TokenStatsTableRow>
)}
<TokenStatsTableRow>
<label>Type</label>
<div>
<DataAndQuestionButton>
{renderedTokenType}{' '}
<IconButton
name={`Click for more info about this token type`}
icon={<QuestionIcon />}
onClick={() =>
setShowTokenTypeInfo(true)
}
/>
</DataAndQuestionButton>
</div>
</TokenStatsTableRow>
<TokenStatsTableRow>
<label>Token Id</label>
<div>
<a
href={`${explorer.blockExplorerUrl}/tx/${tokenId}`}
target="_blank"
rel="noopener noreferrer"
>
{(tokenId as string).slice(0, 3)}...
{(tokenId as string).slice(-3)}
</a>
<CopyIconButton
name={`Copy Token ID`}
data={tokenId as string}
showToast
customMsg={`Token ID "${tokenId}" copied to clipboard`}
/>
</div>
</TokenStatsTableRow>
{renderedTokenType !== 'NFT' &&
renderedTokenType !== 'NFT Collection' && (
<TokenStatsTableRow>
<label>Decimals</label>
<div>{decimals}</div>
</TokenStatsTableRow>
)}
{url !== '' && (
<TokenStatsTableRow>
<label>URL</label>
<TokenUrlCol>
<a
href={
url?.startsWith('https://')
? url
: `https://${url}`
}
target="_blank"
rel="noreferrer"
>
{`${url?.slice(
url?.startsWith('https://')
? 8
: 0,
)}`}
</a>
</TokenUrlCol>
</TokenStatsTableRow>
)}
<TokenStatsTableRow>
<label>Created</label>
<div>
{typeof cachedInfo?.block !== 'undefined'
? formatDate(
cachedInfo.block.timestamp.toString(),
navigator.language,
)
: formatDate(
(
cachedInfo?.timeFirstSeen as number
).toString(),
navigator.language,
)}
</div>
</TokenStatsTableRow>
{renderedTokenType !== 'NFT' && (
<TokenStatsTableRow>
<label>Genesis Qty</label>
<div>
{typeof genesisSupply === 'string' ? (
decimalizedTokenQtyToLocaleFormat(
genesisSupply,
userLocale,
)
) : (
<InlineLoader />
)}
</div>
</TokenStatsTableRow>
)}
{renderedTokenType !== 'NFT' && (
<TokenStatsTableRow>
<label>Supply</label>
<div>
{typeof uncachedTokenInfo.circulatingSupply ===
'string' ? (
`${decimalizedTokenQtyToLocaleFormat(
uncachedTokenInfo.circulatingSupply,
userLocale,
)}${
uncachedTokenInfo.mintBatons ===
- 0
+ 0 &&
+ tokenType!.type !==
+ 'SLP_TOKEN_TYPE_MINT_VAULT'
? ' (fixed)'
: ' (var.)'
}`
) : uncachedTokenInfoError ? (
'Error fetching supply'
) : (
<InlineLoader />
)}
</div>
</TokenStatsTableRow>
)}
{typeof hash !== 'undefined' && hash !== '' && (
<TokenStatsTableRow>
<label>Hash</label>
<div>
{hash.slice(0, 3)}...
{hash.slice(-3)}
<CopyIconButton
name={`Copy Token ID`}
data={hash}
showToast
customMsg={`Token document hash "${hash}" copied to clipboard`}
/>
</div>
</TokenStatsTableRow>
)}
</TokenStatsRowCtn>
</TokenStatsTable>
{isBlacklisted && (
<Alert>
Cashtab does not support trading this token
</Alert>
)}
{isSupportedToken &&
isBlacklisted !== null &&
!isBlacklisted &&
isNftChild && (
<>
{nftActiveOffer === null &&
!nftOfferAgoraQueryError ? (
<InlineLoader />
) : nftOfferAgoraQueryError ? (
<Alert>Error querying NFT offers</Alert>
) : // Note that nftActiveOffer will not be null here
(nftActiveOffer as unknown as OneshotOffer[])
.length === 0 ? (
<NftOfferWrapper>
<Info>This NFT is not for sale</Info>
</NftOfferWrapper>
) : (
<NftOfferWrapper>
<OneshotSwiper
offers={
nftActiveOffer as unknown as OneshotOffer[]
}
activePk={pk}
chronik={chronik}
chaintipBlockheight={
chaintipBlockheight
}
wallet={wallet}
cashtabCache={cashtabCache}
userLocale={userLocale}
fiatPrice={fiatPrice}
settings={settings}
setOffers={setNftActiveOffer}
/>
</NftOfferWrapper>
)}
</>
)}
{isSupportedToken &&
isBlacklisted !== null &&
!isBlacklisted &&
!isNftParent &&
!isNftChild && (
<OrderBook
tokenId={tokenId as string}
noIcon
userLocale={userLocale}
priceInFiat={tokenId === FIRMA.tokenId}
/>
)}
{isNftParent && nftTokenIds.length > 0 && (
<>
<NftTitle>NFTs in this Collection</NftTitle>
<NftTable>
{nftTokenIds.map(nftTokenId => {
const cachedNftInfo =
cashtabCache.tokens.get(nftTokenId);
return (
<NftCol key={nftTokenId}>
<NftRow>
<TokenIconExpandButton
onClick={() =>
setShowLargeNftIcon(
nftTokenId,
)
}
>
<TokenIcon
size={64}
tokenId={nftTokenId}
/>
</TokenIconExpandButton>
</NftRow>
<NftRow>
<NftTokenIdAndCopyIcon>
<a
href={`#/token/${nftTokenId}`}
target="_blank"
rel="noopener noreferrer"
>
{nftTokenId.slice(0, 3)}
...
{nftTokenId.slice(-3)}
</a>
<CopyIconButton
name={`Copy Token ID`}
data={nftTokenId}
showToast
customMsg={`NFT Token ID "${nftTokenId}" copied to clipboard`}
/>
</NftTokenIdAndCopyIcon>
</NftRow>
{typeof cachedNftInfo !==
'undefined' && (
<>
<NftRow>
{typeof tokens.get(
nftTokenId,
) !== 'undefined' ? (
<Link
to={`/token/${nftTokenId}`}
>
{
cachedNftInfo
.genesisInfo
.tokenName
}
</Link>
) : (
cachedNftInfo
.genesisInfo
.tokenName
)}
</NftRow>
</>
)}
</NftCol>
);
})}
</NftTable>
<NftTitle>Listings in this Collection</NftTitle>
<Collection
groupTokenId={tokenId as string}
agora={agora}
chronik={chronik}
cashtabCache={cashtabCache}
settings={settings}
fiatPrice={fiatPrice}
userLocale={userLocale}
wallet={wallet}
activePk={pk}
chaintipBlockheight={chaintipBlockheight}
noCollectionInfo
/>
</>
)}
{apiError && <ApiError />}
{typeof tokenBalance === 'undefined' ? (
<Info>You do not hold this token.</Info>
) : (
<>
{isSupportedToken && (
<SendTokenForm title="Token Actions">
{tokenId ===
appConfig.vipTokens.xecx.tokenId && (
<>
<SwitchHolder>
<Switch
name="Toggle Redeem XECX"
on="🤳"
off="🤳"
checked={
switches.showRedeemXecx
}
handleToggle={() => {
// We turn everything else off, whether we are turning this one on or off
setSwitches({
...switchesOff,
showRedeemXecx:
!switches.showRedeemXecx,
});
}}
/>
<SwitchLabel>
Redeem {tokenName} (
{tokenTicker}) 1:1 for XEC
</SwitchLabel>
</SwitchHolder>
{switches.showRedeemXecx && (
<>
<SendTokenFormRow>
<InputRow>
<Slider
name={
'agoraPartialTokenQty'
}
label={`Offered qty`}
value={
agoraPartialTokenQty
}
handleSlide={
handleTokenOfferedSlide
}
error={
agoraPartialTokenQtyError
}
min={0}
max={
tokenBalance
}
step={parseFloat(
`1e-${decimals}`,
)}
allowTypedInput
/>
</InputRow>
</SendTokenFormRow>
{!tokenListPriceError &&
formData.tokenListPrice !==
'' &&
formData.tokenListPrice !==
null &&
fiatPrice !== null && (
<ListPricePreview title="Token List Price">
{getAgoraPartialPricePreview()}
</ListPricePreview>
)}
<SendTokenFormRow>
<PrimaryButton
style={{
marginTop:
'12px',
}}
disabled={
apiError ||
agoraPartialTokenQtyError !==
false ||
agoraPartialMinError !==
false ||
tokenListPriceError !==
false ||
formData.tokenListPrice ===
'' ||
formData.tokenListPrice ===
null ||
agoraPartialTokenQty ===
'' ||
agoraPartialMin ===
''
}
onClick={
previewAgoraPartial
}
>
Redeem XECX for XEC
</PrimaryButton>
</SendTokenFormRow>
</>
)}
</>
)}
{tokenId === FIRMA.tokenId && (
<>
<SwitchHolder>
<Switch
name="Toggle Redeem FIRMA"
on="🤳"
off="🤳"
checked={
switches.showRedeemFirma
}
handleToggle={() => {
// We turn everything else off, whether we are turning this one on or off
setSwitches({
...switchesOff,
showRedeemFirma:
!switches.showRedeemFirma,
});
}}
/>
<SwitchLabel>
Redeem {tokenName}
</SwitchLabel>
</SwitchHolder>
{switches.showRedeemFirma && (
<>
<SendTokenFormRow>
<InputRow>
<Slider
name={
'agoraPartialTokenQty'
}
label={`Offered qty`}
value={
agoraPartialTokenQty
}
handleSlide={
handleTokenOfferedSlide
}
error={
agoraPartialTokenQtyError
}
min={0}
max={
tokenBalance
}
step={parseFloat(
`1e-${decimals}`,
)}
allowTypedInput
/>
</InputRow>
</SendTokenFormRow>
{!tokenListPriceError &&
formData.tokenListPrice !==
'' &&
formData.tokenListPrice !==
null &&
fiatPrice !== null && (
<ListPricePreview title="Token List Price">
{getAgoraPartialPricePreview()}
</ListPricePreview>
)}
<SendTokenFormRow>
<PrimaryButton
style={{
marginTop:
'12px',
}}
disabled={
apiError ||
agoraPartialTokenQtyError !==
false ||
agoraPartialTokenQty ===
'0' ||
agoraPartialTokenQty ===
'' ||
isCalculatingRedeemFirma
}
onClick={
previewFirmaPartial
}
>
{isCalculatingRedeemFirma ? (
<InlineLoader />
) : (
`Redeem FIRMA for XEC`
)}
</PrimaryButton>
</SendTokenFormRow>
</>
)}
</>
)}
{isNftChild ? (
<>
<SwitchHolder>
<Switch
name="Toggle Sell NFT"
on="💰"
off="💰"
checked={
switches.showSellNft
}
handleToggle={() => {
// We turn everything else off, whether we are turning this one on or off
setSwitches({
...switchesOff,
showSellNft:
!switches.showSellNft,
});
}}
/>
<SwitchLabel>
Sell {tokenName} (
{tokenTicker})
</SwitchLabel>
</SwitchHolder>
{switches.showSellNft && (
<>
<SendTokenFormRow>
<InputRow>
<ListPriceInput
name="nftListPrice"
placeholder="Enter NFT list price"
value={
formData.nftListPrice
}
selectValue={
selectedCurrency
}
selectDisabled={
fiatPrice ===
null
}
fiatCode={settings.fiatCurrency.toUpperCase()}
error={
nftListPriceError
}
handleInput={
handleNftListPriceChange
}
handleSelect={
handleSelectedCurrencyChange
}
></ListPriceInput>
</InputRow>
</SendTokenFormRow>
{!nftListPriceError &&
formData.nftListPrice !==
'' &&
formData.nftListPrice !==
null &&
fiatPrice !== null && (
<ListPricePreview title="NFT List Price">
{selectedCurrency ===
appConfig.ticker
? `${parseFloat(
formData.nftListPrice,
).toLocaleString(
userLocale,
)}
XEC = ${
settings
? `${
supportedFiatCurrencies[
settings
.fiatCurrency
].symbol
} `
: '$ '
}${(
parseFloat(
formData.nftListPrice,
) *
fiatPrice
).toLocaleString(
userLocale,
{
minimumFractionDigits:
appConfig.cashDecimals,
maximumFractionDigits:
appConfig.cashDecimals,
},
)} ${
settings &&
settings.fiatCurrency
? settings.fiatCurrency.toUpperCase()
: 'USD'
}`
: `${
settings
? `${
supportedFiatCurrencies[
settings
.fiatCurrency
]
.symbol
} `
: '$ '
}${parseFloat(
formData.nftListPrice,
).toLocaleString(
userLocale,
)} ${
settings &&
settings.fiatCurrency
? settings.fiatCurrency.toUpperCase()
: 'USD'
} = ${(
parseFloat(
formData.nftListPrice,
) /
fiatPrice
).toLocaleString(
userLocale,
{
minimumFractionDigits:
appConfig.cashDecimals,
maximumFractionDigits:
appConfig.cashDecimals,
},
)}
XEC`}
</ListPricePreview>
)}
<SendTokenFormRow>
<PrimaryButton
style={{
marginTop:
'12px',
}}
disabled={
apiError ||
nftListPriceError !==
false ||
formData.nftListPrice ===
''
}
onClick={() =>
setShowConfirmListNft(
true,
)
}
>
List {tokenName}
</PrimaryButton>
</SendTokenFormRow>
</>
)}
</>
) : (
(tokenType?.type ===
'SLP_TOKEN_TYPE_FUNGIBLE' ||
+ tokenType?.type ===
+ 'SLP_TOKEN_TYPE_MINT_VAULT' ||
isAlp) && (
<>
<SwitchHolder>
<Switch
name="Toggle Sell Token"
on="💰"
off="💰"
checked={
switches.showSellSlp
}
handleToggle={() => {
// We turn everything else off, whether we are turning this one on or off
setSwitches({
...switchesOff,
showSellSlp:
!switches.showSellSlp,
});
}}
/>
<SwitchLabel>
Sell {tokenName} (
{tokenTicker})
</SwitchLabel>
<IconButton
name={`Click for more info about agora partial sales`}
icon={<QuestionIcon />}
onClick={() =>
setShowAgoraPartialInfo(
true,
)
}
/>
</SwitchHolder>
{switches.showSellSlp && (
<>
<SendTokenFormRow>
<InputRow>
<Slider
name={
'agoraPartialTokenQty'
}
label={`Offered qty`}
value={
agoraPartialTokenQty
}
handleSlide={
handleTokenOfferedSlide
}
error={
agoraPartialTokenQtyError
}
min={0}
max={
tokenBalance
}
// Step is 1 smallets supported decimal point of the given token
step={parseFloat(
`1e-${decimals}`,
)}
allowTypedInput
/>
</InputRow>
</SendTokenFormRow>
<SendTokenFormRow>
<InputRow>
<LabelAndInputFlex>
<SliderLabel>
Price:
</SliderLabel>
<ListPriceInput
name="tokenListPrice"
placeholder="Enter list price (per token)"
inputDisabled={
agoraPartialTokenQty ===
''
}
value={
formData.tokenListPrice
}
selectValue={
selectedCurrency
}
selectDisabled={
fiatPrice ===
null
}
fiatCode={settings.fiatCurrency.toUpperCase()}
error={
tokenListPriceError
}
handleInput={
handleTokenListPriceChange
}
handleSelect={
handleSelectedCurrencyChange
}
></ListPriceInput>
</LabelAndInputFlex>
</InputRow>
</SendTokenFormRow>
<SendTokenFormRow>
<InputRow>
<Slider
name={
'agoraPartialMin'
}
disabled={
formData.tokenListPrice ===
'' ||
tokenListPriceError !==
false
}
label={`Min qty`}
value={
agoraPartialMin
}
handleSlide={
handleTokenMinSlide
}
error={
agoraPartialMinError
}
min={0}
max={
agoraPartialTokenQty
}
// Step is 1 smallets supported decimal point of the given token
step={parseFloat(
`1e-${decimals}`,
)}
allowTypedInput
/>
</InputRow>
</SendTokenFormRow>
{!tokenListPriceError &&
formData.tokenListPrice !==
'' &&
formData.tokenListPrice !==
null &&
fiatPrice !==
null && (
<ListPricePreview title="Token List Price">
{getAgoraPartialPricePreview()}
</ListPricePreview>
)}
<SendTokenFormRow>
<PrimaryButton
style={{
marginTop:
'12px',
}}
disabled={
apiError ||
agoraPartialTokenQtyError !==
false ||
agoraPartialMinError !==
false ||
tokenListPriceError !==
false ||
formData.tokenListPrice ===
'' ||
agoraPartialTokenQty ===
'' ||
agoraPartialMin ===
''
}
onClick={
previewAgoraPartial
}
>
List {tokenName}
</PrimaryButton>
</SendTokenFormRow>
</>
)}
</>
)
)}
{!isNftParent && (
<>
<SwitchHolder>
<Switch
name="Toggle Send"
on="➡️"
off="➡️"
checked={switches.showSend}
handleToggle={() => {
// We turn everything else off, whether we are turning this one on or off
setSwitches({
...switchesOff,
showSend:
!switches.showSend,
});
}}
/>
<SwitchLabel>
Send {tokenName} (
{tokenTicker})
</SwitchLabel>
</SwitchHolder>
{switches.showSend && (
<>
<SendTokenFormRow>
<InputRow>
<InputWithScanner
placeholder={`Address`}
name="address"
value={
formData.address
}
handleInput={
handleTokenAddressChange
}
error={
sendTokenAddressError
}
/>
</InputRow>
</SendTokenFormRow>
{!isNftChild && (
<SendTokenFormRow>
<SendTokenInput
name="amount"
value={
formData.amount
}
error={
sendTokenAmountError
}
placeholder="Amount"
handleInput={
handleTokenAmountChange
}
handleOnMax={
onMax
}
/>
</SendTokenFormRow>
)}
<SendTokenFormRow>
<PrimaryButton
style={{
marginTop:
'12px',
}}
disabled={
apiError ||
sendTokenAmountError !==
false ||
sendTokenAddressError !==
false ||
formData.address ===
'' ||
(!isNftChild &&
formData.amount ===
'')
}
onClick={() =>
checkForConfirmationBeforeSendEtoken()
}
>
Send {tokenTicker}
</PrimaryButton>
</SendTokenFormRow>
</>
)}
</>
)}
{isNftParent && (
<>
<SwitchHolder>
<Switch
name="Toggle NFT Parent Fan-out"
checked={
switches.showFanout
}
handleToggle={() =>
// We turn everything else off, whether we are turning this one on or off
setSwitches({
...switchesOff,
showFanout:
!switches.showFanout,
})
}
/>
<SwitchLabel>
<DataAndQuestionButton>
Create NFT mint inputs
<IconButton
name={`Click for more info about NFT Collection fan-out txs`}
icon={
<QuestionIcon />
}
onClick={() =>
setShowFanoutInfo(
true,
)
}
/>
</DataAndQuestionButton>
</SwitchLabel>
</SwitchHolder>
{switches.showFanout && (
<TokenStatsRow>
<SecondaryButton
style={{
marginTop: '12px',
marginBottom: '0px',
}}
disabled={
nftFanInputs.length ===
0
}
onClick={
createNftMintInputs
}
>
Create NFT Mint Inputs
</SecondaryButton>
<ButtonDisabledMsg>
{nftFanInputs.length ===
0
? 'No token utxos exist with qty !== 1'
: ''}
</ButtonDisabledMsg>
</TokenStatsRow>
)}
<SwitchHolder>
<Switch
name="Toggle Mint NFT"
checked={
switches.showMintNft
}
disabled={
nftChildGenesisInput.length ===
0
}
handleToggle={() =>
// We turn everything else off, whether we are turning this one on or off
setSwitches({
...switchesOff,
showMintNft:
!switches.showMintNft,
})
}
/>
<SwitchLabel>
<DataAndQuestionButton>
Mint NFT{' '}
{availableNftInputs ===
0 ? (
<ButtonDisabledSpan>
&nbsp;(no NFT
mint inputs)
</ButtonDisabledSpan>
) : (
<p>
&nbsp; (
{
availableNftInputs
}{' '}
input
{availableNftInputs >
1
? 's'
: ''}{' '}
available)
</p>
)}
<IconButton
name={`Click for more info about minting an NFT`}
icon={
<QuestionIcon />
}
onClick={() =>
setShowMintNftInfo(
true,
)
}
/>
</DataAndQuestionButton>
</SwitchLabel>
</SwitchHolder>
{switches.showMintNft && (
<CreateTokenForm
nftChildGenesisInput={
nftChildGenesisInput
}
/>
)}
</>
)}
{!isNftChild && (
<>
<SwitchHolder>
<Switch
name="Toggle Airdrop"
on="🪂"
off="🪂"
checked={
switches.showAirdrop
}
handleToggle={() =>
// We turn everything else off, whether we are turning this one on or off
setSwitches({
...switchesOff,
showAirdrop:
!switches.showAirdrop,
})
}
/>
<SwitchLabel>
Airdrop XEC to {tokenTicker}{' '}
holders
</SwitchLabel>
</SwitchHolder>
{switches.showAirdrop && (
<TokenStatsRow>
<Link
style={{
width: '100%',
}}
to="/airdrop"
state={{
airdropEtokenId:
tokenId,
}}
>
<SecondaryButton
style={{
marginTop:
'12px',
}}
>
Airdrop Calculator
</SecondaryButton>
</Link>
</TokenStatsRow>
)}
</>
)}
{!isNftParent && !isNftChild && (
<>
<SwitchHolder>
<Switch
name="Toggle Burn"
on="🔥"
off="🔥"
checked={switches.showBurn}
handleToggle={() =>
// We turn everything else off, whether we are turning this one on or off
setSwitches({
...switchesOff,
showBurn:
!switches.showBurn,
})
}
/>
<SwitchLabel>
Burn {tokenTicker}
</SwitchLabel>
</SwitchHolder>
{switches.showBurn && (
<TokenStatsRow>
<InputFlex>
<SendTokenInput
name="burnAmount"
value={
formData.burnAmount
}
error={
burnTokenAmountError
}
placeholder="Burn Amount"
handleInput={
handleEtokenBurnAmountChange
}
handleOnMax={
onMaxBurn
}
/>
<SecondaryButton
onClick={
handleBurnAmountInput
}
disabled={
burnTokenAmountError !==
false ||
formData.burnAmount ===
''
}
>
Burn {tokenTicker}
</SecondaryButton>
</InputFlex>
</TokenStatsRow>
)}
</>
)}
{mintBatons.length > 0 && (
<SwitchHolder>
<Switch
name="Toggle Mint"
on="⚗️"
off="⚗️"
checked={switches.showMint}
handleToggle={() =>
// We turn everything else off, whether we are turning this one on or off
setSwitches({
...switchesOff,
showMint:
!switches.showMint,
})
}
/>
<SwitchLabel>Mint</SwitchLabel>
</SwitchHolder>
)}
{switches.showMint && (
<TokenStatsRow>
<InputFlex>
<SendTokenInput
name="mintAmount"
value={formData.mintAmount}
error={mintAmountError}
placeholder="Mint Amount"
handleInput={
handleMintAmountChange
}
handleOnMax={onMaxMint}
/>
<SecondaryButton
onClick={
mintOrShowConfirmationModal
}
disabled={
mintAmountError !==
false ||
formData.mintAmount ===
''
}
>
Mint {tokenTicker}
</SecondaryButton>
</InputFlex>
</TokenStatsRow>
)}
</SendTokenForm>
)}
</>
)}
</>
)}
</OuterCtn>
);
};
export default Token;
diff --git a/cashtab/src/components/Etokens/__tests__/TokenActions.test.js b/cashtab/src/components/Etokens/__tests__/TokenActions.test.js
index 00c630986..cfb7f13a8 100644
--- a/cashtab/src/components/Etokens/__tests__/TokenActions.test.js
+++ b/cashtab/src/components/Etokens/__tests__/TokenActions.test.js
@@ -1,2519 +1,2773 @@
// Copyright (c) 2024 The Bitcoin developers
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
import React from 'react';
import { render, screen, waitFor, fireEvent } from '@testing-library/react';
import '@testing-library/jest-dom';
import userEvent from '@testing-library/user-event';
import { when } from 'jest-when';
import {
initializeCashtabStateForTests,
clearLocalForage,
} from 'components/App/fixtures/helpers';
import CashtabTestWrapper from 'components/App/fixtures/CashtabTestWrapper';
import appConfig from 'config/app';
import 'fake-indexeddb/auto';
import localforage from 'localforage';
import {
tokenTestWallet,
supportedTokens,
slp1FixedMocks,
slp1VarMocks,
alpMocks,
+ slpMintVaultMocks,
slp1NftParentMocks,
slp1NftParentWithChildrenMocks,
slp1NftChildMocks,
} from 'components/Etokens/fixtures/mocks';
import {
cachedHeismanNftOne,
heismanNftOneOffer,
heismanNftOneCache,
heismanCollectionCacheMocks,
tokenMockXecx,
mockFirmaOffer,
} from 'components/Agora/fixtures/mocks';
import CashtabCache from 'config/CashtabCache';
import { cashtabCacheToJSON } from 'helpers';
import { Ecc } from 'ecash-lib';
import { MockAgora } from '../../../../../modules/mock-chronik-client';
import { Agora } from 'ecash-agora';
import { token as tokenConfig } from 'config/token';
import { explorer } from 'config/explorer';
import { FIRMA, XECX_SWEEPER_ADDRESS } from 'constants/tokens';
describe('<Token /> available actions rendered', () => {
const ecc = new Ecc();
let mockedChronik;
// We need mockAgora now that we are using agora to subscribe to websockets
let mockAgora;
beforeEach(async () => {
const mockedDate = new Date('2022-01-01T12:00:00.000Z');
jest.spyOn(global, 'Date').mockImplementation(() => mockedDate);
mockAgora = new MockAgora();
// Mock the app with context at the Token Action screen
mockedChronik = await initializeCashtabStateForTests(
tokenTestWallet,
localforage,
);
// Build chronik mocks that Cashtab would use to add token info to cache
for (const tokenMock of supportedTokens) {
mockedChronik.setToken(tokenMock.tokenId, tokenMock.token);
mockedChronik.setTx(tokenMock.tokenId, tokenMock.tx);
mockedChronik.setUtxosByTokenId(tokenMock.tokenId, tokenMock.utxos);
// Set empty tx history to mock no existing NFTs
mockedChronik.setTxHistoryByTokenId(tokenMock.tokenId, []);
}
// Mock the fetch call to Cashtab's price API
global.fetch = jest.fn();
const fiatCode = 'usd'; // Use usd until you mock getting settings from localforage
const cryptoId = appConfig.coingeckoId;
// Keep this in the code, because different URLs will have different outputs requiring different parsing
const priceApiUrl = `https://api.coingecko.com/api/v3/simple/price?ids=${cryptoId}&vs_currencies=${fiatCode}&include_last_updated_at=true`;
const xecPrice = 0.00003;
const priceResponse = {
ecash: {
usd: xecPrice,
last_updated_at: 1706644626,
},
};
when(fetch)
.calledWith(priceApiUrl)
.mockResolvedValue({
json: () => Promise.resolve(priceResponse),
});
});
afterEach(async () => {
jest.clearAllMocks();
await clearLocalForage(localforage);
});
it('SLP1 fixed supply token', async () => {
render(
<CashtabTestWrapper
chronik={mockedChronik}
agora={mockAgora}
ecc={ecc}
route={`/send-token/${slp1FixedMocks.tokenId}`}
/>,
);
const { tokenName } = slp1FixedMocks.token.genesisInfo;
// Wait for element to get token info and load
expect(
(await screen.findAllByText(new RegExp(tokenName)))[0],
).toBeInTheDocument();
// We can click an info icon to learn more about this token type
await userEvent.click(
await screen.findByRole('button', {
name: 'Click for more info about this token type',
}),
);
expect(
screen.getByText(
`SLP 1 fungible token. Token may be of fixed supply if no mint batons exist. If you have a mint baton, you can mint more of this token at any time. May have up to 9 decimal places.`,
),
).toBeInTheDocument();
// Close out of the info modal
await userEvent.click(screen.getByText('OK'));
// The supply is correctly rendered as fixed
expect(
screen.getByText('2,999,998,798.000000000 (fixed)'),
).toBeInTheDocument();
// Token actions are available
expect(screen.getByTitle('Token Actions')).toBeInTheDocument();
// The sell switch is turned on by default
expect(screen.getByTitle('Toggle Sell Token')).toHaveProperty(
'checked',
true,
);
// The send switch is present
expect(screen.getByTitle('Toggle Send')).toBeInTheDocument();
// The Airdrop switch is present
expect(screen.getByTitle('Toggle Airdrop')).toBeInTheDocument();
// The Burn switch is present
expect(screen.getByTitle('Toggle Burn')).toBeInTheDocument();
// The Mint switch is not rendered
expect(screen.queryByTitle('Toggle Mint')).not.toBeInTheDocument();
});
it('SLP1 variable supply token with mint baton', async () => {
render(
<CashtabTestWrapper
chronik={mockedChronik}
agora={mockAgora}
ecc={ecc}
route={`/send-token/${slp1VarMocks.tokenId}`}
/>,
);
const { tokenName } = slp1VarMocks.token.genesisInfo;
// Wait for element to get token info and load
expect(
(await screen.findAllByText(new RegExp(tokenName)))[0],
).toBeInTheDocument();
// We can click an info icon to learn more about this token type
await userEvent.click(
await screen.findByRole('button', {
name: 'Click for more info about this token type',
}),
);
expect(
screen.getByText(
`SLP 1 fungible token. Token may be of fixed supply if no mint batons exist. If you have a mint baton, you can mint more of this token at any time. May have up to 9 decimal places.`,
),
).toBeInTheDocument();
// Close out of the info modal
await userEvent.click(screen.getByText('OK'));
// The supply is correctly rendered as fixed
expect(
screen.getByText('18,446,744,073.709551615 (var.)'),
).toBeInTheDocument();
// Token actions are available
expect(screen.getByTitle('Token Actions')).toBeInTheDocument();
// The sell switch is turned on by default
expect(screen.getByTitle('Toggle Sell Token')).toHaveProperty(
'checked',
true,
);
// The send switch is present
expect(screen.getByTitle('Toggle Send')).toBeInTheDocument();
// The Airdrop switch is present
expect(screen.getByTitle('Toggle Airdrop')).toBeInTheDocument();
// The Burn switch is present
expect(screen.getByTitle('Toggle Burn')).toBeInTheDocument();
// The Mint switch is present and not disabled
expect(screen.getByTitle('Toggle Mint')).toHaveProperty(
'disabled',
false,
);
});
it('We can list an SLP1 fungible token', async () => {
// Mock Math.random()
jest.spyOn(global.Math, 'random').mockReturnValue(0.5); // set a fixed value
// SLP1 ad prep
const adPrepHex =
'0200000002666de5d5852807a13612b6ea0373643266d435822daeb39c29e5d4b67e893cda0100000064414feb64ffdf50b0eb40a6fe0c34da65e94e0cbbbc2e58f2b290f3b2bf31480b34a57c4862ee177129dc8a1ce645573cd240e5e83d336d19ff22c3a7675bc903564121031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02dffffffffef76d01776229a95c45696cf68f2f98c8332d0c53e3f24e73fd9c6deaf7926180300000064410f0461f0e843cc5b78196e3fdb3b89d64948629645f3b44ea960c2a5ac8f5835189697165a01cc259a0f4eff931c83e110019ee5c7721a43e0dde11ba04e068d4121031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02dffffffff040000000000000000406a04534c500001010453454e442020a0b9337a78603c6681ed2bc541593375535dcd9979196620ce71f233f2f6f80800000019d80000000800000000001d9600060500000000000017a914e49e695e2f466e34447cb253567b8b277b60e3908722020000000000001976a91400549451e5c22b18686cacdf34dce649e5ec3be288ac2c2e0f00000000001976a91400549451e5c22b18686cacdf34dce649e5ec3be288ac00000000';
const adPrepTxid =
'280b6fda5a11a94145f3b4203fb4f199d875d3621c8e4cc9d63501e73b9649bc';
mockedChronik.setBroadcastTx(adPrepHex, adPrepTxid);
// SLP1 ad list
const adListHex =
'0200000001bc49963be70135d6c94c8e1c62d375d899f1b43f20b4f34541a9115ada6f0b2801000000dd0441475230075041525449414c41b11b013fb8140dcce13f93ee99584b1c6b547ee076ed63f9ec0a6c0068ad84c5420ecd608af68134366576bae4196a83f6a8f521c50dea4acc75dda6215c7fec414c8c4c766a04534c500001010453454e442020a0b9337a78603c6681ed2bc541593375535dcd9979196620ce71f233f2f6f80800000000000000000300dbf30400000000003dc7010000000000d226af0c000000002099c53f031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02d01557f77ad075041525449414c88044147523087ffffffff020000000000000000376a04534c500001010453454e442020a0b9337a78603c6681ed2bc541593375535dcd9979196620ce71f233f2f6f80800000019d8000000220200000000000017a91472df09389a835adb0e13e32bf1c91144ed107eef8700000000';
const adListTxid =
'823f652e22d154fc7bdd77ee9d9fa37c77e9649235f1430958bef68b7428b9ae';
mockedChronik.setBroadcastTx(adListHex, adListTxid);
// Mock response for agora select params check
// Note
// We obtain EXPECTED_OFFER_P2SH by adding
// console.log(toHex(shaRmd160(agoraScript.bytecode)));
// to ecash-agora lib and running this test
// Note that Date() and Math.random() must be mocked to keep this deterministic
const EXPECTED_OFFER_P2SH = '72df09389a835adb0e13e32bf1c91144ed107eef';
// We mock no existing utxos
mockedChronik.setUtxosByScript('p2sh', EXPECTED_OFFER_P2SH, []);
const agora = new Agora(mockedChronik);
render(
<CashtabTestWrapper
chronik={mockedChronik}
ecc={ecc}
agora={agora}
route={`/send-token/${slp1FixedMocks.tokenId}`}
/>,
);
const { tokenName } = slp1FixedMocks.token.genesisInfo;
// Wait for element to get token info and load
expect(await screen.findAllByText(new RegExp(tokenName))).toHaveLength(
3,
);
// Token image is rendered
expect(
screen.getByAltText(`icon for ${slp1FixedMocks.tokenId}`),
).toBeInTheDocument();
// Token actions are available
expect(await screen.findByTitle('Token Actions')).toBeInTheDocument();
// On load, default action for SLP is to list it
expect(await screen.findByTitle('Toggle Sell Token')).toBeEnabled();
// The list button is disabled on load
const listButton = await screen.findByRole('button', {
name: /List Vespene Gas/,
});
await waitFor(() => expect(listButton).toBeDisabled());
// The price input is disabled until qty values are entered
const priceInput = screen.getByPlaceholderText(
'Enter list price (per token)',
);
expect(priceInput).toBeDisabled();
const minQtyInput = screen.getByPlaceholderText('Min qty');
// Min qty input is disabled before we enter offered qty
expect(minQtyInput).toBeDisabled();
// Enter token balance as offered qty
await userEvent.type(screen.getByPlaceholderText('Offered qty'), '111');
// The price input is no longer disabled
expect(priceInput).toBeEnabled();
// We see expected error msg if we try to list the token at a price where the min buy would cost less than dust
await userEvent.type(priceInput, '0.001');
// The min qty input updates automatically when price is set to reflect the actual min qty
// i.e. what qty would sell for dust
expect(minQtyInput).toHaveValue('5460');
// But this is higher than our balance, so we get an error
expect(
screen.getByText(
'The min buy must be less than or equal to the offered quantity',
),
).toBeInTheDocument();
// Ok, let's change the price
await userEvent.clear(priceInput);
await userEvent.type(priceInput, '0.5');
// Note that the min qty does not auto-update when price changes after the initial change
expect(minQtyInput).toHaveValue('5460');
// The buy button is disabled with invalid qty
expect(listButton).toBeDisabled();
// Let's lower the qty
expect(minQtyInput).toBeEnabled();
await userEvent.clear(minQtyInput);
await userEvent.type(minQtyInput, '11');
// The list button is no longer disabled
expect(listButton).toBeEnabled();
// Lets bump the offered qty below the min qty using the slider
// get the agoraPartialTokenQty slider
const sliders = screen.getAllByRole('slider');
const agoraPartialTotalOfferedSlider = sliders[0];
// We can move the slider and see the price of different quantities
fireEvent.change(agoraPartialTotalOfferedSlider, {
target: { value: 10 },
});
// We see expected validation error
expect(
screen.getByText(
'The min buy must be less than or equal to the offered quantity',
),
).toBeInTheDocument();
// The list button is disabled again
expect(listButton).toBeDisabled();
// Move it back
fireEvent.change(agoraPartialTotalOfferedSlider, {
target: { value: 111 },
});
// The fiat price is previewed correctly
expect(
screen.getByText('0.5000 XEC ($0.00001500 USD) per token'),
).toBeInTheDocument();
// We can also set the price in fiat currency
await userEvent.selectOptions(
screen.getByTestId('currency-select-dropdown'),
screen.getByTestId('fiat-option'),
);
// The price input is cleared when the user changes from XEC price to fiat price
expect(priceInput).toHaveValue(null);
// We list for $2 per token
await userEvent.type(priceInput, '5');
// The fiat price is previewed correctly
expect(
screen.getByText('$5 USD (166,666.67 XEC) per token'),
).toBeInTheDocument();
// We enter a low price in fiat
await userEvent.clear(priceInput);
await userEvent.type(priceInput, '0.00005');
// The fiat price is previewed correctly
expect(
await screen.findByText('$0.00005 USD (1.6667 XEC) per token'),
).toBeInTheDocument();
// Click the now-enabled list button
await userEvent.click(listButton);
// We see expected confirmation modal to list the Token
expect(await screen.findByText('List VSP?')).toBeInTheDocument();
expect(
screen.getByText('Create the following sell offer?'),
).toBeInTheDocument();
// Offered qty (actual, calculated from AgoraOffer)
const actualOfferedQty = '110.998061056';
expect(screen.getByText(actualOfferedQty)).toBeInTheDocument();
// Min by (actual, calculated from AgoraOffer)
expect(screen.getByText('11.005853696')).toBeInTheDocument();
const userInputPricePerToken = '1.6667 XEC';
// Actual price calculated from AgoraOffer
const actualPricePerToken = '1.6600 XEC';
expect(screen.getByText(userInputPricePerToken)).toBeInTheDocument();
// User input price
expect(screen.getByText(actualPricePerToken)).toBeInTheDocument();
// We can cancel and not create this listing
await userEvent.click(screen.getByText('Cancel'));
// The confirmation modal is gone
expect(screen.queryByText('List VSP?')).not.toBeInTheDocument();
// We change our mind and list it
await userEvent.click(listButton);
// We wait for the preview to be calculated again
expect(await screen.findByText('List VSP?')).toBeInTheDocument();
await userEvent.click(screen.getByText('OK'));
// We see expected toast notification for the ad setup tx
expect(
await screen.findByText(
`Successful ad setup tx to offer ${actualOfferedQty} Vespene Gas for ${actualPricePerToken} per token`,
),
).toBeInTheDocument();
// We see the expected toast notification for the successful listing tx
expect(
await screen.findByText(
`${actualOfferedQty} Vespene Gas listed for ${actualPricePerToken} per token`,
),
).toBeInTheDocument();
});
it('We can correctly render an SLP1 NFT Parent token with no NFT Mint inputs, then create some NFT Mint inputs', async () => {
const hex =
'0200000002cc04a35686950a66845ebf8e37677fffcc5ee0e2b63e3f05822838273149660c010000006441878aa7e698097a4961646a2da44f701d8895cb065113fcf1d2e9f073afbc37025a5587e121bd0311a24a7af60445abfc4de7e3675a3a9f51cffddc875d88fca24121031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02dffffffffef76d01776229a95c45696cf68f2f98c8332d0c53e3f24e73fd9c6deaf7926180300000064412f509f90f23f4b85b27452e0f25d33cef07ad8fef898e2d308c43fb0dfd6f7e00f7201336be4089171ddc094a24688882b518ec0c6958c904df12d0239a7342f4121031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02dffffffff150000000000000000d96a04534c500001810453454e44200c66493127382882053f3eb6e2e05eccff7f67378ebf5e84660a958656a304cc08000000000000000108000000000000000108000000000000000108000000000000000108000000000000000108000000000000000108000000000000000108000000000000000108000000000000000108000000000000000108000000000000000108000000000000000108000000000000000108000000000000000108000000000000000108000000000000000108000000000000000108000000000000000108000000000000005222020000000000001976a91400549451e5c22b18686cacdf34dce649e5ec3be288ac22020000000000001976a91400549451e5c22b18686cacdf34dce649e5ec3be288ac22020000000000001976a91400549451e5c22b18686cacdf34dce649e5ec3be288ac22020000000000001976a91400549451e5c22b18686cacdf34dce649e5ec3be288ac22020000000000001976a91400549451e5c22b18686cacdf34dce649e5ec3be288ac22020000000000001976a91400549451e5c22b18686cacdf34dce649e5ec3be288ac22020000000000001976a91400549451e5c22b18686cacdf34dce649e5ec3be288ac22020000000000001976a91400549451e5c22b18686cacdf34dce649e5ec3be288ac22020000000000001976a91400549451e5c22b18686cacdf34dce649e5ec3be288ac22020000000000001976a91400549451e5c22b18686cacdf34dce649e5ec3be288ac22020000000000001976a91400549451e5c22b18686cacdf34dce649e5ec3be288ac22020000000000001976a91400549451e5c22b18686cacdf34dce649e5ec3be288ac22020000000000001976a91400549451e5c22b18686cacdf34dce649e5ec3be288ac22020000000000001976a91400549451e5c22b18686cacdf34dce649e5ec3be288ac22020000000000001976a91400549451e5c22b18686cacdf34dce649e5ec3be288ac22020000000000001976a91400549451e5c22b18686cacdf34dce649e5ec3be288ac22020000000000001976a91400549451e5c22b18686cacdf34dce649e5ec3be288ac22020000000000001976a91400549451e5c22b18686cacdf34dce649e5ec3be288ac22020000000000001976a91400549451e5c22b18686cacdf34dce649e5ec3be288ac0d070f00000000001976a91400549451e5c22b18686cacdf34dce649e5ec3be288ac00000000';
const txid =
'cdc6afbf1ddd796388692ec9106816be1f9229ece11e545c1cbe6854ccf087ec';
mockedChronik.setBroadcastTx(hex, txid);
render(
<CashtabTestWrapper
chronik={mockedChronik}
agora={mockAgora}
ecc={ecc}
route={`/token/${slp1NftParentMocks.tokenId}`}
/>,
);
const { tokenName } = slp1NftParentMocks.token.genesisInfo;
// Wait for the component to finish loading
await waitFor(() =>
expect(
screen.queryByTitle('Cashtab Loading'),
).not.toBeInTheDocument(),
);
// Wait for element to get token info and load
expect(
(await screen.findAllByText(new RegExp(tokenName)))[0],
).toBeInTheDocument();
// We can click an info icon to learn more about this token type
await userEvent.click(
await screen.findByRole('button', {
name: 'Click for more info about this token type',
}),
);
expect(
screen.getByText(
`The parent tokens for an NFT collection. Can be used to mint NFTs. No decimal places. The supply of this token is the potential quantity of NFTs which could be minted. If no mint batons exist, the supply is fixed.`,
),
).toBeInTheDocument();
// Close out of the info modal
await userEvent.click(screen.getByText('OK'));
// The supply is correctly rendered
expect(screen.getByText('100 (var.)')).toBeInTheDocument();
// Token actions are available
expect(screen.getByTitle('Token Actions')).toBeInTheDocument();
// The fan-out action is available
expect(
screen.getByTitle('Toggle NFT Parent Fan-out'),
).toBeInTheDocument();
// This action is checked by default if the user has no fanInputs
expect(screen.getByTitle('Toggle NFT Parent Fan-out')).toHaveProperty(
'checked',
true,
);
// The mint NFT option is available
expect(screen.getByTitle('Toggle Mint NFT')).toBeInTheDocument();
// The mint NFT option is disabled if there are no mint inputs
expect(screen.getByTitle('Toggle Mint NFT')).toHaveProperty(
'disabled',
true,
);
// The mint NFT switch label explains why it is disabled
expect(screen.getByText('(no NFT mint inputs)')).toBeInTheDocument();
// The Airdrop action is available
expect(screen.getByTitle('Toggle Airdrop')).toBeInTheDocument();
// The Burn action is NOT available
expect(screen.queryByTitle('Toggle Burn')).not.toBeInTheDocument();
// We can create NFT mint inputs by executing a fan-out tx
await userEvent.click(
screen.getByRole('button', { name: /Create NFT Mint Inputs/ }),
);
// We see expected toast notification
expect(
await screen.findByText('NFT Mint inputs created'),
).toBeInTheDocument();
});
it('We can correctly render an SLP1 NFT Parent token with NFT Mint inputs, then mint an NFT', async () => {
// We need to use a unique mockedChronik for this test, with at least one nft mint input utxo
// Mock the app with context at the Token Action screen
const mintNftMockedChronik = await initializeCashtabStateForTests(
{
...tokenTestWallet,
state: {
...tokenTestWallet.state,
slpUtxos: [
...tokenTestWallet.state.slpUtxos,
{
outpoint: {
txid: '3333333333333333333333333333333333333333333333333333333333333333',
outIdx: 1,
},
blockHeight: 840012,
isCoinbase: false,
sats: 546n,
isFinal: true,
token: {
tokenId:
'0c66493127382882053f3eb6e2e05eccff7f67378ebf5e84660a958656a304cc',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_NFT1_GROUP',
number: 129,
},
atoms: 1n,
isMintBaton: false,
},
path: 1899,
},
],
},
},
localforage,
);
// Build chronik mocks that Cashtab would use to add token info to cache
for (const tokenMock of supportedTokens) {
mintNftMockedChronik.setToken(tokenMock.tokenId, tokenMock.token);
mintNftMockedChronik.setTx(tokenMock.tokenId, tokenMock.tx);
mintNftMockedChronik.setUtxosByTokenId(
tokenMock.tokenId,
tokenMock.utxos,
);
// Set empty tx history to mock no existing NFTs
mintNftMockedChronik.setTxHistoryByTokenId(tokenMock.tokenId, []);
}
const hex =
'020000000233333333333333333333333333333333333333333333333333333333333333330100000064412564b7504e0ec0a094aae832fee07ce86f21de56153a71c99bcc50a20d4f79ba264cccd4fc39d4840af59e0f013cb535b07ae31795197db0fcda47b8ef91973b4121031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02dffffffffef76d01776229a95c45696cf68f2f98c8332d0c53e3f24e73fd9c6deaf7926180300000064418758fd9e1a9eec69b262ba29227a1cbb0990dca35f7deadb91145af82e922cabe1efcb688c4a498fefbc903d6d4b5cdb8facdf624e7cbde95065b7ad014a54864121031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02dffffffff0300000000000000003c6a04534c500001410747454e4553495304414243310b426974636f696e204142430b636173687461622e636f6d4c0001004c0008000000000000000122020000000000001976a91400549451e5c22b18686cacdf34dce649e5ec3be288ac7a330f00000000001976a91400549451e5c22b18686cacdf34dce649e5ec3be288ac00000000';
const txid =
'd215995b67194576b66ef9c593a66d9255a3ec21e424ecfbb6046643b8e0dbe6';
mintNftMockedChronik.setBroadcastTx(hex, txid);
render(
<CashtabTestWrapper
chronik={mintNftMockedChronik}
agora={mockAgora}
ecc={ecc}
route={`/token/${slp1NftParentMocks.tokenId}`}
/>,
);
const { tokenName } = slp1NftParentMocks.token.genesisInfo;
// Wait for the component to finish loading
await waitFor(() =>
expect(
screen.queryByTitle('Cashtab Loading'),
).not.toBeInTheDocument(),
);
// Wait for element to get token info and load
expect(
(await screen.findAllByText(new RegExp(tokenName)))[0],
).toBeInTheDocument();
// We can click an info icon to learn more about this token type
await userEvent.click(
await screen.findByRole('button', {
name: 'Click for more info about this token type',
}),
);
expect(
screen.getByText(
`The parent tokens for an NFT collection. Can be used to mint NFTs. No decimal places. The supply of this token is the potential quantity of NFTs which could be minted. If no mint batons exist, the supply is fixed.`,
),
).toBeInTheDocument();
// Close out of the info modal
await userEvent.click(screen.getByText('OK'));
// The supply is correctly rendered
expect(screen.getByText('100 (var.)')).toBeInTheDocument();
// Token actions are available
expect(screen.getByTitle('Token Actions')).toBeInTheDocument();
// The fan-out action is available
expect(
screen.getByTitle('Toggle NFT Parent Fan-out'),
).toBeInTheDocument();
// The fan-out action is NOT checked by default because we have a single fan input
expect(screen.getByTitle('Toggle NFT Parent Fan-out')).toHaveProperty(
'checked',
false,
);
// The mint NFT option is available
expect(screen.getByTitle('Toggle Mint NFT')).toBeInTheDocument();
// The mint NFT option is NOT disabled as we have a single mint input
expect(screen.getByTitle('Toggle Mint NFT')).toHaveProperty(
'disabled',
false,
);
// The mint NFT switch label does not include the disabled explanation
expect(
screen.queryByText('(no NFT mint inputs)'),
).not.toBeInTheDocument();
// The mint NFT switch label shows available NFT mint inputs
expect(screen.getByText('(1 input available)')).toBeInTheDocument();
// The Airdrop action is available
expect(screen.getByTitle('Toggle Airdrop')).toBeInTheDocument();
// The Burn action is NOT available
expect(screen.queryByTitle('Toggle Burn')).not.toBeInTheDocument();
// We can mint an NFT if we give it a name and a ticker
await userEvent.type(
await screen.findByPlaceholderText('Enter a name for your NFT'),
'Bitcoin ABC',
);
// The mint button is disabled as the user has not entered a ticker
expect(screen.getByRole('button', { name: /Mint NFT/ })).toHaveProperty(
'disabled',
true,
);
expect(
screen.getByText('NFT must have a name and a ticker'),
).toBeInTheDocument();
// We give the NFT a ticker
await userEvent.type(
await screen.findByPlaceholderText('Enter a ticker for your NFT'),
'ABC1',
);
// The mint button is no longer disabled
expect(screen.getByRole('button', { name: /Mint NFT/ })).toHaveProperty(
'disabled',
false,
);
await userEvent.click(screen.getByRole('button', { name: /Mint NFT/ }));
// We see a preview modal, click OK
await userEvent.click(screen.getByText('OK'));
// We see expected toast notification
expect(await screen.findByText('NFT Minted!')).toBeInTheDocument();
});
it('We can render an SLP1 NFT Parent token with a minted NFT in its collection', async () => {
// We need to use a unique mockedChronik for this test, with at least one nft mint input utxo
// Mock the app with context at the Token Action screen
// Note the Token page will render all NFTs in a collection based on whether or not they exist,
// not based on whether or not they are in the user's wallet
// The user actions available for the child NFTs depend on whether or not the NFTs exist in the user's wallet
const renderChildNftsMockedChronik =
await initializeCashtabStateForTests(
{
...tokenTestWallet,
state: {
...tokenTestWallet.state,
slpUtxos: [
...tokenTestWallet.state.slpUtxos,
// Its parent NFT so this is cached
slp1NftParentWithChildrenMocks.utxos[0],
// A child NFT in the utxo set
slp1NftChildMocks.utxos[0],
],
},
},
localforage,
);
// Build chronik mocks that Cashtab would use to add token info to cache
for (const tokenMock of supportedTokens) {
renderChildNftsMockedChronik.setToken(
tokenMock.tokenId,
tokenMock.token,
);
renderChildNftsMockedChronik.setTx(tokenMock.tokenId, tokenMock.tx);
renderChildNftsMockedChronik.setUtxosByTokenId(
tokenMock.tokenId,
tokenMock.utxos,
);
// Set tx history of parent tokenId to empty
renderChildNftsMockedChronik.setTxHistoryByTokenId(
tokenMock.tokenId,
[],
);
}
// Set tx history of parent tokenId to include an NFT
renderChildNftsMockedChronik.setTxHistoryByTokenId(
slp1NftParentWithChildrenMocks.tokenId,
[slp1NftChildMocks.tx],
);
render(
<CashtabTestWrapper
chronik={renderChildNftsMockedChronik}
agora={mockAgora}
ecc={ecc}
route={`/token/${slp1NftParentWithChildrenMocks.tokenId}`}
/>,
);
const { tokenName } = slp1NftParentWithChildrenMocks.token.genesisInfo;
// Wait for the component to finish loading
await waitFor(() =>
expect(
screen.queryByTitle('Cashtab Loading'),
).not.toBeInTheDocument(),
);
// Wait for element to get token info and load
expect(
(await screen.findAllByText(new RegExp(tokenName)))[0],
).toBeInTheDocument();
// We can click an info icon to learn more about this token type
await userEvent.click(
await screen.findByRole('button', {
name: 'Click for more info about this token type',
}),
);
expect(
screen.getByText(
`The parent tokens for an NFT collection. Can be used to mint NFTs. No decimal places. The supply of this token is the potential quantity of NFTs which could be minted. If no mint batons exist, the supply is fixed.`,
),
).toBeInTheDocument();
// Close out of the info modal
await userEvent.click(screen.getByText('OK'));
// The wallet balance of this token is correctly rendered
expect(screen.getByText('1 (fixed)')).toBeInTheDocument();
// Token actions are available
expect(screen.getByTitle('Token Actions')).toBeInTheDocument();
// The fan-out action is available
expect(
screen.getByTitle('Toggle NFT Parent Fan-out'),
).toBeInTheDocument();
// The fan-out action is NOT checked by default because we have a single fan input
expect(screen.getByTitle('Toggle NFT Parent Fan-out')).toHaveProperty(
'checked',
false,
);
// The mint NFT option is available
expect(screen.getByTitle('Toggle Mint NFT')).toBeInTheDocument();
// The mint NFT option is NOT disabled as we have a single mint input
expect(screen.getByTitle('Toggle Mint NFT')).toHaveProperty(
'disabled',
false,
);
// The mint NFT switch label does not include the disabled explanation
expect(
screen.queryByText('(no NFT mint inputs)'),
).not.toBeInTheDocument();
// The mint NFT switch label shows available NFT mint inputs
expect(screen.getByText('(1 input available)')).toBeInTheDocument();
// The Airdrop action is available
expect(screen.getByTitle('Toggle Airdrop')).toBeInTheDocument();
// The Burn action is NOT available
expect(screen.queryByTitle('Toggle Burn')).not.toBeInTheDocument();
// A child NFT is rendered
expect(screen.getByText('NFTs in this Collection')).toBeInTheDocument();
// NFT image is rendered
expect(
screen.getByAltText(`icon for ${slp1NftChildMocks.tokenId}`),
).toBeInTheDocument();
// NFT name is rendered
expect(screen.getByText('Gordon Chen')).toBeInTheDocument();
});
it('We can list an SLP1 NFT', async () => {
const mockedAgora = new MockAgora();
mockedAgora.setOfferedGroupTokenIds([]);
// It's not listed yet
mockedAgora.setActiveOffersByTokenId(slp1NftChildMocks.tokenId, []);
// activeOffersByPubKey
// The test wallet is selling the Saturn V NFT
mockedAgora.setActiveOffersByPubKey(
tokenTestWallet.paths.get(appConfig.derivationPath).pk,
[],
);
// activeOffersByGroupTokenId does not need to be mocked since there are no offers here
// NFT ad prep
const adPrepHex =
'0200000002268322a2a8e67fe9efdaf15c9eb7397fb640ae32d8a245c2933f9eb967ff9b5d010000006441e4365d350b1dfee55e60cc2600ba094ed0e05c1d6a297bd3fe3f0721b88d9ec09b7d114cf0aab08a3b264153858f1a48f839f3639a8a8f9b11214038080cb9e34121031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02dffffffffef76d01776229a95c45696cf68f2f98c8332d0c53e3f24e73fd9c6deaf7926180300000064411e9913b28017832fa38944675eb8815411fd210f9dfc8f0aa806bed055f52b6592488fdd1f9be942c19dcb98d7ddd7c55bc8b1233a64ad3dfa1c65eebbd48f254121031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02dffffffff030000000000000000376a04534c500001410453454e44205d9bff67b99e3f93c245a2d832ae40b67f39b79e5cf1daefe97fe6a8a22283260800000000000000019a0400000000000017a91407d2b0e6ec7b96cbfbe4a7d54e28d28fbcf65e408710310f00000000001976a91400549451e5c22b18686cacdf34dce649e5ec3be288ac00000000';
const adPrepTxid =
'7b4f2b1cf9716ead03f91910bd0c08956c381987e1cb3cd9f9b4d555a7b9ba25';
mockedChronik.setBroadcastTx(adPrepHex, adPrepTxid);
// NFT ad list
const adListHex =
'020000000125bab9a755d5b4f9d93ccbe18719386c95080cbd1019f903ad6e71f91c2b4f7b01000000a70441475230074f4e4553484f544106bd7c3cc4f6aca45a7f97644b8cb5e745dee224246f38605171e8f9e0d6e036af3ea4853b08e1baa92e091bd0ceabf83d4a246e07e6b0b008a3e091b111f22a414c56222b50fe00000000001976a91400549451e5c22b18686cacdf34dce649e5ec3be288ac7521031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02dad074f4e4553484f5488044147523087ffffffff020000000000000000376a04534c500001410453454e44205d9bff67b99e3f93c245a2d832ae40b67f39b79e5cf1daefe97fe6a8a2228326080000000000000001220200000000000017a914729833ae294590bbcf28bfbb9ad54c01b6cdb6288700000000';
const adListTxid =
'97cf0fed5062419ad456f22457cfeb3b15909f1de2350be48c53b24944e0de89';
mockedChronik.setBroadcastTx(adListHex, adListTxid);
// NFT send
const hex =
'0200000002268322a2a8e67fe9efdaf15c9eb7397fb640ae32d8a245c2933f9eb967ff9b5d010000006441fff60607ba0fb6eda064075b321abc3980c249efcc0e91d4d95e464500a654476e59b76dd19bdd66f5d207a0d731550c93ce724a09e00a3bff3fcfbc08c970844121031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02dffffffffef76d01776229a95c45696cf68f2f98c8332d0c53e3f24e73fd9c6deaf792618030000006441fe754300443dfb293619693087016c9d9a8437489d48cb7c0c3fcb6b5af6277833ff7156355aeb557145c4075b7917d90d79239ba7bf776a38fef935d8da2f7c4121031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02dffffffff030000000000000000376a04534c500001410453454e44205d9bff67b99e3f93c245a2d832ae40b67f39b79e5cf1daefe97fe6a8a222832608000000000000000122020000000000001976a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac84330f00000000001976a91400549451e5c22b18686cacdf34dce649e5ec3be288ac00000000';
const txid =
'daa5872d1ef95a05bd3ee59fc532aa7921a54b783a5af68c5aa9146f61d2e134';
mockedChronik.setBroadcastTx(hex, txid);
render(
<CashtabTestWrapper
chronik={mockedChronik}
agora={mockedAgora}
ecc={ecc}
route={`/send-token/${slp1NftChildMocks.tokenId}`}
/>,
);
const { tokenName } = slp1NftChildMocks.token.genesisInfo;
// Wait for element to get token info and load
expect(
(await screen.findAllByText(new RegExp(tokenName)))[0],
).toBeInTheDocument();
// NFT image is rendered
expect(
screen.getByAltText(`icon for ${slp1NftChildMocks.tokenId}`),
).toBeInTheDocument();
// We can click an info icon to learn more about this token type
await userEvent.click(
await screen.findByRole('button', {
name: 'Click for more info about this token type',
}),
);
expect(
screen.getByText(
`eCash NFT. NFT supply is always 1. This NFT may belong to an NFT collection.`,
),
).toBeInTheDocument();
// Close out of the info modal
await userEvent.click(screen.getByText('OK'));
// For an NFT, we render the NFT name, not balance, as it is always 1 if we can see this page
expect(screen.getByText('Gordon Chen')).toBeInTheDocument();
// We see what collection this NFT is from
expect(screen.getByText(/NFT from collection/)).toBeInTheDocument();
expect(
screen.getByText('The Four Half-Coins of Jin-qua'),
).toBeInTheDocument();
// Token actions are available for NFTs
expect(screen.getByTitle('Token Actions')).toBeInTheDocument();
// On load, default action for NFT is to list it
expect(screen.getByTitle('Toggle Sell NFT')).toBeChecked();
// We see a price input field for listing this NFT
const priceInput = screen.getByPlaceholderText('Enter NFT list price');
expect(priceInput).toBeInTheDocument();
// We see expected error msg if we try to list the NFT for less than dust
await userEvent.type(priceInput, '5.45');
expect(
screen.getByText('List price cannot be less than dust (5.46 XEC).'),
).toBeInTheDocument();
// The List button is disabled on bad validation
const listButton = screen.getByRole('button', {
name: /List Gordon Chen/,
});
expect(listButton).toBeDisabled();
await userEvent.clear(priceInput);
// No validation error if NFT list price is for more than dust
await userEvent.type(priceInput, '10000');
expect(
screen.queryByText(
'List price cannot be less than dust (5.46 XEC).',
),
).not.toBeInTheDocument();
// The List button is NOT disabled if price is greater than dust
expect(listButton).toBeEnabled();
// The fiat price is previewed correctly
expect(screen.getByText('10,000 XEC = $ 0.30 USD')).toBeInTheDocument();
// We can also set the price in fiat currency
await userEvent.selectOptions(
screen.getByTestId('currency-select-dropdown'),
screen.getByTestId('fiat-option'),
);
// The price input is cleared when the user changes from XEC price to fiat price
expect(priceInput).toHaveValue(null);
// We list the NFT for $5
await userEvent.type(priceInput, '5');
// The fiat price is previewed correctly
expect(
screen.getByText(/\$ 5 USD = 166,666.67 XEC/),
).toBeInTheDocument();
// Click the now-enabled list button
await userEvent.click(listButton);
// We see expected confirmation modal to list the NFT
expect(screen.getByText(/List GC for \$5 USD/)).toBeInTheDocument();
// We can cancel and not list the NFT
await userEvent.click(screen.getByText('Cancel'));
// The confirmation modal is gone
expect(
screen.queryByText(/List GC for \$ 5 USD/),
).not.toBeInTheDocument();
// We change our mind
await userEvent.click(listButton);
await userEvent.click(screen.getByText('OK'));
// We see expected toast notification for the ad setup tx
expect(await screen.findByText('Created NFT ad')).toBeInTheDocument();
// We see the expected toast notification for the successful listing tx
expect(
await screen.findByText(/NFT listed for 166,666.67 XEC/),
).toBeInTheDocument();
// Screen should check for new listings and show the listing on this page
// Cannot test this without regtest, as we would need MockedAgora to show no
// active offers on load, then 1 offer after listing
// Can confirm in manual testing
});
it('We can send an SLP1 NFT', async () => {
const mockedAgora = new MockAgora();
mockedAgora.setOfferedGroupTokenIds([]);
// It's not listed yet
mockedAgora.setActiveOffersByTokenId(slp1NftChildMocks.tokenId, []);
// NFT send
const hex =
'0200000002268322a2a8e67fe9efdaf15c9eb7397fb640ae32d8a245c2933f9eb967ff9b5d010000006441fff60607ba0fb6eda064075b321abc3980c249efcc0e91d4d95e464500a654476e59b76dd19bdd66f5d207a0d731550c93ce724a09e00a3bff3fcfbc08c970844121031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02dffffffffef76d01776229a95c45696cf68f2f98c8332d0c53e3f24e73fd9c6deaf792618030000006441fe754300443dfb293619693087016c9d9a8437489d48cb7c0c3fcb6b5af6277833ff7156355aeb557145c4075b7917d90d79239ba7bf776a38fef935d8da2f7c4121031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02dffffffff030000000000000000376a04534c500001410453454e44205d9bff67b99e3f93c245a2d832ae40b67f39b79e5cf1daefe97fe6a8a222832608000000000000000122020000000000001976a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac84330f00000000001976a91400549451e5c22b18686cacdf34dce649e5ec3be288ac00000000';
const txid =
'daa5872d1ef95a05bd3ee59fc532aa7921a54b783a5af68c5aa9146f61d2e134';
mockedChronik.setBroadcastTx(hex, txid);
render(
<CashtabTestWrapper
chronik={mockedChronik}
agora={mockedAgora}
ecc={ecc}
route={`/send-token/${slp1NftChildMocks.tokenId}`}
/>,
);
const { tokenName } = slp1NftChildMocks.token.genesisInfo;
// Wait for element to get token info and load
expect(
(await screen.findAllByText(new RegExp(tokenName)))[0],
).toBeInTheDocument();
// On load, default action for NFT is to list it
const sellActionSwitch = screen.getByTitle('Toggle Sell NFT');
expect(sellActionSwitch).toBeChecked();
// Sending is disabled
const sendActionSwitch = screen.getByTitle('Toggle Send');
expect(sendActionSwitch).not.toBeChecked();
// When we enable Sending, Selling is disabled, and Sending is enabled
await userEvent.click(sendActionSwitch);
expect(sendActionSwitch).toBeChecked();
expect(sellActionSwitch).not.toBeChecked();
// We see an Address input
const addrInput = screen.getByPlaceholderText('Address');
expect(addrInput).toBeInTheDocument();
// Send button is disabled before address entry
const sendButton = screen.getByRole('button', {
name: /Send GC/,
});
expect(sendButton).toBeDisabled();
// We can enter an address
await userEvent.type(
addrInput,
'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035',
);
// Now the button is enabled
expect(sendButton).toBeEnabled();
// We can send an NFT
await userEvent.click(sendButton);
expect(await screen.findByText('NFT sent')).toBeInTheDocument();
});
it('SLP1 NFT page will update cashtab token cache for the NFT if it does not include groupTokenId, and for its parent if it is not in cache', async () => {
// Use wallet with nft utxo as only utxo
// Preset a cache without groupTokenId
// Use existing tx and token mocks
// We need to use a unique mockedChronik for this test, with a minted NFT utxo but no parent utxo
// The user actions available for the child NFTs depend on whether or not the NFTs exist in the user's wallet
const renderChildNftsMockedChronik =
await initializeCashtabStateForTests(
{
...tokenTestWallet,
state: {
...tokenTestWallet.state,
slpUtxos: [
// Only a child NFT in the utxo set
slp1NftChildMocks.utxos[0],
],
tokens: new Map([
[
'5d9bff67b99e3f93c245a2d832ae40b67f39b79e5cf1daefe97fe6a8a2228326',
'1',
],
]),
},
},
localforage,
);
const mockCashtabCacheWithNft = new CashtabCache([
[
slp1NftChildMocks.tokenId,
{
// note that this mock DOES NOT include groupTokenId
...slp1NftChildMocks.token,
genesisSupply: '1',
genesisOutputScripts: [
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
],
genesisMintBatons: 0,
},
],
]);
await localforage.setItem(
'cashtabCache',
cashtabCacheToJSON(mockCashtabCacheWithNft),
);
// Build chronik mocks that Cashtab would use to add token info to cache
for (const tokenMock of supportedTokens) {
renderChildNftsMockedChronik.setToken(
tokenMock.tokenId,
tokenMock.token,
);
renderChildNftsMockedChronik.setTx(tokenMock.tokenId, tokenMock.tx);
renderChildNftsMockedChronik.setUtxosByTokenId(
tokenMock.tokenId,
tokenMock.utxos,
);
// Set tx history of parent tokenId to empty
renderChildNftsMockedChronik.setTxHistoryByTokenId(
tokenMock.tokenId,
[],
);
}
// Set tx history of parent tokenId to include an NFT
renderChildNftsMockedChronik.setTxHistoryByTokenId(
slp1NftParentWithChildrenMocks.tokenId,
[slp1NftChildMocks.tx],
);
// Set agora to show no active offers for this nft
mockAgora.setActiveOffersByTokenId(slp1NftChildMocks.tokenId, []);
render(
<CashtabTestWrapper
chronik={renderChildNftsMockedChronik}
agora={mockAgora}
ecc={ecc}
route={`/token/${slp1NftChildMocks.tokenId}`}
/>,
);
const { tokenName } = slp1NftChildMocks.token.genesisInfo;
// Wait for element to get token info and load
expect(
(await screen.findAllByText(new RegExp(tokenName)))[0],
).toBeInTheDocument();
// NFT image is rendered
expect(
screen.getByAltText(`icon for ${slp1NftChildMocks.tokenId}`),
).toBeInTheDocument();
// We can click an info icon to learn more about this token type
await userEvent.click(
await screen.findByRole('button', {
name: 'Click for more info about this token type',
}),
);
expect(
screen.getByText(
`eCash NFT. NFT supply is always 1. This NFT may belong to an NFT collection.`,
),
).toBeInTheDocument();
// Close out of the info modal
await userEvent.click(screen.getByText('OK'));
// The NFT Token name is the title
expect(screen.getByText('Gordon Chen')).toBeInTheDocument();
// We see what collection this NFT is from
expect(screen.getByText(/NFT from collection/)).toBeInTheDocument();
expect(
screen.getByText('The Four Half-Coins of Jin-qua'),
).toBeInTheDocument();
// Token actions are available for NFTs
expect(screen.getByTitle('Token Actions')).toBeInTheDocument();
// On load, the default action for an NFT is to list it
const nftListInput = screen.getByPlaceholderText(
'Enter NFT list price',
);
expect(nftListInput).toBeInTheDocument();
});
it('We show an agora query error if we cannot get active offers for an NFT token id', async () => {
const heismanNftTokenId = heismanNftOneOffer.token.tokenId;
// Mock the API calls for getting and caching this token's info
mockedChronik.setToken(heismanNftTokenId, heismanNftOneCache.token);
mockedChronik.setTx(heismanNftTokenId, heismanNftOneCache.tx);
// Also mock for the collection
mockedChronik.setToken(
heismanCollectionCacheMocks.tokenId,
heismanCollectionCacheMocks.token,
);
mockedChronik.setTx(
heismanCollectionCacheMocks.tokenId,
heismanCollectionCacheMocks.tx,
);
// Mock an error querying this NFT listing
const mockedAgora = new MockAgora();
// then mock for each one agora.activeOffersByTokenId(offeredTokenId)
mockedAgora.setActiveOffersByTokenId(
heismanNftTokenId,
new Error('some agora error'),
);
render(
<CashtabTestWrapper
chronik={mockedChronik}
agora={mockedAgora}
ecc={ecc}
route={`/send-token/${heismanNftTokenId}`}
/>,
);
const { tokenName } = cachedHeismanNftOne.genesisInfo;
// Wait for element to get token info and load
expect(
(await screen.findAllByText(new RegExp(tokenName)))[0],
).toBeInTheDocument();
// On load, we see expected agora query error
expect(
await screen.findByText('Error querying NFT offers'),
).toBeInTheDocument();
});
it('We show an agora oneshot listing for an SLP1 NFT if it is for sale', async () => {
const heismanNftTokenId = heismanNftOneOffer.token.tokenId;
// Mock the API calls for getting and caching this token's info
mockedChronik.setToken(heismanNftTokenId, heismanNftOneCache.token);
mockedChronik.setTx(heismanNftTokenId, heismanNftOneCache.tx);
// Also mock for the collection
mockedChronik.setToken(
heismanCollectionCacheMocks.tokenId,
heismanCollectionCacheMocks.token,
);
mockedChronik.setTx(
heismanCollectionCacheMocks.tokenId,
heismanCollectionCacheMocks.tx,
);
// Mock an error querying this NFT listing
const mockedAgora = new MockAgora();
// then mock for each one agora.activeOffersByTokenId(offeredTokenId)
mockedAgora.setActiveOffersByTokenId(heismanNftTokenId, [
heismanNftOneOffer,
]);
render(
<CashtabTestWrapper
chronik={mockedChronik}
agora={mockedAgora}
ecc={ecc}
route={`/send-token/${heismanNftTokenId}`}
/>,
);
const { tokenName, tokenTicker } = cachedHeismanNftOne.genesisInfo;
// Wait for element to get token info and load
expect(
(await screen.findAllByText(new RegExp(tokenName)))[0],
).toBeInTheDocument();
// On load, we can buy the offer
expect(
await screen.findByText(`Buy ${tokenName} (${tokenTicker})`),
).toBeInTheDocument();
});
it('ALP token', async () => {
render(
<CashtabTestWrapper
chronik={mockedChronik}
agora={mockAgora}
ecc={ecc}
route={`/send-token/${alpMocks.tokenId}`}
/>,
);
const { tokenName } = alpMocks.token.genesisInfo;
// Wait for element to get token info and load
expect(
(await screen.findAllByText(new RegExp(tokenName)))[0],
).toBeInTheDocument();
// We can click an info icon to learn more about this token type
await userEvent.click(
await screen.findByRole('button', {
name: 'Click for more info about this token type',
}),
);
expect(
screen.getByText(
'ALP v1 fungible token. Token may be of fixed or variable supply. If you have a mint baton, you can mint more of this token at any time. May have up to 9 decimal places. ALP tokens use EMPP technology, which supports more token actions compared to SLP and more complex combinations of token and app actions. ALP token txs may have up to 127 outputs, though current OP_RETURN size de facto limits a single tx to 29 outputs.',
),
).toBeInTheDocument();
// Close out of the info modal
await userEvent.click(screen.getByText('OK'));
// The supply is correctly rendered
expect(screen.getByText('111,367.0000 (var.)')).toBeInTheDocument();
// Token actions are available
expect(screen.getByTitle('Token Actions')).toBeInTheDocument();
// We can list, which is also the default action
expect(screen.getByTitle('Toggle Sell Token')).toBeEnabled();
// We can send
expect(screen.getByTitle('Toggle Send')).toBeInTheDocument();
// We can burn
expect(screen.getByTitle('Toggle Burn')).toBeInTheDocument();
// Because we do not have the mint baton for this token, the Mint action is NOT available
expect(screen.queryByTitle('Toggle Mint')).not.toBeInTheDocument();
});
it('We can send an ALP token', async () => {
const mockedAgora = new MockAgora();
mockedAgora.setOfferedGroupTokenIds([]);
// It's not listed yet
mockedAgora.setActiveOffersByTokenId(alpMocks.tokenId, []);
// ALP send
const hex =
'020000000288bb5c0d60e11b4038b00af152f9792fa954571ffdd2413a85f1c26bfd930c25010000006441999a894cafbab21d590da6ce07e572935144c480bce48c4df3efb74e9ee2fd3a4de61a40f93c28775c7b135a6a9ccba7d880bd5776d289b6c8ae5752afee24b34121031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02dffffffffef76d01776229a95c45696cf68f2f98c8332d0c53e3f24e73fd9c6deaf792618030000006441f6e2b2a66d8676854e281f5af375bc56d4f359cb4be1e178d330720384da79a5216bd7a132bfd44654835c95a8d81b099b03e953d4a720187255ef1c9a1b646e4121031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02dffffffff0400000000000000003a6a5037534c5032000453454e4449884c726ebb974b9b8345ee12b44cc48445562b970f776e307d16547ccdd77c02102700000000301b0f00000022020000000000001976a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac22020000000000001976a91400549451e5c22b18686cacdf34dce649e5ec3be288ac18310f00000000001976a91400549451e5c22b18686cacdf34dce649e5ec3be288ac00000000';
const txid =
'33313eaf3365d9bf440645c5fffa8ed91681d1e1464afe598a564cdc76855c04';
mockedChronik.setBroadcastTx(hex, txid);
// Mock NOT blacklisted
when(fetch)
.calledWith(
`${tokenConfig.blacklistServerUrl}/blacklist/${alpMocks.tokenId}`,
)
.mockResolvedValue({
json: () => Promise.resolve({ isBlacklisted: false }),
});
render(
<CashtabTestWrapper
chronik={mockedChronik}
agora={mockedAgora}
ecc={ecc}
route={`/send-token/${alpMocks.tokenId}`}
/>,
);
const { tokenName } = alpMocks.token.genesisInfo;
// Wait for element to get token info and load
expect(
(await screen.findAllByText(new RegExp(tokenName)))[0],
).toBeInTheDocument();
// Wait for supply and actions to load
// The supply is correctly rendered
expect(
await screen.findByText('111,367.0000 (var.)'),
).toBeInTheDocument();
// Token actions are available
expect(screen.getByTitle('Token Actions')).toBeInTheDocument();
// Click Send
await userEvent.click(screen.getByTitle('Toggle Send'));
// Wait for address input to render
expect(
await screen.findByPlaceholderText('Address'),
).toBeInTheDocument();
// On load, default action for ALP is to send it
const sendActionSwitch = screen.getByTitle('Toggle Send');
await waitFor(() => expect(sendActionSwitch).toBeChecked());
// We see an Address input
const addrInput = screen.getByPlaceholderText('Address');
expect(addrInput).toBeInTheDocument();
// Send button is disabled before address and amount entry
const sendButton = screen.getByRole('button', {
name: /Send tCRD/,
});
expect(sendButton).toBeDisabled();
// We can enter an address
await userEvent.type(
addrInput,
'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035',
);
const amountInputEl = screen.getByPlaceholderText('Amount');
const amountInput = '1';
await userEvent.type(amountInputEl, amountInput);
// Now the button is enabled
expect(sendButton).toBeEnabled();
// We can send an ALP token
await userEvent.click(sendButton);
const sendTokenSuccessNotification = await screen.findByText(
'eToken sent',
);
expect(sendTokenSuccessNotification).toHaveAttribute(
'href',
`${explorer.blockExplorerUrl}/tx/${txid}`,
);
});
it('We can burn an ALP token with change', async () => {
const mockedAgora = new MockAgora();
mockedAgora.setOfferedGroupTokenIds([]);
// It's not listed yet
mockedAgora.setActiveOffersByTokenId(alpMocks.tokenId, []);
// ALP burn
const hex =
'020000000288bb5c0d60e11b4038b00af152f9792fa954571ffdd2413a85f1c26bfd930c250100000064416f667f359f04e273d524eac5fdaede0bfaf483daaf74f2ab5ba849c3a126b36b059003ef22b647d5265b74938e50c40505c1ad56474d0af2930192994011b9c84121031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02dffffffffef76d01776229a95c45696cf68f2f98c8332d0c53e3f24e73fd9c6deaf792618030000006441ed0c24a83ec9137bc2cc367f674b1932de280f3bc2fbfd9cd70b840e61ccf5fa272e714ba06d3060574df97bc135acae2367d00fdd67ce2bbf347193a871348c4121031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02dffffffff030000000000000000656a5030534c503200044255524e49884c726ebb974b9b8345ee12b44cc48445562b970f776e307d16547ccdd77c10270000000031534c5032000453454e4449884c726ebb974b9b8345ee12b44cc48445562b970f776e307d16547ccdd77c01301b0f00000022020000000000001976a91400549451e5c22b18686cacdf34dce649e5ec3be288ac28330f00000000001976a91400549451e5c22b18686cacdf34dce649e5ec3be288ac00000000';
const txid =
'f71293a94bd444c0b82ce6a6a8a1d2ae182f6a848cd2382bb6ca496955184fdf';
mockedChronik.setBroadcastTx(hex, txid);
// Mock NOT blacklisted
when(fetch)
.calledWith(
`${tokenConfig.blacklistServerUrl}/blacklist/${alpMocks.tokenId}`,
)
.mockResolvedValue({
json: () => Promise.resolve({ isBlacklisted: false }),
});
render(
<CashtabTestWrapper
chronik={mockedChronik}
agora={mockedAgora}
ecc={ecc}
route={`/send-token/${alpMocks.tokenId}`}
/>,
);
const { tokenName } = alpMocks.token.genesisInfo;
// Wait for element to get token info and load
expect(
(await screen.findAllByText(new RegExp(tokenName)))[0],
).toBeInTheDocument();
// Wait for supply and actions to load
// The supply is correctly rendered
expect(
await screen.findByText('111,367.0000 (var.)'),
).toBeInTheDocument();
// Token actions are available
expect(screen.getByTitle('Token Actions')).toBeInTheDocument();
// On load, default action for ALP is to list
// Select burn
await userEvent.click(screen.getByTitle('Toggle Burn'));
await userEvent.type(screen.getByPlaceholderText('Burn Amount'), '1');
// Click the Burn button
// Note we button title is the token ticker
await userEvent.click(
await screen.findByRole('button', { name: /Burn tCRD/ }),
);
// We see a modal and enter the correct confirmation msg
await userEvent.type(
screen.getByPlaceholderText(`Type "burn tCRD" to confirm`),
'burn tCRD',
);
// Click the Confirm button
await userEvent.click(screen.getByRole('button', { name: /OK/ }));
const burnTokenSuccessNotification = await screen.findByText(
'🔥 Burn successful',
);
await waitFor(() =>
expect(burnTokenSuccessNotification).toHaveAttribute(
'href',
`${explorer.blockExplorerUrl}/tx/${txid}`,
),
);
});
it('We can burn an ALP token without change', async () => {
const mockedAgora = new MockAgora();
mockedAgora.setOfferedGroupTokenIds([]);
// It's not listed yet
mockedAgora.setActiveOffersByTokenId(alpMocks.tokenId, []);
// ALP burn all
const hex =
'020000000288bb5c0d60e11b4038b00af152f9792fa954571ffdd2413a85f1c26bfd930c250100000064413919d2894e681586f285af178ef2c8d86b2f008e31519b1592c76cae7bee17eb4bb1558db35b225a15a2ba1c1f3d86564e12adfa0d5c012427f096398cdff20e4121031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02dffffffffef76d01776229a95c45696cf68f2f98c8332d0c53e3f24e73fd9c6deaf79261803000000644126a0f23966db5ba3212e4d5c545a186d407af4d110335e521c867e63549ade8d25da8a911343d9bf9275bbb58255cd445a1b3fc14ae35a89b8964cfbe47299aa4121031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02dffffffff030000000000000000336a5030534c503200044255524e49884c726ebb974b9b8345ee12b44cc48445562b970f776e307d16547ccdd77c40420f00000022020000000000001976a91400549451e5c22b18686cacdf34dce649e5ec3be288ac8c330f00000000001976a91400549451e5c22b18686cacdf34dce649e5ec3be288ac00000000';
const txid =
'f413a14acc391c2541f0dea477cf7ee07cf6256bc3b201d6b276272f2fdda407';
mockedChronik.setBroadcastTx(hex, txid);
// Mock NOT blacklisted
when(fetch)
.calledWith(
`${tokenConfig.blacklistServerUrl}/blacklist/${alpMocks.tokenId}`,
)
.mockResolvedValue({
json: () => Promise.resolve({ isBlacklisted: false }),
});
render(
<CashtabTestWrapper
chronik={mockedChronik}
agora={mockedAgora}
ecc={ecc}
route={`/send-token/${alpMocks.tokenId}`}
/>,
);
const { tokenName } = alpMocks.token.genesisInfo;
// Wait for element to get token info and load
expect(
(await screen.findAllByText(new RegExp(tokenName)))[0],
).toBeInTheDocument();
// Wait for supply and actions to load
// The supply is correctly rendered
expect(
await screen.findByText('111,367.0000 (var.)'),
).toBeInTheDocument();
// Token actions are available
expect(screen.getByTitle('Token Actions')).toBeInTheDocument();
// On load, default action for ALP is to list
// Select burn
await userEvent.click(screen.getByTitle('Toggle Burn'));
// Hit max for max burn
await userEvent.click(screen.getByRole('button', { name: /max/ }));
// Max is input
const thisWalletAlpBalance = '100.0000';
expect(screen.getByPlaceholderText('Burn Amount')).toHaveValue(
thisWalletAlpBalance,
);
// Click the Burn button
// Note we button title is the token ticker
await userEvent.click(
await screen.findByRole('button', { name: /Burn tCRD/ }),
);
// We see a modal and enter the correct confirmation msg
await userEvent.type(
screen.getByPlaceholderText(`Type "burn tCRD" to confirm`),
'burn tCRD',
);
// Click the Confirm button
await userEvent.click(screen.getByRole('button', { name: /OK/ }));
const burnTokenSuccessNotification = await screen.findByText(
'🔥 Burn successful',
);
await waitFor(() =>
expect(burnTokenSuccessNotification).toHaveAttribute(
'href',
`${explorer.blockExplorerUrl}/tx/${txid}`,
),
);
});
it('We can mint max one-output ALP token qty', async () => {
const mockedAgora = new MockAgora();
mockedAgora.setOfferedGroupTokenIds([]);
// It's not listed yet
mockedAgora.setActiveOffersByTokenId(alpMocks.tokenId, []);
// New mocked chronik since we change the wallet to include a mint baton for this token
const walletWithAlpMintBaton = {
...tokenTestWallet,
state: {
...tokenTestWallet.state,
slpUtxos: [
...tokenTestWallet.state.slpUtxos,
{
outpoint: {
txid: '250c93fd6bc2f1853a41d2fd1f5754a92f79f952f10ab038401be1600d5cbb88',
outIdx: 2,
},
blockHeight: 836452,
isCoinbase: false,
sats: 546n,
isFinal: true,
token: {
tokenId:
'7cd7cd7c54167d306e770f972b564584c44cb412ee45839b4b97bb6e724c8849',
tokenType: {
protocol: 'ALP',
type: 'ALP_TOKEN_TYPE_STANDARD',
number: 0,
},
atoms: 0n,
isMintBaton: true,
},
path: 1899,
},
],
},
};
const mintAlpMockedChronik = await initializeCashtabStateForTests(
walletWithAlpMintBaton,
localforage,
);
// Mock cache info
mintAlpMockedChronik.setToken(alpMocks.tokenId, alpMocks.token);
mintAlpMockedChronik.setTx(alpMocks.tokenId, alpMocks.tx);
mintAlpMockedChronik.setUtxosByTokenId(
alpMocks.tokenId,
alpMocks.utxos,
);
// Set empty tx history
mintAlpMockedChronik.setTxHistoryByTokenId(alpMocks.tokenId, []);
// ALP mint
const hex =
'020000000288bb5c0d60e11b4038b00af152f9792fa954571ffdd2413a85f1c26bfd930c25020000006441acdadb019c561b7bfa761695503eb1250d3ae1f34e66eeb3c4c8fb561b4ec95291bde678871451316a8f0472922d25936dd341eb90eb6bb3ccde98b00a2138da4121031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02dffffffffef76d01776229a95c45696cf68f2f98c8332d0c53e3f24e73fd9c6deaf792618030000006441fc7a554a708c3e6a2fc72e7c96871521678d0a36e336a599b39eac6a36f4ecedcfd2a728c8e639b5946fde677f1afa9e31468531476dd66fce1adfc760e7e2ff4121031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02dffffffff040000000000000000356a5032534c503200044d494e5449884c726ebb974b9b8345ee12b44cc48445562b970f776e307d16547ccdd77c01ffffffffffff0122020000000000001976a91400549451e5c22b18686cacdf34dce649e5ec3be288ac22020000000000001976a91400549451e5c22b18686cacdf34dce649e5ec3be288ac22310f00000000001976a91400549451e5c22b18686cacdf34dce649e5ec3be288ac00000000';
const txid =
'28c733455a50be334948600bcdf0817610b0321ceba3da52c7c7ffec995320f0';
mintAlpMockedChronik.setBroadcastTx(hex, txid);
// Mock NOT blacklisted
when(fetch)
.calledWith(
`${tokenConfig.blacklistServerUrl}/blacklist/${alpMocks.tokenId}`,
)
.mockResolvedValue({
json: () => Promise.resolve({ isBlacklisted: false }),
});
render(
<CashtabTestWrapper
chronik={mintAlpMockedChronik}
agora={mockedAgora}
ecc={ecc}
route={`/send-token/${alpMocks.tokenId}`}
/>,
);
const { tokenName } = alpMocks.token.genesisInfo;
// Wait for element to get token info and load
expect(
(await screen.findAllByText(new RegExp(tokenName)))[0],
).toBeInTheDocument();
// Wait for supply and actions to load
// The supply is correctly rendered
expect(
await screen.findByText('111,367.0000 (var.)'),
).toBeInTheDocument();
// Token actions are available
expect(screen.getByTitle('Token Actions')).toBeInTheDocument();
// Select mint
await userEvent.click(screen.getByTitle('Toggle Mint'));
// Max qty
await userEvent.click(screen.getByRole('button', { name: /max/ }));
// Max is input
const maxMintQty = '28147497671.0655';
expect(screen.getByPlaceholderText('Mint Amount')).toHaveValue(
maxMintQty,
);
// Click the Mint button
// Note we button title is the token ticker
await userEvent.click(
await screen.findByRole('button', { name: /Mint tCRD/ }),
);
const successNotification = await screen.findByText(
'⚗️ Minted 28147497671.0655 tCRD',
);
await waitFor(() =>
expect(successNotification).toHaveAttribute(
'href',
`${explorer.blockExplorerUrl}/tx/${txid}`,
),
);
});
it('We can list an ALP fungible token', async () => {
// Mock Math.random()
jest.spyOn(global.Math, 'random').mockReturnValue(0.5); // set a fixed value
// ALP offer tx
const offerHex =
'020000000288bb5c0d60e11b4038b00af152f9792fa954571ffdd2413a85f1c26bfd930c25010000006441d32ae72fa880a40975a475147443a3a7fe10308178ad38d80e6a2428921732b0699849443d8e24124a8ee5b75f1e9f74628fdb8cd0c9704d8cd0c70df65828e94121031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02dffffffffef76d01776229a95c45696cf68f2f98c8332d0c53e3f24e73fd9c6deaf7926180300000064415fc18bb026bc3122776e708b8cdba9225494c704c1feca7aefb36b592abed96568cd57cb3504769bc4019ec0f36990c28c57012cefe805e4d3b046cc308bc86b4121031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02dffffffff040000000000000000866a504b41475230075041525449414c01009b630800000000005532000000000000d6b24701000000002099c53f031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02d37534c5032000453454e4449884c726ebb974b9b8345ee12b44cc48445562b970f776e307d16547ccdd77c0200420f000000400000000000220200000000000017a91450eb4978c85ec89b63e37e6b87409c9f5815c7058722020000000000001976a91400549451e5c22b18686cacdf34dce649e5ec3be288ac83300f00000000001976a91400549451e5c22b18686cacdf34dce649e5ec3be288ac00000000';
const offerTxid =
'e00be7011ee5d585cbd54049570ea0754ab0d5c05acf6cb01c25afa3aa61663d';
mockedChronik.setBroadcastTx(offerHex, offerTxid);
// Mock response for agora select params check
// Note
// We obtain EXPECTED_OFFER_P2SH by adding
// console.log(toHex(shaRmd160(agoraScript.bytecode)));
// to ecash-agora lib and running this test
// Note that Date() and Math.random() must be mocked to keep this deterministic
const EXPECTED_OFFER_P2SH = '50eb4978c85ec89b63e37e6b87409c9f5815c705';
// We mock no existing utxos
mockedChronik.setUtxosByScript('p2sh', EXPECTED_OFFER_P2SH, []);
// Note that we cannot use mockedAgora to avoid agoraQueryErrors, as we need a proper
// agora object to build the partial
const agora = new Agora(mockedChronik);
render(
<CashtabTestWrapper
chronik={mockedChronik}
ecc={ecc}
agora={agora}
route={`/send-token/${alpMocks.tokenId}`}
/>,
);
const { tokenName } = alpMocks.token.genesisInfo;
// Wait for element to get token info and load
expect(
(await screen.findAllByText(new RegExp(tokenName)))[0],
).toBeInTheDocument();
// Token image is rendered
expect(
screen.getByAltText(`icon for ${alpMocks.tokenId}`),
).toBeInTheDocument();
// Token actions are available
expect(screen.getByTitle('Token Actions')).toBeInTheDocument();
// On load, default action for ALP is to list it
expect(screen.getByTitle('Toggle Sell Token')).toBeEnabled();
// The list button is disabled on load
const listButton = screen.getByRole('button', {
name: /List Test CRD/,
});
expect(listButton).toBeDisabled();
// The price input is disabled until qty values are entered
const priceInput = screen.getByPlaceholderText(
'Enter list price (per token)',
);
expect(priceInput).toBeDisabled();
// Enter token balance as offered qty
await userEvent.type(screen.getByPlaceholderText('Offered qty'), '100');
// The price input is no longer disabled
expect(priceInput).toBeEnabled();
// Enter a price
await userEvent.type(priceInput, '0.001');
const minQtyInput = screen.getByPlaceholderText('Min qty');
// The quantity updates automatically
expect(minQtyInput).toHaveValue('5460');
// But because this price is so low, now the min qty is actually higher than our token balance
// So we see an error
expect(
screen.getByText(
'The min buy must be less than or equal to the offered quantity',
),
).toBeInTheDocument();
// Ok let's back off our min qty
await userEvent.clear(minQtyInput);
await userEvent.type(minQtyInput, '5');
// Now we have an error because the min qty is too low
expect(
screen.getByText(
'Total cost of minimum buy below dust. Min offered qty must be at least 5,460.',
),
).toBeInTheDocument();
// The buy button is disabled with invalid qty
expect(listButton).toBeDisabled();
// We'll need to raise the price because we don't have that many tokens
await userEvent.clear(priceInput);
await userEvent.type(priceInput, '1');
// But now still below dust
expect(
screen.getByText(
'Total cost of minimum buy below dust. Min offered qty must be at least 5.46.',
),
).toBeInTheDocument();
// Ok well we can do that
await userEvent.clear(minQtyInput);
await userEvent.type(minQtyInput, '5.46');
// No more error
expect(
screen.queryByText(
'Total cost of minimum buy below dust. Min offered qty must be at least 5.46.',
),
).not.toBeInTheDocument();
// The list button is no longer disabled
expect(listButton).toBeEnabled();
// Let's use a higher price though because that's what the test has mocks for
await userEvent.clear(priceInput);
await userEvent.type(priceInput, '33');
// The fiat price is previewed correctly
expect(
screen.getByText('33 XEC ($0.0009900 USD) per token'),
).toBeInTheDocument();
// We can also set the price in fiat currency
await userEvent.selectOptions(
screen.getByTestId('currency-select-dropdown'),
screen.getByTestId('fiat-option'),
);
// The price input is cleared when the user changes from XEC price to fiat price
expect(priceInput).toHaveValue(null);
// We list for $5 per token
await userEvent.type(priceInput, '5');
// The fiat price is previewed correctly
expect(
screen.getByText('$5 USD (166,666.67 XEC) per token'),
).toBeInTheDocument();
// We enter a low price in fiat
await userEvent.clear(priceInput);
await userEvent.type(priceInput, '0.0005');
// The fiat price is previewed correctly
expect(
await screen.findByText('$0.0005 USD (16.67 XEC) per token'),
).toBeInTheDocument();
// We can have a lower min qty now since the price is higher
await userEvent.clear(minQtyInput);
await userEvent.type(minQtyInput, '1');
// Click the now-enabled list button
expect(listButton).toBeEnabled();
await userEvent.click(listButton);
// We see expected confirmation modal to list the Token
expect(screen.getByText('List tCRD?')).toBeInTheDocument();
expect(
screen.getByText('Create the following sell offer?'),
).toBeInTheDocument();
// Offered qty (actual, calculated from AgoraOffer)
const actualOfferedQty = '99.9936';
expect(screen.getByText(actualOfferedQty)).toBeInTheDocument();
// Min buy (actual, calculated from AgoraOffer)
expect(screen.getByText('1.0240')).toBeInTheDocument();
// Actual price calculated from AgoraOffer
const actualPricePerTokenForMinBuy = '16.67 XEC';
expect(
screen.getAllByText(actualPricePerTokenForMinBuy)[0],
).toBeInTheDocument();
// User input price
expect(screen.getAllByText('16.67 XEC')[1]).toBeInTheDocument();
// We can cancel and not create this listing
await userEvent.click(screen.getByText('Cancel'));
// The confirmation modal is gone
expect(screen.queryByText('List tCRD?')).not.toBeInTheDocument();
// We change our mind and list it
await userEvent.click(listButton);
expect(await screen.findByText('List tCRD?')).toBeInTheDocument();
await userEvent.click(screen.getByText('OK'));
// We see the expected toast notification for the successful listing tx
expect(
await screen.findByText(
`${actualOfferedQty} Test CRD listed for ${actualPricePerTokenForMinBuy} per token`,
),
).toBeInTheDocument();
});
it('We can redeem XECX for XEC 1:1 using a workflow unique to XECX', async () => {
// Mock Math.random()
jest.spyOn(global.Math, 'random').mockReturnValue(0.5); // set a fixed value
// XECX offer tx
const offerHex =
'020000000288bb5c0d60e11b4038b00af152f9792fa954571ffdd2413a85f1c26bfd930c25010000006441c664c7bc3a13726a17771588813eb43276b297b91f5475435c70d08f5653646d979911c752445ebbd8f973ac218978d3bbf814952b9aae5c6d0630dbd2b74dd04121031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02dffffffffef76d01776229a95c45696cf68f2f98c8332d0c53e3f24e73fd9c6deaf792618030000006441dfaa9df0a82c895fe97837d7622d16cf9cfda9f3f21fae7294556b235effd2fc01b33d3b59c0d813bf586bc100a661d45ef2f13de50560f1d8240c3c4390eaff4121031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02dffffffff030000000000000000806a504b41475230075041525449414c000063080000000000006308000000000000c09ef87f000000002099c53f031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02d31534c5032000453454e44d44ecf795494b063aa10be876868880df8ef822577c1a546fb1cd9b6c2f57bc60140420f000000220200000000000017a9149c3889f324767ca4462614f85835776ab68990a987f6320f00000000001976a91400549451e5c22b18686cacdf34dce649e5ec3be288ac00000000';
const offerTxid =
'b32c2b51155cc4ffe9260d81aa7ce2d9c370f5a5b555ca44bfda578e3604aa85';
mockedChronik.setBroadcastTx(offerHex, offerTxid);
// Mock response for agora select params check
// Note
// We obtain EXPECTED_OFFER_P2SH by adding
// console.log(toHex(shaRmd160(agoraScript.bytecode)));
// to ecash-agora lib and running this test
// Note that Date() and Math.random() must be mocked to keep this deterministic
const EXPECTED_OFFER_P2SH = '9c3889f324767ca4462614f85835776ab68990a9';
// We mock no existing utxos
mockedChronik.setUtxosByScript('p2sh', EXPECTED_OFFER_P2SH, []);
// Note that we cannot use mockedAgora to avoid agoraQueryErrors, as we need a proper
// agora object to build the partial
const agora = new Agora(mockedChronik);
render(
<CashtabTestWrapper
chronik={mockedChronik}
ecc={ecc}
agora={agora}
route={`/send-token/${tokenMockXecx.tokenId}`}
/>,
);
const { tokenName } = tokenMockXecx.tokenInfo.genesisInfo;
// Wait for element to get token info and load
expect(
(await screen.findAllByText(new RegExp(tokenName)))[0],
).toBeInTheDocument();
// XECX token icon is rendered
expect(
screen.getByAltText(`icon for ${tokenMockXecx.tokenId}`),
).toBeInTheDocument();
// Token actions are available
expect(screen.getByTitle('Token Actions')).toBeInTheDocument();
// On load, default action for XECX is to redeem it
expect(screen.getByTitle('Toggle Redeem XECX')).toBeEnabled();
// The redeem button is disabled on load
const redeemButton = screen.getByRole('button', {
name: /Redeem XECX for XEC/,
});
await waitFor(() => expect(redeemButton).toBeDisabled());
// We do not see a price input
expect(
screen.queryByPlaceholderText('Enter list price (per token)'),
).not.toBeInTheDocument();
// We do not see a min qty input
expect(
screen.queryByPlaceholderText('Min qty'),
).not.toBeInTheDocument();
// Enter amount to redeem
await userEvent.type(
screen.getByPlaceholderText('Offered qty'),
'5.45',
);
// This is below dust so we get an error
expect(
screen.getByText('Cannot redeem less than 5.46 XECX'),
).toBeInTheDocument();
// The redeem button is still disabled
expect(redeemButton).toBeDisabled();
// OK we redeem more than dust
await userEvent.clear(screen.getByPlaceholderText('Offered qty'));
await userEvent.type(
screen.getByPlaceholderText('Offered qty'),
'10000',
);
expect(screen.getByPlaceholderText('Offered qty')).toHaveValue('10000');
// The redeem button is now enabled
expect(redeemButton).toBeEnabled();
// The fiat price is previewed correctly
expect(
screen.getByText('1 XEC ($0.00003000 USD) per token'),
).toBeInTheDocument();
// Redeem
await userEvent.click(redeemButton);
// We see expected confirmation modal to list the Token
expect(screen.getByText('Redeem 10,000.00 XECX?')).toBeInTheDocument();
expect(screen.getByText('You receive:')).toBeInTheDocument();
expect(screen.getByText('10,000.00 XEC')).toBeInTheDocument();
// We can cancel and not create this auto-redeem listing
await userEvent.click(screen.getByText('Cancel'));
// The confirmation modal is gone
expect(
screen.queryByText('Redeem 10,000.00 XECX?'),
).not.toBeInTheDocument();
// We change our mind and list it
await userEvent.click(redeemButton);
expect(
await screen.findByText('Redeem 10,000.00 XECX?'),
).toBeInTheDocument();
await userEvent.click(screen.getByText('OK'));
// We see the expected toast notification for the successful listing tx
expect(
await screen.findByText(
`10,000.00 Staked XEC listed for 1 XEC per token`,
),
).toBeInTheDocument();
});
it('We see expected alert in XECX redemption workflow for hot wallet balance', async () => {
// Mock Math.random()
jest.spyOn(global.Math, 'random').mockReturnValue(0.5); // set a fixed value
// Mock a balance of 9.99k XEC in the hot wallet
mockedChronik.setUtxosByAddress(XECX_SWEEPER_ADDRESS, [
{ sats: 9_999_00n },
]);
// Mock response for agora select params check
// Note
// We obtain EXPECTED_OFFER_P2SH by adding
// console.log(toHex(shaRmd160(agoraScript.bytecode)));
// to ecash-agora lib and running this test
// Note that Date() and Math.random() must be mocked to keep this deterministic
const EXPECTED_OFFER_P2SH = '9c3889f324767ca4462614f85835776ab68990a9';
// We mock no existing utxos
mockedChronik.setUtxosByScript('p2sh', EXPECTED_OFFER_P2SH, []);
// Note that we cannot use mockedAgora to avoid agoraQueryErrors, as we need a proper
// agora object to build the partial
const agora = new Agora(mockedChronik);
render(
<CashtabTestWrapper
chronik={mockedChronik}
ecc={ecc}
agora={agora}
route={`/send-token/${tokenMockXecx.tokenId}`}
/>,
);
const { tokenName } = tokenMockXecx.tokenInfo.genesisInfo;
// Wait for element to get token info and load
expect(
(await screen.findAllByText(new RegExp(tokenName)))[0],
).toBeInTheDocument();
// XECX token icon is rendered
expect(
screen.getByAltText(`icon for ${tokenMockXecx.tokenId}`),
).toBeInTheDocument();
// Token actions are available
expect(screen.getByTitle('Token Actions')).toBeInTheDocument();
// On load, default action for XECX is to redeem it
expect(screen.getByTitle('Toggle Redeem XECX')).toBeEnabled();
// The redeem button is disabled on load
const redeemButton = screen.getByRole('button', {
name: /Redeem XECX for XEC/,
});
await waitFor(() => expect(redeemButton).toBeDisabled());
// We redeem 10k XECX
await userEvent.type(
screen.getByPlaceholderText('Offered qty'),
'10000',
);
expect(screen.getByPlaceholderText('Offered qty')).toHaveValue('10000');
// The redeem button is now enabled
expect(redeemButton).toBeEnabled();
// The fiat price is previewed correctly
expect(
screen.getByText('1 XEC ($0.00003000 USD) per token'),
).toBeInTheDocument();
// Redeem
await userEvent.click(redeemButton);
// We see expected confirmation modal to list the Token
expect(screen.getByText('Redeem 10,000.00 XECX?')).toBeInTheDocument();
expect(screen.getByText('You receive:')).toBeInTheDocument();
expect(screen.getByText('10,000.00 XEC')).toBeInTheDocument();
// We see the hot wallet alert
expect(
screen.getByText(
'⚠️ XECX redemption larger than hot wallet balance of 10k XEC. Execution may take up to 24 hours.',
),
).toBeInTheDocument();
});
it('We DO NOT see expected alert in XECX redemption workflow for hot wallet balance if there is some error determining the hot wallet balance', async () => {
// Mock Math.random()
jest.spyOn(global.Math, 'random').mockReturnValue(0.5); // set a fixed value
// Mock a balance of 9.99k XEC in the hot wallet
mockedChronik.setUtxosByAddress(
XECX_SWEEPER_ADDRESS,
new Error('we do not get the balance'),
);
// Mock response for agora select params check
// Note
// We obtain EXPECTED_OFFER_P2SH by adding
// console.log(toHex(shaRmd160(agoraScript.bytecode)));
// to ecash-agora lib and running this test
// Note that Date() and Math.random() must be mocked to keep this deterministic
const EXPECTED_OFFER_P2SH = '9c3889f324767ca4462614f85835776ab68990a9';
// We mock no existing utxos
mockedChronik.setUtxosByScript('p2sh', EXPECTED_OFFER_P2SH, []);
// Note that we cannot use mockedAgora to avoid agoraQueryErrors, as we need a proper
// agora object to build the partial
const agora = new Agora(mockedChronik);
render(
<CashtabTestWrapper
chronik={mockedChronik}
ecc={ecc}
agora={agora}
route={`/send-token/${tokenMockXecx.tokenId}`}
/>,
);
const { tokenName } = tokenMockXecx.tokenInfo.genesisInfo;
// Wait for element to get token info and load
expect(
(await screen.findAllByText(new RegExp(tokenName)))[0],
).toBeInTheDocument();
// XECX token icon is rendered
expect(
screen.getByAltText(`icon for ${tokenMockXecx.tokenId}`),
).toBeInTheDocument();
// Token actions are available
expect(screen.getByTitle('Token Actions')).toBeInTheDocument();
// On load, default action for XECX is to redeem it
expect(screen.getByTitle('Toggle Redeem XECX')).toBeEnabled();
// The redeem button is disabled on load
const redeemButton = screen.getByRole('button', {
name: /Redeem XECX for XEC/,
});
await waitFor(() => expect(redeemButton).toBeDisabled());
// We redeem 10k XECX
await userEvent.type(
screen.getByPlaceholderText('Offered qty'),
'10000',
);
expect(screen.getByPlaceholderText('Offered qty')).toHaveValue('10000');
// The redeem button is now enabled
expect(redeemButton).toBeEnabled();
// The fiat price is previewed correctly
expect(
screen.getByText('1 XEC ($0.00003000 USD) per token'),
).toBeInTheDocument();
// Redeem
await userEvent.click(redeemButton);
// We see expected confirmation modal to list the Token
expect(screen.getByText('Redeem 10,000.00 XECX?')).toBeInTheDocument();
expect(screen.getByText('You receive:')).toBeInTheDocument();
expect(screen.getByText('10,000.00 XEC')).toBeInTheDocument();
// We see the hot wallet alert
expect(
screen.queryByText(
'⚠️ XECX redemption larger than hot wallet balance of 10k XEC. Execution may take up to 24 hours.',
),
).not.toBeInTheDocument();
});
it('We can redeem 1 Firma for $1 of XEC using a workflow unique to Firma', async () => {
// Mock Math.random()
jest.spyOn(global.Math, 'random').mockReturnValue(0.5); // set a fixed value
// Mock a bid price
when(fetch)
.calledWith(`https://firma.cash/api/bid`)
.mockResolvedValue({
json: () => Promise.resolve({ bid: 40000.0 }),
});
// FIRMA offer tx
const offerHex =
'020000000288bb5c0d60e11b4038b00af152f9792fa954571ffdd2413a85f1c26bfd930c25010000006441243d709268b45b7917eb446ed0cb447fa71eec05977b7b558cb2d7cbae3b1b8bc190810e03b84ceb037b7295bca76e76ad83d48a8f8d9f891de93995adca244d4121031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02dffffffffef76d01776229a95c45696cf68f2f98c8332d0c53e3f24e73fd9c6deaf792618030000006441c9656b6789947fe5fe369072e95fb3f39a1b21f37b6a1602ee609840ce5b77c55d0b5d1e455020629d28c4791fa705b535e0dd0a4563e130bdcbb5129b5a57ef4121031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02dffffffff040000000000000000866a504b41475230075041525449414c0000e253000000000000360000000000000040b9fe7f000000002099c53f031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02d37534c5032000453454e44f0cb08302c4bbc665b6241592b19fd37ec5d632f323e9ab14fdb75d57f94870302a08601000000a0bb0d000000220200000000000017a914d269ef0be66e9b689bee7a071d08cc0a7151b32a8722020000000000001976a91400549451e5c22b18686cacdf34dce649e5ec3be288ac83300f00000000001976a91400549451e5c22b18686cacdf34dce649e5ec3be288ac00000000';
const offerTxid =
'322da86c0fd6b008298bc21f6a344647d225f3ed20ff597860d7e9ab9f5428f7';
mockedChronik.setBroadcastTx(offerHex, offerTxid);
// Make sure it's cached
mockedChronik.setTx(FIRMA.tx.txid, FIRMA.tx);
mockedChronik.setToken(FIRMA.tokenId, FIRMA.token);
// Mock response for agora select params check
// Note
// We obtain EXPECTED_OFFER_P2SH by adding
// console.log(toHex(shaRmd160(agoraScript.bytecode)));
// to ecash-agora lib and running this test
// Note that Date() and Math.random() must be mocked to keep this deterministic
const EXPECTED_OFFER_P2SH = '28967de39bdb1af326e5cb2ffecf1f320dedfb04';
// Note we have to create a second partial to get an acceptable price
const EXPECTED_SECOND_P2SH = 'd269ef0be66e9b689bee7a071d08cc0a7151b32a';
// We mock no existing utxos
mockedChronik.setUtxosByScript('p2sh', EXPECTED_OFFER_P2SH, []);
mockedChronik.setUtxosByScript('p2sh', EXPECTED_SECOND_P2SH, []);
// Note that we cannot use mockedAgora to avoid agoraQueryErrors, as we need a proper
// agora object to build the partial
// This means we cannot mock firma offers in the OrderBook for this test
const agora = new Agora(mockedChronik);
render(
<CashtabTestWrapper
chronik={mockedChronik}
ecc={ecc}
agora={agora}
route={`/send-token/${FIRMA.tokenId}`}
/>,
);
const { tokenName } = FIRMA.token.genesisInfo;
// Wait for element to get token info and load
expect(
(await screen.findAllByText(new RegExp(tokenName)))[0],
).toBeInTheDocument();
// XECX token icon is rendered
expect(
await screen.findByAltText(`icon for ${FIRMA.tokenId}`),
).toBeInTheDocument();
// Token actions are available
expect(screen.getByTitle('Token Actions')).toBeInTheDocument();
// On load, default action for FIRMA is to redeem it
expect(screen.getByTitle('Toggle Redeem FIRMA')).toBeEnabled();
// The redeem button is disabled on load
const redeemButton = await screen.findByRole('button', {
name: /Redeem FIRMA for XEC/,
});
await waitFor(() => expect(redeemButton).toBeDisabled());
// We do not see a price input
expect(
screen.queryByPlaceholderText('Enter list price (per token)'),
).not.toBeInTheDocument();
// We do not see a min qty input
expect(
screen.queryByPlaceholderText('Min qty'),
).not.toBeInTheDocument();
// Enter amount to redeem
await userEvent.type(
screen.getByPlaceholderText('Offered qty'),
'0.009',
);
// This is below firma min redemption so we get an error
expect(
screen.getByText('Cannot redeem less than 0.01 FIRMA'),
).toBeInTheDocument();
// The redeem button is still disabled
expect(redeemButton).toBeDisabled();
// OK we redeem more than dust
await userEvent.clear(screen.getByPlaceholderText('Offered qty'));
await userEvent.type(screen.getByPlaceholderText('Offered qty'), '10');
expect(screen.getByPlaceholderText('Offered qty')).toHaveValue('10');
// The redeem button is now enabled
expect(redeemButton).toBeEnabled();
// Redeem
await userEvent.click(redeemButton);
// Async as we must wait for multiple partials
expect(await screen.findByText('List FIRMA?')).toBeInTheDocument();
expect(
screen.getByText('Create the following sell offer?'),
).toBeInTheDocument();
// Offered qty (actual, calculated from AgoraOffer)
const actualOfferedQty = '10.0000';
// We see this two times bc it is also behind the modal
expect(screen.getAllByText(actualOfferedQty)).toHaveLength(2);
// Actual price calculated from AgoraOffer
const actualPricePerTokenForMinBuy = '39,766.67 XEC';
// We see the price once; it is not previewed as we need to calculate it before we
// show the modal
expect(
screen.getByText(actualPricePerTokenForMinBuy),
).toBeInTheDocument();
// We see the full receive XEC amount
expect(screen.getByText('You receive:')).toBeInTheDocument();
expect(screen.getByText('397,666.67 XEC')).toBeInTheDocument();
// We can cancel and not create this listing
await userEvent.click(screen.getByText('Cancel'));
// The confirmation modal is gone
expect(screen.queryByText('List FIRMA?')).not.toBeInTheDocument();
// We change our mind and list it
await userEvent.click(redeemButton);
expect(await screen.findByText('List FIRMA?')).toBeInTheDocument();
await userEvent.click(screen.getByText('OK'));
// We see the expected toast notification for the successful listing tx
expect(
await screen.findByText(
`${actualOfferedQty} Firma listed for ${actualPricePerTokenForMinBuy} per token`,
),
).toBeInTheDocument();
});
it('We show expected error if we are unable to get FIRMA bid price from API', async () => {
// Mock Math.random()
jest.spyOn(global.Math, 'random').mockReturnValue(0.5); // set a fixed value
// Mock a bid price
when(fetch)
.calledWith(`https://firma.cash/api/bid`)
.mockResolvedValue(new Error('error getting firma bid price'));
// Make sure FIRMA is cached
mockedChronik.setTx(FIRMA.tx.txid, FIRMA.tx);
mockedChronik.setToken(FIRMA.tokenId, FIRMA.token);
// Note that we cannot use mockedAgora to avoid agoraQueryErrors, as we need a proper
// agora object to build the partial
const agora = new Agora(mockedChronik);
render(
<CashtabTestWrapper
chronik={mockedChronik}
ecc={ecc}
agora={agora}
route={`/token/${FIRMA.tokenId}`}
/>,
);
const { tokenName } = FIRMA.token.genesisInfo;
// Wait for element to get token info and load
expect(
(await screen.findAllByText(new RegExp(tokenName)))[0],
).toBeInTheDocument();
// XECX token icon is rendered
expect(
await screen.findByAltText(`icon for ${FIRMA.tokenId}`),
).toBeInTheDocument();
// Token actions are available
expect(screen.getByTitle('Token Actions')).toBeInTheDocument();
// On load, default action for FIRMA is to redeem it
expect(screen.getByTitle('Toggle Redeem FIRMA')).toBeEnabled();
// The redeem button is disabled on load
const redeemButton = await screen.findByRole('button', {
name: /Redeem FIRMA for XEC/,
});
expect(redeemButton).toBeDisabled();
// We do not see a price input
expect(
screen.queryByPlaceholderText('Enter list price (per token)'),
).not.toBeInTheDocument();
// We do not see a min qty input
expect(
screen.queryByPlaceholderText('Min qty'),
).not.toBeInTheDocument();
// Enter amount to redeem
await userEvent.type(
screen.getByPlaceholderText('Offered qty'),
'0.009',
);
// This is below firma min redemption so we get an error
expect(
screen.getByText('Cannot redeem less than 0.01 FIRMA'),
).toBeInTheDocument();
// The redeem button is still disabled
expect(redeemButton).toBeDisabled();
// OK we redeem more than dust
await userEvent.clear(screen.getByPlaceholderText('Offered qty'));
await userEvent.type(screen.getByPlaceholderText('Offered qty'), '10');
expect(screen.getByPlaceholderText('Offered qty')).toHaveValue('10');
// The redeem button is now enabled
expect(redeemButton).toBeEnabled();
// Redeem
await userEvent.click(redeemButton);
// Price error
// We see an error notification for no price
expect(
await screen.findByText(/Error determining FIRMA bid price:/),
).toBeInTheDocument();
// We never see the modal
expect(
screen.queryByText('Create the following sell offer?'),
).not.toBeInTheDocument();
});
it('The FIRMA OrderBook loads with price in USD', async () => {
// Make sure FIRMA is cached
mockedChronik.setTx(FIRMA.tx.txid, FIRMA.tx);
mockedChronik.setToken(FIRMA.tokenId, FIRMA.token);
const mockedAgora = new MockAgora();
mockedAgora.setActiveOffersByTokenId(FIRMA.tokenId, [mockFirmaOffer]);
render(
<CashtabTestWrapper
chronik={mockedChronik}
ecc={ecc}
agora={mockedAgora}
route={`/send-token/${FIRMA.tokenId}`}
/>,
);
const { tokenName } = FIRMA.token.genesisInfo;
// Wait for element to get token info and load
expect(await screen.findAllByText(new RegExp(tokenName))).toHaveLength(
4,
);
const priceSwitch = await screen.findByTitle(
`Toggle price for ${FIRMA.tokenId}`,
);
// FIRMA orderbook loads with fiat price by default
expect(priceSwitch).toBeChecked();
});
+ it('We can SEND or BURN an SLP MINT VAULT token', async () => {
+ const mockedAgora = new MockAgora();
+
+ mockedAgora.setOfferedGroupTokenIds([]);
+
+ // It's not listed yet
+ mockedAgora.setActiveOffersByTokenId(slpMintVaultMocks.tokenId, []);
+
+ // MINT VAULT send
+ const hex =
+ '0200000002e227ad0b23242a4678fc79104cdf1c80914862a3c808066aebc65ef35b52b56f01000000644149cb2fe7f9043b8071807ed49eefb923df27bc6884577491294dc5b58200d55e8cfe98e32b8de404761aa90a801c3dfd49ae5f37104fb89f9cfbe50d6508f9174121031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02dffffffffef76d01776229a95c45696cf68f2f98c8332d0c53e3f24e73fd9c6deaf79261803000000644120d97a60e4d2f7fff034ff23b798d88cec03ad9101397acfa985c0ce11732d2d5aff6c984b47c6db159e8b54f509e20725e8b29b4a8cb6a7012c8d5fa1b4a8e64121031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02dffffffff040000000000000000406a04534c500001020453454e44208ecb9c25978f429472f3e9f9c048222f6ac9977e7d1313781f0e9ac1bdba325108000000000000000108000000000001869f22020000000000001976a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac22020000000000001976a91400549451e5c22b18686cacdf34dce649e5ec3be288ac0c310f00000000001976a91400549451e5c22b18686cacdf34dce649e5ec3be288ac00000000';
+ const txid =
+ 'e2c0ccca81ee9879a6d084457dfb5a8342f07683fe18b26af71f869ea56b85c8';
+ mockedChronik.setBroadcastTx(hex, txid);
+
+ // MINT VAULT burn
+ const burnHex =
+ '0200000002e227ad0b23242a4678fc79104cdf1c80914862a3c808066aebc65ef35b52b56f01000000644130fda25f9cdca0a091d18abb0fe56bb693c6d168424c92e688a4a237389bf8e02409e2c339616e7506aa289b371f1cd35685a8c35f7076f7cf793841ceab7dbe4121031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02dffffffffef76d01776229a95c45696cf68f2f98c8332d0c53e3f24e73fd9c6deaf79261803000000644134ea64b465369fb89dc561cf8e2076fce1156caaafa9e0d11ec16caf040cf5b703bceab7c5c4f221890de6bb85cba010b29796ce62d3944633783e29f019e43f4121031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02dffffffff030000000000000000376a04534c500001020453454e44208ecb9c25978f429472f3e9f9c048222f6ac9977e7d1313781f0e9ac1bdba325108000000000001869f22020000000000001976a91400549451e5c22b18686cacdf34dce649e5ec3be288ac84330f00000000001976a91400549451e5c22b18686cacdf34dce649e5ec3be288ac00000000';
+ const burnTxid =
+ '4988233995f88af52086f7a5775591159ee3d808b47260c4f5b1ffa9ab25f352';
+ mockedChronik.setBroadcastTx(burnHex, burnTxid);
+
+ // Mock NOT blacklisted
+ when(fetch)
+ .calledWith(
+ `${tokenConfig.blacklistServerUrl}/blacklist/${slpMintVaultMocks.tokenId}`,
+ )
+ .mockResolvedValue({
+ json: () => Promise.resolve({ isBlacklisted: false }),
+ });
+
+ render(
+ <CashtabTestWrapper
+ chronik={mockedChronik}
+ agora={mockedAgora}
+ ecc={ecc}
+ route={`/send-token/${slpMintVaultMocks.tokenId}`}
+ />,
+ );
+
+ const { tokenName } = slpMintVaultMocks.token.genesisInfo;
+
+ // Wait for element to get token info and load
+ expect(
+ (await screen.findAllByText(new RegExp(tokenName)))[0],
+ ).toBeInTheDocument();
+
+ // Wait for supply and actions to load
+ // The supply is correctly rendered and is variable for a MINT VAULT token even though
+ // we have no mint batons
+ expect(
+ await screen.findByText('10,000,000 (var.)'),
+ ).toBeInTheDocument();
+
+ // Token actions are available
+ expect(screen.getByTitle('Token Actions')).toBeInTheDocument();
+
+ // On load, default action for SLP MINT is to list it
+ expect(screen.getByTitle('Toggle Sell Token')).toBeChecked();
+
+ // Click Send
+ const sendActionSwitch = screen.getByTitle('Toggle Send');
+ await userEvent.click(sendActionSwitch);
+ await waitFor(() => expect(sendActionSwitch).toBeChecked());
+
+ // Wait for address input to render
+ expect(
+ await screen.findByPlaceholderText('Address'),
+ ).toBeInTheDocument();
+
+ // We see an Address input
+ const addrInput = screen.getByPlaceholderText('Address');
+ expect(addrInput).toBeInTheDocument();
+
+ // Send button is disabled before address and amount entry
+ const sendButton = screen.getByRole('button', {
+ name: /Send MVTT β/,
+ });
+ expect(sendButton).toBeDisabled();
+
+ // We can enter an address
+ await userEvent.type(
+ addrInput,
+ 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035',
+ );
+ const amountInputEl = screen.getByPlaceholderText('Amount');
+ const amountInput = '1';
+ await userEvent.type(amountInputEl, amountInput);
+
+ // Now the button is enabled
+ expect(sendButton).toBeEnabled();
+
+ // We can send an SLP MINT VAULT token
+ await userEvent.click(sendButton);
+
+ const sendTokenSuccessNotification = await screen.findByText(
+ 'eToken sent',
+ );
+ expect(sendTokenSuccessNotification).toHaveAttribute(
+ 'href',
+ `${explorer.blockExplorerUrl}/tx/${txid}`,
+ );
+
+ // We can also burn an SLP MINT VAULT token
+
+ // Select burn
+ await userEvent.click(screen.getByTitle('Toggle Burn'));
+
+ await userEvent.type(screen.getByPlaceholderText('Burn Amount'), '1');
+
+ // Click the Burn button
+ // Note we button title is the token ticker
+ await userEvent.click(
+ await screen.findByRole('button', { name: /Burn MVTT β/ }),
+ );
+
+ // We see a modal and enter the correct confirmation msg
+ await userEvent.type(
+ screen.getByPlaceholderText(`Type "burn MVTT β" to confirm`),
+ 'burn MVTT β',
+ );
+
+ // Click the Confirm button
+ await userEvent.click(screen.getByRole('button', { name: /OK/ }));
+
+ const burnTokenSuccessNotification = await screen.findByText(
+ '🔥 Burn successful',
+ );
+ await waitFor(() =>
+ expect(burnTokenSuccessNotification).toHaveAttribute(
+ 'href',
+ `${explorer.blockExplorerUrl}/tx/${burnTxid}`,
+ ),
+ );
+ });
+ it('We can list a MINT VAULT fungible token', async () => {
+ // Mock Math.random()
+ jest.spyOn(global.Math, 'random').mockReturnValue(0.5); // set a fixed value
+
+ // MINT VAULT offer tx
+ // NB SLP listings require 2 txs
+ const adPrepHex =
+ '0200000002e227ad0b23242a4678fc79104cdf1c80914862a3c808066aebc65ef35b52b56f01000000644174065d671f0e08e90fb978b679a069cd3e49d842a5254dd6c0533008827da5a4c48f0cb1af8dcd68729a27f1e5c3a775f15b8e74dc0c88ff58db18b5f8e41efd4121031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02dffffffffef76d01776229a95c45696cf68f2f98c8332d0c53e3f24e73fd9c6deaf7926180300000064417a064abf440e3286975e8bf3d9be65e362a223d5d41610a041c899b1ed7e360a4cf88aee6a3f23c23a33326d9ee47f3a36f12421a76cba3085f3f129c0bc7bc04121031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02dffffffff040000000000000000406a04534c500001020453454e44208ecb9c25978f429472f3e9f9c048222f6ac9977e7d1313781f0e9ac1bdba325108000000000000006408000000000001863c060500000000000017a914b3d9292d4facf172a31ba4a75b73fd56a58d50ad8722020000000000001976a91400549451e5c22b18686cacdf34dce649e5ec3be288ac2c2e0f00000000001976a91400549451e5c22b18686cacdf34dce649e5ec3be288ac00000000';
+ const adPrepTxid =
+ '53fcd26eb28a1cd5cf5be80ba5d6c950d838bc6592b496ab61faf0e03c55562f';
+ mockedChronik.setBroadcastTx(adPrepHex, adPrepTxid);
+
+ const offerHex =
+ '02000000012f56553ce0f0fa61ab96b49265bc38d850c9d6a50be85bcfd51c8ab26ed2fc5301000000dd0441475230075041525449414c410e110dc50dbd3c468db5a244e43386b92fdeadc53817d2ba90c23378ffa9e10a9285834144f71861940694e8d356f64833b2a84d396e3b16a4347a4a198e54c0414c8c4c766a04534c500001020453454e44208ecb9c25978f429472f3e9f9c048222f6ac9977e7d1313781f0e9ac1bdba32510800000000000000000000b1a5470100000000c64603000000000026e2ad07000000002099c53f031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02d01557f77ad075041525449414c88044147523087ffffffff020000000000000000376a04534c500001020453454e44208ecb9c25978f429472f3e9f9c048222f6ac9977e7d1313781f0e9ac1bdba3251080000000000000064220200000000000017a9142c4d4e40520269461cfac4764915ffb1d1de71628700000000';
+ const offerTxid =
+ 'ad34ebf9e04be21e447b08d04e5578e57a6e41db84913d53b9d853ff5ea845e5';
+ mockedChronik.setBroadcastTx(offerHex, offerTxid);
+
+ // Mock response for agora select params check
+ // Note
+ // We obtain EXPECTED_OFFER_P2SH by adding
+ // console.log(toHex(shaRmd160(agoraScript.bytecode)));
+ // to ecash-agora lib and running this test
+ // Note that Date() and Math.random() must be mocked to keep this deterministic
+ const EXPECTED_OFFER_P2SH = '2c4d4e40520269461cfac4764915ffb1d1de7162';
+
+ // We mock no existing utxos
+ mockedChronik.setUtxosByScript('p2sh', EXPECTED_OFFER_P2SH, []);
+
+ // Note that we cannot use mockedAgora to avoid agoraQueryErrors, as we need a proper
+ // agora object to build the partial
+ const agora = new Agora(mockedChronik);
+
+ render(
+ <CashtabTestWrapper
+ chronik={mockedChronik}
+ ecc={ecc}
+ agora={agora}
+ route={`/send-token/${slpMintVaultMocks.tokenId}`}
+ />,
+ );
+
+ const { tokenName } = slpMintVaultMocks.token.genesisInfo;
+
+ // Wait for element to get token info and load
+ expect(
+ (await screen.findAllByText(new RegExp(tokenName)))[0],
+ ).toBeInTheDocument();
+
+ // Token image is rendered
+ expect(
+ screen.getByAltText(`icon for ${slpMintVaultMocks.tokenId}`),
+ ).toBeInTheDocument();
+
+ // Token actions are available
+ expect(screen.getByTitle('Token Actions')).toBeInTheDocument();
+
+ // On load, default action for MINT vault is to list it
+ expect(screen.getByTitle('Toggle Sell Token')).toBeEnabled();
+
+ // The list button is disabled on load
+ const listButton = screen.getByRole('button', {
+ name: /List Mint Vault Test Token Beta/,
+ });
+ expect(listButton).toBeDisabled();
+
+ // The price input is disabled until qty values are entered
+ const priceInput = screen.getByPlaceholderText(
+ 'Enter list price (per token)',
+ );
+ expect(priceInput).toBeDisabled();
+
+ // Enter token balance as offered qty
+ await userEvent.type(screen.getByPlaceholderText('Offered qty'), '100');
+
+ // The price input is no longer disabled
+ expect(priceInput).toBeEnabled();
+
+ // Enter a price
+ await userEvent.type(priceInput, '1');
+
+ const minQtyInput = screen.getByPlaceholderText('Min qty');
+
+ // The quantity updates automatically
+ expect(minQtyInput).toHaveValue('6');
+
+ // The list button is no longer disabled
+ expect(listButton).toBeEnabled();
+
+ // Click the now-enabled list button
+ await userEvent.click(listButton);
+
+ // We see expected confirmation modal to list the Token
+ expect(screen.getByText('List MVTT β?')).toBeInTheDocument();
+ expect(
+ screen.getByText('Create the following sell offer?'),
+ ).toBeInTheDocument();
+ // Offered qty (actual, calculated from AgoraOffer)
+ const actualOfferedQty = '100';
+ expect(screen.getByText(actualOfferedQty)).toBeInTheDocument();
+ // Min buy (actual, calculated from AgoraOffer)
+ expect(screen.getByText('6')).toBeInTheDocument();
+ // Actual price calculated from AgoraOffer
+ const actualPricePerTokenForMinBuy = '1.0017 XEC';
+ expect(
+ screen.getAllByText(actualPricePerTokenForMinBuy)[0],
+ ).toBeInTheDocument();
+
+ // We pull the trigger
+ await userEvent.click(screen.getByText('OK'));
+
+ // We see the expected toast notification for the successful listing tx
+ expect(
+ await screen.findByText(
+ `${actualOfferedQty} Mint Vault Test Token Beta listed for ${actualPricePerTokenForMinBuy} per token`,
+ ),
+ ).toBeInTheDocument();
+ });
});
diff --git a/cashtab/src/components/Etokens/fixtures/mocks.js b/cashtab/src/components/Etokens/fixtures/mocks.js
index b79b27008..bc70e6ef1 100644
--- a/cashtab/src/components/Etokens/fixtures/mocks.js
+++ b/cashtab/src/components/Etokens/fixtures/mocks.js
@@ -1,8412 +1,8556 @@
// Copyright (c) 2024 The Bitcoin developers
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
import { fromHex } from 'ecash-lib';
import { tokenMockXecx } from 'components/Agora/fixtures/mocks';
import { FIRMA } from 'constants/tokens';
/**
* Etokens/fixtures/mocks.js
* Mocks to populate mocked-chronik-client with token cache info for different token types
*
* When Cashtab supports a new token type, add it as a utxo in this wallet, and add a new mock object
* with keys for tokenId, token, and tx
* token is chronik response for chronik.token(tokenId)
* tx is chronik response for chronik.tx(tokenId)
*/
// Used only for circulating suppply calculation
const MOCK_TOKEN_UTXO = {
token: {
tokenId:
'20a0b9337a78603c6681ed2bc541593375535dcd9979196620ce71f233f2f6f8',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
atoms: 2999998798000000000n,
isMintBaton: false,
},
};
export const tokenTestWallet = {
state: {
balanceSats: 997081,
slpUtxos: [
{
outpoint: {
txid: '250c93fd6bc2f1853a41d2fd1f5754a92f79f952f10ab038401be1600d5cbb88',
outIdx: 1,
},
blockHeight: 836452,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'7cd7cd7c54167d306e770f972b564584c44cb412ee45839b4b97bb6e724c8849',
tokenType: {
protocol: 'ALP',
type: 'ALP_TOKEN_TYPE_STANDARD',
number: 0,
},
isMintBaton: false,
atoms: 1000000n,
},
path: 1899,
sats: 546n,
},
// XECX
{
outpoint: {
txid: '250c93fd6bc2f1853a41d2fd1f5754a92f79f952f10ab038401be1600d5cbb88',
outIdx: 1,
},
blockHeight: 836452,
isCoinbase: false,
sats: 546n,
isFinal: true,
token: {
tokenId: tokenMockXecx.tokenId,
tokenType: {
protocol: 'ALP',
type: 'ALP_TOKEN_TYPE_STANDARD',
number: 0,
},
atoms: 1000000n,
isMintBaton: false,
},
path: 1899,
},
// FIRMA
{
outpoint: {
txid: '250c93fd6bc2f1853a41d2fd1f5754a92f79f952f10ab038401be1600d5cbb88',
outIdx: 1,
},
blockHeight: 836452,
isCoinbase: false,
sats: 546n,
isFinal: true,
token: {
tokenId: FIRMA.tokenId,
tokenType: {
protocol: 'ALP',
type: 'ALP_TOKEN_TYPE_STANDARD',
number: 0,
},
atoms: 1000000n,
isMintBaton: false,
},
path: 1899,
},
{
outpoint: {
txid: '74a8598eed00672e211553a69e22334128199883fe79eb4ad64f9c0b7909735c',
outIdx: 1,
},
blockHeight: 836457,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'0000000000000000000000000000000000000000000000000000000000000000',
tokenType: {
protocol: 'ALP',
type: 'ALP_TOKEN_TYPE_UNKNOWN',
number: 255,
},
isMintBaton: false,
atoms: 0n,
},
path: 1899,
sats: 1000n,
},
{
outpoint: {
txid: '6fb5525bf35ec6eb6a0608c8a3624891801cdf4c1079fc78462a24230bad27e2',
outIdx: 1,
},
blockHeight: 836700,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'6fb5525bf35ec6eb6a0608c8a3624891801cdf4c1079fc78462a24230bad27e2',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 100000n,
},
path: 1899,
sats: 546n,
},
+ // SLP MINT VAULT
+ {
+ outpoint: {
+ txid: '6fb5525bf35ec6eb6a0608c8a3624891801cdf4c1079fc78462a24230bad27e2',
+ outIdx: 1,
+ },
+ blockHeight: 836700,
+ isCoinbase: false,
+ isFinal: true,
+ token: {
+ tokenId:
+ '8ecb9c25978f429472f3e9f9c048222f6ac9977e7d1313781f0e9ac1bdba3251',
+ tokenType: {
+ protocol: 'SLP',
+ type: 'SLP_TOKEN_TYPE_MINT_VAULT',
+ number: 2,
+ },
+ isMintBaton: false,
+ atoms: 100000n,
+ },
+ path: 1899,
+ sats: 546n,
+ },
{
outpoint: {
txid: 'da3c897eb6d4e5299cb3ae2d8235d46632647303eab61236a1072885d5e56d66',
outIdx: 1,
},
blockHeight: 840233,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'20a0b9337a78603c6681ed2bc541593375535dcd9979196620ce71f233f2f6f8',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 111000000000n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: '182679afdec6d93fe7243f3ec5d032838cf9f268cf9656c4959a227617d076ef',
outIdx: 1,
},
blockHeight: -1,
isCoinbase: false,
isFinal: false,
token: {
tokenId:
'182679afdec6d93fe7243f3ec5d032838cf9f268cf9656c4959a227617d076ef',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 18446744073709551615n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: '182679afdec6d93fe7243f3ec5d032838cf9f268cf9656c4959a227617d076ef',
outIdx: 2,
},
blockHeight: -1,
isCoinbase: false,
isFinal: false,
token: {
tokenId:
'182679afdec6d93fe7243f3ec5d032838cf9f268cf9656c4959a227617d076ef',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: true,
atoms: 0n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: '0c66493127382882053f3eb6e2e05eccff7f67378ebf5e84660a958656a304cc',
outIdx: 1,
},
blockHeight: 840011,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'0c66493127382882053f3eb6e2e05eccff7f67378ebf5e84660a958656a304cc',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_NFT1_GROUP',
number: 129,
},
isMintBaton: false,
atoms: 100n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: '0c66493127382882053f3eb6e2e05eccff7f67378ebf5e84660a958656a304cc',
outIdx: 2,
},
blockHeight: 840011,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'0c66493127382882053f3eb6e2e05eccff7f67378ebf5e84660a958656a304cc',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_NFT1_GROUP',
number: 129,
},
isMintBaton: true,
atoms: 0n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: '5d9bff67b99e3f93c245a2d832ae40b67f39b79e5cf1daefe97fe6a8a2228326',
outIdx: 1,
},
blockHeight: 841509,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'5d9bff67b99e3f93c245a2d832ae40b67f39b79e5cf1daefe97fe6a8a2228326',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_NFT1_CHILD',
number: 65,
},
isMintBaton: false,
atoms: 1n,
},
path: 1899,
sats: 546n,
},
],
nonSlpUtxos: [
{
outpoint: {
txid: '182679afdec6d93fe7243f3ec5d032838cf9f268cf9656c4959a227617d076ef',
outIdx: 3,
},
blockHeight: -1,
isCoinbase: false,
isFinal: false,
path: 1899,
sats: 997081n,
},
],
tokens: new Map([
[
'7cd7cd7c54167d306e770f972b564584c44cb412ee45839b4b97bb6e724c8849',
'100.0000',
],
[
'0000000000000000000000000000000000000000000000000000000000000000',
'0',
],
[
'6fb5525bf35ec6eb6a0608c8a3624891801cdf4c1079fc78462a24230bad27e2',
'100000',
],
[
'20a0b9337a78603c6681ed2bc541593375535dcd9979196620ce71f233f2f6f8',
'111.000000000',
],
[
'182679afdec6d93fe7243f3ec5d032838cf9f268cf9656c4959a227617d076ef',
'18446744073.709551615',
],
[
'0c66493127382882053f3eb6e2e05eccff7f67378ebf5e84660a958656a304cc',
'100',
],
]),
parsedTxHistory: [
{
txid: '182679afdec6d93fe7243f3ec5d032838cf9f268cf9656c4959a227617d076ef',
version: 2,
inputs: [
{
prevOut: {
txid: '6fb5525bf35ec6eb6a0608c8a3624891801cdf4c1079fc78462a24230bad27e2',
outIdx: 2,
},
inputScript:
'4730440220350ea45bed94988b896e3b4fcf111cc433a3e851bf2bb43c84ef5a0a51f70adf02204fc1007f3840ab3ed278a3add81411249575caeb4b7416de1aed695b02bca2f94121020a725e4b7326b4af2b468ab95982d1393d062811a8f8204bf383bf3373dbc54f',
sequenceNo: 4294967295,
outputScript:
'76a91400549451e5c22b18686cacdf34dce649e5ec3be288ac',
sats: 998857n,
},
],
outputs: [
{
outputScript:
'6a04534c500001010747454e45534953034d53420e4d696e742053656e64204275726e1468747470733a2f2f636173687461622e636f6d2f4c000109010208ffffffffffffffff',
sats: 0n,
},
{
outputScript:
'76a91400549451e5c22b18686cacdf34dce649e5ec3be288ac',
token: {
tokenId:
'182679afdec6d93fe7243f3ec5d032838cf9f268cf9656c4959a227617d076ef',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
entryIdx: 0,
atoms: 18446744073709551615n,
},
sats: 546n,
},
{
outputScript:
'76a91400549451e5c22b18686cacdf34dce649e5ec3be288ac',
token: {
tokenId:
'182679afdec6d93fe7243f3ec5d032838cf9f268cf9656c4959a227617d076ef',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: true,
entryIdx: 0,
atoms: 0n,
},
sats: 546n,
},
{
outputScript:
'76a91400549451e5c22b18686cacdf34dce649e5ec3be288ac',
sats: 997081n,
},
],
lockTime: 0,
timeFirstSeen: 1713184114,
size: 339,
isCoinbase: false,
tokenEntries: [
{
tokenId:
'182679afdec6d93fe7243f3ec5d032838cf9f268cf9656c4959a227617d076ef',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
txType: 'GENESIS',
isInvalid: false,
burnSummary: '',
failedColorings: [],
burnsMintBatons: false,
actualBurnAtoms: 0n,
intentionalBurnAtoms: 0n,
},
],
tokenFailedParsings: [],
tokenStatus: 'TOKEN_STATUS_NORMAL',
parsed: {
xecTxType: 'Sent',
satoshisSent: 998173,
stackArray: [
'534c5000',
'01',
'47454e45534953',
'4d5342',
'4d696e742053656e64204275726e',
'68747470733a2f2f636173687461622e636f6d2f',
'',
'09',
'02',
'ffffffffffffffff',
],
recipients: [],
},
},
{
txid: 'da3c897eb6d4e5299cb3ae2d8235d46632647303eab61236a1072885d5e56d66',
version: 2,
inputs: [
{
prevOut: {
txid: '490a06b01b8d1793b81b5230ce2045132af0f0ec9cc7be860bb72e6a727d5bd4',
outIdx: 2,
},
inputScript:
'483045022100d5fc2c9824aa7ceb987dde5e32b17f1be000fa19480e59faaef6f5e7f235e5f7022039e8fa5e66c19c0a0e77b429a3056465db841a2b8e837552d01d38072edf0ed14121021d7fd45a888292cf3a022a95acdbcf82f9f2d5bbbfbdbc740acd558a9f25b5d0',
sequenceNo: 4294967295,
token: {
tokenId:
'20a0b9337a78603c6681ed2bc541593375535dcd9979196620ce71f233f2f6f8',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
entryIdx: 0,
atoms: 999867000000000n,
},
outputScript:
'76a9140d94ba179ec21c42417a71a77873b3619363d8ea88ac',
sats: 546n,
},
{
prevOut: {
txid: '26638422f963da59e040c3eeb2bc766114f44026bff959ae5ee30be486b18fa7',
outIdx: 2,
},
inputScript:
'473044022038387900857b7f33214deff1ffc45f108a5ac9c60dd4d41d85662b2116d5644502201a56911fa1b7c86d967d04fd3c35348714c0b5c69fec025c549c1641b1049d654121021d7fd45a888292cf3a022a95acdbcf82f9f2d5bbbfbdbc740acd558a9f25b5d0',
sequenceNo: 4294967295,
outputScript:
'76a9140d94ba179ec21c42417a71a77873b3619363d8ea88ac',
sats: 14846n,
},
],
outputs: [
{
outputScript:
'6a04534c500001010453454e442020a0b9337a78603c6681ed2bc541593375535dcd9979196620ce71f233f2f6f80800000019d81d96000800038d45d53df800',
sats: 0n,
},
{
outputScript:
'76a91400549451e5c22b18686cacdf34dce649e5ec3be288ac',
token: {
tokenId:
'20a0b9337a78603c6681ed2bc541593375535dcd9979196620ce71f233f2f6f8',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
entryIdx: 0,
atoms: 111000000000n,
},
sats: 546n,
},
{
outputScript:
'76a9140d94ba179ec21c42417a71a77873b3619363d8ea88ac',
token: {
tokenId:
'20a0b9337a78603c6681ed2bc541593375535dcd9979196620ce71f233f2f6f8',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
entryIdx: 0,
atoms: 999756000000000n,
},
sats: 546n,
},
{
outputScript:
'76a9140d94ba179ec21c42417a71a77873b3619363d8ea88ac',
sats: 13333n,
},
],
lockTime: 0,
timeFirstSeen: 1713183812,
size: 480,
isCoinbase: false,
tokenEntries: [
{
tokenId:
'20a0b9337a78603c6681ed2bc541593375535dcd9979196620ce71f233f2f6f8',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
txType: 'SEND',
isInvalid: false,
burnSummary: '',
failedColorings: [],
burnsMintBatons: false,
actualBurnAtoms: 0n,
intentionalBurnAtoms: 0n,
},
],
tokenFailedParsings: [],
tokenStatus: 'TOKEN_STATUS_NORMAL',
block: {
height: 840233,
hash: '000000000000000019fa0a69b1b204692bb8e5696e0df32137e4a34b77e0d675',
timestamp: 1713183906,
},
parsed: {
xecTxType: 'Received',
satoshisSent: 546,
stackArray: [
'534c5000',
'01',
'53454e44',
'20a0b9337a78603c6681ed2bc541593375535dcd9979196620ce71f233f2f6f8',
'00000019d81d9600',
'00038d45d53df800',
],
recipients: [
'ecash:qqxefwshnmppcsjp0fc6w7rnkdsexc7cagdus7ugd0',
],
},
},
{
txid: '6fb5525bf35ec6eb6a0608c8a3624891801cdf4c1079fc78462a24230bad27e2',
version: 2,
inputs: [
{
prevOut: {
txid: '1494a165306a2b5cb2e743f01e6c14b963fc75a62083a468d5e71e1e6245d1d9',
outIdx: 0,
},
inputScript:
'483045022100b68ce47f60e254e0a980cf05f9ebc2a5bf943b3ffb57c567db6adce0e0aaf7c8022015813a924a50b310e2f9ab3d60db35b53e56d96eca6603e20a02ed7a4a623e0e4121020a725e4b7326b4af2b468ab95982d1393d062811a8f8204bf383bf3373dbc54f',
sequenceNo: 4294967295,
outputScript:
'76a91400549451e5c22b18686cacdf34dce649e5ec3be288ac',
sats: 1000000n,
},
],
outputs: [
{
outputScript:
'6a04534c500001010747454e4553495301530753756c706875721468747470733a2f2f636173687461622e636f6d2f4c0001004c000800000000000186a0',
sats: 0n,
},
{
outputScript:
'76a91400549451e5c22b18686cacdf34dce649e5ec3be288ac',
token: {
tokenId:
'6fb5525bf35ec6eb6a0608c8a3624891801cdf4c1079fc78462a24230bad27e2',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
entryIdx: 0,
atoms: 100000n,
},
sats: 546n,
},
{
outputScript:
'76a91400549451e5c22b18686cacdf34dce649e5ec3be288ac',
spentBy: {
txid: '182679afdec6d93fe7243f3ec5d032838cf9f268cf9656c4959a227617d076ef',
outIdx: 0,
},
sats: 998857n,
},
],
lockTime: 0,
timeFirstSeen: 1710948156,
size: 297,
isCoinbase: false,
tokenEntries: [
{
tokenId:
'6fb5525bf35ec6eb6a0608c8a3624891801cdf4c1079fc78462a24230bad27e2',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
txType: 'GENESIS',
isInvalid: false,
burnSummary: '',
failedColorings: [],
burnsMintBatons: false,
actualBurnAtoms: 0n,
intentionalBurnAtoms: 0n,
},
],
tokenFailedParsings: [],
tokenStatus: 'TOKEN_STATUS_NORMAL',
block: {
height: 836700,
hash: '000000000000000014a2459ce878eecab3abfca3aede8b71b30121f210b48117',
timestamp: 1710948609,
},
parsed: {
xecTxType: 'Sent',
satoshisSent: 999403,
stackArray: [
'534c5000',
'01',
'47454e45534953',
'53',
'53756c70687572',
'68747470733a2f2f636173687461622e636f6d2f',
'',
'00',
'',
'00000000000186a0',
],
recipients: [],
},
},
{
txid: '74a8598eed00672e211553a69e22334128199883fe79eb4ad64f9c0b7909735c',
version: 1,
inputs: [
{
prevOut: {
txid: 'a65c0a7258fc9d9087351d77eacbad882e851d11ea7c11a238dc4c8360cb3ffa',
outIdx: 2,
},
inputScript:
'41c9594e4dd7338ad9ec44a81ab75db2ccb737b961b00f2f8a51e0f581158b5c25ff41b26357f432821917a642cad0fd68371a75686bd3b7847dc6daae26e3eb6a4121037bc7f6ca0474be3edf7a2ce4e753855998273e9db618b135c20ee0e4b5e9fce8',
sequenceNo: 4294967294,
token: {
tokenId:
'0000000000000000000000000000000000000000000000000000000000000000',
tokenType: {
protocol: 'ALP',
type: 'ALP_TOKEN_TYPE_UNKNOWN',
number: 200,
},
isMintBaton: false,
entryIdx: 1,
atoms: 0n,
},
outputScript:
'76a914915132f6d7b707123b66ce4ac0a04a135c07a39988ac',
sats: 546n,
},
{
prevOut: {
txid: 'a65c0a7258fc9d9087351d77eacbad882e851d11ea7c11a238dc4c8360cb3ffa',
outIdx: 3,
},
inputScript:
'418aafb5e789fbc194ed7ecbad3bea728d00d9c089d3005bd6cf3487a8f196b2444e1552c5079805a790ab7339b4ef1932749f19ded730852cbc993dd80a04189d4121033b5a78b9d86813dd402f05cf0627dc4273090c70a9e52109204da0f272980633',
sequenceNo: 4294967294,
token: {
tokenId:
'0000000000000000000000000000000000000000000000000000000000000000',
tokenType: {
protocol: 'ALP',
type: 'ALP_TOKEN_TYPE_UNKNOWN',
number: 200,
},
isMintBaton: false,
entryIdx: 1,
atoms: 0n,
},
outputScript:
'76a914bd19517f5aa2f2286922d4c28f5dc4c89c49798488ac',
sats: 546n,
},
{
prevOut: {
txid: 'f5c37336316d0b08eacf0791000c13e87182ef87188c55693dfb65218db08cb4',
outIdx: 0,
},
inputScript:
'414d72085dfe8b9deb741c15e83822d778f5825e35c44dbd3753937b697538e502d71aae0215881f07bd8c66112abfe466b95cb8ebc0d7e9ca0c4fd063853ad73e412102637953859a84e61e87df221c91ac3a38c59fa7e652e43894adc4443a373bcd10',
sequenceNo: 4294967294,
outputScript:
'76a91496345bfc72a63d798a7f1deace0be9edf209a24b88ac',
sats: 600n,
},
],
outputs: [
{
outputScript: '6a5005534c5032ff',
sats: 0n,
},
{
outputScript:
'76a91400549451e5c22b18686cacdf34dce649e5ec3be288ac',
token: {
tokenId:
'0000000000000000000000000000000000000000000000000000000000000000',
tokenType: {
protocol: 'ALP',
type: 'ALP_TOKEN_TYPE_UNKNOWN',
number: 255,
},
isMintBaton: false,
entryIdx: 0,
atoms: 0n,
},
sats: 1000n,
},
],
lockTime: 821417,
timeFirstSeen: 1710792313,
size: 484,
isCoinbase: false,
tokenEntries: [
{
tokenId:
'0000000000000000000000000000000000000000000000000000000000000000',
tokenType: {
protocol: 'ALP',
type: 'ALP_TOKEN_TYPE_UNKNOWN',
number: 255,
},
txType: 'UNKNOWN',
isInvalid: false,
burnSummary: '',
failedColorings: [],
burnsMintBatons: false,
actualBurnAtoms: 0n,
intentionalBurnAtoms: 0n,
},
{
tokenId:
'0000000000000000000000000000000000000000000000000000000000000000',
tokenType: {
protocol: 'ALP',
type: 'ALP_TOKEN_TYPE_UNKNOWN',
number: 200,
},
txType: 'NONE',
isInvalid: true,
burnSummary: 'Unexpected burn: ',
failedColorings: [],
burnsMintBatons: false,
actualBurnAtoms: 0n,
intentionalBurnAtoms: 0n,
},
],
tokenFailedParsings: [],
tokenStatus: 'TOKEN_STATUS_NOT_NORMAL',
block: {
height: 836457,
hash: '000000000000000017739c96aa947a25e7ff176eb1a669095f950cefade4f255',
timestamp: 1710794047,
},
parsed: {
xecTxType: 'Received',
satoshisSent: 1000,
stackArray: ['50', '534c5032ff'],
recipients: [],
},
},
{
txid: '250c93fd6bc2f1853a41d2fd1f5754a92f79f952f10ab038401be1600d5cbb88',
version: 1,
inputs: [
{
prevOut: {
txid: '3d087f1004d42876756c3c2b97e92e21d8ccfc45d1479776b6b0a35c44728111',
outIdx: 1,
},
inputScript:
'418c511d2a85d07f2d5313aeec82817321ee5c14212da7c44d0c4ab3799238c474065720a8ceb3329edaa2160f8f2948bbcfcc11203347f61dc7e58f46f70df972c12103ab36c95805dd2d9f40b5abde2e0a7c78858421c03383f0a138358eb514dc53dd',
sequenceNo: 4294967295,
token: {
tokenId:
'7cd7cd7c54167d306e770f972b564584c44cb412ee45839b4b97bb6e724c8849',
tokenType: {
protocol: 'ALP',
type: 'ALP_TOKEN_TYPE_STANDARD',
number: 0,
},
isMintBaton: false,
entryIdx: 0,
atoms: 50000000n,
},
outputScript:
'76a914262261027093df1005f751174d87d780adfabbbf88ac',
sats: 546n,
},
{
prevOut: {
txid: '18c7c49f5783f909224f59a435cc4f3b0e7174bda27b86e53e6e76e4fa48dab4',
outIdx: 82,
},
inputScript:
'41f7d042e3288f923e1f540ed7ce43db91d1295951ca21ed4ab24ce95d9ca6826ad7e5497f117f802fe1c9fda902ab7bf97af8bba4d29cb267d110d23e221f8cc7412102f49a7fd4e0c6cea6401aed57b76b2fb358e1ebbb65fc5782e3c2165c9e850b31',
sequenceNo: 4294967295,
outputScript:
'76a9148b9b3ba9199d98e131b762081c0c31754fb904c288ac',
sats: 1000n,
},
{
prevOut: {
txid: '18c7c49f5783f909224f59a435cc4f3b0e7174bda27b86e53e6e76e4fa48dab4',
outIdx: 83,
},
inputScript:
'41d1e4f4970fea442cf46e71811eaf2f8271f2f1b3518fdb682bb0625160177adfa058707013453ed4c80887473238c7013007bf794a557fe6de449a51b4b4d06a412102f49a7fd4e0c6cea6401aed57b76b2fb358e1ebbb65fc5782e3c2165c9e850b31',
sequenceNo: 4294967295,
outputScript:
'76a9148b9b3ba9199d98e131b762081c0c31754fb904c288ac',
sats: 1000n,
},
],
outputs: [
{
outputScript:
'6a503d534c5032000453454e4449884c726ebb974b9b8345ee12b44cc48445562b970f776e307d16547ccdd77c0340420f000000dcadeb020000640000000000',
sats: 0n,
},
{
outputScript:
'76a91400549451e5c22b18686cacdf34dce649e5ec3be288ac',
token: {
tokenId:
'7cd7cd7c54167d306e770f972b564584c44cb412ee45839b4b97bb6e724c8849',
tokenType: {
protocol: 'ALP',
type: 'ALP_TOKEN_TYPE_STANDARD',
number: 0,
},
isMintBaton: false,
entryIdx: 0,
atoms: 1000000n,
},
sats: 546n,
},
{
outputScript:
'76a914262261027093df1005f751174d87d780adfabbbf88ac',
token: {
tokenId:
'7cd7cd7c54167d306e770f972b564584c44cb412ee45839b4b97bb6e724c8849',
tokenType: {
protocol: 'ALP',
type: 'ALP_TOKEN_TYPE_STANDARD',
number: 0,
},
isMintBaton: false,
entryIdx: 0,
atoms: 48999900n,
},
spentBy: {
txid: 'f784a99870650fddc57360db8f91035bde12e4c278eb4704caa1256b682d7bc5',
outIdx: 0,
},
sats: 546n,
},
{
outputScript:
'76a914dee50f576362377dd2f031453c0bb09009acaf8188ac',
token: {
tokenId:
'7cd7cd7c54167d306e770f972b564584c44cb412ee45839b4b97bb6e724c8849',
tokenType: {
protocol: 'ALP',
type: 'ALP_TOKEN_TYPE_STANDARD',
number: 0,
},
isMintBaton: false,
entryIdx: 0,
atoms: 100n,
},
sats: 546n,
},
],
lockTime: 0,
timeFirstSeen: 1710789095,
size: 608,
isCoinbase: false,
tokenEntries: [
{
tokenId:
'7cd7cd7c54167d306e770f972b564584c44cb412ee45839b4b97bb6e724c8849',
tokenType: {
protocol: 'ALP',
type: 'ALP_TOKEN_TYPE_STANDARD',
number: 0,
},
txType: 'SEND',
isInvalid: false,
burnSummary: '',
failedColorings: [],
burnsMintBatons: false,
actualBurnAtoms: 0n,
intentionalBurnAtoms: 0n,
},
],
tokenFailedParsings: [],
tokenStatus: 'TOKEN_STATUS_NORMAL',
block: {
height: 836452,
hash: '000000000000000010aa8982051dceef402d15f18adf260492e0829cc715b29b',
timestamp: 1710789519,
},
parsed: {
xecTxType: 'Received',
satoshisSent: 546,
stackArray: [
'50',
'534c5032000453454e4449884c726ebb974b9b8345ee12b44cc48445562b970f776e307d16547ccdd77c0340420f000000dcadeb020000640000000000',
],
recipients: [
'ecash:qqnzycgzwzfa7yq97ag3wnv867q2m74mhufqefypm0',
'ecash:qr0w2r6hvd3rwlwj7qc520qtkzgqnt90sypk26yd2u',
],
},
},
{
txid: '1494a165306a2b5cb2e743f01e6c14b963fc75a62083a468d5e71e1e6245d1d9',
version: 2,
inputs: [
{
prevOut: {
txid: '825d6054498af4a899eb5bd6d539e7b808bc717968e68acb63f64dca209a9888',
outIdx: 1,
},
inputScript:
'4830450221008834c3f958b6de5c2d14385ef28c69671db6210f88b3dd80fb1c95edd03ecec9022079f16f8022e910a81570a86ce27f8b095553309a050028bb2ad43cd770d0a5a0412103318d0e1109f32debc66952d0e3ec21b1cf96575ea4c2a97a6535628f7f8b10e6',
sequenceNo: 4294967295,
outputScript:
'76a9144e532257c01b310b3b5c1fd947c79a72addf852388ac',
sats: 463935n,
},
{
prevOut: {
txid: '95db8b6c65a9494a1c33f646c9e61c34266900798fcaecee2ecfaba211d1246d',
outIdx: 0,
},
inputScript:
'483045022100fe262318853a2a7660b21f63be1e9e3542236e4993be03495f706497e46ad59a022066838c3875a0bfa6fafac4c29318ec78ebede7dd1f2a4b1419da7abac17453c9412103318d0e1109f32debc66952d0e3ec21b1cf96575ea4c2a97a6535628f7f8b10e6',
sequenceNo: 4294967295,
outputScript:
'76a9144e532257c01b310b3b5c1fd947c79a72addf852388ac',
sats: 1100n,
},
{
prevOut: {
txid: 'dd025b3924544e1fdff406c8f32dd92d2ae736af23dd8d2ef4da24f8241e8342',
outIdx: 0,
},
inputScript:
'483045022100911a595d3b7f549d25cb2aeaebc105d4c7959ea85cf946b267c5af49cd48d87802200a6c09b691ec570f88e390e24aab1b715907bd58433fa133ea83f2936d807cec412103318d0e1109f32debc66952d0e3ec21b1cf96575ea4c2a97a6535628f7f8b10e6',
sequenceNo: 4294967295,
outputScript:
'76a9144e532257c01b310b3b5c1fd947c79a72addf852388ac',
sats: 1100n,
},
{
prevOut: {
txid: '8b4c343250f7c2052b8aea274626774343cbb83327a755b164a9da483013f2f5',
outIdx: 0,
},
inputScript:
'47304402202a2df4c242582503b800a3852afc68f46a5de8b9554e97fe00313e95c3430ee902203e534510bd9754f1279ccfccd524b8baa7d521823ca2b87c4b5be813a3da8920412103318d0e1109f32debc66952d0e3ec21b1cf96575ea4c2a97a6535628f7f8b10e6',
sequenceNo: 4294967295,
outputScript:
'76a9144e532257c01b310b3b5c1fd947c79a72addf852388ac',
sats: 1100n,
},
{
prevOut: {
txid: '07f1f1c64e85f8a8192a979b215e1266f7f43c75ca50bca4bddc4e7e810afb8a',
outIdx: 0,
},
inputScript:
'47304402204deff67ff4bd3d146c2780a4d29f4f4757af0df5e5f5cffb0a9c8541bd86a67202201f4b467a220b5a84b5d7c6dc398720c4b1b86d41870cf8cc3fc7968c93b6bb91412103318d0e1109f32debc66952d0e3ec21b1cf96575ea4c2a97a6535628f7f8b10e6',
sequenceNo: 4294967295,
outputScript:
'76a9144e532257c01b310b3b5c1fd947c79a72addf852388ac',
sats: 2200n,
},
{
prevOut: {
txid: 'a55991681f7171821a52325897a5af2457dd4ecf2bfab717fe0be89b61dd615d',
outIdx: 0,
},
inputScript:
'473044022024894af3256a20173a10bb0195cd5d18edd54e7f78575fccb28306d824ef04b902201134383d62083011a1a90aae60e3899008c0894543e49bfc19db1bca639c2ca6412103318d0e1109f32debc66952d0e3ec21b1cf96575ea4c2a97a6535628f7f8b10e6',
sequenceNo: 4294967295,
outputScript:
'76a9144e532257c01b310b3b5c1fd947c79a72addf852388ac',
sats: 1100n,
},
{
prevOut: {
txid: 'c336d4a0e72551a0e22a9204a8cf28ac0ae704610b375b8fae3f5a387b2b1996',
outIdx: 0,
},
inputScript:
'483045022100cf855ef9fd533ae6de13a21850b2ed772819480083828ab599ce56a4fe0d5014022062846bb895f11b3af532a8407dc4b7ccf40e5c6d6e6f7baed6aa276d22e648ec412103318d0e1109f32debc66952d0e3ec21b1cf96575ea4c2a97a6535628f7f8b10e6',
sequenceNo: 4294967295,
outputScript:
'76a9144e532257c01b310b3b5c1fd947c79a72addf852388ac',
sats: 2200n,
},
{
prevOut: {
txid: 'd491904e95406e51676a93552a64da22df5fd292e7820dfe0ef894c764c7f94a',
outIdx: 0,
},
inputScript:
'483045022100828aa7fab0d9b3e8a7e84e9f9b058039010b7a7f339992357a820d6289239b3902206105c3174a82bad53310fcbf264dcb8ffdb5932006f528822671b07f9ba8f17b412103318d0e1109f32debc66952d0e3ec21b1cf96575ea4c2a97a6535628f7f8b10e6',
sequenceNo: 4294967295,
outputScript:
'76a9144e532257c01b310b3b5c1fd947c79a72addf852388ac',
sats: 1100n,
},
{
prevOut: {
txid: 'dc63c3a69858563ca3cc9d48d1d36f090705a4ed9c50da006bd3636e2ba65f98',
outIdx: 0,
},
inputScript:
'473044022015196c866fe452d1f55371ea4a2266c1e17738a941271063cc5a666d51bba7b502205dfba391e95fd3fe266a7619d8067de973631d3988b844af3b54f61cb29d6749412103318d0e1109f32debc66952d0e3ec21b1cf96575ea4c2a97a6535628f7f8b10e6',
sequenceNo: 4294967295,
outputScript:
'76a9144e532257c01b310b3b5c1fd947c79a72addf852388ac',
sats: 1100n,
},
{
prevOut: {
txid: '93309cd2654dc714fc5c907497cb4b1fee50480cae463389e8f51d18221c344c',
outIdx: 0,
},
inputScript:
'483045022100dade26b499a7b8e7e14d4bf65dd0d959fc46343c1ad5b23956f2117afef81e0c022070177fc12d998e2f8e817423844bf122183d60964033766d4b58416f335c5ddf412103318d0e1109f32debc66952d0e3ec21b1cf96575ea4c2a97a6535628f7f8b10e6',
sequenceNo: 4294967295,
outputScript:
'76a9144e532257c01b310b3b5c1fd947c79a72addf852388ac',
sats: 1100n,
},
{
prevOut: {
txid: 'd3b4e33b04c1d9e7407446682924e4b6264ca0bf5704daa72c895bb215913b4b',
outIdx: 0,
},
inputScript:
'4830450221009c5499d0830d2ff8470c9c232c3ff8d984845a5e0a995f838c9def20413e48f6022003c96aa2453b48d045449564a8e591fbb1b098bb0ff25ca3b147fee0d2c9ddc2412103318d0e1109f32debc66952d0e3ec21b1cf96575ea4c2a97a6535628f7f8b10e6',
sequenceNo: 4294967295,
outputScript:
'76a9144e532257c01b310b3b5c1fd947c79a72addf852388ac',
sats: 1100n,
},
{
prevOut: {
txid: 'd09ba93e9916d390a6bce2b2168e93710315e30eb12d33b576fa780716dad5b7',
outIdx: 0,
},
inputScript:
'483045022100869341ac1ca7f84ba5871f92444cf36a1c277e5e0bd3f084c3eac5674148bfda02200fc9c0a79de0937f8e71071e7f25518aa8cd8ef71a2260221dacd635d5de169a412103318d0e1109f32debc66952d0e3ec21b1cf96575ea4c2a97a6535628f7f8b10e6',
sequenceNo: 4294967295,
outputScript:
'76a9144e532257c01b310b3b5c1fd947c79a72addf852388ac',
sats: 1100n,
},
{
prevOut: {
txid: 'd2ff7500d9705ad21dcf666c89446abc6f1810b2f9ddf60d9b47f6052535d0b4',
outIdx: 0,
},
inputScript:
'4830450221008b7f0701d441d4d365181f8113dc249d7628098658341e233e65559eebacd31602204f614a4100d7c3cf6921983db601806a281e3d9af2c531c27ebf2b84898d254c412103318d0e1109f32debc66952d0e3ec21b1cf96575ea4c2a97a6535628f7f8b10e6',
sequenceNo: 4294967295,
outputScript:
'76a9144e532257c01b310b3b5c1fd947c79a72addf852388ac',
sats: 2200n,
},
{
prevOut: {
txid: '4c9610cc3e19f7b417cb8d5c018d13b0ea00486500f2e302d9387965ae6fba19',
outIdx: 1,
},
inputScript:
'483045022100f05296911f971330353398cfca9ba4e894285bd5d46c499bd7fb926ca6053ba002206f630b424989e876df0efc4055895abfcbb73bd7962512fe1deb1999fc1ec3f1412103318d0e1109f32debc66952d0e3ec21b1cf96575ea4c2a97a6535628f7f8b10e6',
sequenceNo: 4294967295,
outputScript:
'76a9144e532257c01b310b3b5c1fd947c79a72addf852388ac',
sats: 4888538n,
},
],
outputs: [
{
outputScript:
'76a91400549451e5c22b18686cacdf34dce649e5ec3be288ac',
spentBy: {
txid: '6fb5525bf35ec6eb6a0608c8a3624891801cdf4c1079fc78462a24230bad27e2',
outIdx: 0,
},
sats: 1000000n,
},
{
outputScript:
'76a9144e532257c01b310b3b5c1fd947c79a72addf852388ac',
spentBy: {
txid: '2bbcbf5e5e8c753991a37402f4ae60e49a0927c20927dba32862cf9c4af87f25',
outIdx: 0,
},
sats: 4364651n,
},
],
lockTime: 0,
timeFirstSeen: 1710787899,
size: 2146,
isCoinbase: false,
tokenEntries: [],
tokenFailedParsings: [],
tokenStatus: 'TOKEN_STATUS_NON_TOKEN',
block: {
height: 836452,
hash: '000000000000000010aa8982051dceef402d15f18adf260492e0829cc715b29b',
timestamp: 1710789519,
},
parsed: {
xecTxType: 'Received',
satoshisSent: 1000000,
stackArray: [],
recipients: [
'ecash:qp89xgjhcqdnzzemts0aj378nfe2mhu9yvxj9nhgg6',
],
},
},
],
},
mnemonic: 'away away away away away away away away away away away away',
paths: new Map([
[
1899,
{
address: 'ecash:qqq9f9z3uhpzkxrgdjkd7dxuuey7tmpmugpmnw0kue',
hash: '00549451e5c22b18686cacdf34dce649e5ec3be2',
// Same as Transaction Fixtures in App/fixtures/mocks
wif: 'KywWPgaLDwvW1tWUtUvs13jgqaaWMoNANLVYoKcK9Ddbpnch7Cmw',
sk: fromHex(
'512d34d3b8f4d269219fd087c80e22b0212769227226dd6b23966cf0aa2f167f',
),
pk: fromHex(
'031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02d',
),
},
],
]),
name: 'Token Test',
};
// SLP 1 Fixed
export const slp1FixedMocks = {
tokenId: '20a0b9337a78603c6681ed2bc541593375535dcd9979196620ce71f233f2f6f8',
token: {
tokenId:
'20a0b9337a78603c6681ed2bc541593375535dcd9979196620ce71f233f2f6f8',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
timeFirstSeen: 0,
genesisInfo: {
tokenTicker: 'VSP',
tokenName: 'Vespene Gas',
url: 'https://simple.wikipedia.org/wiki/StarCraft#Gameplay',
decimals: 9,
hash: '',
},
block: {
height: 763087,
hash: '0000000000000000015abcebc15e74036598855a9fdd976868ad99bb23b87a89',
timestamp: 1666631359,
},
},
tx: {
txid: '20a0b9337a78603c6681ed2bc541593375535dcd9979196620ce71f233f2f6f8',
version: 2,
inputs: [
{
prevOut: {
txid: 'ac8be4ed7289014eb615cf8aa122cbd94283fe566142052d7ac8c6fab241fb51',
outIdx: 2,
},
inputScript:
'46304302200db47adc26bbb4ae4584ae455c5f078a4d2f624e898fab3159c74473677bc8b2021f371ea6c9acd051c96eaba2b229d06a0247dad2acf6cf0694792d22280dfe8e412103771805b54969a9bea4e3eb14a82851c67592156ddb5e52d3d53677d14a40fba6',
sequenceNo: 4294967295,
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
sats: 1253n,
},
],
outputs: [
{
outputScript:
'6a04534c500001010747454e45534953035653500b56657370656e65204761733468747470733a2f2f73696d706c652e77696b6970656469612e6f72672f77696b692f5374617243726166742347616d65706c61794c0001094c000829a2241af62c0000',
sats: 0n,
},
{
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
token: {
tokenId:
'20a0b9337a78603c6681ed2bc541593375535dcd9979196620ce71f233f2f6f8',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
entryIdx: 0,
atoms: 3000000000000000000n,
},
spentBy: {
txid: 'fc1ada187e9f5da7616f481c79cd0fa3aafa3d4094288db6806e7508f76b5fcd',
outIdx: 1,
},
sats: 546n,
},
],
lockTime: 0,
timeFirstSeen: 0,
size: 299,
isCoinbase: false,
tokenEntries: [
{
tokenId:
'20a0b9337a78603c6681ed2bc541593375535dcd9979196620ce71f233f2f6f8',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
txType: 'GENESIS',
isInvalid: false,
burnSummary: '',
failedColorings: [],
burnsMintBatons: false,
actualBurnAtoms: 0n,
intentionalBurnAtoms: 0n,
},
],
tokenFailedParsings: [],
tokenStatus: 'TOKEN_STATUS_NORMAL',
block: {
height: 763087,
hash: '0000000000000000015abcebc15e74036598855a9fdd976868ad99bb23b87a89',
timestamp: 1666631359,
},
},
// Mock a single utxo with the supply you want to test
utxos: [
{
...MOCK_TOKEN_UTXO,
token: {
...MOCK_TOKEN_UTXO.token,
tokenId:
'20a0b9337a78603c6681ed2bc541593375535dcd9979196620ce71f233f2f6f8',
atoms: 2999998798000000000n,
},
},
],
};
export const slp1FixedBear = {
tokenId: '3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109',
token: {
tokenId:
'3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
timeFirstSeen: 0,
genesisInfo: {
tokenTicker: 'BEAR',
tokenName: 'BearNip',
url: 'https://cashtab.com/',
decimals: 0,
hash: '',
},
block: {
height: 782665,
hash: '00000000000000001239831f90580c859ec174316e91961cf0e8cde57c0d3acb',
timestamp: 1678408305,
},
},
tx: {
txid: '3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109',
version: 2,
inputs: [
{
prevOut: {
txid: '0e737a2f6373649341b406334341202a5ddbbdb389c55da40570b641dc23d036',
outIdx: 1,
},
inputScript:
'473044022055444db90f98b462ca29a6f51981da4015623ddc34dc1f575852426ccb785f0402206e786d4056be781ca1720a0a915b040e0a9e8716b8e4d30b0779852c191fdeb3412103771805b54969a9bea4e3eb14a82851c67592156ddb5e52d3d53677d14a40fba6',
sequenceNo: 4294967294,
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
sats: 6231556n,
},
],
outputs: [
{
outputScript:
'6a04534c500001010747454e45534953044245415207426561724e69701468747470733a2f2f636173687461622e636f6d2f4c0001004c0008000000000000115c',
sats: 0n,
},
{
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
token: {
tokenId:
'3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
entryIdx: 0,
atoms: 4444n,
},
spentBy: {
txid: '9e7f91826cfd3adf9867c1b3d102594eff4743825fad9883c35d26fb3bdc1693',
outIdx: 1,
},
sats: 546n,
},
{
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
spentBy: {
txid: '27a2471afab33d82b9404df12e1fa242488a9439a68e540dcf8f811ef39c11cf',
outIdx: 0,
},
sats: 6230555n,
},
],
lockTime: 0,
timeFirstSeen: 0,
size: 299,
isCoinbase: false,
tokenEntries: [
{
tokenId:
'3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
txType: 'GENESIS',
isInvalid: false,
burnSummary: '',
failedColorings: [],
burnsMintBatons: false,
actualBurnAtoms: 0n,
intentionalBurnAtoms: 0n,
},
],
tokenFailedParsings: [],
tokenStatus: 'TOKEN_STATUS_NORMAL',
block: {
height: 782665,
hash: '00000000000000001239831f90580c859ec174316e91961cf0e8cde57c0d3acb',
timestamp: 1678408305,
},
},
// Mock a single utxo with the supply you want to test
utxos: [
{
...MOCK_TOKEN_UTXO,
token: {
...MOCK_TOKEN_UTXO.token,
tokenId:
'3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109',
atoms: 4441n,
},
},
],
};
export const slp1FixedCachet = {
tokenId: 'aed861a31b96934b88c0252ede135cb9700d7649f69191235087a3030e553cb1',
token: {
tokenId:
'aed861a31b96934b88c0252ede135cb9700d7649f69191235087a3030e553cb1',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
timeFirstSeen: 1711776546,
genesisInfo: {
tokenTicker: 'CACHET',
tokenName: 'Cachet',
url: 'https://cashtab.com/',
decimals: 2,
hash: '',
},
block: {
height: 838192,
hash: '0000000000000000132232769161d6211f7e6e20cf63b26e5148890aacd26962',
timestamp: 1711779364,
},
},
tx: {
txid: 'aed861a31b96934b88c0252ede135cb9700d7649f69191235087a3030e553cb1',
version: 2,
inputs: [
{
prevOut: {
txid: 'dd3eafefb1941fd67d8a29b7dd057ac48ec11712887e2ae7c008a7c72d0cd9fc',
outIdx: 0,
},
inputScript:
'4830450221009bb1fb7d49d9ac64b79ea041be2e2efa5a8709a470930b04c27c9fc46ed1906302206a0a9daf5e64e934a3467951dd2da37405969d4434d4006ddfea3ed39ff4e0ae412103771805b54969a9bea4e3eb14a82851c67592156ddb5e52d3d53677d14a40fba6',
sequenceNo: 4294967295,
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
sats: 2200n,
},
],
outputs: [
{
outputScript:
'6a04534c500001010747454e4553495306434143484554064361636865741468747470733a2f2f636173687461622e636f6d2f4c0001020102080000000000989680',
sats: 0n,
},
{
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
token: {
tokenId:
'aed861a31b96934b88c0252ede135cb9700d7649f69191235087a3030e553cb1',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
entryIdx: 0,
atoms: 10000000n,
},
sats: 546n,
},
{
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
token: {
tokenId:
'aed861a31b96934b88c0252ede135cb9700d7649f69191235087a3030e553cb1',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: true,
entryIdx: 0,
atoms: 0n,
},
spentBy: {
txid: '4b5b2a0f8bcacf6bccc7ef49e7f82a894c9c599589450eaeaf423e0f5926c38e',
outIdx: 0,
},
sats: 546n,
},
{
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
spentBy: {
txid: '343356b9d4acd59065f90b1ace647c1f714f1fd4c411e2cf77081a0246c7416d',
outIdx: 3,
},
sats: 773n,
},
],
lockTime: 0,
timeFirstSeen: 1711776546,
size: 335,
isCoinbase: false,
tokenEntries: [
{
tokenId:
'aed861a31b96934b88c0252ede135cb9700d7649f69191235087a3030e553cb1',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
txType: 'GENESIS',
isInvalid: false,
burnSummary: '',
failedColorings: [],
burnsMintBatons: false,
actualBurnAtoms: 0n,
intentionalBurnAtoms: 0n,
},
],
tokenFailedParsings: [],
tokenStatus: 'TOKEN_STATUS_NORMAL',
block: {
height: 838192,
hash: '0000000000000000132232769161d6211f7e6e20cf63b26e5148890aacd26962',
timestamp: 1711779364,
},
},
utxos: [
{
...MOCK_TOKEN_UTXO,
token: {
...MOCK_TOKEN_UTXO.token,
tokenId:
'20a0b9337a78603c6681ed2bc541593375535dcd9979196620ce71f233f2f6f8',
atoms: 2999998798000000000n,
},
},
],
};
// SLP 1 variable with mint baton
export const slp1VarMocks = {
tokenId: '182679afdec6d93fe7243f3ec5d032838cf9f268cf9656c4959a227617d076ef',
token: {
tokenId:
'182679afdec6d93fe7243f3ec5d032838cf9f268cf9656c4959a227617d076ef',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
timeFirstSeen: 1713184114,
genesisInfo: {
tokenTicker: 'MSB',
tokenName: 'Mint Send Burn',
url: 'https://cashtab.com/',
decimals: 9,
hash: '',
},
},
tx: {
txid: '182679afdec6d93fe7243f3ec5d032838cf9f268cf9656c4959a227617d076ef',
version: 2,
inputs: [
{
prevOut: {
txid: '6fb5525bf35ec6eb6a0608c8a3624891801cdf4c1079fc78462a24230bad27e2',
outIdx: 2,
},
inputScript:
'4730440220350ea45bed94988b896e3b4fcf111cc433a3e851bf2bb43c84ef5a0a51f70adf02204fc1007f3840ab3ed278a3add81411249575caeb4b7416de1aed695b02bca2f94121020a725e4b7326b4af2b468ab95982d1393d062811a8f8204bf383bf3373dbc54f',
sequenceNo: 4294967295,
outputScript:
'76a91400549451e5c22b18686cacdf34dce649e5ec3be288ac',
sats: 998857n,
},
],
outputs: [
{
outputScript:
'6a04534c500001010747454e45534953034d53420e4d696e742053656e64204275726e1468747470733a2f2f636173687461622e636f6d2f4c000109010208ffffffffffffffff',
sats: 0n,
},
{
outputScript:
'76a91400549451e5c22b18686cacdf34dce649e5ec3be288ac',
token: {
tokenId:
'182679afdec6d93fe7243f3ec5d032838cf9f268cf9656c4959a227617d076ef',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
entryIdx: 0,
atoms: 18446744073709551615n,
},
sats: 546n,
},
{
outputScript:
'76a91400549451e5c22b18686cacdf34dce649e5ec3be288ac',
token: {
tokenId:
'182679afdec6d93fe7243f3ec5d032838cf9f268cf9656c4959a227617d076ef',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: true,
entryIdx: 0,
atoms: 0n,
},
sats: 546n,
},
{
outputScript:
'76a91400549451e5c22b18686cacdf34dce649e5ec3be288ac',
sats: 997081n,
},
],
lockTime: 0,
timeFirstSeen: 1713184114,
size: 339,
isCoinbase: false,
tokenEntries: [
{
tokenId:
'182679afdec6d93fe7243f3ec5d032838cf9f268cf9656c4959a227617d076ef',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
txType: 'GENESIS',
isInvalid: false,
burnSummary: '',
failedColorings: [],
burnsMintBatons: false,
actualBurnAtoms: 0n,
intentionalBurnAtoms: 0n,
},
],
tokenFailedParsings: [],
tokenStatus: 'TOKEN_STATUS_NORMAL',
},
utxos: [
{
...MOCK_TOKEN_UTXO,
token: {
...MOCK_TOKEN_UTXO.token,
tokenId:
'182679afdec6d93fe7243f3ec5d032838cf9f268cf9656c4959a227617d076ef',
atoms: 18446744073709551615n,
},
},
// Note that Cashtab will mark a token as fixed supply if there are no mint batons in its utxos by tokenId
{
...MOCK_TOKEN_UTXO,
token: {
...MOCK_TOKEN_UTXO.token,
tokenId:
'182679afdec6d93fe7243f3ec5d032838cf9f268cf9656c4959a227617d076ef',
atoms: 0n,
isMintBaton: true,
},
},
],
};
// SLP 1 NFT Parent with no children
export const slp1NftParentMocks = {
tokenId: '0c66493127382882053f3eb6e2e05eccff7f67378ebf5e84660a958656a304cc',
token: {
tokenId:
'0c66493127382882053f3eb6e2e05eccff7f67378ebf5e84660a958656a304cc',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_NFT1_GROUP',
number: 129,
},
timeFirstSeen: 1712860458,
genesisInfo: {
tokenTicker: 'ABC',
tokenName: 'ABC Blocks',
url: 'https://bitcoinabc.org',
decimals: 0,
hash: '0a40beb8dbac1ff8938733a383d265fde5777da779135cab32e1720bd222c42c',
},
block: {
height: 840011,
hash: '00000000000000000a4385f4dc84c75f935c7b9d3d53964bb766a0fc19b7d837',
timestamp: 1712861037,
},
},
tx: {
txid: '0c66493127382882053f3eb6e2e05eccff7f67378ebf5e84660a958656a304cc',
version: 2,
inputs: [
{
prevOut: {
txid: '7a5c50cf24b732e13d54229b9c6842c2b53856d7902ecd94474ba60c0591fef7',
outIdx: 1,
},
inputScript:
'483045022100b72455dac63bfd2ba70be566d217b6ae734775b20410b5b524784aef6e07d799022023b960eab42d459b532b2661018a2639803f365a5115c1ca2a09149a285bfe3b4121021d7fd45a888292cf3a022a95acdbcf82f9f2d5bbbfbdbc740acd558a9f25b5d0',
sequenceNo: 4294967295,
outputScript:
'76a9140d94ba179ec21c42417a71a77873b3619363d8ea88ac',
sats: 2200n,
},
],
outputs: [
{
outputScript:
'6a04534c500001810747454e45534953034142430a41424320426c6f636b731668747470733a2f2f626974636f696e6162632e6f7267200a40beb8dbac1ff8938733a383d265fde5777da779135cab32e1720bd222c42c01000102080000000000000064',
sats: 0n,
},
{
outputScript:
'76a9140d94ba179ec21c42417a71a77873b3619363d8ea88ac',
token: {
tokenId:
'0c66493127382882053f3eb6e2e05eccff7f67378ebf5e84660a958656a304cc',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_NFT1_GROUP',
number: 129,
},
isMintBaton: false,
entryIdx: 0,
atoms: 100n,
},
sats: 546n,
},
{
outputScript:
'76a9140d94ba179ec21c42417a71a77873b3619363d8ea88ac',
token: {
tokenId:
'0c66493127382882053f3eb6e2e05eccff7f67378ebf5e84660a958656a304cc',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_NFT1_GROUP',
number: 129,
},
isMintBaton: true,
entryIdx: 0,
atoms: 0n,
},
sats: 546n,
},
],
lockTime: 0,
timeFirstSeen: 1712860458,
size: 335,
isCoinbase: false,
tokenEntries: [
{
tokenId:
'0c66493127382882053f3eb6e2e05eccff7f67378ebf5e84660a958656a304cc',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_NFT1_GROUP',
number: 129,
},
txType: 'GENESIS',
isInvalid: false,
burnSummary: '',
failedColorings: [],
burnsMintBatons: false,
actualBurnAtoms: 0n,
intentionalBurnAtoms: 0n,
},
],
tokenFailedParsings: [],
tokenStatus: 'TOKEN_STATUS_NORMAL',
block: {
height: 840011,
hash: '00000000000000000a4385f4dc84c75f935c7b9d3d53964bb766a0fc19b7d837',
timestamp: 1712861037,
},
},
utxos: [
{
outpoint: {
txid: '0c66493127382882053f3eb6e2e05eccff7f67378ebf5e84660a958656a304cc',
outIdx: 1,
},
blockHeight: 840011,
isCoinbase: false,
script: '76a9140d94ba179ec21c42417a71a77873b3619363d8ea88ac',
sats: 546n,
isFinal: true,
token: {
tokenId:
'0c66493127382882053f3eb6e2e05eccff7f67378ebf5e84660a958656a304cc',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_NFT1_GROUP',
number: 129,
},
atoms: 100n,
isMintBaton: false,
},
},
{
outpoint: {
txid: '0c66493127382882053f3eb6e2e05eccff7f67378ebf5e84660a958656a304cc',
outIdx: 2,
},
blockHeight: 840011,
isCoinbase: false,
script: '76a9140d94ba179ec21c42417a71a77873b3619363d8ea88ac',
sats: 546n,
isFinal: true,
token: {
tokenId:
'0c66493127382882053f3eb6e2e05eccff7f67378ebf5e84660a958656a304cc',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_NFT1_GROUP',
number: 129,
},
atoms: 0n,
isMintBaton: true,
},
},
],
};
// SLP1 NFT Parent with children
export const slp1NftParentWithChildrenMocks = {
tokenId: '12a049d0da64652b4e8db68b6052ad0cda43cf0269190fe81040bed65ca926a3',
token: {
tokenId:
'12a049d0da64652b4e8db68b6052ad0cda43cf0269190fe81040bed65ca926a3',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_NFT1_GROUP',
number: 129,
},
timeFirstSeen: 1713551159,
genesisInfo: {
tokenTicker: '4HC',
tokenName: 'The Four Half-Coins of Jin-qua',
url: 'en.wikipedia.org/wiki/Tai-Pan_(novel)',
decimals: 0,
hash: '2a6585a404fae1c33a43322b723b9dbd926cb07244ae9bea888add8f471511e0',
},
block: {
height: 840791,
hash: '00000000000000000be1576bcb0bf1c035bba940d5c696d7bb8a0d53c16076c5',
timestamp: 1713551526,
},
},
tx: {
txid: '12a049d0da64652b4e8db68b6052ad0cda43cf0269190fe81040bed65ca926a3',
version: 2,
inputs: [
{
prevOut: {
txid: '3dff51c3a8a78dcd56ef77dcf041aa5167e719ebd6d8c4f6cacb6e06d0b851f4',
outIdx: 3,
},
inputScript:
'483045022100b8fdd47dd19070801a6e5ef306463fa0b21e88405fcb381a7983f13b268128f102202434a3ca71f00b9d8a98c170679cd90cf0b81c9c416c8b24e957adfb9c6e3ec3412103771805b54969a9bea4e3eb14a82851c67592156ddb5e52d3d53677d14a40fba6',
sequenceNo: 4294967295,
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
sats: 32773546n,
},
],
outputs: [
{
outputScript:
'6a04534c500001810747454e45534953033448431e54686520466f75722048616c662d436f696e73206f66204a696e2d71756125656e2e77696b6970656469612e6f72672f77696b692f5461692d50616e5f286e6f76656c29202a6585a404fae1c33a43322b723b9dbd926cb07244ae9bea888add8f471511e001004c00080000000000000004',
sats: 0n,
},
{
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
token: {
tokenId:
'12a049d0da64652b4e8db68b6052ad0cda43cf0269190fe81040bed65ca926a3',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_NFT1_GROUP',
number: 129,
},
isMintBaton: false,
entryIdx: 0,
atoms: 4n,
},
spentBy: {
txid: 'faaba128601942a858abcce56d0da002c1f1d95e8c49ba4105c3d08aa76959d8',
outIdx: 0,
},
sats: 546n,
},
{
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
spentBy: {
txid: '6ee862c41f8cf37bfd30b7a2e5ddf6bbad60b87753c6b810dd76527d97c10de4',
outIdx: 1,
},
sats: 32772256n,
},
],
lockTime: 0,
timeFirstSeen: 1713551159,
size: 370,
isCoinbase: false,
tokenEntries: [
{
tokenId:
'12a049d0da64652b4e8db68b6052ad0cda43cf0269190fe81040bed65ca926a3',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_NFT1_GROUP',
number: 129,
},
txType: 'GENESIS',
isInvalid: false,
burnSummary: '',
failedColorings: [],
burnsMintBatons: false,
actualBurnAtoms: 0n,
intentionalBurnAtoms: 0n,
},
],
tokenFailedParsings: [],
tokenStatus: 'TOKEN_STATUS_NORMAL',
block: {
height: 840791,
hash: '00000000000000000be1576bcb0bf1c035bba940d5c696d7bb8a0d53c16076c5',
timestamp: 1713551526,
},
},
utxos: [
// NFT Mint Input
{
outpoint: {
txid: 'faaba128601942a858abcce56d0da002c1f1d95e8c49ba4105c3d08aa76959d8',
outIdx: 4,
},
blockHeight: 841414,
isCoinbase: false,
sats: 546n,
isFinal: true,
token: {
tokenId:
'12a049d0da64652b4e8db68b6052ad0cda43cf0269190fe81040bed65ca926a3',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_NFT1_GROUP',
number: 129,
},
atoms: 1n,
isMintBaton: false,
},
path: 1899,
},
],
};
// SLP 1 NFT Child
export const slp1NftChildMocks = {
tokenId: '5d9bff67b99e3f93c245a2d832ae40b67f39b79e5cf1daefe97fe6a8a2228326',
token: {
tokenId:
'5d9bff67b99e3f93c245a2d832ae40b67f39b79e5cf1daefe97fe6a8a2228326',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_NFT1_CHILD',
number: 65,
},
timeFirstSeen: 1713910791,
genesisInfo: {
tokenTicker: 'GC',
tokenName: 'Gordon Chen',
url: 'https://en.wikipedia.org/wiki/Tai-Pan_(novel)',
decimals: 0,
hash: '8247001da3bf5680011e26628228761b994a9e0a4ba3f1fdd826ddbf044e5d72',
},
block: {
height: 841509,
hash: '000000000000000003f0e8a3f0a4de0689311c5708d26b25851bb24a44027753',
timestamp: 1713913313,
},
},
tx: {
txid: '5d9bff67b99e3f93c245a2d832ae40b67f39b79e5cf1daefe97fe6a8a2228326',
version: 2,
inputs: [
{
prevOut: {
txid: 'faaba128601942a858abcce56d0da002c1f1d95e8c49ba4105c3d08aa76959d8',
outIdx: 3,
},
inputScript:
'483045022100e394332d19812c6b78ac39484dd755473348cc11920ceaea00c9185dc36cac9302203f04fbb661cd9137d5536667f03f89f2096b487a95b7a9eddbf2a33c7fb12d93412103771805b54969a9bea4e3eb14a82851c67592156ddb5e52d3d53677d14a40fba6',
sequenceNo: 4294967295,
token: {
tokenId:
'12a049d0da64652b4e8db68b6052ad0cda43cf0269190fe81040bed65ca926a3',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_NFT1_GROUP',
number: 129,
},
isMintBaton: false,
entryIdx: 1,
atoms: 1n,
},
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
sats: 546n,
},
{
prevOut: {
txid: '5478bbf6ebe4a0f0ac05994608b4b980264ba1225259f7f6c0f573e998be98e6',
outIdx: 2,
},
inputScript:
'47304402200dd2615f8545e57157d0cba016db42d4e25688a265155c7c332cf049eec4300202206cc96ee2f25141302f5e2aaade959ef9d972739f054585cf5dedb6bfec2f5928412103771805b54969a9bea4e3eb14a82851c67592156ddb5e52d3d53677d14a40fba6',
sequenceNo: 4294967295,
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
sats: 32767046n,
},
],
outputs: [
{
outputScript:
'6a04534c500001410747454e455349530247430b476f72646f6e204368656e2d68747470733a2f2f656e2e77696b6970656469612e6f72672f77696b692f5461692d50616e5f286e6f76656c29208247001da3bf5680011e26628228761b994a9e0a4ba3f1fdd826ddbf044e5d7201004c00080000000000000001',
sats: 0n,
},
{
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
token: {
tokenId:
'5d9bff67b99e3f93c245a2d832ae40b67f39b79e5cf1daefe97fe6a8a2228326',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_NFT1_CHILD',
number: 65,
},
isMintBaton: false,
entryIdx: 0,
atoms: 1n,
},
sats: 546n,
},
{
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
sats: 32766028n,
},
],
lockTime: 0,
timeFirstSeen: 1713910791,
size: 505,
isCoinbase: false,
tokenEntries: [
{
tokenId:
'5d9bff67b99e3f93c245a2d832ae40b67f39b79e5cf1daefe97fe6a8a2228326',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_NFT1_CHILD',
number: 65,
},
txType: 'GENESIS',
isInvalid: false,
burnSummary: '',
failedColorings: [],
burnsMintBatons: false,
groupTokenId:
'12a049d0da64652b4e8db68b6052ad0cda43cf0269190fe81040bed65ca926a3',
actualBurnAtoms: 0n,
intentionalBurnAtoms: 0n,
},
{
tokenId:
'12a049d0da64652b4e8db68b6052ad0cda43cf0269190fe81040bed65ca926a3',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_NFT1_GROUP',
number: 129,
},
txType: 'NONE',
isInvalid: false,
burnSummary: '',
failedColorings: [],
burnsMintBatons: false,
actualBurnAtoms: 0n,
intentionalBurnAtoms: 0n,
},
],
tokenFailedParsings: [],
tokenStatus: 'TOKEN_STATUS_NORMAL',
block: {
height: 841509,
hash: '000000000000000003f0e8a3f0a4de0689311c5708d26b25851bb24a44027753',
timestamp: 1713913313,
},
},
utxos: [
{
outpoint: {
txid: '5d9bff67b99e3f93c245a2d832ae40b67f39b79e5cf1daefe97fe6a8a2228326',
outIdx: 1,
},
blockHeight: 841509,
isCoinbase: false,
sats: 546n,
isFinal: true,
token: {
tokenId:
'5d9bff67b99e3f93c245a2d832ae40b67f39b79e5cf1daefe97fe6a8a2228326',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_NFT1_CHILD',
number: 65,
},
atoms: 1n,
isMintBaton: false,
},
path: 1899,
},
],
};
// ALP
// 7cd7cd7c54167d306e770f972b564584c44cb412ee45839b4b97bb6e724c8849
export const alpMocks = {
tokenId: '7cd7cd7c54167d306e770f972b564584c44cb412ee45839b4b97bb6e724c8849',
token: {
tokenId:
'7cd7cd7c54167d306e770f972b564584c44cb412ee45839b4b97bb6e724c8849',
tokenType: {
protocol: 'ALP',
type: 'ALP_TOKEN_TYPE_STANDARD',
number: 0,
},
timeFirstSeen: 0,
genesisInfo: {
tokenTicker: 'tCRD',
tokenName: 'Test CRD',
url: 'https://crd.network/tcrd',
decimals: 4,
data: {
0: 0,
1: 0,
2: 0,
3: 0,
4: 0,
5: 0,
6: 0,
7: 0,
8: 0,
},
authPubkey:
'03d2dc0cea5c81593f1bfcd42763a21f5c85e7e8d053cdf990f8b383b892b72420',
},
block: {
height: 821187,
hash: '00000000000000002998aedef7c4fc2c52281e318461d66c3c9fe10151449448',
timestamp: 1701716369,
},
},
tx: {
txid: '7cd7cd7c54167d306e770f972b564584c44cb412ee45839b4b97bb6e724c8849',
version: 1,
inputs: [
{
prevOut: {
txid: '29a4f002cbfecb52f958f94183d2c8669fa1bd8ad46c9443bb02c6d5cc474a5f',
outIdx: 0,
},
inputScript:
'41a8814adcad71e619e25e6a175486c29896c1edc35fecc545280412374b1e6fe60ace588ecaf51db2bb1b3572d550796f7bc1bd4a3359c43100954277f56aec5241077de390000047182475210207447ce9b9e17ef1d8312ab3145a241f4d6f1a35eb4f381f324aa03e58913931ac',
sequenceNo: 4294967295,
outputScript: 'a914c5a7353c6e99facb5c254cc28e882a3feac12daa87',
sats: 4000n,
},
],
outputs: [
{
outputScript:
'6a504c63534c5032000747454e4553495304744352440854657374204352441868747470733a2f2f6372642e6e6574776f726b2f74637264090000000000000000002103d2dc0cea5c81593f1bfcd42763a21f5c85e7e8d053cdf990f8b383b892b72420040001',
sats: 0n,
},
{
outputScript:
'76a91459ca25ea25f4f89a79b55c1c775ae515eb25b1fe88ac',
token: {
tokenId:
'7cd7cd7c54167d306e770f972b564584c44cb412ee45839b4b97bb6e724c8849',
tokenType: {
protocol: 'ALP',
type: 'ALP_TOKEN_TYPE_STANDARD',
number: 0,
},
isMintBaton: true,
entryIdx: 0,
atoms: 0n,
},
spentBy: {
txid: '81ced8cfd5c69164a94cf50758f95750d3a589bfdd2cec6ee403f205cb29b5c3',
outIdx: 0,
},
sats: 546n,
},
],
lockTime: 777777,
timeFirstSeen: 0,
size: 308,
isCoinbase: false,
tokenEntries: [
{
tokenId:
'7cd7cd7c54167d306e770f972b564584c44cb412ee45839b4b97bb6e724c8849',
tokenType: {
protocol: 'ALP',
type: 'ALP_TOKEN_TYPE_STANDARD',
number: 0,
},
txType: 'GENESIS',
isInvalid: false,
burnSummary: '',
failedColorings: [],
burnsMintBatons: false,
actualBurnAtoms: 0n,
intentionalBurnAtoms: 0n,
},
],
tokenFailedParsings: [],
tokenStatus: 'TOKEN_STATUS_NORMAL',
block: {
height: 821187,
hash: '00000000000000002998aedef7c4fc2c52281e318461d66c3c9fe10151449448',
timestamp: 1701716369,
},
},
utxos: [
{
...MOCK_TOKEN_UTXO,
token: {
...MOCK_TOKEN_UTXO.token,
tokenId:
'7cd7cd7c54167d306e770f972b564584c44cb412ee45839b4b97bb6e724c8849',
atoms: 1113670000n,
},
},
// Note that Cashtab will mark a token as fixed supply if there are no mint batons in its utxos by tokenId
{
...MOCK_TOKEN_UTXO,
token: {
...MOCK_TOKEN_UTXO.token,
tokenId:
'7cd7cd7c54167d306e770f972b564584c44cb412ee45839b4b97bb6e724c8849',
atoms: 0n,
isMintBaton: true,
},
},
],
};
+export const slpMintVaultMocks = {
+ tokenId: '8ecb9c25978f429472f3e9f9c048222f6ac9977e7d1313781f0e9ac1bdba3251',
+ token: {
+ tokenId:
+ '8ecb9c25978f429472f3e9f9c048222f6ac9977e7d1313781f0e9ac1bdba3251',
+ tokenType: {
+ protocol: 'SLP',
+ type: 'SLP_TOKEN_TYPE_MINT_VAULT',
+ number: 2,
+ },
+ timeFirstSeen: 1747417871,
+ genesisInfo: {
+ tokenTicker: 'MVTT β',
+ tokenName: 'Mint Vault Test Token Beta',
+ url: 'cashtab.com',
+ decimals: 0,
+ mintVaultScripthash: '3630f1e9469f7c3b8a989dbc74bf982ed11e25b4',
+ hash: '',
+ },
+ block: {
+ height: 897132,
+ hash: '00000000000000000384f5e6081f2a0ed3581a315a0d280a006b6c5c30f0f3ca',
+ timestamp: 1747418044,
+ },
+ },
+ tx: {
+ txid: '8ecb9c25978f429472f3e9f9c048222f6ac9977e7d1313781f0e9ac1bdba3251',
+ version: 2,
+ inputs: [
+ {
+ prevOut: {
+ txid: '36acca8612c20ec7aca2b72090db9f96599f38d02c9b839046cdd3ce66324917',
+ outIdx: 3,
+ },
+ inputScript:
+ '4156caad48179e4db51623230205c3d28bc1074589ea79ab5af30c8ee72353f5cbc02c8e7d747767acd2d06fd881d30e56f984ee2f9f6c83bea943ab17c48fbd5d412103e2932c15fe3a40d1eca2d7d65935ac5b550b07b5829a706085c259a453bd7f37',
+ sats: 12959541n,
+ sequenceNo: 4294967295,
+ outputScript:
+ '76a9143630f1e9469f7c3b8a989dbc74bf982ed11e25b488ac',
+ },
+ ],
+ outputs: [
+ {
+ sats: 0n,
+ outputScript:
+ '6a04534c500001020747454e45534953074d56545420ceb21a4d696e74205661756c74205465737420546f6b656e20426574610b636173687461622e636f6d4c000100143630f1e9469f7c3b8a989dbc74bf982ed11e25b4080000000000989680',
+ },
+ {
+ sats: 546n,
+ outputScript:
+ '76a9143630f1e9469f7c3b8a989dbc74bf982ed11e25b488ac',
+ token: {
+ tokenId:
+ '8ecb9c25978f429472f3e9f9c048222f6ac9977e7d1313781f0e9ac1bdba3251',
+ tokenType: {
+ protocol: 'SLP',
+ type: 'SLP_TOKEN_TYPE_MINT_VAULT',
+ number: 2,
+ },
+ atoms: 10000000n,
+ isMintBaton: false,
+ entryIdx: 0,
+ },
+ spentBy: {
+ txid: '0239fede6e9bde63403836ebb57c12ce6b789488d145dd0c81733d212bec1d8f',
+ outIdx: 0,
+ },
+ },
+ {
+ sats: 12958670n,
+ outputScript:
+ '76a9143630f1e9469f7c3b8a989dbc74bf982ed11e25b488ac',
+ },
+ ],
+ lockTime: 0,
+ timeFirstSeen: 1747417871,
+ size: 325,
+ isCoinbase: false,
+ tokenEntries: [
+ {
+ tokenId:
+ '8ecb9c25978f429472f3e9f9c048222f6ac9977e7d1313781f0e9ac1bdba3251',
+ tokenType: {
+ protocol: 'SLP',
+ type: 'SLP_TOKEN_TYPE_MINT_VAULT',
+ number: 2,
+ },
+ txType: 'GENESIS',
+ isInvalid: false,
+ burnSummary: '',
+ failedColorings: [],
+ actualBurnAtoms: 0n,
+ intentionalBurnAtoms: 0n,
+ burnsMintBatons: false,
+ },
+ ],
+ tokenFailedParsings: [],
+ tokenStatus: 'TOKEN_STATUS_NORMAL',
+ isFinal: true,
+ block: {
+ height: 897132,
+ hash: '00000000000000000384f5e6081f2a0ed3581a315a0d280a006b6c5c30f0f3ca',
+ timestamp: 1747418044,
+ },
+ },
+ utxos: [
+ {
+ ...MOCK_TOKEN_UTXO,
+ token: {
+ ...MOCK_TOKEN_UTXO.token,
+ tokenId:
+ '8ecb9c25978f429472f3e9f9c048222f6ac9977e7d1313781f0e9ac1bdba3251',
+ atoms: 10_000_000n,
+ },
+ },
+ // NB no mint batons for a MINT VAULT token
+ ],
+};
+
// XECX
export const xecxMocks = {
...tokenMockXecx,
token: tokenMockXecx.tokenInfo,
utxos: [
{
...MOCK_TOKEN_UTXO,
token: {
...MOCK_TOKEN_UTXO.token,
tokenId: tokenMockXecx.tokenId,
atoms: 1781404606734n,
},
},
// Include a mint baton as it is variable supply
{
...MOCK_TOKEN_UTXO,
token: {
...MOCK_TOKEN_UTXO.token,
tokenId: tokenMockXecx.tokenId,
atoms: 0n,
isMintBaton: true,
},
},
],
};
// FIRMA
export const firmaMocks = {
...FIRMA,
utxos: [
{
...MOCK_TOKEN_UTXO,
token: {
...MOCK_TOKEN_UTXO.token,
tokenId: FIRMA.tokenId,
atoms: 62500_0000n,
},
},
// Include a mint baton as it is variable supply
{
...MOCK_TOKEN_UTXO,
token: {
...MOCK_TOKEN_UTXO.token,
tokenId: FIRMA.tokenId,
atoms: 0n,
isMintBaton: true,
},
},
],
};
export const supportedTokens = [
slp1FixedMocks,
slp1VarMocks,
slp1NftParentMocks,
slp1NftParentWithChildrenMocks,
slp1NftChildMocks,
alpMocks,
+ slpMintVaultMocks,
xecxMocks,
firmaMocks,
];
/**
* Mocks to test Etokens.js component
*/
export const EtokensWalletMock = {
state: {
balanceSats: 97511071,
slpUtxos: [
{
outpoint: {
txid: '525457276f1b6984170c9b35a8312d4988fce495723eabadd2afcdb3b872b2f1',
outIdx: 1,
},
blockHeight: 680782,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'bf24d955f59351e738ecd905966606a6837e478e1982943d724eab10caad82fd',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 1n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: 'b35c502f388cdfbdd6841b7a73e973149b3c8deca76295a3e4665939e0562796',
outIdx: 2,
},
blockHeight: 681191,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'dd84ca78db4d617221b58eabc6667af8fe2f7eadbfcc213d35be9f1b419beb8d',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 1n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: '7987f68aa70d29ac0e0ac31d74354a8b1cd515c9893f6a5cdc7a3bf505e08b05',
outIdx: 1,
},
blockHeight: 685181,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'50d8292c6255cda7afc6c8566fed3cf42a2794e9619740fe8f4c95431271410e',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 1n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: '9e8483407944d9b75c331ebd6178b0cabc3e8c3b5bb0492b7b2256c8740f655a',
outIdx: 1,
},
blockHeight: 709251,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'f36e1b3d9a2aaf74f132fef3834e9743b945a667a4204e761b85f2e7b65fd41a',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 1000n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: '18c0360f0db5399223cbed48f55c4cee9d9914c8a4a7dedcf9172a36201e9896',
outIdx: 1,
},
blockHeight: 717055,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'e859eeb52e7afca6217fb36784b3b6d3c7386a52f391dd0d00f2ec03a5e8e77b',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 10n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: '3703d46c5c52b0e55f3bd549e14c5617a47f802413f4acf7a27545437eb51a38',
outIdx: 1,
},
blockHeight: 741200,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'8ead21ce4b3b9e7b57607b97b65b5013496dc6e3dfdea162c08ce7265a66ebc8',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 100000000n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: '696265ced15b8fdbacfa1a4f5e779575ff5faaf3ff4ad09e5691b2ed4cf50a84',
outIdx: 2,
},
blockHeight: 758209,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'da9460ce4b1c92b4f6ef4e4a6bc2d05539f49d02b17681389d9ce22b8dca50f0',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 311n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: '28428450ffa24dae7427ba8456fd5465b0da478fd183be845a27fdc0205df45f',
outIdx: 1,
},
blockHeight: 758645,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'54dc2ecd5251f8dfda4c4f15ce05272116b01326076240e2b9cc0104d33b1484',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 4588000000n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: '9a3522b610d153934b951cd6dd91676e5e4f3020531bd8a2e8015193c383029e',
outIdx: 1,
},
blockHeight: 758887,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'54dc2ecd5251f8dfda4c4f15ce05272116b01326076240e2b9cc0104d33b1484',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 229400000n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: 'e3752bd648b2234957690ae408b08fe4eaf95912aa1b9790dc569c99e2a1f37a',
outIdx: 1,
},
blockHeight: 759839,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'54dc2ecd5251f8dfda4c4f15ce05272116b01326076240e2b9cc0104d33b1484',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 229400000n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: 'b808f6a831dcdfda2bd4c5f857f94e1a746a4effeda6a5ad742be6137884a4fb',
outIdx: 1,
},
blockHeight: 760076,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'acba1d7f354c6d4d001eb99d31de174e5cea8a31d692afd6e7eb8474ad541f55',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 123456789n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: '8b8a15bbcc69df215ac45bab882d8f122f3e09405c3ac093d12cd2dd79a141ec',
outIdx: 1,
},
blockHeight: 764737,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'0916e71779c9de7ee125741d3f5ab01f556356dbc86fd327a24f1e9e22ebc917',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 1699n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: '54cd8c25ff891a80f8276150244f052db7649a477eae2600ff17b49104258ee3',
outIdx: 2,
},
blockHeight: 767640,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'df808a41672a0a0ae6475b44f272a107bc9961b90f29dc918d71301f24fe92fb',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 99999998n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: '9d2b752d3d0bb0b6ffeab531b8c3ca0b2af56c116ad13fe7e799b0ab96348b29',
outIdx: 1,
},
blockHeight: 767649,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'ccf5fe5a387559c8ab9efdeb0c0ef1b444e677298cfddf07671245ce3cb3c79f',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 100000000n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: '7c75493d6e710173192ed1892273376ef54b755880cd5cb4aec3e2db309a1cce',
outIdx: 2,
},
blockHeight: 768787,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'7f8889682d57369ed0e32336f8b7e0ffec625a35cca183f4e81fde4e71a538a1',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 1n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: 'a4e4438f1e5d2c680c5ad877a9c2e75b5eea05f7fc8a17e0cdb348f315e7dc49',
outIdx: 1,
},
blockHeight: 769675,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'f36e1b3d9a2aaf74f132fef3834e9743b945a667a4204e761b85f2e7b65fd41a',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 200n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: '019609426f88a9c2f13de980c7f7b2828c868fc6d53b1673421096b701ceae1a',
outIdx: 2,
},
blockHeight: 770363,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'bdb3b4215ca0622e0c4c07655522c376eaa891838a82f0217fa453bb0595a37c',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 9900n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: '48ec9f7a4b7dfd5fbd419a70b748ded04e167778784e65a39c8edeb496b1f1de',
outIdx: 1,
},
blockHeight: 770363,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'157e0cdef5d5c51bdea00eac9ab821d809bb9d03cf98da85833614bedb129be6',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 82n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: '07646eddeaa7c97431f3cf62c7ba4714473f4c7a6611740b9cac5d86c00f9a38',
outIdx: 2,
},
blockHeight: 770387,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'bdb3b4215ca0622e0c4c07655522c376eaa891838a82f0217fa453bb0595a37c',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 9989n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: 'c39cd34c68ccb43cf640dd09f639c1e0b46d47224722ce5f26151ace40c663b3',
outIdx: 2,
},
blockHeight: 772042,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'ccf5fe5a387559c8ab9efdeb0c0ef1b444e677298cfddf07671245ce3cb3c79f',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 42300000000n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: 'd24e98159db1772819a76f1249f7190a9edb9924d0f7c5336b260f68b245a83a',
outIdx: 2,
},
blockHeight: 774343,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'1101bd5d7b6bbc3176fb2b93d08e76ab532b04ff731d71502249e3cb9b6fcb1a',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 999882000000000n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: 'feafd053d4166601d42949a768b9c3e8ee1f27912fc84b6190aeb022fba7fa39',
outIdx: 2,
},
blockHeight: 776118,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'6e24e89b6d5284138c69777527760500b99614631bca7f2a5c38f4648dae9524',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 999999878n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: '886da7de5f0143c8be863962e7345ea615cee30caec7532824641d0fd40cc5f2',
outIdx: 1,
},
blockHeight: 780736,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'4bd147fc5d5ff26249a9299c46b80920c0b81f59a60e05428262160ebee0b0c3',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 2n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: '886da7de5f0143c8be863962e7345ea615cee30caec7532824641d0fd40cc5f2',
outIdx: 2,
},
blockHeight: 780736,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'4bd147fc5d5ff26249a9299c46b80920c0b81f59a60e05428262160ebee0b0c3',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 23n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: 'ce95a91b9d7ddc6efc6273f70d398cb18aeafe99fd75de6301406786d4d8be54',
outIdx: 2,
},
blockHeight: 780736,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'4bd147fc5d5ff26249a9299c46b80920c0b81f59a60e05428262160ebee0b0c3',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 65n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: 'c04ae7f139eb16023a70d1bb39b1ae8745667edb09833e994a5b4d48976a111d',
outIdx: 2,
},
blockHeight: 782774,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'b9877d8f8d2364b983707df905d592f534a3ada18e52aa529a0f72fcc535abf7',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 3n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: 'f2859d3d19e741bb40e9207cc1109db730ca69c458c6c204d14c2ebe7603c966',
outIdx: 2,
},
blockHeight: 783389,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'acba1d7f354c6d4d001eb99d31de174e5cea8a31d692afd6e7eb8474ad541f55',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 123456844n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: 'ff5f864cfe257905e18f1db2dfd7f31b483e0ecdfe9a91391d21dd44a28e1803',
outIdx: 2,
},
blockHeight: 783638,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'4bd147fc5d5ff26249a9299c46b80920c0b81f59a60e05428262160ebee0b0c3',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 995921n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: '70ead4d94c43fe8c5576bb2528fd54380d8356f632ac962b1e03fb287607dfd4',
outIdx: 1,
},
blockHeight: 783693,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'70ead4d94c43fe8c5576bb2528fd54380d8356f632ac962b1e03fb287607dfd4',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 100n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: 'ff9aa6eebcd1331f8684d53b441cfa3060a4ffc403b417d5728de8ab231f5516',
outIdx: 1,
},
blockHeight: 783694,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'ff9aa6eebcd1331f8684d53b441cfa3060a4ffc403b417d5728de8ab231f5516',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 100n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: 'f077f207fc8a8557e5f0ffc6021685ab4b357e9b92d2b5c4192dcb7760ee6e29',
outIdx: 1,
},
blockHeight: 783695,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'f077f207fc8a8557e5f0ffc6021685ab4b357e9b92d2b5c4192dcb7760ee6e29',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 100n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: 'c2c6b5a7b37e983c4e193900fcde2b8139ef4c3db2fd9689c354f6ea65354f15',
outIdx: 2,
},
blockHeight: 784246,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'3adbf501e21c711d20118e003711168eb39f560c01f4c6d6736fa3f3fceaa577',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 999998999n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: '27dee7774fdf4d5a268e498e6d9665bff2251a7049ef71b6d5671f395d8bd694',
outIdx: 1,
},
blockHeight: 784262,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'4bd147fc5d5ff26249a9299c46b80920c0b81f59a60e05428262160ebee0b0c3',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 1n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: '29793cfa3c533063211ad15f0567e6b815aab555aa8356388e2c96561d971644',
outIdx: 2,
},
blockHeight: 784460,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'3de671a7107d3803d78f7f4a4e5c794d0903a8d28d16076445c084943c1e2db8',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 2100n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: 'f6090755d5dcf233c1cf749c1433eabc0fb0722601101e981df67d44219325e6',
outIdx: 2,
},
blockHeight: 787547,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'20a0b9337a78603c6681ed2bc541593375535dcd9979196620ce71f233f2f6f8',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 2998978719999999999n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: 'e4d80b015e75fe2e54b5ef10571ce78c17086f96a7876d466f92d8c2a8c92b64',
outIdx: 2,
},
blockHeight: 792712,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'4db25a4b2f0b57415ce25fab6d9cb3ac2bbb444ff493dc16d0615a11ad06c875',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 999824n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: '6ffcc83e76226bd32821cc6862ce9b363b22594247a4e73ccf3701b0023592b2',
outIdx: 2,
},
blockHeight: 800716,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'98183238638ecb4ddc365056e22de0e8a05448c1e6084bae247fae5a74ad4f48',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 999977636n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: 'fb70df00c07749082756054522d3f08691fd9caccd0e0abf736df23d22845a6e',
outIdx: 2,
},
blockHeight: 800716,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'7443f7c831cdf2b2b04d5f0465ed0bcf348582675b0e4f17906438c232c22f3d',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 5235120528888890n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: '8f6676b602a9f074f10a7561fb7256bbce3b103a119f809a05485e42489d2233',
outIdx: 2,
},
blockHeight: 802851,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'b977630ae1b4a0fe3ab12385fdaaffd974e5bd352f2a817ce135c1ee6005a35d',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 75n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: 'b7f225b4c4e055a35c1e08ce5eea7c1f3cf53c44662d6d95b631504634b1a3d9',
outIdx: 2,
},
blockHeight: 802851,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'b977630ae1b4a0fe3ab12385fdaaffd974e5bd352f2a817ce135c1ee6005a35d',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 652n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: '8a172dd9cd9eda533cdc731449c4d8728ab1924b843e5d5d2eda63535f7473d4',
outIdx: 2,
},
blockHeight: 803616,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'6376cae692cf0302ecdd63234c14cbb2b21cec75ab538335f90254cfb3ed44cc',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 78n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: '1127651ed9d822cd4ba3ff30211d064116575fdb692c1352e59cab841e8caf4d',
outIdx: 2,
},
blockHeight: 803741,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'6376cae692cf0302ecdd63234c14cbb2b21cec75ab538335f90254cfb3ed44cc',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 43n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: 'a490c805218091549b2d802d6f0391c880cacd5145d0c516f62433637e49bd15',
outIdx: 1,
},
blockHeight: 824524,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'7443f7c831cdf2b2b04d5f0465ed0bcf348582675b0e4f17906438c232c22f3d',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 330000000n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: 'f4f21422dbf0ad5fe455994ee4d791a9d2e127fdfb46aa87abc3c250312fbbd0',
outIdx: 2,
},
blockHeight: 824524,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'bd1acc4c986de57af8d6d2a64aecad8c30ee80f37ae9d066d758923732ddc9ba',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 24999698951n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: 'd7c43e4eb6d341ac69b52f89125887b17d00a16872c01a9d47b39fd4e55d50cf',
outIdx: 1,
},
blockHeight: 825739,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'639a8dba34788ff3ebd3977d4ac045825394285ee648bb1d159e1c12b787ff25',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 1000000000n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: '2c791301f75284f8ae86707ab87f24f2394e4b92d81a4f59bed52b56eaf452e3',
outIdx: 1,
},
blockHeight: 825842,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'45f0ff5cae7e89da6b96c26c8c48a959214c5f0e983e78d0925f8956ca8848c6',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 5344445n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: 'a6050bea718f77e7964d140c4bb89cd88a1816eed1633f19d097835d5fa48df5',
outIdx: 1,
},
blockHeight: 832625,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'a6050bea718f77e7964d140c4bb89cd88a1816eed1633f19d097835d5fa48df5',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 1000n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: 'a96f605eaf8b97889a73c5ee0e36597239f7fb17833a28076d2f3ca863f7ccfc',
outIdx: 1,
},
blockHeight: 832788,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'b19b4c83056f6e3dace0e786446a8ccd73f22cfc42c3013808c532ab43490a14',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 10000000000000000000n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: '423e24bf0715cfb80727e5e7a6ff7b9e37cb2f555c537ab06fdc7fd9b3a0ba3a',
outIdx: 1,
},
blockHeight: 833612,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'fb4233e8a568993976ed38a81c2671587c5ad09552dedefa78760deed6ff87aa',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 10000000000n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: '5167318214db9876a4095cae6d1d3b3e7a9af5467ee0e8344715ac12a2a871a9',
outIdx: 1,
},
blockHeight: 834541,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'79c5a1cec698350dd93f645fcae8d6ff3902b7cdc582839dfface3cb0c83d823',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 9899n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: '01d63c4f4cb496829a6743f7b1805d086ea3877a1dd34b3f92ffba2c9c99f896',
outIdx: 1,
},
blockHeight: 835482,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'01d63c4f4cb496829a6743f7b1805d086ea3877a1dd34b3f92ffba2c9c99f896',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 21000000n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: 'f18a297d1f2ab656ca284655704e07cf8ea269739f4d3af64c2dbd18bfe4d8ee',
outIdx: 1,
},
blockHeight: 836041,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'666c4318d1f7fef5f2c698262492c519018d4e9130f95d05f6be9f0fb7149e96',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 94n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: 'f37027d1560c62a845d15025e418bdd1d0b127bf6fcfb83dfd9e872eb66d0d09',
outIdx: 2,
},
blockHeight: 836041,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'b132878bfa81cf1b9e19192045ed4c797b10944cc17ae07da06aed3d7b566cb7',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 4n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: '583f0379a82249f86e1c19fef574ae3a499aa8d4b1980884ddf1c15d8bd50db3',
outIdx: 1,
},
blockHeight: 836456,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'b132878bfa81cf1b9e19192045ed4c797b10944cc17ae07da06aed3d7b566cb7',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 1n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: '9404761d1a01cca11c29eb8ed9ddc63966526d0eaa54f148e8862ab3e884132f',
outIdx: 1,
},
blockHeight: 836820,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'9404761d1a01cca11c29eb8ed9ddc63966526d0eaa54f148e8862ab3e884132f',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 55000000000n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: '0b1f0ecfe27292fb9f7031400d27d42b15ff13950635333c1a2774ba6e7eaa83',
outIdx: 1,
},
blockHeight: 837493,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'16b12bbacdbb8c8a799adbfd782bfff9843c1f9b0be148eaae02a1a7f74f95c4',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 844601876543211n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: '79fae154e5c096321c656e167a71f4c2a043b2eac0af0f89301059c89c2c6b13',
outIdx: 2,
},
blockHeight: 837847,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'cf601c56b58bc05a39a95374a4a865f0a8b56544ea937b30fb46315441717c50',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 7700000000n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: '614efc82ae70823a1aa9d89327cd83c8f554317281afc7f908a35ad3f7167340',
outIdx: 1,
},
blockHeight: 838089,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'18625b25d4b9b9ebf23ee5575484a67ff2477873a253b16081f964b8f9ca7c28',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 1n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: '344c74214af9e66ab760f55a9fbff301ed77803fc4f5d9d2c31720d5805c2927',
outIdx: 2,
},
blockHeight: 838098,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'b8f2a9e767a0be7b80c7e414ef2534586d4da72efddb39a4e70e501ab73375cc',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 8987n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: '255349c31632d43693c3d891b3c537e004f21f2d1ea1b76fdb2f2d6929612556',
outIdx: 1,
},
blockHeight: 838183,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'b40d1f6acdb6ee68d7eca0167fe2753c076bc309b2e3b1af8bff70ca34b945b0',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 4999n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: '3c844ed9f76207027a47dd2170a590a1f8d8a8ff9b797da4f050ad6394adf52a',
outIdx: 1,
},
blockHeight: 838312,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'77ec4036ef8546ac46df6d3a5374e961216f92624627eaeef5d2e1a253df9fc6',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 112n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: '97283f832815016e848612acf8a5d097089ed24bd62d407887b3be1d7aa8960f',
outIdx: 1,
},
blockHeight: 838367,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'97283f832815016e848612acf8a5d097089ed24bd62d407887b3be1d7aa8960f',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 1n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: '97283f832815016e848612acf8a5d097089ed24bd62d407887b3be1d7aa8960f',
outIdx: 2,
},
blockHeight: 838367,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'97283f832815016e848612acf8a5d097089ed24bd62d407887b3be1d7aa8960f',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: true,
atoms: 0n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: 'c4c6565fa28e1d457ba01ee7d30ae2d6eac47d43190845281014ec3c4d848ee7',
outIdx: 1,
},
blockHeight: 839510,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'6a9305a13135625f4b533256e8d2e21a7343005331e1839348a39040f61e09d3',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 33n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: '4e478fca04ffdb207cce82bada5d3e8fb766892d5994fb20764739d57f31da97',
outIdx: 1,
},
blockHeight: 839792,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'1101bd5d7b6bbc3176fb2b93d08e76ab532b04ff731d71502249e3cb9b6fcb1a',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 1000000000n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: '6d177919e62e9efb84b05309079c0c55903838afe9c6dbde69f8ec152bf6bf0e',
outIdx: 1,
},
blockHeight: 839792,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'b39fdb53e21d67fa5fd3a11122f1452f15884047f2b80e8efe633c3b520b7a39',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 1n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: '9e694e7fc3738975ce529ffa15937d6f192716059d32d663815c0d3f3682f1b5',
outIdx: 1,
},
blockHeight: 840030,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'9e694e7fc3738975ce529ffa15937d6f192716059d32d663815c0d3f3682f1b5',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 18446744073709551615n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: 'b0794f985a728aa65997e5606b79081aa20978d8a299da1d2ea709102f03a604',
outIdx: 1,
},
blockHeight: 840030,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'b0794f985a728aa65997e5606b79081aa20978d8a299da1d2ea709102f03a604',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 18446744073709551615n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: 'c3b56aef4744db0a9e21cd06dd3356bcdd7c1ca67fc132040c42b1f8c9c65419',
outIdx: 1,
},
blockHeight: 840030,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'c3b56aef4744db0a9e21cd06dd3356bcdd7c1ca67fc132040c42b1f8c9c65419',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 18446744073709551615n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: '185cc0bdd6272f21ee09d9d5a1a17458af6b3ff968e371341d4b83d81540cdd7',
outIdx: 1,
},
blockHeight: 840237,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 3n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: '4fb3b37c25c8a5cb43f0130435eb33c19b2fdaf4be98b113e580a66ec9340435',
outIdx: 2,
},
blockHeight: 840530,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'aed861a31b96934b88c0252ede135cb9700d7649f69191235087a3030e553cb1',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
atoms: 10010000n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: '7d94a36482f6e8f5c6ed576212761a102ae4d106f06441fb8654e0ea6540f0b0',
outIdx: 2,
},
blockHeight: 840530,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'aed861a31b96934b88c0252ede135cb9700d7649f69191235087a3030e553cb1',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: true,
atoms: 0n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: '1111111111111111111111111111111111111111111111111111111111111111',
outIdx: 1,
},
blockHeight: 840530,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'5a9d91ae2730dffbd0795dd2f8bfda5a6ad905f374158c8df303ca5cc82f8620',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_NFT1_GROUP',
number: 129,
},
isMintBaton: false,
atoms: 1n,
},
path: 1899,
sats: 546n,
},
{
outpoint: {
txid: '1111111111111111111111111111111111111111111111111111111111111111',
outIdx: 1,
},
blockHeight: 840530,
isCoinbase: false,
isFinal: true,
token: {
tokenId:
'e2db39ade16e971afba2087bf6e29a83d7579137900eb73e5d955bdb769204bb',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_NFT1_CHILD',
number: 65,
},
isMintBaton: false,
atoms: 1n,
},
path: 1899,
sats: 546n,
},
],
nonSlpUtxos: [
{
outpoint: {
txid: '4fb3b37c25c8a5cb43f0130435eb33c19b2fdaf4be98b113e580a66ec9340435',
outIdx: 3,
},
blockHeight: 840530,
isCoinbase: false,
sats: 97511071n,
isFinal: true,
path: 1899,
},
],
tokens: new Map([
[
'bf24d955f59351e738ecd905966606a6837e478e1982943d724eab10caad82fd',
'1',
],
[
'dd84ca78db4d617221b58eabc6667af8fe2f7eadbfcc213d35be9f1b419beb8d',
'1',
],
[
'50d8292c6255cda7afc6c8566fed3cf42a2794e9619740fe8f4c95431271410e',
'1',
],
[
'f36e1b3d9a2aaf74f132fef3834e9743b945a667a4204e761b85f2e7b65fd41a',
'1200',
],
[
'e859eeb52e7afca6217fb36784b3b6d3c7386a52f391dd0d00f2ec03a5e8e77b',
'1.0',
],
[
'8ead21ce4b3b9e7b57607b97b65b5013496dc6e3dfdea162c08ce7265a66ebc8',
'1.00000000',
],
[
'da9460ce4b1c92b4f6ef4e4a6bc2d05539f49d02b17681389d9ce22b8dca50f0',
'311',
],
[
'54dc2ecd5251f8dfda4c4f15ce05272116b01326076240e2b9cc0104d33b1484',
'504680.0000',
],
[
'acba1d7f354c6d4d001eb99d31de174e5cea8a31d692afd6e7eb8474ad541f55',
'.246913633',
],
[
'0916e71779c9de7ee125741d3f5ab01f556356dbc86fd327a24f1e9e22ebc917',
'1699',
],
[
'df808a41672a0a0ae6475b44f272a107bc9961b90f29dc918d71301f24fe92fb',
'.99999998',
],
[
'ccf5fe5a387559c8ab9efdeb0c0ef1b444e677298cfddf07671245ce3cb3c79f',
'424.00000000',
],
[
'7f8889682d57369ed0e32336f8b7e0ffec625a35cca183f4e81fde4e71a538a1',
'1',
],
[
'bdb3b4215ca0622e0c4c07655522c376eaa891838a82f0217fa453bb0595a37c',
'19889',
],
[
'157e0cdef5d5c51bdea00eac9ab821d809bb9d03cf98da85833614bedb129be6',
'82',
],
[
'1101bd5d7b6bbc3176fb2b93d08e76ab532b04ff731d71502249e3cb9b6fcb1a',
'999883.000000000',
],
[
'6e24e89b6d5284138c69777527760500b99614631bca7f2a5c38f4648dae9524',
'999999878',
],
[
'4bd147fc5d5ff26249a9299c46b80920c0b81f59a60e05428262160ebee0b0c3',
'996012',
],
[
'b9877d8f8d2364b983707df905d592f534a3ada18e52aa529a0f72fcc535abf7',
'3',
],
[
'70ead4d94c43fe8c5576bb2528fd54380d8356f632ac962b1e03fb287607dfd4',
'100',
],
[
'ff9aa6eebcd1331f8684d53b441cfa3060a4ffc403b417d5728de8ab231f5516',
'100',
],
[
'f077f207fc8a8557e5f0ffc6021685ab4b357e9b92d2b5c4192dcb7760ee6e29',
'100',
],
[
'3adbf501e21c711d20118e003711168eb39f560c01f4c6d6736fa3f3fceaa577',
'999998999',
],
[
'3de671a7107d3803d78f7f4a4e5c794d0903a8d28d16076445c084943c1e2db8',
'21.00',
],
[
'20a0b9337a78603c6681ed2bc541593375535dcd9979196620ce71f233f2f6f8',
'2998978719.999999999',
],
[
'4db25a4b2f0b57415ce25fab6d9cb3ac2bbb444ff493dc16d0615a11ad06c875',
'999824',
],
[
'98183238638ecb4ddc365056e22de0e8a05448c1e6084bae247fae5a74ad4f48',
'999977636',
],
[
'7443f7c831cdf2b2b04d5f0465ed0bcf348582675b0e4f17906438c232c22f3d',
'523512085.8888890',
],
[
'b977630ae1b4a0fe3ab12385fdaaffd974e5bd352f2a817ce135c1ee6005a35d',
'727',
],
[
'6376cae692cf0302ecdd63234c14cbb2b21cec75ab538335f90254cfb3ed44cc',
'121',
],
[
'bd1acc4c986de57af8d6d2a64aecad8c30ee80f37ae9d066d758923732ddc9ba',
'24.999698951',
],
[
'639a8dba34788ff3ebd3977d4ac045825394285ee648bb1d159e1c12b787ff25',
'1.000000000',
],
[
'45f0ff5cae7e89da6b96c26c8c48a959214c5f0e983e78d0925f8956ca8848c6',
'53.44445',
],
[
'a6050bea718f77e7964d140c4bb89cd88a1816eed1633f19d097835d5fa48df5',
'1000',
],
[
'b19b4c83056f6e3dace0e786446a8ccd73f22cfc42c3013808c532ab43490a14',
'10000000000.000000000',
],
[
'fb4233e8a568993976ed38a81c2671587c5ad09552dedefa78760deed6ff87aa',
'100000000.00',
],
[
'79c5a1cec698350dd93f645fcae8d6ff3902b7cdc582839dfface3cb0c83d823',
'9899',
],
[
'01d63c4f4cb496829a6743f7b1805d086ea3877a1dd34b3f92ffba2c9c99f896',
'21000000',
],
[
'666c4318d1f7fef5f2c698262492c519018d4e9130f95d05f6be9f0fb7149e96',
'94',
],
[
'b132878bfa81cf1b9e19192045ed4c797b10944cc17ae07da06aed3d7b566cb7',
'5',
],
[
'9404761d1a01cca11c29eb8ed9ddc63966526d0eaa54f148e8862ab3e884132f',
'55.000000000',
],
[
'16b12bbacdbb8c8a799adbfd782bfff9843c1f9b0be148eaae02a1a7f74f95c4',
'844601.876543211',
],
[
'cf601c56b58bc05a39a95374a4a865f0a8b56544ea937b30fb46315441717c50',
'770.0000000',
],
[
'18625b25d4b9b9ebf23ee5575484a67ff2477873a253b16081f964b8f9ca7c28',
'1',
],
[
'b8f2a9e767a0be7b80c7e414ef2534586d4da72efddb39a4e70e501ab73375cc',
'8987',
],
[
'b40d1f6acdb6ee68d7eca0167fe2753c076bc309b2e3b1af8bff70ca34b945b0',
'4999',
],
[
'77ec4036ef8546ac46df6d3a5374e961216f92624627eaeef5d2e1a253df9fc6',
'112',
],
[
'97283f832815016e848612acf8a5d097089ed24bd62d407887b3be1d7aa8960f',
'0.000000001',
],
[
'6a9305a13135625f4b533256e8d2e21a7343005331e1839348a39040f61e09d3',
'33',
],
[
'b39fdb53e21d67fa5fd3a11122f1452f15884047f2b80e8efe633c3b520b7a39',
'1',
],
[
'9e694e7fc3738975ce529ffa15937d6f192716059d32d663815c0d3f3682f1b5',
'1844674407370955161.5',
],
[
'b0794f985a728aa65997e5606b79081aa20978d8a299da1d2ea709102f03a604',
'1844674407370955.1615',
],
[
'c3b56aef4744db0a9e21cd06dd3356bcdd7c1ca67fc132040c42b1f8c9c65419',
'1844674407370.9551615',
],
[
'3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109',
'3',
],
[
'aed861a31b96934b88c0252ede135cb9700d7649f69191235087a3030e553cb1',
'100100.00',
],
[
'e2db39ade16e971afba2087bf6e29a83d7579137900eb73e5d955bdb769204bb',
'1',
],
[
'5a9d91ae2730dffbd0795dd2f8bfda5a6ad905f374158c8df303ca5cc82f8620',
'1',
],
]),
parsedTxHistory: [
{
txid: '4fb3b37c25c8a5cb43f0130435eb33c19b2fdaf4be98b113e580a66ec9340435',
version: 2,
inputs: [
{
prevOut: {
txid: '0381ae28ab1938c89683afbea5b40c9352acae97291ce2f287b2f07ab2662dea',
outIdx: 1,
},
inputScript:
'4830450221009a9c4098a8ed4b5931ff66ec5ecab91f877765dbc2098d181c2bd23b80624f4102204a557291fa03ce16b87f9c63adfa9a7bae01976c871e8ecb9cb599291992d701412103771805b54969a9bea4e3eb14a82851c67592156ddb5e52d3d53677d14a40fba6',
sequenceNo: 4294967295,
token: {
tokenId:
'aed861a31b96934b88c0252ede135cb9700d7649f69191235087a3030e553cb1',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
entryIdx: 0,
atoms: 8900n,
},
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
sats: 546n,
},
{
prevOut: {
txid: '8e2ec3b27b26fc9a75ce24858af7fad0d43c274d79f73e5c3862d9dedabfc7f0',
outIdx: 1,
},
inputScript:
'47304402203f6961f869a29932590309857947106f8c8743c9243ff6b9bbf42d263602e76d0220322df57c7f1e0e9ac9abf4380a4f9ec611fc0d2a41e13f89da169d70595f5fa4412103771805b54969a9bea4e3eb14a82851c67592156ddb5e52d3d53677d14a40fba6',
sequenceNo: 4294967295,
token: {
tokenId:
'aed861a31b96934b88c0252ede135cb9700d7649f69191235087a3030e553cb1',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
entryIdx: 0,
atoms: 1000n,
},
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
sats: 546n,
},
{
prevOut: {
txid: '80baab3dc64a3922c8d3ca11bacc6af4f05b103e15e18e9ea7592d926612c829',
outIdx: 1,
},
inputScript:
'483045022100c22c37e76fa9287a4f483ec6365d23ed7c183d57dbb34fbef1b85b5f853b03fc02206c512e08ae4c56b4d1e6bc793e36583bf4f6b18cda2c0d66796aa101ba4c24e8412103771805b54969a9bea4e3eb14a82851c67592156ddb5e52d3d53677d14a40fba6',
sequenceNo: 4294967295,
token: {
tokenId:
'aed861a31b96934b88c0252ede135cb9700d7649f69191235087a3030e553cb1',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
entryIdx: 0,
atoms: 10000n,
},
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
sats: 546n,
},
{
prevOut: {
txid: 'aa13c6f214ff58f36ed5e108a7f36d8f98729c50186b27a53b989c7f36fbf517',
outIdx: 2,
},
inputScript:
'473044022016c50d564beb53141475b40f6f8a6d293d991d92ea2cfea63598a2a28c22bb7602202ed5d105e1eac1b4544cbef32ab16953414d782290b30304b3dab1fd4a4ab3c7412103771805b54969a9bea4e3eb14a82851c67592156ddb5e52d3d53677d14a40fba6',
sequenceNo: 4294967295,
token: {
tokenId:
'aed861a31b96934b88c0252ede135cb9700d7649f69191235087a3030e553cb1',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
entryIdx: 0,
atoms: 9990000n,
},
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
sats: 546n,
},
{
prevOut: {
txid: '313a13c60491d6de89478a30379195b92591bff39e8f3184fd3a595842b8f2d6',
outIdx: 2,
},
inputScript:
'483045022100911e802166e1da86307a596eda6389f0b9b2aeeaaebda15dc4fbb90b2f5382d7022039b29d16cdc748094e8bb5f321e7c1a981cd9d764240f033282accb972621663412103771805b54969a9bea4e3eb14a82851c67592156ddb5e52d3d53677d14a40fba6',
sequenceNo: 4294967295,
token: {
tokenId:
'aed861a31b96934b88c0252ede135cb9700d7649f69191235087a3030e553cb1',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
entryIdx: 0,
atoms: 100n,
},
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
sats: 546n,
},
{
prevOut: {
txid: '7d94a36482f6e8f5c6ed576212761a102ae4d106f06441fb8654e0ea6540f0b0',
outIdx: 1,
},
inputScript:
'47304402206ed93aed3cb97601f5d3c7fa61856393441b0c612fd36ab7c02694770963b4f102200184d69dbe32958163775975cdbbc5485245a07794a250229eec3d74216a56ff412103771805b54969a9bea4e3eb14a82851c67592156ddb5e52d3d53677d14a40fba6',
sequenceNo: 4294967295,
token: {
tokenId:
'aed861a31b96934b88c0252ede135cb9700d7649f69191235087a3030e553cb1',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
entryIdx: 0,
atoms: 100000000n,
},
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
sats: 546n,
},
{
prevOut: {
txid: '7d94a36482f6e8f5c6ed576212761a102ae4d106f06441fb8654e0ea6540f0b0',
outIdx: 3,
},
inputScript:
'47304402201532d4e8b70d074ccc996fb467febcb32dcfd64b88f97bba6607931fde979c4d02207dd94604b37b77e42552c348735aed7a8ea5f3d1c29e4751aa440f04f62dd768412103771805b54969a9bea4e3eb14a82851c67592156ddb5e52d3d53677d14a40fba6',
sequenceNo: 4294967295,
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
sats: 97510108n,
},
],
outputs: [
{
outputScript:
'6a04534c500001010453454e4420aed861a31b96934b88c0252ede135cb9700d7649f69191235087a3030e553cb1080000000005f5e10008000000000098bd90',
sats: 0n,
},
{
outputScript:
'76a914821407ac2993f8684227004f4086082f3f801da788ac',
token: {
tokenId:
'aed861a31b96934b88c0252ede135cb9700d7649f69191235087a3030e553cb1',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
entryIdx: 0,
atoms: 100000000n,
},
spentBy: {
txid: '93caf3748905f905f178238603a9595d68b2bf864f8dd3eb211d73d93cdbaa3d',
outIdx: 0,
},
sats: 546n,
},
{
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
token: {
tokenId:
'aed861a31b96934b88c0252ede135cb9700d7649f69191235087a3030e553cb1',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
entryIdx: 0,
atoms: 10010000n,
},
sats: 546n,
},
{
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
sats: 97511071n,
},
],
lockTime: 0,
timeFirstSeen: 1713393875,
size: 1217,
isCoinbase: false,
tokenEntries: [
{
tokenId:
'aed861a31b96934b88c0252ede135cb9700d7649f69191235087a3030e553cb1',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
txType: 'SEND',
isInvalid: false,
burnSummary: '',
failedColorings: [],
burnsMintBatons: false,
actualBurnAtoms: 0n,
intentionalBurnAtoms: 0n,
},
],
tokenFailedParsings: [],
tokenStatus: 'TOKEN_STATUS_NORMAL',
block: {
height: 840530,
hash: '0000000000000000248d6bde23611725c98c415a9246e28852187e6613e68998',
timestamp: 1713394342,
},
parsed: {
xecTxType: 'Sent',
satoshisSent: 546,
stackArray: [
'534c5000',
'01',
'53454e44',
'aed861a31b96934b88c0252ede135cb9700d7649f69191235087a3030e553cb1',
'0000000005f5e100',
'000000000098bd90',
],
recipients: [
'ecash:qzppgpav9xfls6zzyuqy7syxpqhnlqqa5u68m4qw6l',
],
},
},
{
txid: '7d94a36482f6e8f5c6ed576212761a102ae4d106f06441fb8654e0ea6540f0b0',
version: 2,
inputs: [
{
prevOut: {
txid: '0381ae28ab1938c89683afbea5b40c9352acae97291ce2f287b2f07ab2662dea',
outIdx: 2,
},
inputScript:
'483045022100bd25833e31e8e0949a52a2d12cf096e0a8cadd7be5dbfa21a3049a98a936e05f0220568df8a60747f94c74a4d492d6b442f65a5d0b63c154ad09079ad89c0a5e8a77412103771805b54969a9bea4e3eb14a82851c67592156ddb5e52d3d53677d14a40fba6',
sequenceNo: 4294967295,
token: {
tokenId:
'aed861a31b96934b88c0252ede135cb9700d7649f69191235087a3030e553cb1',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: true,
entryIdx: 0,
atoms: 0n,
},
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
sats: 546n,
},
{
prevOut: {
txid: 'fb6086e1e98f88fdef7abab312dfb68449d1b43d511e1f15c488a8cb804f1c51',
outIdx: 1,
},
inputScript:
'483045022100c5704411451982cf6dfbe423c77d2be6ce3999681781344eaf00438b36cf88b1022002b1c4d6249170be38b691c2846c29e09dd15e6de489d72729ad84a2cc40e6d7412103771805b54969a9bea4e3eb14a82851c67592156ddb5e52d3d53677d14a40fba6',
sequenceNo: 4294967295,
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
sats: 97511128n,
},
],
outputs: [
{
outputScript:
'6a04534c50000101044d494e5420aed861a31b96934b88c0252ede135cb9700d7649f69191235087a3030e553cb10102080000000005f5e100',
sats: 0n,
},
{
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
token: {
tokenId:
'aed861a31b96934b88c0252ede135cb9700d7649f69191235087a3030e553cb1',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
entryIdx: 0,
atoms: 100000000n,
},
spentBy: {
txid: '4fb3b37c25c8a5cb43f0130435eb33c19b2fdaf4be98b113e580a66ec9340435',
outIdx: 5,
},
sats: 546n,
},
{
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
token: {
tokenId:
'aed861a31b96934b88c0252ede135cb9700d7649f69191235087a3030e553cb1',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: true,
entryIdx: 0,
atoms: 0n,
},
sats: 546n,
},
{
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
spentBy: {
txid: '4fb3b37c25c8a5cb43f0130435eb33c19b2fdaf4be98b113e580a66ec9340435',
outIdx: 6,
},
sats: 97510108n,
},
],
lockTime: 0,
timeFirstSeen: 1713393855,
size: 474,
isCoinbase: false,
tokenEntries: [
{
tokenId:
'aed861a31b96934b88c0252ede135cb9700d7649f69191235087a3030e553cb1',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
txType: 'MINT',
isInvalid: false,
burnSummary: '',
failedColorings: [],
burnsMintBatons: false,
actualBurnAtoms: 0n,
intentionalBurnAtoms: 0n,
},
],
tokenFailedParsings: [],
tokenStatus: 'TOKEN_STATUS_NORMAL',
block: {
height: 840530,
hash: '0000000000000000248d6bde23611725c98c415a9246e28852187e6613e68998',
timestamp: 1713394342,
},
parsed: {
xecTxType: 'Sent',
satoshisSent: 97511200,
stackArray: [
'534c5000',
'01',
'4d494e54',
'aed861a31b96934b88c0252ede135cb9700d7649f69191235087a3030e553cb1',
'02',
'0000000005f5e100',
],
recipients: [],
},
},
{
txid: 'fb6086e1e98f88fdef7abab312dfb68449d1b43d511e1f15c488a8cb804f1c51',
version: 2,
inputs: [
{
prevOut: {
txid: 'aa13c6f214ff58f36ed5e108a7f36d8f98729c50186b27a53b989c7f36fbf517',
outIdx: 3,
},
inputScript:
'483045022100a38edd91b2a69b3f8724972b2fbb16a5e9ec5ddd6d5f5c709493bec2d0692d400220075b65ffd9cd61a1ee76c40e77ee85ff55d3a3e6ba0e84aa940c4e774b2434d2412103771805b54969a9bea4e3eb14a82851c67592156ddb5e52d3d53677d14a40fba6',
sequenceNo: 4294967295,
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
sats: 2872n,
},
{
prevOut: {
txid: '313a13c60491d6de89478a30379195b92591bff39e8f3184fd3a595842b8f2d6',
outIdx: 3,
},
inputScript:
'47304402201c148e93b1f610125cf1055af515a4d9895dada109c3ddbb4a64d35ee0be01c902200b9b4b3fd7a4db4a8125743f298fc96e1c83b7061cec83a20533b90c3d145b17412103771805b54969a9bea4e3eb14a82851c67592156ddb5e52d3d53677d14a40fba6',
sequenceNo: 4294967295,
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
sats: 112409506n,
},
],
outputs: [
{
outputScript:
'76a914821407ac2993f8684227004f4086082f3f801da788ac',
spentBy: {
txid: 'b01def0a01ae29f905298af3f9e496dd630ed205d14d2b11f5bba0d50f9a9a08',
outIdx: 1,
},
sats: 14900876n,
},
{
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
spentBy: {
txid: '7d94a36482f6e8f5c6ed576212761a102ae4d106f06441fb8654e0ea6540f0b0',
outIdx: 1,
},
sats: 97511128n,
},
],
lockTime: 0,
timeFirstSeen: 1713393807,
size: 373,
isCoinbase: false,
tokenEntries: [],
tokenFailedParsings: [],
tokenStatus: 'TOKEN_STATUS_NON_TOKEN',
block: {
height: 840530,
hash: '0000000000000000248d6bde23611725c98c415a9246e28852187e6613e68998',
timestamp: 1713394342,
},
parsed: {
xecTxType: 'Sent',
satoshisSent: 14900876,
stackArray: [],
recipients: [
'ecash:qzppgpav9xfls6zzyuqy7syxpqhnlqqa5u68m4qw6l',
],
},
},
{
txid: '313a13c60491d6de89478a30379195b92591bff39e8f3184fd3a595842b8f2d6',
version: 2,
inputs: [
{
prevOut: {
txid: '4b5b2a0f8bcacf6bccc7ef49e7f82a894c9c599589450eaeaf423e0f5926c38e',
outIdx: 1,
},
inputScript:
'47304402202af39ca462ee08a32e7984d629ebf704cfa6342deb5a85d4962cba040400d23302207a6f54568437e03ad786242bc4f8fbac825136f0f3f81acab16ba13ecfe303c5412103771805b54969a9bea4e3eb14a82851c67592156ddb5e52d3d53677d14a40fba6',
sequenceNo: 4294967295,
token: {
tokenId:
'aed861a31b96934b88c0252ede135cb9700d7649f69191235087a3030e553cb1',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
entryIdx: 0,
atoms: 100n,
},
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
sats: 546n,
},
{
prevOut: {
txid: 'dd9018d0037fee4094c2445b23ed9eef65d456db3f2b9c053ad39ee6505fca44',
outIdx: 1,
},
inputScript:
'473044022073f20d5d3c4575b8b06e4a71e5e33ccf8cee8ccc4ae3b23552f7db0f9fc3cb4202200297d074d2d67c2b06c7243057951c46140c276edd538ab7a4d8665c00bf7efb412103771805b54969a9bea4e3eb14a82851c67592156ddb5e52d3d53677d14a40fba6',
sequenceNo: 4294967295,
token: {
tokenId:
'aed861a31b96934b88c0252ede135cb9700d7649f69191235087a3030e553cb1',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
entryIdx: 0,
atoms: 10000n,
},
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
sats: 546n,
},
{
prevOut: {
txid: '8b52c1b2bc9be9077ed2c73b17f11ce3ebb59b70e105234a720c1631eea286c8',
outIdx: 1,
},
inputScript:
'483045022100affdf4978adb42d4995114ea175aa4094e14f25f73bcbeb22689a2f25819ac3002202da51d160fb29abca76bbd0e70fc460ff072cf3f4d35d1617904817dd3ce46bd412103771805b54969a9bea4e3eb14a82851c67592156ddb5e52d3d53677d14a40fba6',
sequenceNo: 4294967295,
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
sats: 112410135n,
},
],
outputs: [
{
outputScript:
'6a04534c500001010453454e4420aed861a31b96934b88c0252ede135cb9700d7649f69191235087a3030e553cb1080000000000002710080000000000000064',
sats: 0n,
},
{
outputScript:
'76a914821407ac2993f8684227004f4086082f3f801da788ac',
token: {
tokenId:
'aed861a31b96934b88c0252ede135cb9700d7649f69191235087a3030e553cb1',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
entryIdx: 0,
atoms: 10000n,
},
spentBy: {
txid: 'f35f1d584acdcef33ce86ae28925458ff792559c47857d425fe75fb0395db701',
outIdx: 0,
},
sats: 546n,
},
{
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
token: {
tokenId:
'aed861a31b96934b88c0252ede135cb9700d7649f69191235087a3030e553cb1',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
entryIdx: 0,
atoms: 100n,
},
spentBy: {
txid: '4fb3b37c25c8a5cb43f0130435eb33c19b2fdaf4be98b113e580a66ec9340435',
outIdx: 4,
},
sats: 546n,
},
{
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
spentBy: {
txid: 'fb6086e1e98f88fdef7abab312dfb68449d1b43d511e1f15c488a8cb804f1c51',
outIdx: 1,
},
sats: 112409506n,
},
],
lockTime: 0,
timeFirstSeen: 1713392130,
size: 627,
isCoinbase: false,
tokenEntries: [
{
tokenId:
'aed861a31b96934b88c0252ede135cb9700d7649f69191235087a3030e553cb1',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
txType: 'SEND',
isInvalid: false,
burnSummary: '',
failedColorings: [],
burnsMintBatons: false,
actualBurnAtoms: 0n,
intentionalBurnAtoms: 0n,
},
],
tokenFailedParsings: [],
tokenStatus: 'TOKEN_STATUS_NORMAL',
block: {
height: 840524,
hash: '00000000000000000dc214713fb8afc4aeacac08c696cbf9cba5799c7d7e49bd',
timestamp: 1713392944,
},
parsed: {
xecTxType: 'Sent',
satoshisSent: 546,
stackArray: [
'534c5000',
'01',
'53454e44',
'aed861a31b96934b88c0252ede135cb9700d7649f69191235087a3030e553cb1',
'0000000000002710',
'0000000000000064',
],
recipients: [
'ecash:qzppgpav9xfls6zzyuqy7syxpqhnlqqa5u68m4qw6l',
],
},
},
{
txid: '80baab3dc64a3922c8d3ca11bacc6af4f05b103e15e18e9ea7592d926612c829',
version: 2,
inputs: [
{
prevOut: {
txid: 'aa13c6f214ff58f36ed5e108a7f36d8f98729c50186b27a53b989c7f36fbf517',
outIdx: 1,
},
inputScript:
'483045022100b3d201ce34fce4807a0ab776db473c80e76b4f5fb800ee9c950a38434fe149fc0220694356ff2841b3d0ff14858dab5a97e3205ef9ef889833ee5120bfc71aef5afb41210353f81d61d41d6e22c73ab449476113dea124afe3972991cd237e654f15950b7c',
sequenceNo: 4294967295,
token: {
tokenId:
'aed861a31b96934b88c0252ede135cb9700d7649f69191235087a3030e553cb1',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
entryIdx: 0,
atoms: 10000n,
},
outputScript:
'76a914821407ac2993f8684227004f4086082f3f801da788ac',
sats: 546n,
},
{
prevOut: {
txid: '8b52c1b2bc9be9077ed2c73b17f11ce3ebb59b70e105234a720c1631eea286c8',
outIdx: 0,
},
inputScript:
'483045022100def98fe39629278379cd5d011b8ab896e8ff20af983a0ec3a04a1872fa8cfc1d02205c95f7474b78d3821e3104dce3e8b15af0b36452451eb85983313c573238f0a741210353f81d61d41d6e22c73ab449476113dea124afe3972991cd237e654f15950b7c',
sequenceNo: 4294967295,
outputScript:
'76a914821407ac2993f8684227004f4086082f3f801da788ac',
sats: 100000n,
},
],
outputs: [
{
outputScript:
'6a04534c500001010453454e4420aed861a31b96934b88c0252ede135cb9700d7649f69191235087a3030e553cb1080000000000002710',
sats: 0n,
},
{
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
token: {
tokenId:
'aed861a31b96934b88c0252ede135cb9700d7649f69191235087a3030e553cb1',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
entryIdx: 0,
atoms: 10000n,
},
spentBy: {
txid: '4fb3b37c25c8a5cb43f0130435eb33c19b2fdaf4be98b113e580a66ec9340435',
outIdx: 2,
},
sats: 546n,
},
{
outputScript:
'76a914821407ac2993f8684227004f4086082f3f801da788ac',
spentBy: {
txid: 'f35f1d584acdcef33ce86ae28925458ff792559c47857d425fe75fb0395db701',
outIdx: 1,
},
sats: 99562n,
},
],
lockTime: 0,
timeFirstSeen: 1713384542,
size: 438,
isCoinbase: false,
tokenEntries: [
{
tokenId:
'aed861a31b96934b88c0252ede135cb9700d7649f69191235087a3030e553cb1',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
txType: 'SEND',
isInvalid: false,
burnSummary: '',
failedColorings: [],
burnsMintBatons: false,
actualBurnAtoms: 0n,
intentionalBurnAtoms: 0n,
},
],
tokenFailedParsings: [],
tokenStatus: 'TOKEN_STATUS_NORMAL',
block: {
height: 840499,
hash: '000000000000000035b621834b4408d0b1a8da7d975cb14c0b9330d1e2398d8b',
timestamp: 1713384866,
},
parsed: {
xecTxType: 'Received',
satoshisSent: 546,
stackArray: [
'534c5000',
'01',
'53454e44',
'aed861a31b96934b88c0252ede135cb9700d7649f69191235087a3030e553cb1',
'0000000000002710',
],
recipients: [
'ecash:qzppgpav9xfls6zzyuqy7syxpqhnlqqa5u68m4qw6l',
],
},
},
{
txid: '8b52c1b2bc9be9077ed2c73b17f11ce3ebb59b70e105234a720c1631eea286c8',
version: 2,
inputs: [
{
prevOut: {
txid: '993a634141e8428ff8ec519bf96287ffc72de5bec0d56a832a18c7aaaf543302',
outIdx: 0,
},
inputScript:
'473044022014504fa4841a91e50a3e48fd671b76133354a3f6c784b397984de3b72682cc280220287f9c61f9323da0e0e17e819c94b765c4a58f707d31e67baf0414f9550efc6d412103771805b54969a9bea4e3eb14a82851c67592156ddb5e52d3d53677d14a40fba6',
sequenceNo: 4294967295,
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
sats: 2200n,
},
{
prevOut: {
txid: 'b37d047060424681b914496e683c6c9f255b77eb09232368c28d55d560f3a324',
outIdx: 0,
},
inputScript:
'47304402204c8f88e31740207c2cde15d8f62e5b9a2888d6cf4c745105d804a0ccc7bd321a0220091f177c1e190e543963213e4a442ecc5fa1737aa50a3c72f5a3c7f8c683b78b412103771805b54969a9bea4e3eb14a82851c67592156ddb5e52d3d53677d14a40fba6',
sequenceNo: 4294967295,
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
sats: 3300n,
},
{
prevOut: {
txid: '0073e74617e57959dbf114be355e83ea4401f25c6bc7aa550deae852788f7bfd',
outIdx: 1,
},
inputScript:
'4730440220583e29a8409e3e543e41706a4d7b20a8930dae28a94f5e0b88b7834fe47147a202201a2a4fc1f5d1c6b4e466d44e168d596ff9d55052c20e1d242ed09799bf426446412103771805b54969a9bea4e3eb14a82851c67592156ddb5e52d3d53677d14a40fba6',
sequenceNo: 4294967295,
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
sats: 3300n,
},
{
prevOut: {
txid: '228487a363d841c531feeb0a6ef7ed8825888d57f8e6c42bea911bfb192dd26d',
outIdx: 0,
},
inputScript:
'4730440220532fd0e44539838bbd461d81a9c22f3abbb069aa9ca031945ea660d31d49533f022059535b4da01d876910e79affe3c6924491959fba1948fe3c26b423d33cb2a144412103771805b54969a9bea4e3eb14a82851c67592156ddb5e52d3d53677d14a40fba6',
sequenceNo: 4294967295,
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
sats: 3300n,
},
{
prevOut: {
txid: 'f67081fbc94ffe25c36f8ad007ee280a4d935489effd8ec60b7c8e9be57888d5',
outIdx: 1,
},
inputScript:
'473044022015514f1729be1458981512d1c9d2ef627320d532ad8c0bc30600088fb0d567fd02202f09d9db49ba637e52eb30a42131fa5ed61b7eeb553baeeb9a6d0301bdc5be54412103771805b54969a9bea4e3eb14a82851c67592156ddb5e52d3d53677d14a40fba6',
sequenceNo: 4294967295,
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
sats: 546n,
},
{
prevOut: {
txid: '2c1b0dea56fb660ddfb9fd87734118437ec12bec6b884210724ced813ce66cc8',
outIdx: 0,
},
inputScript:
'483045022100a4515e9c6f5ee2330d8835f86d1104812d6f7496ed879e6d61d6118b5073cc1b02201b0aeab935ed7404813bca6a2cc3762062e13b778c8488b493c17f91d7c62ee9412103771805b54969a9bea4e3eb14a82851c67592156ddb5e52d3d53677d14a40fba6',
sequenceNo: 4294967295,
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
sats: 3300n,
},
{
prevOut: {
txid: '85baae6a594ba3414e62974a41987dcef1e3bb0a0eb4bcd1a92a510885be44e7',
outIdx: 0,
},
inputScript:
'483045022100e32fb5d3afef0aebe1f7547e284f953d14da3de49c86164b0fc85d6e4cb3ef4902201cac811ad621c99248b5154a3e4d25a55d1240e1ac8aa0dc7dcf1cde18ae9532412103771805b54969a9bea4e3eb14a82851c67592156ddb5e52d3d53677d14a40fba6',
sequenceNo: 4294967295,
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
sats: 3500n,
},
{
prevOut: {
txid: 'c9d93d05dbb03ab054e85ff83f675b204660199327331c460cc4690d17e094e2',
outIdx: 1,
},
inputScript:
'483045022100d720e9d5e91d3b601ac45f5d430c71a87630672adb501c48c060e5edf37079f002203309785c97f2788d1a72c54e052b2560e695f5a13460e1685b8c86ab45c70885412103771805b54969a9bea4e3eb14a82851c67592156ddb5e52d3d53677d14a40fba6',
sequenceNo: 4294967295,
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
sats: 112491951n,
},
],
outputs: [
{
outputScript:
'76a914821407ac2993f8684227004f4086082f3f801da788ac',
spentBy: {
txid: '80baab3dc64a3922c8d3ca11bacc6af4f05b103e15e18e9ea7592d926612c829',
outIdx: 1,
},
sats: 100000n,
},
{
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
spentBy: {
txid: '313a13c60491d6de89478a30379195b92591bff39e8f3184fd3a595842b8f2d6',
outIdx: 2,
},
sats: 112410135n,
},
],
lockTime: 0,
timeFirstSeen: 1713384516,
size: 1257,
isCoinbase: false,
tokenEntries: [],
tokenFailedParsings: [],
tokenStatus: 'TOKEN_STATUS_NON_TOKEN',
block: {
height: 840499,
hash: '000000000000000035b621834b4408d0b1a8da7d975cb14c0b9330d1e2398d8b',
timestamp: 1713384866,
},
parsed: {
xecTxType: 'Sent',
satoshisSent: 100000,
stackArray: [],
recipients: [
'ecash:qzppgpav9xfls6zzyuqy7syxpqhnlqqa5u68m4qw6l',
],
},
},
{
txid: 'aa13c6f214ff58f36ed5e108a7f36d8f98729c50186b27a53b989c7f36fbf517',
version: 2,
inputs: [
{
prevOut: {
txid: 'aed861a31b96934b88c0252ede135cb9700d7649f69191235087a3030e553cb1',
outIdx: 1,
},
inputScript:
'483045022100f7f2eac186605f5d37a038b17367a4b6fc5458ca7485ce6b77baf19b4160bcd8022029b5ef41a2ebb4642e9802d32a1649d84c7daf2e978c32ebc7342b90e9427cc1412103771805b54969a9bea4e3eb14a82851c67592156ddb5e52d3d53677d14a40fba6',
sequenceNo: 4294967295,
token: {
tokenId:
'aed861a31b96934b88c0252ede135cb9700d7649f69191235087a3030e553cb1',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
entryIdx: 0,
atoms: 10000000n,
},
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
sats: 546n,
},
{
prevOut: {
txid: 'd8a081bed886b085194410fd879286393734f428c9f64d9ece1c0afffb2695a2',
outIdx: 1,
},
inputScript:
'483045022100b0404d5d553867df9ed190ce52ec13565aaf6e3c8986b712c150acac6d3853f70220727abe6d27a333f72249a08f3b40cd15346c6096466b6118248f92279201b5f7412103771805b54969a9bea4e3eb14a82851c67592156ddb5e52d3d53677d14a40fba6',
sequenceNo: 4294967295,
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
sats: 3899n,
},
],
outputs: [
{
outputScript:
'6a04534c500001010453454e4420aed861a31b96934b88c0252ede135cb9700d7649f69191235087a3030e553cb1080000000000002710080000000000986f70',
sats: 0n,
},
{
outputScript:
'76a914821407ac2993f8684227004f4086082f3f801da788ac',
token: {
tokenId:
'aed861a31b96934b88c0252ede135cb9700d7649f69191235087a3030e553cb1',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
entryIdx: 0,
atoms: 10000n,
},
spentBy: {
txid: '80baab3dc64a3922c8d3ca11bacc6af4f05b103e15e18e9ea7592d926612c829',
outIdx: 0,
},
sats: 546n,
},
{
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
token: {
tokenId:
'aed861a31b96934b88c0252ede135cb9700d7649f69191235087a3030e553cb1',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
entryIdx: 0,
atoms: 9990000n,
},
spentBy: {
txid: '4fb3b37c25c8a5cb43f0130435eb33c19b2fdaf4be98b113e580a66ec9340435',
outIdx: 3,
},
sats: 546n,
},
{
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
spentBy: {
txid: 'fb6086e1e98f88fdef7abab312dfb68449d1b43d511e1f15c488a8cb804f1c51',
outIdx: 0,
},
sats: 2872n,
},
],
lockTime: 0,
timeFirstSeen: 1713384502,
size: 481,
isCoinbase: false,
tokenEntries: [
{
tokenId:
'aed861a31b96934b88c0252ede135cb9700d7649f69191235087a3030e553cb1',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
txType: 'SEND',
isInvalid: false,
burnSummary: '',
failedColorings: [],
burnsMintBatons: false,
actualBurnAtoms: 0n,
intentionalBurnAtoms: 0n,
},
],
tokenFailedParsings: [],
tokenStatus: 'TOKEN_STATUS_NORMAL',
block: {
height: 840499,
hash: '000000000000000035b621834b4408d0b1a8da7d975cb14c0b9330d1e2398d8b',
timestamp: 1713384866,
},
parsed: {
xecTxType: 'Sent',
satoshisSent: 546,
stackArray: [
'534c5000',
'01',
'53454e44',
'aed861a31b96934b88c0252ede135cb9700d7649f69191235087a3030e553cb1',
'0000000000002710',
'0000000000986f70',
],
recipients: [
'ecash:qzppgpav9xfls6zzyuqy7syxpqhnlqqa5u68m4qw6l',
],
},
},
{
txid: '85baae6a594ba3414e62974a41987dcef1e3bb0a0eb4bcd1a92a510885be44e7',
version: 2,
inputs: [
{
prevOut: {
txid: '56e7d3b268e6ecff59e5ddc47af000351fa8e451b4bd668ac08b9c40b2d323b9',
outIdx: 2,
},
inputScript:
'47304402205c644dac10bbd0cc7b72a39f76803e49c4ef5b34a1e211e77bbad0b6fe79986f02204c562e4e567cd778b2cf5ce579a673846226fa20a1df32c2046ac80b4dcb83774121021d7fd45a888292cf3a022a95acdbcf82f9f2d5bbbfbdbc740acd558a9f25b5d0',
sequenceNo: 4294967295,
outputScript:
'76a9140d94ba179ec21c42417a71a77873b3619363d8ea88ac',
sats: 44081133n,
},
],
outputs: [
{
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
spentBy: {
txid: '8b52c1b2bc9be9077ed2c73b17f11ce3ebb59b70e105234a720c1631eea286c8',
outIdx: 6,
},
sats: 3500n,
},
{
outputScript:
'76a9140d94ba179ec21c42417a71a77873b3619363d8ea88ac',
sats: 44077178n,
},
],
lockTime: 0,
timeFirstSeen: 1713325314,
size: 225,
isCoinbase: false,
tokenEntries: [],
tokenFailedParsings: [],
tokenStatus: 'TOKEN_STATUS_NON_TOKEN',
block: {
height: 840433,
hash: '00000000000000002b65f361a83af2188ef1a1863166b61bf3f4cf3a31aae8e2',
timestamp: 1713325389,
},
parsed: {
xecTxType: 'Received',
satoshisSent: 3500,
stackArray: [],
recipients: [
'ecash:qqxefwshnmppcsjp0fc6w7rnkdsexc7cagdus7ugd0',
],
},
},
{
txid: 'c9d93d05dbb03ab054e85ff83f675b204660199327331c460cc4690d17e094e2',
version: 2,
inputs: [
{
prevOut: {
txid: '83df946b2adab3ca9bd3da4e406f5a5494738532fe4da2f8a55a775080ea3d31',
outIdx: 7,
},
inputScript:
'483045022100db79043fdea632ea235b0310c145119c13ad20a18eaefa3e5ede437987b84d050220483e4069e9ddbd02e52b138e2bd317cb78c5d5cac53fb62e76d6fde91c6a2d08412103771805b54969a9bea4e3eb14a82851c67592156ddb5e52d3d53677d14a40fba6',
sequenceNo: 4294967295,
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
sats: 112494377n,
},
],
outputs: [
{
outputScript:
'76a9140d94ba179ec21c42417a71a77873b3619363d8ea88ac',
sats: 2200n,
},
{
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
spentBy: {
txid: '8b52c1b2bc9be9077ed2c73b17f11ce3ebb59b70e105234a720c1631eea286c8',
outIdx: 7,
},
sats: 112491951n,
},
],
lockTime: 0,
timeFirstSeen: 1713325296,
size: 226,
isCoinbase: false,
tokenEntries: [],
tokenFailedParsings: [],
tokenStatus: 'TOKEN_STATUS_NON_TOKEN',
block: {
height: 840433,
hash: '00000000000000002b65f361a83af2188ef1a1863166b61bf3f4cf3a31aae8e2',
timestamp: 1713325389,
},
parsed: {
xecTxType: 'Sent',
satoshisSent: 2200,
stackArray: [],
recipients: [
'ecash:qqxefwshnmppcsjp0fc6w7rnkdsexc7cagdus7ugd0',
],
},
},
{
txid: '2c1b0dea56fb660ddfb9fd87734118437ec12bec6b884210724ced813ce66cc8',
version: 2,
inputs: [
{
prevOut: {
txid: 'f67081fbc94ffe25c36f8ad007ee280a4d935489effd8ec60b7c8e9be57888d5',
outIdx: 2,
},
inputScript:
'473044022001817a057685873e3a02cea695f4d13e9a7a4bbb1477da41d10e1ac6673ae81b022047339ed9b3b1d46d48a7186af023f99c02683be26cefb9a67b81b954f9045941412103318d0e1109f32debc66952d0e3ec21b1cf96575ea4c2a97a6535628f7f8b10e6',
sequenceNo: 4294967295,
outputScript:
'76a9144e532257c01b310b3b5c1fd947c79a72addf852388ac',
sats: 4954677n,
},
],
outputs: [
{
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
spentBy: {
txid: '8b52c1b2bc9be9077ed2c73b17f11ce3ebb59b70e105234a720c1631eea286c8',
outIdx: 5,
},
sats: 3300n,
},
{
outputScript:
'76a9144e532257c01b310b3b5c1fd947c79a72addf852388ac',
sats: 4950922n,
},
],
lockTime: 0,
timeFirstSeen: 1713289173,
size: 225,
isCoinbase: false,
tokenEntries: [],
tokenFailedParsings: [],
tokenStatus: 'TOKEN_STATUS_NON_TOKEN',
block: {
height: 840369,
hash: '0000000000000000277b46dec1b257e7263ee60265d9fcc71b314df14653998d',
timestamp: 1713289283,
},
parsed: {
xecTxType: 'Received',
satoshisSent: 3300,
stackArray: [],
recipients: [
'ecash:qp89xgjhcqdnzzemts0aj378nfe2mhu9yvxj9nhgg6',
],
},
},
{
txid: 'f67081fbc94ffe25c36f8ad007ee280a4d935489effd8ec60b7c8e9be57888d5',
version: 2,
inputs: [
{
prevOut: {
txid: '228487a363d841c531feeb0a6ef7ed8825888d57f8e6c42bea911bfb192dd26d',
outIdx: 1,
},
inputScript:
'473044022075c9fab550a514fb0acddf1b354099dcb58c803f3fc5d5d1be0949bf89320f0502204acfff31d5ceb1fe8fcc4a4e82218dea13d74422a7955e134a61a37e24885811412103318d0e1109f32debc66952d0e3ec21b1cf96575ea4c2a97a6535628f7f8b10e6',
sequenceNo: 4294967295,
outputScript:
'76a9144e532257c01b310b3b5c1fd947c79a72addf852388ac',
sats: 4955730n,
},
],
outputs: [
{
outputScript: '6a04007461620a66696e616c697a696e67',
sats: 0n,
},
{
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
spentBy: {
txid: '8b52c1b2bc9be9077ed2c73b17f11ce3ebb59b70e105234a720c1631eea286c8',
outIdx: 4,
},
sats: 546n,
},
{
outputScript:
'76a9144e532257c01b310b3b5c1fd947c79a72addf852388ac',
spentBy: {
txid: '2c1b0dea56fb660ddfb9fd87734118437ec12bec6b884210724ced813ce66cc8',
outIdx: 0,
},
sats: 4954677n,
},
],
lockTime: 0,
timeFirstSeen: 1713277179,
size: 251,
isCoinbase: false,
tokenEntries: [],
tokenFailedParsings: [],
tokenStatus: 'TOKEN_STATUS_NON_TOKEN',
block: {
height: 840343,
hash: '0000000000000000203af5adb7c5ebafe7e91a4ebb83b5924386bfdbe30f0e2b',
timestamp: 1713278396,
},
parsed: {
xecTxType: 'Received',
satoshisSent: 546,
stackArray: ['00746162', '66696e616c697a696e67'],
recipients: [
'ecash:qp89xgjhcqdnzzemts0aj378nfe2mhu9yvxj9nhgg6',
],
},
},
{
txid: '228487a363d841c531feeb0a6ef7ed8825888d57f8e6c42bea911bfb192dd26d',
version: 2,
inputs: [
{
prevOut: {
txid: '0073e74617e57959dbf114be355e83ea4401f25c6bc7aa550deae852788f7bfd',
outIdx: 2,
},
inputScript:
'47304402200be288a1814a0bc0751a8e443eb74d283e9f0baa135010a1e21b15e7ee58197c022047478418d5a48a064c4a3043aaeb2c008543776ef07355f2771c2e2e930f9a59412103318d0e1109f32debc66952d0e3ec21b1cf96575ea4c2a97a6535628f7f8b10e6',
sequenceNo: 4294967295,
outputScript:
'76a9144e532257c01b310b3b5c1fd947c79a72addf852388ac',
sats: 4959485n,
},
],
outputs: [
{
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
spentBy: {
txid: '8b52c1b2bc9be9077ed2c73b17f11ce3ebb59b70e105234a720c1631eea286c8',
outIdx: 3,
},
sats: 3300n,
},
{
outputScript:
'76a9144e532257c01b310b3b5c1fd947c79a72addf852388ac',
spentBy: {
txid: 'f67081fbc94ffe25c36f8ad007ee280a4d935489effd8ec60b7c8e9be57888d5',
outIdx: 0,
},
sats: 4955730n,
},
],
lockTime: 0,
timeFirstSeen: 1713274636,
size: 225,
isCoinbase: false,
tokenEntries: [],
tokenFailedParsings: [],
tokenStatus: 'TOKEN_STATUS_NON_TOKEN',
block: {
height: 840340,
hash: '00000000000000000f924a5abaa971e7731dc55b8ce20fa9350a46c1b730b882',
timestamp: 1713274758,
},
parsed: {
xecTxType: 'Received',
satoshisSent: 3300,
stackArray: [],
recipients: [
'ecash:qp89xgjhcqdnzzemts0aj378nfe2mhu9yvxj9nhgg6',
],
},
},
{
txid: '0073e74617e57959dbf114be355e83ea4401f25c6bc7aa550deae852788f7bfd',
version: 2,
inputs: [
{
prevOut: {
txid: 'b37d047060424681b914496e683c6c9f255b77eb09232368c28d55d560f3a324',
outIdx: 1,
},
inputScript:
'47304402203393d6b9903aae9175ba9831e0197c8e96859034f9d5ac79bed49b6396cce79002203dac68c34b52e46034ccb187a73e8b08c28082cc78eaa13b6ec59fa473568521412103318d0e1109f32debc66952d0e3ec21b1cf96575ea4c2a97a6535628f7f8b10e6',
sequenceNo: 4294967295,
outputScript:
'76a9144e532257c01b310b3b5c1fd947c79a72addf852388ac',
sats: 4963348n,
},
],
outputs: [
{
outputScript:
'6a04007461622674657374696e67206176616c616e6368652066696e616c697a656420747820686973746f7279',
sats: 0n,
},
{
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
spentBy: {
txid: '8b52c1b2bc9be9077ed2c73b17f11ce3ebb59b70e105234a720c1631eea286c8',
outIdx: 2,
},
sats: 3300n,
},
{
outputScript:
'76a9144e532257c01b310b3b5c1fd947c79a72addf852388ac',
spentBy: {
txid: '228487a363d841c531feeb0a6ef7ed8825888d57f8e6c42bea911bfb192dd26d',
outIdx: 0,
},
sats: 4959485n,
},
],
lockTime: 0,
timeFirstSeen: 1713268788,
size: 279,
isCoinbase: false,
tokenEntries: [],
tokenFailedParsings: [],
tokenStatus: 'TOKEN_STATUS_NON_TOKEN',
block: {
height: 840335,
hash: '00000000000000002bca9ce259a2e0913a92fbff00cd822253053518421fa141',
timestamp: 1713270512,
},
parsed: {
xecTxType: 'Received',
satoshisSent: 3300,
stackArray: [
'00746162',
'74657374696e67206176616c616e6368652066696e616c697a656420747820686973746f7279',
],
recipients: [
'ecash:qp89xgjhcqdnzzemts0aj378nfe2mhu9yvxj9nhgg6',
],
},
},
{
txid: 'b37d047060424681b914496e683c6c9f255b77eb09232368c28d55d560f3a324',
version: 2,
inputs: [
{
prevOut: {
txid: '185cc0bdd6272f21ee09d9d5a1a17458af6b3ff968e371341d4b83d81540cdd7',
outIdx: 2,
},
inputScript:
'483045022100b527adaa6310884771e286c3152e2942f584bf698c5ccdac9678c0f9dbec979f022077346d14477adc9891ea0c4e5701ff84274e366e4e64711a2b46d21f3699cc64412103318d0e1109f32debc66952d0e3ec21b1cf96575ea4c2a97a6535628f7f8b10e6',
sequenceNo: 4294967295,
outputScript:
'76a9144e532257c01b310b3b5c1fd947c79a72addf852388ac',
sats: 668n,
},
{
prevOut: {
txid: 'd8a081bed886b085194410fd879286393734f428c9f64d9ece1c0afffb2695a2',
outIdx: 0,
},
inputScript:
'473044022044b3ce9e8a443300b9e9c3d0739554b627eadb48c1cb47904b2f6545347970eb022002ea69d239498e09b9fe2d0c12c6179a54f120765bf874f986d12aa8a040ea81412103318d0e1109f32debc66952d0e3ec21b1cf96575ea4c2a97a6535628f7f8b10e6',
sequenceNo: 4294967295,
outputScript:
'76a9144e532257c01b310b3b5c1fd947c79a72addf852388ac',
sats: 546n,
},
{
prevOut: {
txid: '993a634141e8428ff8ec519bf96287ffc72de5bec0d56a832a18c7aaaf543302',
outIdx: 1,
},
inputScript:
'483045022100e9180af3b4a30a6b260ed934559e8fa7acea487907f607560ed22f07f4cd92a602203b874888634813a218bf358050759b26c12a48df4f64a8f1ba9034a484e5bb96412103318d0e1109f32debc66952d0e3ec21b1cf96575ea4c2a97a6535628f7f8b10e6',
sequenceNo: 4294967295,
outputScript:
'76a9144e532257c01b310b3b5c1fd947c79a72addf852388ac',
sats: 4966484n,
},
],
outputs: [
{
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
spentBy: {
txid: '8b52c1b2bc9be9077ed2c73b17f11ce3ebb59b70e105234a720c1631eea286c8',
outIdx: 1,
},
sats: 3300n,
},
{
outputScript:
'76a9144e532257c01b310b3b5c1fd947c79a72addf852388ac',
spentBy: {
txid: '0073e74617e57959dbf114be355e83ea4401f25c6bc7aa550deae852788f7bfd',
outIdx: 0,
},
sats: 4963348n,
},
],
lockTime: 0,
timeFirstSeen: 1713267426,
size: 521,
isCoinbase: false,
tokenEntries: [],
tokenFailedParsings: [],
tokenStatus: 'TOKEN_STATUS_NON_TOKEN',
block: {
height: 840334,
hash: '0000000000000000234e3b649b952014149a5e88f44a84ed8f7b846f15fd9a61',
timestamp: 1713267975,
},
parsed: {
xecTxType: 'Received',
satoshisSent: 3300,
stackArray: [],
recipients: [
'ecash:qp89xgjhcqdnzzemts0aj378nfe2mhu9yvxj9nhgg6',
],
},
},
{
txid: '993a634141e8428ff8ec519bf96287ffc72de5bec0d56a832a18c7aaaf543302',
version: 2,
inputs: [
{
prevOut: {
txid: 'bb18ea2566cab82ed6862efbcff05c99d720b4e99845365c0a8d884b55f8fd5f',
outIdx: 1,
},
inputScript:
'483045022100f194668e2d0c29742a1f959b1447de0604752cf6ad73569315b23e83c9450557022074001cdc88d6f21a0c3f1988515a2a04e417993e96c6dbc8dc205eed3b78442d412103318d0e1109f32debc66952d0e3ec21b1cf96575ea4c2a97a6535628f7f8b10e6',
sequenceNo: 4294967295,
outputScript:
'76a9144e532257c01b310b3b5c1fd947c79a72addf852388ac',
sats: 4969139n,
},
],
outputs: [
{
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
spentBy: {
txid: '8b52c1b2bc9be9077ed2c73b17f11ce3ebb59b70e105234a720c1631eea286c8',
outIdx: 0,
},
sats: 2200n,
},
{
outputScript:
'76a9144e532257c01b310b3b5c1fd947c79a72addf852388ac',
spentBy: {
txid: 'b37d047060424681b914496e683c6c9f255b77eb09232368c28d55d560f3a324',
outIdx: 2,
},
sats: 4966484n,
},
],
lockTime: 0,
timeFirstSeen: 1713225454,
size: 226,
isCoinbase: false,
tokenEntries: [],
tokenFailedParsings: [],
tokenStatus: 'TOKEN_STATUS_NON_TOKEN',
block: {
height: 840264,
hash: '00000000000000001a036ba6ec1cf775cdaf890c2814d1fb8160236034014ff5',
timestamp: 1713227574,
},
parsed: {
xecTxType: 'Received',
satoshisSent: 2200,
stackArray: [],
recipients: [
'ecash:qp89xgjhcqdnzzemts0aj378nfe2mhu9yvxj9nhgg6',
],
},
},
{
txid: 'd8a081bed886b085194410fd879286393734f428c9f64d9ece1c0afffb2695a2',
version: 2,
inputs: [
{
prevOut: {
txid: 'b05e7bbd402c0e04c192c532e5e35a3e3fb926d698c7eff8140fe304382af7b9',
outIdx: 1,
},
inputScript:
'473044022040c2a7becb3f92d93d80e654a1a75dab014db97c9fd4a07d62eb33aea2ac96e8022039ce536f6beeb913e45f9bb66e73c0d58bea3e4a385138981f2ac3a5b10dd291412103771805b54969a9bea4e3eb14a82851c67592156ddb5e52d3d53677d14a40fba6',
sequenceNo: 4294967295,
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
sats: 550n,
},
{
prevOut: {
txid: '83df946b2adab3ca9bd3da4e406f5a5494738532fe4da2f8a55a775080ea3d31',
outIdx: 2,
},
inputScript:
'483045022100f9450b18a10ea812c3ffc364d30f09b11e8b29bff589b852b39499d55a32fc4002202332a4cd95b543838282ee0a3841f4e14dd9b58f8cf70048bb01718b616c6fe4412103771805b54969a9bea4e3eb14a82851c67592156ddb5e52d3d53677d14a40fba6',
sequenceNo: 4294967295,
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
sats: 4269n,
},
],
outputs: [
{
outputScript:
'76a9144e532257c01b310b3b5c1fd947c79a72addf852388ac',
spentBy: {
txid: 'b37d047060424681b914496e683c6c9f255b77eb09232368c28d55d560f3a324',
outIdx: 1,
},
sats: 546n,
},
{
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
spentBy: {
txid: 'aa13c6f214ff58f36ed5e108a7f36d8f98729c50186b27a53b989c7f36fbf517',
outIdx: 1,
},
sats: 3899n,
},
],
lockTime: 0,
timeFirstSeen: 1713215165,
size: 373,
isCoinbase: false,
tokenEntries: [],
tokenFailedParsings: [],
tokenStatus: 'TOKEN_STATUS_NON_TOKEN',
block: {
height: 840260,
hash: '0000000000000000039a926e889bcca1771fbe710f327691e3713d0f0388f523',
timestamp: 1713216844,
},
parsed: {
xecTxType: 'Sent',
satoshisSent: 546,
stackArray: [],
recipients: [
'ecash:qp89xgjhcqdnzzemts0aj378nfe2mhu9yvxj9nhgg6',
],
},
},
{
txid: '83df946b2adab3ca9bd3da4e406f5a5494738532fe4da2f8a55a775080ea3d31',
version: 2,
inputs: [
{
prevOut: {
txid: '1efbeeb65c4bd31abd6d865d09b422c3ce7328b14e068ec75a8a218ced89300e',
outIdx: 1,
},
inputScript:
'4730440220419ca5831e327778a182a29e74933eea793b5e29302a6fcf7df9aae90f2769fb0220012de904e74fa2b09cbd12e7983a1e3a952f16d1a28d14afb5442ecfed0e5c9d412103771805b54969a9bea4e3eb14a82851c67592156ddb5e52d3d53677d14a40fba6',
sequenceNo: 4294967295,
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
sats: 550n,
},
{
prevOut: {
txid: '49856f9917f158af4b13c67455439fc2abaf22f2b7b561297144c65b62708b81',
outIdx: 1,
},
inputScript:
'47304402207035c52fafabfdb801f23864dbddc6d0fd8786d11f9bc043779734fc209f6656022078c118b885eefbb9577f5b5dc85390a6930336158813298fec760650fffd4693412103771805b54969a9bea4e3eb14a82851c67592156ddb5e52d3d53677d14a40fba6',
sequenceNo: 4294967295,
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
sats: 550n,
},
{
prevOut: {
txid: 'f7cec7b4f8ec4b9863c1f4ad30a2006169286db571b29550d87f5ff0da096dcd',
outIdx: 1,
},
inputScript:
'4730440220130c5767c4a5fe03841b8382f00544e4d32b796de881d153f7a195277ee2a90c02203304a27609f5ea996917292c8ffcb8cbff1f6d77093f63430dd909ae4644ea5b412103771805b54969a9bea4e3eb14a82851c67592156ddb5e52d3d53677d14a40fba6',
sequenceNo: 4294967295,
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
sats: 546n,
},
{
prevOut: {
txid: 'bb18ea2566cab82ed6862efbcff05c99d720b4e99845365c0a8d884b55f8fd5f',
outIdx: 0,
},
inputScript:
'483045022100c855f8cccf2aa2f94c93b0e11419090f0685484134e3cea6e36f692c3057526702206c9d77279873dc16069a01d48be902249a70265814f83133d6cb51db4cf2f9ac412103771805b54969a9bea4e3eb14a82851c67592156ddb5e52d3d53677d14a40fba6',
sequenceNo: 4294967295,
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
sats: 3300n,
},
{
prevOut: {
txid: '9e694e7fc3738975ce529ffa15937d6f192716059d32d663815c0d3f3682f1b5',
outIdx: 2,
},
inputScript:
'483045022100f8783e83fb1ba78ff2cb1bbc6a0032b7658c17f66a33610718726a0b0e462eac0220461749498d83bd8b19c800d3595fa64371a7f53f54ecf2fafad5f7f0932e92d7412103771805b54969a9bea4e3eb14a82851c67592156ddb5e52d3d53677d14a40fba6',
sequenceNo: 4294967295,
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
sats: 1354n,
},
{
prevOut: {
txid: 'c3b56aef4744db0a9e21cd06dd3356bcdd7c1ca67fc132040c42b1f8c9c65419',
outIdx: 2,
},
inputScript:
'473044022032709d0e9b5651e037ff4fbeea15a6ce6eef909b37585bfe7490536d6c5ae1c9022017954addf6e6305a6a60dbcbcfbcff96b7da386ccdc5355b391a7657510beed3412103771805b54969a9bea4e3eb14a82851c67592156ddb5e52d3d53677d14a40fba6',
sequenceNo: 4294967295,
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
sats: 112544758n,
},
],
outputs: [
{
outputScript:
'6a0464726f702050d8292c6255cda7afc6c8566fed3cf42a2794e9619740fe8f4c95431271410e',
sats: 0n,
},
{
outputScript:
'76a914a5417349420ec53b27522fed1a63b1672c0f28ff88ac',
sats: 12807n,
},
{
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
spentBy: {
txid: 'd8a081bed886b085194410fd879286393734f428c9f64d9ece1c0afffb2695a2',
outIdx: 1,
},
sats: 4269n,
},
{
outputScript:
'76a914d4fa9121bcd065dd93e58831569cf51ef5a74f6188ac',
sats: 12807n,
},
{
outputScript:
'76a914c1aadc99f96fcfcfe5642ca29a53e701f0b801c388ac',
sats: 4269n,
},
{
outputScript:
'76a914a714013e6336a0378a1f71ade875b2138813a3ec88ac',
sats: 17076n,
},
{
outputScript:
'76a914ee8cbaa5642d1c5d1af1503edda6a55044e8106e88ac',
sats: 4269n,
},
{
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
spentBy: {
txid: 'c9d93d05dbb03ab054e85ff83f675b204660199327331c460cc4690d17e094e2',
outIdx: 0,
},
sats: 112494377n,
},
],
lockTime: 0,
timeFirstSeen: 1713214152,
size: 1180,
isCoinbase: false,
tokenEntries: [],
tokenFailedParsings: [],
tokenStatus: 'TOKEN_STATUS_NON_TOKEN',
block: {
height: 840258,
hash: '0000000000000000206e36055520619fd93f187ce67049e77134d9cdc77aa48c',
timestamp: 1713214540,
},
parsed: {
xecTxType: 'Sent',
satoshisSent: 51228,
stackArray: [
'64726f70',
'50d8292c6255cda7afc6c8566fed3cf42a2794e9619740fe8f4c95431271410e',
],
recipients: [
'ecash:qzj5zu6fgg8v2we82gh76xnrk9njcreglum9ffspnr',
'ecash:qr204yfphngxthvnukyrz45u7500tf60vyqspva5a6',
'ecash:qrq64hyel9hulnl9vsk29xjnuuqlpwqpcv6mk9pqly',
'ecash:qzn3gqf7vvm2qdu2rac6m6r4kgfcsyaras7jfqja3m',
'ecash:qrhgew49vsk3chg679grahdx54gyf6qsdcurky8xms',
],
},
},
{
txid: '185cc0bdd6272f21ee09d9d5a1a17458af6b3ff968e371341d4b83d81540cdd7',
version: 2,
inputs: [
{
prevOut: {
txid: '17edc94a524f4fbe6673f7e0719d37c1ba5f392c6993456424049f3fc09b62a9',
outIdx: 1,
},
inputScript:
'483045022100d4a2eeb012456186bfe22b7653664a1de29596c67e59b109ea9fe25af63b94ae0220288c31fbf49fc870c66011b784476bf7704b95e2d8ad47597173a4c14bb17fbf412103318d0e1109f32debc66952d0e3ec21b1cf96575ea4c2a97a6535628f7f8b10e6',
sequenceNo: 4294967295,
token: {
tokenId:
'3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
entryIdx: 0,
atoms: 1n,
},
outputScript:
'76a9144e532257c01b310b3b5c1fd947c79a72addf852388ac',
sats: 546n,
},
{
prevOut: {
txid: '6605bb88f89bf0d4df6006c6b2c2498e1261ea770dc3fffc91e2248e51b9b026',
outIdx: 1,
},
inputScript:
'473044022034309ad3a4f18eb953a5d9b36e02bd4b85a6c8c885d8c3d83467c02b3999159802200c5ee31b15afc8ffc11b84169a95d571dae3b983d3ca7f578cda02abddefa1ad412103318d0e1109f32debc66952d0e3ec21b1cf96575ea4c2a97a6535628f7f8b10e6',
sequenceNo: 4294967295,
token: {
tokenId:
'3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
entryIdx: 0,
atoms: 1n,
},
outputScript:
'76a9144e532257c01b310b3b5c1fd947c79a72addf852388ac',
sats: 546n,
},
{
prevOut: {
txid: '94bf7fb1b2d37fed71085f9f32415f7426ed7cde692b9a9320ff6c811aa2db74',
outIdx: 1,
},
inputScript:
'483045022100e4a4cdb74a8c4950febd1609ad991a76e40700726f0229352c316af8f800333b0220442ab534fadf3dc874e0a0adf9e0dd4da06efa1d0ff190348928bcb3e7879514412103318d0e1109f32debc66952d0e3ec21b1cf96575ea4c2a97a6535628f7f8b10e6',
sequenceNo: 4294967295,
token: {
tokenId:
'3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
entryIdx: 0,
atoms: 1n,
},
outputScript:
'76a9144e532257c01b310b3b5c1fd947c79a72addf852388ac',
sats: 546n,
},
{
prevOut: {
txid: '49856f9917f158af4b13c67455439fc2abaf22f2b7b561297144c65b62708b81',
outIdx: 2,
},
inputScript:
'4830450221009ec6fca46fc588f61b2183a90bf77078b3203c2cb1bfa3bae55cffad1d42dbdf0220165989031ebaa54573bf7275c657e319822b714044d66927be060e61266d921b412103318d0e1109f32debc66952d0e3ec21b1cf96575ea4c2a97a6535628f7f8b10e6',
sequenceNo: 4294967295,
outputScript:
'76a9144e532257c01b310b3b5c1fd947c79a72addf852388ac',
sats: 1052n,
},
],
outputs: [
{
outputScript:
'6a04534c500001010453454e44203fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109080000000000000003',
sats: 0n,
},
{
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
token: {
tokenId:
'3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
entryIdx: 0,
atoms: 3n,
},
sats: 546n,
},
{
outputScript:
'76a9144e532257c01b310b3b5c1fd947c79a72addf852388ac',
spentBy: {
txid: 'b37d047060424681b914496e683c6c9f255b77eb09232368c28d55d560f3a324',
outIdx: 0,
},
sats: 668n,
},
],
lockTime: 0,
timeFirstSeen: 1713187945,
size: 733,
isCoinbase: false,
tokenEntries: [
{
tokenId:
'3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
txType: 'SEND',
isInvalid: false,
burnSummary: '',
failedColorings: [],
burnsMintBatons: false,
actualBurnAtoms: 0n,
intentionalBurnAtoms: 0n,
},
],
tokenFailedParsings: [],
tokenStatus: 'TOKEN_STATUS_NORMAL',
block: {
height: 840237,
hash: '00000000000000002cc404f4a2c0327a2d9e1e42d29fe6d6946eae00e5eadd4f',
timestamp: 1713188909,
},
parsed: {
xecTxType: 'Received',
satoshisSent: 546,
stackArray: [
'534c5000',
'01',
'53454e44',
'3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109',
'0000000000000003',
],
recipients: [
'ecash:qp89xgjhcqdnzzemts0aj378nfe2mhu9yvxj9nhgg6',
],
},
},
{
txid: 'b05e7bbd402c0e04c192c532e5e35a3e3fb926d698c7eff8140fe304382af7b9',
version: 2,
inputs: [
{
prevOut: {
txid: '1efbeeb65c4bd31abd6d865d09b422c3ce7328b14e068ec75a8a218ced89300e',
outIdx: 2,
},
inputScript:
'473044022063a275d60a80f247d01061789adda57130c04a837285c145ec9653468ae14beb02202684d99dc0e33a371caa084b36a8cfa7c1695180664171deb5c04a6ed9468fb5412103318d0e1109f32debc66952d0e3ec21b1cf96575ea4c2a97a6535628f7f8b10e6',
sequenceNo: 4294967295,
outputScript:
'76a9144e532257c01b310b3b5c1fd947c79a72addf852388ac',
sats: 1339n,
},
],
outputs: [
{
outputScript: '6a04636861740474657374',
sats: 0n,
},
{
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
spentBy: {
txid: 'd8a081bed886b085194410fd879286393734f428c9f64d9ece1c0afffb2695a2',
outIdx: 0,
},
sats: 550n,
},
],
lockTime: 0,
timeFirstSeen: 1713016209,
size: 211,
isCoinbase: false,
tokenEntries: [],
tokenFailedParsings: [],
tokenStatus: 'TOKEN_STATUS_NON_TOKEN',
block: {
height: 840122,
hash: '000000000000000017c3805e03ec4153b158452be04f2df1450f0ad337c07ebe',
timestamp: 1713016680,
},
parsed: {
xecTxType: 'Received',
satoshisSent: 550,
stackArray: ['63686174', '74657374'],
recipients: [],
},
},
{
txid: '9e694e7fc3738975ce529ffa15937d6f192716059d32d663815c0d3f3682f1b5',
version: 2,
inputs: [
{
prevOut: {
txid: 'ffeec164aa32f9a1e3cdff4d5b1ee17ca4761291ede89bcf149020171886c6dc',
outIdx: 0,
},
inputScript:
'473044022015da9381d87b0954dd047882b440a1c9357109f5b6fd83abc93e226772a0331702206c50261655afb351c9ff3049171f705103717e7fe031391644fccf824d910269412103771805b54969a9bea4e3eb14a82851c67592156ddb5e52d3d53677d14a40fba6',
sequenceNo: 4294967295,
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
sats: 2200n,
},
],
outputs: [
{
outputScript:
'6a04534c500001010747454e45534953024d67094d61676e657369756d1468747470733a2f2f636173687461622e636f6d2f4c0001014c0008ffffffffffffffff',
sats: 0n,
},
{
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
token: {
tokenId:
'9e694e7fc3738975ce529ffa15937d6f192716059d32d663815c0d3f3682f1b5',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
isMintBaton: false,
entryIdx: 0,
atoms: 18446744073709551615n,
},
sats: 546n,
},
{
outputScript:
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
spentBy: {
txid: '83df946b2adab3ca9bd3da4e406f5a5494738532fe4da2f8a55a775080ea3d31',
outIdx: 4,
},
sats: 1354n,
},
],
lockTime: 0,
timeFirstSeen: 1712879286,
size: 299,
isCoinbase: false,
tokenEntries: [
{
tokenId:
'9e694e7fc3738975ce529ffa15937d6f192716059d32d663815c0d3f3682f1b5',
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
txType: 'GENESIS',
isInvalid: false,
burnSummary: '',
failedColorings: [],
burnsMintBatons: false,
actualBurnAtoms: 0n,
intentionalBurnAtoms: 0n,
},
],
tokenFailedParsings: [],
tokenStatus: 'TOKEN_STATUS_NORMAL',
block: {
height: 840030,
hash: '000000000000000004e831e42308b70404225ed112f84e34df1e048a12e3aeac',
timestamp: 1712880601,
},
parsed: {
xecTxType: 'Sent',
satoshisSent: 1900,
stackArray: [
'534c5000',
'01',
'47454e45534953',
'4d67',
'4d61676e657369756d',
'68747470733a2f2f636173687461622e636f6d2f',
'',
'01',
'',
'ffffffffffffffff',
],
recipients: [],
},
},
],
},
mnemonic: 'army army army army army army army army army army army army',
paths: new Map([
[
1899,
{
address: 'ecash:qz2708636snqhsxu8wnlka78h6fdp77ar59jrf5035',
hash: '95e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d',
wif: '',
sk: new Uint8Array(),
pk: new Uint8Array(),
},
],
]),
name: 'Etokens Test',
};
export const EtokensStoredCashtabCache = {
tokens: [
[
'0000000000000000000000000000000000000000000000000000000000000000',
{
tokenType: {
protocol: 'UNKNOWN',
type: 'UNKNOWN',
number: 0,
},
timeFirstSeen: 0,
genesisInfo: {
tokenTicker: 'UNKNOWN',
tokenName: 'UNKNOWN',
url: 'UNKNOWN',
decimals: 0,
hash: 'UNKNOWN',
},
block: {
height: 0,
hash: 'UNKNOWN',
timestamp: 0,
},
genesisSupply: '0',
genesisMintBatons: 0,
genesisOutputScripts: [],
},
],
[
'7cd7cd7c54167d306e770f972b564584c44cb412ee45839b4b97bb6e724c8849',
{
tokenType: {
protocol: 'ALP',
type: 'ALP_TOKEN_TYPE_STANDARD',
number: 0,
},
genesisInfo: {
tokenTicker: 'tCRD',
tokenName: 'Test CRD',
url: 'https://crd.network/tcrd',
decimals: 4,
data: {
0: 0,
1: 0,
2: 0,
3: 0,
4: 0,
5: 0,
6: 0,
7: 0,
8: 0,
},
authPubkey:
'03d2dc0cea5c81593f1bfcd42763a21f5c85e7e8d053cdf990f8b383b892b72420',
},
timeFirstSeen: '0',
genesisSupply: '0.0000',
genesisOutputScripts: [
'76a91459ca25ea25f4f89a79b55c1c775ae515eb25b1fe88ac',
],
genesisMintBatons: 1,
block: {
height: 821187,
hash: '00000000000000002998aedef7c4fc2c52281e318461d66c3c9fe10151449448',
timestamp: 1701716369,
},
},
],
[
'6fb5525bf35ec6eb6a0608c8a3624891801cdf4c1079fc78462a24230bad27e2',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'S',
tokenName: 'Sulphur',
url: 'https://cashtab.com/',
decimals: 0,
hash: '',
},
timeFirstSeen: '1710948156',
genesisSupply: '100000',
genesisOutputScripts: [
'76a91400549451e5c22b18686cacdf34dce649e5ec3be288ac',
],
genesisMintBatons: 0,
block: {
height: 836700,
hash: '000000000000000014a2459ce878eecab3abfca3aede8b71b30121f210b48117',
timestamp: 1710948609,
},
},
],
[
'20a0b9337a78603c6681ed2bc541593375535dcd9979196620ce71f233f2f6f8',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'VSP',
tokenName: 'Vespene Gas',
url: 'https://simple.wikipedia.org/wiki/StarCraft#Gameplay',
decimals: 9,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '3000000000.000000000',
genesisOutputScripts: [
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
],
genesisMintBatons: 0,
block: {
height: 763087,
hash: '0000000000000000015abcebc15e74036598855a9fdd976868ad99bb23b87a89',
timestamp: 1666631359,
},
},
],
[
'182679afdec6d93fe7243f3ec5d032838cf9f268cf9656c4959a227617d076ef',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'MSB',
tokenName: 'Mint Send Burn',
url: 'https://cashtab.com/',
decimals: 9,
hash: '',
},
timeFirstSeen: '1713184114',
genesisSupply: '18446744073.709551615',
genesisOutputScripts: [
'76a91400549451e5c22b18686cacdf34dce649e5ec3be288ac',
],
genesisMintBatons: 1,
block: {
height: 840234,
hash: '00000000000000002c472b6939a90669b7348149cde579904c3bc394c644605f',
timestamp: 1713184929,
},
},
],
[
'bf24d955f59351e738ecd905966606a6837e478e1982943d724eab10caad82fd',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'ST',
tokenName: 'ST',
url: 'developer.bitcoin.com',
decimals: 0,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '399',
genesisOutputScripts: [
'76a9142ba1f72161a53720df933ea9b2116351c4162abd88ac',
],
genesisMintBatons: 1,
block: {
height: 625949,
hash: '00000000000000000071fae486bb8a703faacb1fdcc613bd024ac1c0870e16d8',
timestamp: 1583919726,
},
},
],
[
'dd84ca78db4d617221b58eabc6667af8fe2f7eadbfcc213d35be9f1b419beb8d',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'TAP',
tokenName: 'Thoughts and Prayers',
url: '',
decimals: 0,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '1000000',
genesisOutputScripts: [
'76a914458ea8631f32b296df9ab677b6e8a7e422e7161e88ac',
],
genesisMintBatons: 1,
block: {
height: 580703,
hash: '000000000000000000d4d1d3ecb1a6134e3e4bb2ffd457f267e5e44139f2505f',
timestamp: 1556742931,
},
},
],
[
'50d8292c6255cda7afc6c8566fed3cf42a2794e9619740fe8f4c95431271410e',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'TBC',
tokenName: 'tabcash',
url: 'https://cashtabapp.com/',
decimals: 0,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '100',
genesisOutputScripts: [
'76a914b8d9512d2adf8b4e70c45c26b6b00d75c28eaa9688ac',
],
genesisMintBatons: 1,
block: {
height: 674143,
hash: '000000000000000034c77993a35c74fe2dddace27198681ca1e89e928d0c2fff',
timestamp: 1613859311,
},
},
],
[
'f36e1b3d9a2aaf74f132fef3834e9743b945a667a4204e761b85f2e7b65fd41a',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'POW',
tokenName: 'ProofofWriting.com Token',
url: 'https://www.proofofwriting.com/26',
decimals: 0,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '1000000',
genesisOutputScripts: [
'76a91485bab3680833cd9b3cc60953344fa740a2235bbd88ac',
],
genesisMintBatons: 0,
block: {
height: 685949,
hash: '0000000000000000436e71d5291d2fb067decc838dcb85a99ff6da1d28b89fad',
timestamp: 1620712051,
},
},
],
[
'e859eeb52e7afca6217fb36784b3b6d3c7386a52f391dd0d00f2ec03a5e8e77b',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'test',
tokenName: 'test',
url: 'https://cashtab.com/',
decimals: 1,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '1.0',
genesisOutputScripts: [
'76a914f5f740bc76e56b77bcab8b4d7f888167f416fc6888ac',
],
genesisMintBatons: 0,
block: {
height: 717055,
hash: '0000000000000000113b17f038ac607eb5ef3c5636bf47088f692695b229d1cf',
timestamp: 1639066280,
},
},
],
[
'8ead21ce4b3b9e7b57607b97b65b5013496dc6e3dfdea162c08ce7265a66ebc8',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'IFP',
tokenName: 'Infrastructure Funding Proposal Token',
url: 'ifp.cash',
decimals: 8,
hash: 'b1674191a88ec5cdd733e4240a81803105dc412d6c6708d53ab94fc248f4f553',
},
timeFirstSeen: '0',
genesisSupply: '21000000.00000000',
genesisOutputScripts: [
'76a9146e68110cc00a5d5f1c6c796c1a54f26b364cf06988ac',
],
genesisMintBatons: 0,
block: {
height: 650236,
hash: '0000000000000000029d56ae91f48538121ce5e64c656053a1ddfda72249338d',
timestamp: 1598560882,
},
},
],
[
'da9460ce4b1c92b4f6ef4e4a6bc2d05539f49d02b17681389d9ce22b8dca50f0',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'SA',
tokenName: 'Spinner Alpha',
url: 'https://cashtabapp.com/',
decimals: 0,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '333',
genesisOutputScripts: [
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
],
genesisMintBatons: 0,
block: {
height: 700677,
hash: '000000000000000000b31f812d4eacbe21ac1b6b55542cdc92de2634b263c8b7',
timestamp: 1629467912,
},
},
],
[
'54dc2ecd5251f8dfda4c4f15ce05272116b01326076240e2b9cc0104d33b1484',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'Alita',
tokenName: 'Alita',
url: 'alita.cash',
decimals: 4,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '21000000000.0000',
genesisOutputScripts: [
'76a914f5f740bc76e56b77bcab8b4d7f888167f416fc6888ac',
],
genesisMintBatons: 0,
block: {
height: 756373,
hash: '00000000000000000d62f1b66c08f0976bcdec2f08face2892ae4474b50100d9',
timestamp: 1662611972,
},
},
],
[
'acba1d7f354c6d4d001eb99d31de174e5cea8a31d692afd6e7eb8474ad541f55',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'CTB',
tokenName: 'CashTabBits',
url: 'https://cashtabapp.com/',
decimals: 9,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '10000000000.000000000',
genesisOutputScripts: [
'76a914b8d9512d2adf8b4e70c45c26b6b00d75c28eaa9688ac',
],
genesisMintBatons: 1,
block: {
height: 662874,
hash: '000000000000000055df35f930c6e9ef6f4c51f1df6650d53eb3390cb92503fa',
timestamp: 1606935101,
},
},
],
[
'0916e71779c9de7ee125741d3f5ab01f556356dbc86fd327a24f1e9e22ebc917',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'CTL2',
tokenName: 'Cashtab Token Launch Launch Token v2',
url: 'thecryptoguy.com',
decimals: 0,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '2000',
genesisOutputScripts: [
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
],
genesisMintBatons: 0,
block: {
height: 684993,
hash: '00000000000000004c2f629c06444ec73fd059e1ee55e99d5e4b7bbff24f176a',
timestamp: 1620160437,
},
},
],
[
'df808a41672a0a0ae6475b44f272a107bc9961b90f29dc918d71301f24fe92fb',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'NAKAMOTO',
tokenName: 'NAKAMOTO',
url: '',
decimals: 8,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '21000000.00000000',
genesisOutputScripts: [
'76a91433c0448680ca324225eeca7a230cf191ab88400288ac',
],
genesisMintBatons: 0,
block: {
height: 555671,
hash: '000000000000000000aeb2168da809c07ede4de5ec2109df43bf49ef13805ddc',
timestamp: 1541634138,
},
},
],
[
'ccf5fe5a387559c8ab9efdeb0c0ef1b444e677298cfddf07671245ce3cb3c79f',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'XGB',
tokenName: 'Garmonbozia',
url: 'https://twinpeaks.fandom.com/wiki/Garmonbozia',
decimals: 8,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '1000.00000000',
genesisOutputScripts: [
'76a914d4fa9121bcd065dd93e58831569cf51ef5a74f6188ac',
],
genesisMintBatons: 0,
block: {
height: 685147,
hash: '00000000000000000955aad3a91d39a54197e5eb567660a41cb25c08430a991a',
timestamp: 1620241359,
},
},
],
[
'7f8889682d57369ed0e32336f8b7e0ffec625a35cca183f4e81fde4e71a538a1',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'HONK',
tokenName: 'HONK HONK',
url: 'THE REAL HONK SLP TOKEN',
decimals: 0,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '100000000000',
genesisOutputScripts: [
'76a91453c0098567382f003437a016edcc47de1436746988ac',
],
genesisMintBatons: 0,
block: {
height: 576633,
hash: '000000000000000001400c74bf6ea59af97680bb6ee5b8918f0296795191dc56',
timestamp: 1554290938,
},
},
],
[
'bdb3b4215ca0622e0c4c07655522c376eaa891838a82f0217fa453bb0595a37c',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'Service',
tokenName: 'Evc token',
url: 'https://cashtab.com',
decimals: 0,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '95000000000',
genesisOutputScripts: [
'76a91463a17ac732fd6afe8699b240a29b483246308de788ac',
],
genesisMintBatons: 0,
block: {
height: 715115,
hash: '000000000000000008685ec611c9ab59dd1062431e3b40a7e27c0320c4993f68',
timestamp: 1637890451,
},
},
],
[
'157e0cdef5d5c51bdea00eac9ab821d809bb9d03cf98da85833614bedb129be6',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'CLNSP',
tokenName: 'ComponentLongNameSpeedLoad',
url: 'https://cashtabapp.com/',
decimals: 0,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '100',
genesisOutputScripts: [
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
],
genesisMintBatons: 0,
block: {
height: 685168,
hash: '00000000000000001cd7cfe38ef8173732989f73bd4818e13db2b909c4cea007',
timestamp: 1620249731,
},
},
],
[
'1101bd5d7b6bbc3176fb2b93d08e76ab532b04ff731d71502249e3cb9b6fcb1a',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'XBIT',
tokenName: 'eBits',
url: 'https://boomertakes.com/',
decimals: 9,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '1000000.000000000',
genesisOutputScripts: [
'76a914b8d9512d2adf8b4e70c45c26b6b00d75c28eaa9688ac',
],
genesisMintBatons: 1,
block: {
height: 680776,
hash: '00000000000000003667d7cd150a1a29c78f5fab9360ab3c0e32eba99f9e2c08',
timestamp: 1617733350,
},
},
],
[
'6e24e89b6d5284138c69777527760500b99614631bca7f2a5c38f4648dae9524',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'CBB',
tokenName: 'Cashtab Beta Bits',
url: 'https://cashtabapp.com/',
decimals: 0,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '1000000000',
genesisOutputScripts: [
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
],
genesisMintBatons: 0,
block: {
height: 700469,
hash: '00000000000000000bb5f9bb8e292c0017c34e05708f74eae3ae09ff18f6bc89',
timestamp: 1629339994,
},
},
],
[
'4bd147fc5d5ff26249a9299c46b80920c0b81f59a60e05428262160ebee0b0c3',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'NOCOVID',
tokenName: 'Covid19 Lifetime Immunity',
url: 'https://www.who.int/emergencies/diseases/novel-coronavirus-2019/covid-19-vaccines',
decimals: 0,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '1000000',
genesisOutputScripts: [
'76a914b8d9512d2adf8b4e70c45c26b6b00d75c28eaa9688ac',
],
genesisMintBatons: 1,
block: {
height: 680063,
hash: '000000000000000012ad3d6dfb3505616ab9c3cb3772abac0448ddfc25043df4',
timestamp: 1617304616,
},
},
],
[
'b9877d8f8d2364b983707df905d592f534a3ada18e52aa529a0f72fcc535abf7',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'SRM',
tokenName: 'Server Redundancy Mint',
url: 'https://cashtab.com/',
decimals: 0,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '5',
genesisOutputScripts: [
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
],
genesisMintBatons: 0,
block: {
height: 757433,
hash: '000000000000000006f6ed1242ab08be563c8ea6898a38fa09b986e9507b8003',
timestamp: 1663251085,
},
},
],
[
'70ead4d94c43fe8c5576bb2528fd54380d8356f632ac962b1e03fb287607dfd4',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'NCBT',
tokenName: 'newChatBotTest',
url: 'alias.etokens.cash',
decimals: 0,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '100',
genesisOutputScripts: [
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
],
genesisMintBatons: 0,
block: {
height: 783693,
hash: '000000000000000008db6b50a881d28867d152ada018afb4b995d3b64a1e17eb',
timestamp: 1679073789,
},
},
],
[
'ff9aa6eebcd1331f8684d53b441cfa3060a4ffc403b417d5728de8ab231f5516',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'NCBT',
tokenName: 'newChatBotTest',
url: 'alias.etokens.cash',
decimals: 0,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '100',
genesisOutputScripts: [
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
],
genesisMintBatons: 0,
block: {
height: 783694,
hash: '00000000000000000bf1b32605951ddcf4d4d9d240f73f19b4f505b8d935fb1b',
timestamp: 1679074454,
},
},
],
[
'f077f207fc8a8557e5f0ffc6021685ab4b357e9b92d2b5c4192dcb7760ee6e29',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'NCBT',
tokenName: 'newChatBotTest',
url: 'alias.etokens.cash',
decimals: 0,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '100',
genesisOutputScripts: [
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
],
genesisMintBatons: 0,
block: {
height: 783695,
hash: '000000000000000015ade1e6be40db716077affda1e9c38d163a63981d4fab41',
timestamp: 1679077205,
},
},
],
[
'3adbf501e21c711d20118e003711168eb39f560c01f4c6d6736fa3f3fceaa577',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'OMI',
tokenName: 'Omicron',
url: 'cdc.gov',
decimals: 0,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '1000000000',
genesisOutputScripts: [
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
],
genesisMintBatons: 0,
block: {
height: 717653,
hash: '000000000000000004cc2d26068bcd8dcab87841b0ce6b5150f4f8b6ccff6d10',
timestamp: 1639430827,
},
},
],
[
'3de671a7107d3803d78f7f4a4e5c794d0903a8d28d16076445c084943c1e2db8',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'CLB',
tokenName: 'Cashtab Local Beta',
url: 'boomertakes.com',
decimals: 2,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '22.22',
genesisOutputScripts: [
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
],
genesisMintBatons: 0,
block: {
height: 688194,
hash: '00000000000000003d718f77c7b914230be2357a1863542d9ce99994836e5eac',
timestamp: 1622049539,
},
},
],
[
'4db25a4b2f0b57415ce25fab6d9cb3ac2bbb444ff493dc16d0615a11ad06c875',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'LVV',
tokenName: 'Lambda Variant Variants',
url: 'https://cashtabapp.com/',
decimals: 0,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '1000000',
genesisOutputScripts: [
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
],
genesisMintBatons: 0,
block: {
height: 700722,
hash: '0000000000000000260ee4c3b4f4ddde127bc0105d685c0ef31775b612627222',
timestamp: 1629500864,
},
},
],
[
'98183238638ecb4ddc365056e22de0e8a05448c1e6084bae247fae5a74ad4f48',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'DVV',
tokenName: 'Delta Variant Variants',
url: 'https://cashtabapp.com/',
decimals: 0,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '999999999',
genesisOutputScripts: [
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
],
genesisMintBatons: 0,
block: {
height: 700469,
hash: '00000000000000000bb5f9bb8e292c0017c34e05708f74eae3ae09ff18f6bc89',
timestamp: 1629339994,
},
},
],
[
'7443f7c831cdf2b2b04d5f0465ed0bcf348582675b0e4f17906438c232c22f3d',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'WDT',
tokenName:
'Test Token With Exceptionally Long Name For CSS And Style Revisions',
url: 'https://www.ImpossiblyLongWebsiteDidYouThinkWebDevWouldBeFun.org',
decimals: 7,
hash: '85b591c15c9f49531e39fcfeb2a5a26b2bd0f7c018fb9cd71b5d92dfb732d5cc',
},
timeFirstSeen: '0',
genesisSupply: '100000.0000000',
genesisOutputScripts: [
'76a91419884c453167cf3011a3363b4b1ebd926bde059f88ac',
],
genesisMintBatons: 1,
block: {
height: 659948,
hash: '000000000000000002e096ec3fda458dab941cd2ab40a7be10d54e88c9b06f37',
timestamp: 1604423892,
},
},
],
[
'b977630ae1b4a0fe3ab12385fdaaffd974e5bd352f2a817ce135c1ee6005a35d',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'DNR',
tokenName: 'Denarius',
url: 'https://cashtab.com/',
decimals: 0,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '753',
genesisOutputScripts: [
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
],
genesisMintBatons: 0,
block: {
height: 767340,
hash: '00000000000000000aa6f475f0ef63c88c19d56217972534fb5cb6f98586845a',
timestamp: 1669201819,
},
},
],
[
'6376cae692cf0302ecdd63234c14cbb2b21cec75ab538335f90254cfb3ed44cc',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'CLT',
tokenName: 'Cashtab Local Tests',
url: 'https://cashtab.com/',
decimals: 0,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '50000',
genesisOutputScripts: [
'76a9144e532257c01b310b3b5c1fd947c79a72addf852388ac',
],
genesisMintBatons: 0,
block: {
height: 720056,
hash: '00000000000000001539b8b8d9e7d9459eb16ad84d387fc13326a34d7e09633d',
timestamp: 1640867749,
},
},
],
[
'bd1acc4c986de57af8d6d2a64aecad8c30ee80f37ae9d066d758923732ddc9ba',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'TBS',
tokenName: 'TestBits',
url: 'https://thecryptoguy.com/',
decimals: 9,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '10000000000.000000000',
genesisOutputScripts: [
'76a914b8d9512d2adf8b4e70c45c26b6b00d75c28eaa9688ac',
],
genesisMintBatons: 1,
block: {
height: 662989,
hash: '000000000000000022f3b95ea9544c77938f232601b87a82b5c375b81e0123ae',
timestamp: 1607034208,
},
},
],
[
'639a8dba34788ff3ebd3977d4ac045825394285ee648bb1d159e1c12b787ff25',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'CFL',
tokenName: 'Cashtab Facelift',
url: 'https://cashtab.com/',
decimals: 9,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '10000.000000000',
genesisOutputScripts: [
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
],
genesisMintBatons: 0,
block: {
height: 726826,
hash: '000000000000000007ba9fcd82bc10d70a55d4d74cb041cf234699c746d1c635',
timestamp: 1644953895,
},
},
],
[
'45f0ff5cae7e89da6b96c26c8c48a959214c5f0e983e78d0925f8956ca8848c6',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'CMA',
tokenName: 'CashtabMintAlpha',
url: 'https://cashtabapp.com/',
decimals: 5,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '55.55555',
genesisOutputScripts: [
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
],
genesisMintBatons: 0,
block: {
height: 685170,
hash: '000000000000000025782a5b5b44efb49f9c3f86ef7355dc36010afc6624e3fd',
timestamp: 1620250206,
},
},
],
[
'a6050bea718f77e7964d140c4bb89cd88a1816eed1633f19d097835d5fa48df5',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'IWF',
tokenName: 'Insanity Wolf',
url: 'https://cashtab.com/',
decimals: 0,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '1000',
genesisOutputScripts: [
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
],
genesisMintBatons: 0,
block: {
height: 832625,
hash: '00000000000000001677f56a57d820e02079e4a3ed62d7aeb0acbf7fa937b8bb',
timestamp: 1708546646,
},
},
],
[
'b19b4c83056f6e3dace0e786446a8ccd73f22cfc42c3013808c532ab43490a14',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'GYP',
tokenName: 'Gypsum',
url: 'https://cashtab.com/',
decimals: 9,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '10000000000.000000000',
genesisOutputScripts: [
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
],
genesisMintBatons: 0,
block: {
height: 832778,
hash: '000000000000000002113ac0f6519d1a51a933bb5c8f665875d5ff5ead6e0274',
timestamp: 1708641780,
},
},
],
[
'fb4233e8a568993976ed38a81c2671587c5ad09552dedefa78760deed6ff87aa',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'GRP',
tokenName: 'GRUMPY',
url: 'https://bit.ly/GrumpyDoc',
decimals: 2,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '10000000000.00',
genesisOutputScripts: [
'76a9141c13ddb8dd422bbe02dc2ae8798b4549a67a3c1d88ac',
],
genesisMintBatons: 0,
block: {
height: 713853,
hash: '0000000000000000006a051e51b50e44d3394ab49c9db896c2484770ed613fb2',
timestamp: 1637109257,
},
},
],
[
'79c5a1cec698350dd93f645fcae8d6ff3902b7cdc582839dfface3cb0c83d823',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'TRIB',
tokenName: 'eCash Herald',
url: 'https://cashtab.com/',
decimals: 0,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '10000',
genesisOutputScripts: [
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
],
genesisMintBatons: 0,
block: {
height: 782665,
hash: '00000000000000001239831f90580c859ec174316e91961cf0e8cde57c0d3acb',
timestamp: 1678408305,
},
},
],
[
'01d63c4f4cb496829a6743f7b1805d086ea3877a1dd34b3f92ffba2c9c99f896',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'BULL',
tokenName: 'Bull',
url: 'https://cashtab.com/',
decimals: 0,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '21000000',
genesisOutputScripts: [
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
],
genesisMintBatons: 0,
block: {
height: 835482,
hash: '0000000000000000133bf16cb7fdab5c6ff64a874632eb2fe80265e34a6ad99f',
timestamp: 1710174132,
},
},
],
[
'666c4318d1f7fef5f2c698262492c519018d4e9130f95d05f6be9f0fb7149e96',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'CPG',
tokenName: 'Cashtab Prod Gamma',
url: 'thecryptoguy.com',
decimals: 0,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '100',
genesisOutputScripts: [
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
],
genesisMintBatons: 0,
block: {
height: 688495,
hash: '000000000000000028aa42a7c622846b742465dfaaf41d29f955c1b8ee890c9e',
timestamp: 1622237370,
},
},
],
[
'b132878bfa81cf1b9e19192045ed4c797b10944cc17ae07da06aed3d7b566cb7',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'ABC',
tokenName: 'ABC',
url: 'https://cashtab.com/',
decimals: 0,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '12',
genesisOutputScripts: [
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
],
genesisMintBatons: 0,
block: {
height: 832725,
hash: '000000000000000016d97961a24ac3460160bbc439810cd2af684264ae15083b',
timestamp: 1708607039,
},
},
],
[
'9404761d1a01cca11c29eb8ed9ddc63966526d0eaa54f148e8862ab3e884132f',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'CAFF',
tokenName: 'Coffee',
url: 'https://cashtab.com/',
decimals: 9,
hash: '',
},
timeFirstSeen: '1711020786',
genesisSupply: '55.000000000',
genesisOutputScripts: [
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
],
genesisMintBatons: 0,
block: {
height: 836820,
hash: '00000000000000000afa24f7d3cab51184e1469cecd61bf472d3a3fcc907bc19',
timestamp: 1711021281,
},
},
],
[
'16b12bbacdbb8c8a799adbfd782bfff9843c1f9b0be148eaae02a1a7f74f95c4',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'CGEN',
tokenName: 'Cashtab Genesis',
url: 'https://boomertakes.com/',
decimals: 9,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '1000000.000000000',
genesisOutputScripts: [
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
],
genesisMintBatons: 0,
block: {
height: 684837,
hash: '00000000000000001d065fdd22416c4e8e99803964f4fb9c91af6feb5ead5ff3',
timestamp: 1620082584,
},
},
],
[
'cf601c56b58bc05a39a95374a4a865f0a8b56544ea937b30fb46315441717c50',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'UDT',
tokenName: 'UpdateTest',
url: 'https://cashtab.com/',
decimals: 7,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '777.7777777',
genesisOutputScripts: [
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
],
genesisMintBatons: 0,
block: {
height: 759037,
hash: '00000000000000000bc95bfdd45e71585f27139e71b56dd5bc86ef05d35b502f',
timestamp: 1664226709,
},
},
],
[
'18625b25d4b9b9ebf23ee5575484a67ff2477873a253b16081f964b8f9ca7c28',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: '223',
tokenName: '.223',
url: 'https://cashtab.com/',
decimals: 0,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '22300000',
genesisOutputScripts: [
'76a914ef9ed343e3e9ef97b589145625d69c26407ae09988ac',
],
genesisMintBatons: 0,
block: {
height: 768943,
hash: '000000000000000009afb1b7ed53dc59b24732cb0a0a7841654d1acd073d29bd',
timestamp: 1670166309,
},
},
],
[
'b8f2a9e767a0be7b80c7e414ef2534586d4da72efddb39a4e70e501ab73375cc',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'CTD',
tokenName: 'Cashtab Dark',
url: 'https://cashtab.com/',
decimals: 0,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '10000',
genesisOutputScripts: [
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
],
genesisMintBatons: 0,
block: {
height: 726043,
hash: '00000000000000000182db32e000171006b7b7820181676b5fd8f29cc90d2b9c',
timestamp: 1644455332,
},
},
],
[
'b40d1f6acdb6ee68d7eca0167fe2753c076bc309b2e3b1af8bff70ca34b945b0',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'KAT',
tokenName: 'KA_Test',
url: 'https://cashtab.com/',
decimals: 0,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '100000000',
genesisOutputScripts: [
'76a914a528a001f9f027aae05085928d0b23172fd4b5a188ac',
],
genesisMintBatons: 0,
block: {
height: 727176,
hash: '00000000000000000a37233b9ed0520368c58437fc4ce5edbda386a4619440f5',
timestamp: 1645146139,
},
},
],
[
'aed861a31b96934b88c0252ede135cb9700d7649f69191235087a3030e553cb1',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'CACHET',
tokenName: 'Cachet',
url: 'https://cashtab.com/',
decimals: 2,
hash: '',
},
timeFirstSeen: '1711776546',
genesisSupply: '100000.00',
genesisOutputScripts: [
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
],
genesisMintBatons: 1,
block: {
height: 838192,
hash: '0000000000000000132232769161d6211f7e6e20cf63b26e5148890aacd26962',
timestamp: 1711779364,
},
},
],
[
'77ec4036ef8546ac46df6d3a5374e961216f92624627eaeef5d2e1a253df9fc6',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'CTLv3',
tokenName: 'Cashtab Token Launch Launch Token v3',
url: 'coinex.com',
decimals: 0,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '333',
genesisOutputScripts: [
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
],
genesisMintBatons: 0,
block: {
height: 684994,
hash: '0000000000000000384706dfb07ac54ff08d0b143bebc51b130dac5caa7c4eae',
timestamp: 1620160484,
},
},
],
[
'97283f832815016e848612acf8a5d097089ed24bd62d407887b3be1d7aa8960f',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'BOHR',
tokenName: 'Atoms',
url: 'https://cashtab.com/',
decimals: 9,
hash: '',
},
timeFirstSeen: '1711894363',
genesisSupply: '0.000000001',
genesisOutputScripts: [
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
],
genesisMintBatons: 1,
block: {
height: 838367,
hash: '00000000000000000ea296488585ea491bd08a8ed68f5de714f92238f91e85d6',
timestamp: 1711894594,
},
},
],
[
'6a9305a13135625f4b533256e8d2e21a7343005331e1839348a39040f61e09d3',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'SCOOG',
tokenName: 'Scoogi Alpha',
url: 'cashtab.com',
decimals: 0,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '6969',
genesisOutputScripts: [
'76a91476458db0ed96fe9863fc1ccec9fa2cfab884b0f688ac',
],
genesisMintBatons: 0,
block: {
height: 714695,
hash: '0000000000000000004cfe7cf02020f469d84a4e0eca90f1b646a89b9f018ccf',
timestamp: 1637624763,
},
},
],
[
'b39fdb53e21d67fa5fd3a11122f1452f15884047f2b80e8efe633c3b520b7a39',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'SCΩΩG',
tokenName: 'Scoogi Omega',
url: 'https://cashtab.com/',
decimals: 0,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '6969',
genesisOutputScripts: [
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
],
genesisMintBatons: 0,
block: {
height: 715111,
hash: '0000000000000000029e7e0884d9f8b94437d146476ba12aa52815320d497be2',
timestamp: 1637879760,
},
},
],
[
'9e694e7fc3738975ce529ffa15937d6f192716059d32d663815c0d3f3682f1b5',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'Mg',
tokenName: 'Magnesium',
url: 'https://cashtab.com/',
decimals: 1,
hash: '',
},
timeFirstSeen: '1712879286',
genesisSupply: '1844674407370955161.5',
genesisOutputScripts: [
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
],
genesisMintBatons: 0,
block: {
height: 840030,
hash: '000000000000000004e831e42308b70404225ed112f84e34df1e048a12e3aeac',
timestamp: 1712880601,
},
},
],
[
'b0794f985a728aa65997e5606b79081aa20978d8a299da1d2ea709102f03a604',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'Mo',
tokenName: 'Molybdenum',
url: 'https://cashtab.com/',
decimals: 4,
hash: '',
},
timeFirstSeen: '1712878861',
genesisSupply: '1844674407370955.1615',
genesisOutputScripts: [
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
],
genesisMintBatons: 0,
block: {
height: 840030,
hash: '000000000000000004e831e42308b70404225ed112f84e34df1e048a12e3aeac',
timestamp: 1712880601,
},
},
],
[
'c3b56aef4744db0a9e21cd06dd3356bcdd7c1ca67fc132040c42b1f8c9c65419',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'Se',
tokenName: 'Selenium',
url: 'https://cashtab.com/',
decimals: 7,
hash: '',
},
timeFirstSeen: '1712878385',
genesisSupply: '1844674407370.9551615',
genesisOutputScripts: [
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
],
genesisMintBatons: 0,
block: {
height: 840030,
hash: '000000000000000004e831e42308b70404225ed112f84e34df1e048a12e3aeac',
timestamp: 1712880601,
},
},
],
[
'3fee3384150b030490b7bee095a63900f66a45f2d8e3002ae2cf17ce3ef4d109',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'BEAR',
tokenName: 'BearNip',
url: 'https://cashtab.com/',
decimals: 0,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '4444',
genesisOutputScripts: [
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
],
genesisMintBatons: 0,
block: {
height: 782665,
hash: '00000000000000001239831f90580c859ec174316e91961cf0e8cde57c0d3acb',
timestamp: 1678408305,
},
},
],
[
'27277911435164c511c7dbc3ef00ba5ce9edf8c1ccab93681cb0ad984b801ef1',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'SCOOG',
tokenName: 'Scoogi Alpha',
url: 'cashtab.com',
decimals: 0,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '6969',
genesisOutputScripts: [
'76a91476458db0ed96fe9863fc1ccec9fa2cfab884b0f688ac',
],
genesisMintBatons: 0,
block: {
height: 714695,
hash: '0000000000000000004cfe7cf02020f469d84a4e0eca90f1b646a89b9f018ccf',
timestamp: 1637624763,
},
},
],
[
'7bbf452698a24b138b0357f689587fc6ea58410c34503b1179b91e40e10bba8b',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'COVID',
tokenName: 'COVID-19',
url: 'https://en.wikipedia.org/wiki/COVID-19',
decimals: 0,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '10000000000',
genesisOutputScripts: [
'76a91495e79f51d4260bc0dc3ba7fb77c7be92d0fbdd1d88ac',
],
genesisMintBatons: 0,
block: {
height: 716909,
hash: '00000000000000000fc11b1bc4bb87ac76efbde32abdeb1c6aa1102c5d0a9718',
timestamp: 1638980176,
},
},
],
[
'bfddfcfc9fb9a8d61ed74fa94b5e32ccc03305797eea461658303df5805578ef',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'Sending Token',
tokenName: 'Sending Token',
url: 'developer.bitcoin.com',
decimals: 9,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '100.999999999',
genesisOutputScripts: [
'76a9142ba1f72161a53720df933ea9b2116351c4162abd88ac',
],
genesisMintBatons: 1,
block: {
height: 625313,
hash: '000000000000000000ca9ad079ac05c01231d25fa368b48562dc760a2e04dc42',
timestamp: 1583536827,
},
},
],
[
'48090bcd94cf53289ce84e1d4aeb8035f6ea7d80d37baa6343d0f71e7d67a3ef',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'WP5',
tokenName: 'Webpack 5',
url: 'boomertakes.com',
decimals: 0,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '100',
genesisOutputScripts: [
'76a91476458db0ed96fe9863fc1ccec9fa2cfab884b0f688ac',
],
genesisMintBatons: 0,
block: {
height: 732781,
hash: '00000000000000000bb4868228eb63c5190e5aa852c1c8b8baf75bb6bd4de93d',
timestamp: 1648502195,
},
},
],
[
'8b402aab7682e1cef3da83bf754ae722cc95c3118dfe6e2149267f9a9e2ecc63',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'AUG5',
tokenName: 'August 5',
url: 'https://cashtab.com/',
decimals: 0,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '365',
genesisOutputScripts: [
'76a91476458db0ed96fe9863fc1ccec9fa2cfab884b0f688ac',
],
genesisMintBatons: 0,
block: {
height: 751457,
hash: '00000000000000000f462910437da35eb21da18e998777055eee03d5b0e34520',
timestamp: 1659723124,
},
},
],
[
'2502bdc75d3afdce0742505d53e6d50cefb1268d7c2a835c06b701702b79e1b8',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'SCOOG',
tokenName: 'Scoogi Epsilon',
url: 'cashtab.com',
decimals: 0,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '6969',
genesisOutputScripts: [
'76a91476458db0ed96fe9863fc1ccec9fa2cfab884b0f688ac',
],
genesisMintBatons: 0,
block: {
height: 714701,
hash: '00000000000000000b5132db556d73331d9731b08f8663019ab18fede2c31415',
timestamp: 1637627213,
},
},
],
[
'f29939b961d8f3b27d7826e3f22451fcf9273ac84421312a20148b1e083a5bb0',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'SCOOG',
tokenName: 'Scoogi Beta',
url: 'cashtab.com',
decimals: 0,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '6969',
genesisOutputScripts: [
'76a91476458db0ed96fe9863fc1ccec9fa2cfab884b0f688ac',
],
genesisMintBatons: 0,
block: {
height: 714696,
hash: '000000000000000000fa0f63e6872937c69bcc243334d61d3deca19ab7d6dbdb',
timestamp: 1637625748,
},
},
],
[
'edb693529851379bcbd75008f78940df8232510e6a1c64d8dc81693ae2a53f66',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'SCOOG',
tokenName: 'Scoogi Eta',
url: 'cashtab.com',
decimals: 0,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '6969',
genesisOutputScripts: [
'76a91476458db0ed96fe9863fc1ccec9fa2cfab884b0f688ac',
],
genesisMintBatons: 0,
block: {
height: 714823,
hash: '000000000000000007a61693852f08085075cd6f49eda1997eb410769eae937c',
timestamp: 1637696526,
},
},
],
[
'c70d5f036368e184d2a52389b2f4c2471855aebaccbd418db24d4515ce062dbe',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'SCOOG',
tokenName: 'Scoogi Zeta',
url: 'cashtab.com',
decimals: 0,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '6969',
genesisOutputScripts: [
'76a91476458db0ed96fe9863fc1ccec9fa2cfab884b0f688ac',
],
genesisMintBatons: 0,
block: {
height: 714823,
hash: '000000000000000007a61693852f08085075cd6f49eda1997eb410769eae937c',
timestamp: 1637696526,
},
},
],
[
'55180a2527901ed4d7ef8f4d61d38d3543b0e7ac3aba04e7f4d3165c3320a6da',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'cARRRl',
tokenName: 'Dachshund Pirate Token',
url: 'https://cashtab.com/',
decimals: 0,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '10000',
genesisOutputScripts: [
'76a91476458db0ed96fe9863fc1ccec9fa2cfab884b0f688ac',
],
genesisMintBatons: 0,
block: {
height: 753313,
hash: '000000000000000005da78d538eaf54b1f741fef665f0c2081968b4ea54ecf04',
timestamp: 1660837488,
},
},
],
[
'bef614aac85c0c866f4d39e4d12a96851267d38d1bca5bdd6488bbd42e28b6b1',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'CTP',
tokenName: 'Cash Tab Points',
url: 'https://cashtabapp.com/',
decimals: 9,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '1000000000.000000000',
genesisOutputScripts: [
'76a91419884c453167cf3011a3363b4b1ebd926bde059f88ac',
],
genesisMintBatons: 1,
block: {
height: 660971,
hash: '00000000000000000334795ce566d1202a804e71422d05c93beb6afc4eb99cf3',
timestamp: 1605037203,
},
},
],
[
'a3add503bba986398b39fa2200ce658423a597b4f7fe9de04a2da4501f8b05a3',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'SCOOG',
tokenName: 'Scoogi Gamma',
url: 'cashtab.com',
decimals: 0,
hash: '',
},
timeFirstSeen: '0',
genesisSupply: '6969',
genesisOutputScripts: [
'76a91476458db0ed96fe9863fc1ccec9fa2cfab884b0f688ac',
],
genesisMintBatons: 0,
block: {
height: 714696,
hash: '000000000000000000fa0f63e6872937c69bcc243334d61d3deca19ab7d6dbdb',
timestamp: 1637625748,
},
},
],
[
'b47fd1da27ae1a940b727efffbe410cbd5c18bc0fbd1d5193d083c47d4c459f0',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_FUNGIBLE',
number: 1,
},
genesisInfo: {
tokenTicker: 'PLUTO',
tokenName: 'Plutonium',
url: 'https://cashtab.com/',
decimals: 9,
hash: '',
},
timeFirstSeen: '1711717550',
genesisSupply: '9999.000000000',
genesisOutputScripts: [
'76a91476458db0ed96fe9863fc1ccec9fa2cfab884b0f688ac',
],
genesisMintBatons: 0,
block: {
height: 838096,
hash: '000000000000000004e9f52e566c10a95a0eb57a6c74abb4cc41eb10641af403',
timestamp: 1711717943,
},
},
],
// NFT Collection
[
'5a9d91ae2730dffbd0795dd2f8bfda5a6ad905f374158c8df303ca5cc82f8620',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_NFT1_GROUP',
number: 129,
},
timeFirstSeen: 1716324230,
genesisInfo: {
tokenTicker: 'MASCOTS',
tokenName: 'Mascots',
url: 'cashtab.com',
decimals: 0,
hash: '2d0f7be21838551f43872cddda2213659f6603d0aec566dd8f917e49e172f27d',
},
block: {
height: 845656,
hash: '00000000000000001c7f33318a0ac58f2256696b302c2047ab73315943c0c6d7',
timestamp: 1716327571,
},
genesisSupply: '100',
genesisOutputScripts: [
'76a91476458db0ed96fe9863fc1ccec9fa2cfab884b0f688ac',
],
genesisMintBatons: 0,
},
],
// NFT
[
'e2db39ade16e971afba2087bf6e29a83d7579137900eb73e5d955bdb769204bb',
{
tokenType: {
protocol: 'SLP',
type: 'SLP_TOKEN_TYPE_NFT1_CHILD',
number: 65,
},
timeFirstSeen: 1725914476,
genesisInfo: {
tokenTicker: 'S5',
tokenName: 'Saturn V',
url: 'en.wikipedia.org/wiki/Saturn_V',
decimals: 0,
hash: 'ce2f92283c966e1e0f98ecf79b5a9122aac5e32cb865ecf1953820710ee62969',
},
block: {
height: 861567,
hash: '00000000000000001be902c2068d3848695eea5aa539383636ec62f5814fb9c8',
timestamp: 1725914985,
},
genesisSupply: '100',
genesisOutputScripts: [
'76a91476458db0ed96fe9863fc1ccec9fa2cfab884b0f688ac',
],
genesisMintBatons: 0,
},
],
],
};
diff --git a/cashtab/src/components/Send/SendXec.tsx b/cashtab/src/components/Send/SendXec.tsx
index 996b0b2a8..0c987e34d 100644
--- a/cashtab/src/components/Send/SendXec.tsx
+++ b/cashtab/src/components/Send/SendXec.tsx
@@ -1,1619 +1,1620 @@
// Copyright (c) 2024 The Bitcoin developers
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
import React, { useState, useEffect, useContext } from 'react';
import { useLocation } from 'react-router-dom';
import { WalletContext, isWalletContextLoaded } from 'wallet/context';
import Modal from 'components/Common/Modal';
import PrimaryButton from 'components/Common/Buttons';
import { toSatoshis, toXec, SlpDecimals } from 'wallet';
import { getSendTokenInputs, TokenInputInfo } from 'token-protocols';
import {
getNft,
getNftChildSendTargetOutputs,
getSlpSendTargetOutputs,
} from 'token-protocols/slpv1';
import { getAlpSendTargetOutputs } from 'token-protocols/alp';
import { sumOneToManyXec, confirmRawTx } from './helpers';
import { Event } from 'components/Common/GoogleAnalytics';
import {
isValidMultiSendUserInput,
shouldSendXecBeDisabled,
parseAddressInput,
isValidXecSendAmount,
getOpReturnRawError,
CashtabParsedAddressInfo,
isValidTokenSendOrBurnAmount,
} from 'validation';
import { ConvertAmount, Alert, AlertMsg, Info } from 'components/Common/Atoms';
import {
sendXec,
getMultisendTargetOutputs,
getMaxSendAmountSatoshis,
} from 'transactions';
import {
getCashtabMsgTargetOutput,
getAirdropTargetOutput,
getCashtabMsgByteCount,
getOpreturnParamTargetOutput,
parseOpReturnRaw,
ParsedOpReturnRaw,
} from 'opreturn';
import ApiError from 'components/Common/ApiError';
import { formatFiatBalance, formatBalance } from 'formatting';
import styled from 'styled-components';
import { opReturn as opreturnConfig } from 'config/opreturn';
import { explorer } from 'config/explorer';
import { supportedFiatCurrencies } from 'config/CashtabSettings';
import appConfig from 'config/app';
import { getUserLocale } from 'helpers';
import { hasEnoughToken, fiatToSatoshis } from 'wallet';
import { toast } from 'react-toastify';
import {
SendTokenBip21Input,
InputWithScanner,
SendXecInput,
TextArea,
} from 'components/Common/Inputs';
import Switch from 'components/Common/Switch';
import { opReturn } from 'config/opreturn';
import { Script } from 'ecash-lib';
import { CashtabCachedTokenInfo } from 'config/CashtabCache';
import TokenIcon from 'components/Etokens/TokenIcon';
import { getTokenGenesisInfo } from 'chronik';
import { InlineLoader } from 'components/Common/Spinner';
import {
AlpTokenType_Type,
SlpTokenType_Type,
TokenType,
GenesisInfo,
} from 'chronik-client';
import { SendButtonContainer } from './styled';
const OuterCtn = styled.div`
background: ${props => props.theme.primaryBackground};
padding: 20px;
border-radius: 10px;
`;
const SendXecForm = styled.div`
margin: 12px 0;
display: flex;
flex-direction: column;
gap: 12px;
`;
const SendXecRow = styled.div``;
const SwitchAndLabel = styled.div`
display: flex;
flex-direction: row;
align-items: center;
gap: 12px;
`;
const SwitchLabel = styled.div`
color: ${props => props.theme.primaryText};
`;
const SwitchContainer = styled.div`
display: flex;
align-items: center;
justify-content: flex-start;
color: ${props => props.theme.primaryText};
white-space: nowrap;
margin: 12px 0;
`;
const AmountPreviewCtn = styled.div`
margin: 12px;
display: flex;
flex-direction: column;
justify-content: center;
`;
const ParsedBip21InfoRow = styled.div`
display: flex;
flex-direction: column;
word-break: break-word;
`;
const ParsedBip21InfoLabel = styled.div`
color: ${props => props.theme.primaryText};
text-align: left;
width: 100%;
`;
const ParsedBip21Info = styled.div`
background-color: #fff2f0;
border-radius: 12px;
color: ${props => props.theme.accent};
padding: 12px;
text-align: left;
`;
const LocaleFormattedValue = styled.div`
color: ${props => props.theme.primaryText};
font-weight: bold;
font-size: var(--text-lg);
line-height: var(--text-lg--line-height);
margin-bottom: 0;
`;
const SendToOneHolder = styled.div``;
const SendToManyHolder = styled.div``;
const SendToOneInputForm = styled.div`
display: flex;
flex-direction: column;
gap: 12px;
`;
const InputModesHolder = styled.div<{ open: boolean }>`
min-height: 9rem;
${SendToOneHolder} {
overflow: hidden;
transition: ${props =>
props.open
? 'max-height 200ms ease-in, opacity 200ms ease-out'
: 'max-height 200ms cubic-bezier(0, 1, 0, 1), opacity 200ms ease-in'};
max-height: ${props => (props.open ? '0rem' : '12rem')};
opacity: ${props => (props.open ? 0 : 1)};
}
${SendToManyHolder} {
overflow: hidden;
transition: ${props =>
props.open
? 'max-height 200ms ease-in, transform 200ms ease-out, opacity 200ms ease-in'
: 'max-height 200ms cubic-bezier(0, 1, 0, 1), transform 200ms ease-out'};
max-height: ${props => (props.open ? '12rem' : '0rem')};
transform: ${props =>
props.open ? 'translateY(0%)' : 'translateY(100%)'};
opacity: ${props => (props.open ? 1 : 0)};
}
`;
const ParsedTokenSend = styled.div`
display: flex;
align-items: center;
justify-content: center;
gap: 12px;
background-color: #fff2f0;
border-radius: 12px;
color: ${props => props.theme.accent};
padding: 12px;
text-align: left;
`;
const SendTokenBip21FormRow = styled.div`
width: 100%;
display: flex;
justify-content: space-between;
gap: 12px;
margin: 3px;
`;
interface SendTokenBip21Props {
decimalizedTokenQty: string;
tokenError: false | string;
}
const SendTokenBip21: React.FC<SendTokenBip21Props> = ({
decimalizedTokenQty,
tokenError,
}) => {
return (
<SendTokenBip21FormRow>
<SendTokenBip21Input
name="amount"
placeholder="Bip21-entered token amount"
value={decimalizedTokenQty}
error={tokenError}
/>
</SendTokenBip21FormRow>
);
};
interface CashtabTxInfo {
address?: string;
bip21?: string;
value?: string;
parseAllAsBip21?: boolean;
}
const SendXec: React.FC = () => {
const ContextValue = useContext(WalletContext);
if (!isWalletContextLoaded(ContextValue)) {
// Confirm we have all context required to load the page
return null;
}
const location = useLocation();
const {
chaintipBlockheight,
fiatPrice,
apiError,
cashtabState,
updateCashtabState,
chronik,
ecc,
} = ContextValue;
const { settings, wallets, cashtabCache } = cashtabState;
const wallet = wallets[0];
const { balanceSats, tokens } = wallet.state;
const [isOneToManyXECSend, setIsOneToManyXECSend] =
useState<boolean>(false);
const [sendWithCashtabMsg, setSendWithCashtabMsg] =
useState<boolean>(false);
const [sendWithOpReturnRaw, setSendWithOpReturnRaw] =
useState<boolean>(false);
const [opReturnRawError, setOpReturnRawError] = useState<false | string>(
false,
);
const [parsedOpReturnRaw, setParsedOpReturnRaw] =
useState<ParsedOpReturnRaw>({
protocol: '',
data: '',
});
const [isSending, setIsSending] = useState<boolean>(false);
interface SendXecFormData {
amount: string;
address: string;
multiAddressInput: string;
airdropTokenId: string;
cashtabMsg: string;
opReturnRaw: string;
}
const emptyFormData: SendXecFormData = {
amount: '',
address: '',
multiAddressInput: '',
airdropTokenId: '',
cashtabMsg: '',
opReturnRaw: '',
};
const [formData, setFormData] = useState<SendXecFormData>(emptyFormData);
const [sendAddressError, setSendAddressError] = useState<false | string>(
false,
);
const [multiSendAddressError, setMultiSendAddressError] = useState<
false | string
>(false);
const [sendAmountError, setSendAmountError] = useState<string | false>(
false,
);
const [cashtabMsgError, setCashtabMsgError] = useState<string | false>(
false,
);
const [selectedCurrency, setSelectedCurrency] = useState<string>(
appConfig.ticker,
);
const [parsedAddressInput, setParsedAddressInput] =
useState<CashtabParsedAddressInfo>(parseAddressInput('', 0));
// Support cashtab button from web pages
const [txInfoFromUrl, setTxInfoFromUrl] = useState<false | CashtabTxInfo>(
false,
);
// Show a confirmation modal on transactions created by populating form from web page button
const [isModalVisible, setIsModalVisible] = useState<boolean>(false);
const [showConfirmSendModal, setShowConfirmSendModal] =
useState<boolean>(false);
const [tokenIdQueryError, setTokenIdQueryError] = useState<boolean>(false);
// Airdrop transactions embed the additional tokenId (32 bytes), along with prefix (4 bytes) and two pushdata (2 bytes)
// hence setting airdrop tx message limit to 38 bytes less than opreturnConfig.cashtabMsgByteLimit
const pushDataByteCount = 1;
const prefixByteCount = 4;
const tokenIdByteCount = 32;
const localAirdropTxAddedBytes =
pushDataByteCount +
tokenIdByteCount +
pushDataByteCount +
prefixByteCount; // 38
const [airdropFlag, setAirdropFlag] = useState<boolean>(false);
// Typeguard for bip21 multiple outputs parsedAddressInput
const isBip21MultipleOutputsSafe = (
parsedAddressInput: CashtabParsedAddressInfo,
): parsedAddressInput is {
address: {
value: null | string;
error: false | string;
};
parsedAdditionalXecOutputs: {
value: [string, string][];
error: false | string;
};
amount: { value: string; error: false | string };
} => {
return (
typeof parsedAddressInput !== 'undefined' &&
typeof parsedAddressInput.parsedAdditionalXecOutputs !==
'undefined' &&
typeof parsedAddressInput.parsedAdditionalXecOutputs.value !==
'undefined' &&
parsedAddressInput.parsedAdditionalXecOutputs.value !== null &&
parsedAddressInput.parsedAdditionalXecOutputs.error === false &&
typeof parsedAddressInput.amount !== 'undefined' &&
typeof parsedAddressInput.amount.value !== 'undefined' &&
parsedAddressInput.amount.value !== null
);
};
// Typeguard for a valid bip21 token send tx
const isBip21TokenSend = (
parsedAddressInput: CashtabParsedAddressInfo,
): parsedAddressInput is {
address: {
value: string;
error: false;
};
token_id: {
value: string;
error: false | string;
};
token_decimalized_qty: { value: string; error: false | string };
} => {
return (
typeof parsedAddressInput !== 'undefined' &&
typeof parsedAddressInput.address.value === 'string' &&
parsedAddressInput.address.error === false &&
typeof parsedAddressInput.token_id !== 'undefined' &&
typeof parsedAddressInput.token_id.value === 'string' &&
parsedAddressInput.token_id.error === false &&
typeof parsedAddressInput.token_decimalized_qty !== 'undefined' &&
typeof parsedAddressInput.token_decimalized_qty.value ===
'string' &&
parsedAddressInput.token_decimalized_qty.error === false
);
};
const addTokenToCashtabCache = async (tokenId: string) => {
let tokenInfo;
try {
tokenInfo = await getTokenGenesisInfo(chronik, tokenId);
} catch (err) {
console.error(`Error getting token details for ${tokenId}`, err);
return setTokenIdQueryError(true);
}
// If we successfully get tokenInfo, update cashtabCache
cashtabCache.tokens.set(tokenId, tokenInfo);
updateCashtabState('cashtabCache', cashtabCache);
// Unset in case user is checking a new token that does exist this time
setTokenIdQueryError(false);
};
// Shorthand this calc as well as it is used in multiple spots
// Note that we must "double cover" some conditions bc typescript doesn't get it
const bip21MultipleOutputsFormattedTotalSendXec =
isBip21MultipleOutputsSafe(parsedAddressInput)
? parsedAddressInput.parsedAdditionalXecOutputs.value.reduce(
(accumulator, addressAmountArray) =>
accumulator + parseFloat(addressAmountArray[1]),
parseFloat(parsedAddressInput.amount.value),
)
: 0;
const userLocale = getUserLocale(navigator);
const clearInputForms = () => {
setFormData(emptyFormData);
setParsedAddressInput(parseAddressInput('', 0));
// Reset to XEC
// Note, this ensures we never are in fiat send mode for multi-send
setSelectedCurrency(appConfig.ticker);
};
const checkForConfirmationBeforeSendXec = () => {
if (settings.sendModal) {
setIsModalVisible(settings.sendModal);
} else {
// if the user does not have the send confirmation enabled in settings then send directly
send();
}
};
const handleOk = () => {
setIsModalVisible(false);
send();
};
const handleCancel = () => {
setIsModalVisible(false);
};
useEffect(() => {
// Manually parse for txInfo object on page load when Send.js is loaded with a query string
// if this was routed from Wallet screen's Reply to message link then prepopulate the address and value field
if (location && location.state && location.state.replyAddress) {
// Populate a dust tx to the reply address
setFormData({
...formData,
address: location.state.replyAddress,
amount: `${toXec(appConfig.dustSats)}`,
});
// Turn on the Cashtab Msg switch
setSendWithCashtabMsg(true);
}
// if this was routed from the Contact List
if (location && location.state && location.state.contactSend) {
// explicitly trigger the address validation upon navigation from contact list
handleAddressChange({
target: {
name: 'address',
value: location.state.contactSend,
},
} as React.ChangeEvent<HTMLInputElement>);
}
// if this was routed from the Airdrop screen's Airdrop Calculator then
// switch to multiple recipient mode and prepopulate the recipients field
if (
location &&
location.state &&
location.state.airdropRecipients &&
location.state.airdropTokenId
) {
setIsOneToManyXECSend(true);
setFormData({
...formData,
multiAddressInput: location.state.airdropRecipients,
airdropTokenId: location.state.airdropTokenId,
cashtabMsg: '',
});
// validate the airdrop outputs from the calculator
handleMultiAddressChange({
target: {
value: location.state.airdropRecipients,
},
} as React.ChangeEvent<HTMLTextAreaElement>);
setAirdropFlag(true);
}
// Do not set txInfo in state if query strings are not present
if (
!window.location ||
!window.location.hash ||
window.location.hash === '#/send'
) {
return;
}
// Get everything after the first ? mark
const hashRoute = window.location.hash;
// The "+1" is because we want to also omit the first question mark
// So we need to slice at 1 character past it
const txInfoStr = hashRoute.slice(hashRoute.indexOf('?') + 1);
const txInfo: CashtabTxInfo = {};
// If bip21 is the first param, parse the whole string as a bip21 param string
const parseAllAsBip21 = txInfoStr.startsWith('bip21');
if (parseAllAsBip21) {
// Cashtab requires param string to start with bip21 if this is requesting bip21 validation
txInfo.bip21 = txInfoStr.slice('bip21='.length);
} else {
// Parse for legacy amount and value params
const legacyParams = new URLSearchParams(txInfoStr);
// Check for duplicated params
const duplicatedParams =
new Set(legacyParams.keys()).size !==
Array.from(legacyParams.keys()).length;
if (!duplicatedParams) {
const supportedLegacyParams = ['address', 'value'];
// Iterate over
for (const paramKeyValue of legacyParams) {
const paramKey = paramKeyValue[0];
if (!supportedLegacyParams.includes(paramKey)) {
// ignore unsupported params
continue;
}
txInfo[
paramKey as keyof Omit<CashtabTxInfo, 'parseAllAsBip21'>
] = paramKeyValue[1];
}
}
}
// Only set txInfoFromUrl if you have valid legacy params or bip21
const validUrlParams =
(parseAllAsBip21 && 'bip21' in txInfo) ||
// Good if we have both address and value
('address' in txInfo && 'value' in txInfo) ||
// Good if we have address and no value
('address' in txInfo && !('value' in txInfo));
// If we 'value' key with no address, no good
// Note: because only the address and value keys are handled below,
// it's not an issue if we get all kinds of other garbage params
if (validUrlParams) {
// This is a tx request from the URL
// Save this flag in state var so it can be parsed in useEffect
txInfo.parseAllAsBip21 = parseAllAsBip21;
setTxInfoFromUrl(txInfo);
}
}, []);
useEffect(() => {
if (txInfoFromUrl === false) {
return;
}
if (txInfoFromUrl.parseAllAsBip21) {
handleAddressChange({
target: {
name: 'address',
value: txInfoFromUrl.bip21,
},
} as React.ChangeEvent<HTMLInputElement>);
} else {
// Enter address into input field and trigger handleAddressChange for validation
handleAddressChange({
target: {
name: 'address',
value: txInfoFromUrl.address,
},
} as React.ChangeEvent<HTMLInputElement>);
if (
typeof txInfoFromUrl.value !== 'undefined' &&
!Number.isNaN(parseFloat(txInfoFromUrl.value))
) {
// Only update the amount field if txInfo.value is a good input
// Sometimes we want this field to be adjusted by the user, e.g. a donation amount
// Do not populate the field if the value param is not parseable as a number
// the strings 'undefined' and 'null', which PayButton passes to signify 'no amount', fail this test
// TODO deprecate this support once PayButton and cashtab-components do not require it
handleAmountChange({
target: {
name: 'amount',
value: txInfoFromUrl.value,
},
} as React.ChangeEvent<HTMLInputElement>);
}
}
// We re-run this when balanceSats changes because validation of send amounts depends on balanceSats
}, [txInfoFromUrl, balanceSats]);
interface XecSendError {
error?: string;
message?: string;
}
function handleSendXecError(errorObj: XecSendError) {
let message;
if (
errorObj.error &&
errorObj.error.includes(
'too-long-mempool-chain, too many unconfirmed ancestors [limit: 50] (code 64)',
)
) {
message = `The ${appConfig.ticker} you are trying to send has too many unconfirmed ancestors to send (limit 50). Sending will be possible after a block confirmation. Try again in about 10 minutes.`;
} else {
message =
errorObj.message || errorObj.error || JSON.stringify(errorObj);
}
toast.error(`${message}`);
}
const sendToken = async () => {
if (!isBip21TokenSend(parsedAddressInput)) {
// Should never happen
toast.error(`Error parsing token info for token send`);
return;
}
const address = parsedAddressInput.address.value;
const tokenId = parsedAddressInput.token_id.value;
const decimalizedTokenQty =
parsedAddressInput.token_decimalized_qty.value;
const cachedTokenInfo = cashtabCache.tokens.get(tokenId);
if (typeof cachedTokenInfo === 'undefined') {
// Should never happen
toast.error(`Error: token info not in cache`);
return;
}
const { genesisInfo, tokenType } = cachedTokenInfo;
const { decimals } = genesisInfo;
const { type } = tokenType;
// GA event
Event('SendXec', 'Bip21 Token Send', tokenId);
try {
// Get input utxos for slpv1 or ALP send tx
// NFT send utxos are handled differently
const tokenInputInfo =
type === 'SLP_TOKEN_TYPE_NFT1_CHILD'
? undefined
: getSendTokenInputs(
wallet.state.slpUtxos,
tokenId as string,
decimalizedTokenQty,
decimals as SlpDecimals,
);
// Get targetOutputs for an slpv1 send tx
const tokenSendTargetOutputs =
type === 'SLP_TOKEN_TYPE_NFT1_CHILD'
? getNftChildSendTargetOutputs(tokenId as string, address)
: type === 'ALP_TOKEN_TYPE_STANDARD'
? getAlpSendTargetOutputs(
tokenInputInfo as TokenInputInfo,
address,
)
: getSlpSendTargetOutputs(
tokenInputInfo as TokenInputInfo,
address,
+ tokenType!.number,
);
// Build and broadcast the tx
const { response } = await sendXec(
chronik,
ecc,
wallet,
tokenSendTargetOutputs,
settings.minFeeSends &&
(hasEnoughToken(
tokens,
appConfig.vipTokens.grumpy.tokenId,
appConfig.vipTokens.grumpy.vipBalance,
) ||
hasEnoughToken(
tokens,
appConfig.vipTokens.cachet.tokenId,
appConfig.vipTokens.cachet.vipBalance,
))
? appConfig.minFee
: appConfig.defaultFee,
chaintipBlockheight,
type === 'SLP_TOKEN_TYPE_NFT1_CHILD'
? getNft(tokenId as string, wallet.state.slpUtxos)
: (tokenInputInfo as TokenInputInfo).tokenInputs,
);
confirmRawTx(
<a
href={`${explorer.blockExplorerUrl}/tx/${response.txid}`}
target="_blank"
rel="noopener noreferrer"
>
{type === 'SLP_TOKEN_TYPE_NFT1_CHILD'
? 'NFT sent'
: 'eToken sent'}
</a>,
);
clearInputForms();
// Hide the confirmation modal if it was showing
setShowConfirmSendModal(false);
} catch (e) {
console.error(
`Error sending ${
type === 'SLP_TOKEN_TYPE_NFT1_CHILD' ? 'NFT' : 'token'
}`,
e,
);
toast.error(`${e}`);
}
};
const checkForConfirmationBeforeBip21TokenSend = () => {
if (settings.sendModal) {
setShowConfirmSendModal(true);
} else {
// if the user does not have the send confirmation enabled in settings then send directly
sendToken();
}
};
async function send() {
setIsSending(true);
setFormData({
...formData,
});
// Initialize targetOutputs for this tx
let targetOutputs = [];
// If you have an OP_RETURN output, add it at index 0
// Aesthetic choice, easier to see when checking on block explorer
if (airdropFlag) {
// Airdrop txs require special OP_RETURN handling
targetOutputs.push(
getAirdropTargetOutput(
formData.airdropTokenId,
formData.cashtabMsg,
),
);
} else if (sendWithCashtabMsg && formData.cashtabMsg !== '') {
// Send this tx with a Cashtab msg if the user has the switch enabled and the input field is not empty
targetOutputs.push(getCashtabMsgTargetOutput(formData.cashtabMsg));
} else if (formData.opReturnRaw !== '' && opReturnRawError === false) {
targetOutputs.push(
getOpreturnParamTargetOutput(formData.opReturnRaw),
);
}
if (isOneToManyXECSend) {
// Handle XEC send to multiple addresses
targetOutputs = targetOutputs.concat(
getMultisendTargetOutputs(formData.multiAddressInput),
);
Event('Send.js', 'SendToMany', selectedCurrency);
} else {
// Handle XEC send to one address
const cleanAddress = formData.address.split('?')[0];
const satoshisToSend =
selectedCurrency === 'XEC'
? toSatoshis(parseFloat(formData.amount))
: fiatToSatoshis(formData.amount, fiatPrice as number);
targetOutputs.push({
script: Script.fromAddress(cleanAddress),
sats: BigInt(satoshisToSend),
});
if (isBip21MultipleOutputsSafe(parsedAddressInput)) {
parsedAddressInput.parsedAdditionalXecOutputs.value.forEach(
([addr, amount]) => {
targetOutputs.push({
script: Script.fromAddress(addr),
sats: BigInt(toSatoshis(parseFloat(amount))),
});
},
);
Event('Send.js', 'SendToMany', selectedCurrency);
} else {
Event('Send.js', 'Send', selectedCurrency);
}
}
// Send and notify
try {
const txObj = await sendXec(
chronik,
ecc,
wallet,
targetOutputs,
settings.minFeeSends &&
(hasEnoughToken(
tokens,
appConfig.vipTokens.grumpy.tokenId,
appConfig.vipTokens.grumpy.vipBalance,
) ||
hasEnoughToken(
tokens,
appConfig.vipTokens.cachet.tokenId,
appConfig.vipTokens.cachet.vipBalance,
))
? appConfig.minFee
: appConfig.defaultFee,
chaintipBlockheight,
);
confirmRawTx(
<a
href={`${explorer.blockExplorerUrl}/tx/${txObj.response.txid}`}
target="_blank"
rel="noopener noreferrer"
>
eCash sent
</a>,
);
clearInputForms();
setAirdropFlag(false);
setIsSending(false);
if (txInfoFromUrl) {
// Close window after successful tx
window.close();
}
} catch (err) {
handleSendXecError(err as XecSendError);
setIsSending(false);
}
}
const handleAddressChange = async (
e: React.ChangeEvent<HTMLInputElement>,
) => {
if (tokenIdQueryError) {
// Clear tokenIdQueryError if we have one
setTokenIdQueryError(false);
}
const { value, name } = e.target;
const parsedAddressInput = parseAddressInput(
value,
balanceSats,
userLocale,
);
// Set in state as various param outputs determine app rendering
// For example, a valid amount param should disable user amount input
setParsedAddressInput(parsedAddressInput);
let renderedSendToError = parsedAddressInput.address.error;
if (
typeof parsedAddressInput.queryString !== 'undefined' &&
typeof parsedAddressInput.queryString.error === 'string'
) {
// If you have a bad queryString, this should be the rendered error
renderedSendToError = parsedAddressInput.queryString.error;
}
// Handle errors in op_return_raw as an address error if no other error is set
if (
renderedSendToError === false &&
typeof parsedAddressInput.op_return_raw !== 'undefined' &&
typeof parsedAddressInput.op_return_raw.error === 'string'
) {
renderedSendToError = parsedAddressInput.op_return_raw.error;
}
// Handle errors in secondary addr&amount params
if (
renderedSendToError === false &&
typeof parsedAddressInput.parsedAdditionalXecOutputs !==
'undefined' &&
typeof parsedAddressInput.parsedAdditionalXecOutputs.error ===
'string'
) {
renderedSendToError =
parsedAddressInput.parsedAdditionalXecOutputs.error;
}
// Handle bip21 token errors
if (
renderedSendToError === false &&
typeof parsedAddressInput.token_decimalized_qty !== 'undefined' &&
parsedAddressInput.token_decimalized_qty.error !== false
) {
// If we have an invalid token_decimalized_qty but a good bip21 query string
renderedSendToError =
parsedAddressInput.token_decimalized_qty.error;
}
if (
renderedSendToError === false &&
typeof parsedAddressInput.token_id !== 'undefined'
) {
if (parsedAddressInput.token_id.error !== false) {
// If we have an invalid token id but a good bip21 query string
renderedSendToError = parsedAddressInput.token_id.error;
} else {
// We have valid token send bip21 and no error
if (typeof parsedAddressInput.token_id.value === 'string') {
// Should always be true if we have error false here
// get and cache token info if we have a valid token ID and no renderedSendToError
addTokenToCashtabCache(parsedAddressInput.token_id.value);
}
}
}
setSendAddressError(renderedSendToError);
if (typeof parsedAddressInput.amount !== 'undefined') {
// Set currency to non-fiat
setSelectedCurrency(appConfig.ticker);
// Use this object to mimic user input and get validation for the value
const amountObj = {
target: {
name: 'amount',
value: parsedAddressInput.amount.value,
},
};
handleAmountChange(
amountObj as React.ChangeEvent<HTMLInputElement>,
);
}
// Set op_return_raw if it's in the query string
if (typeof parsedAddressInput.op_return_raw !== 'undefined') {
// In general, we want to show the op_return_raw value even if there is an error,
// so the user can see what it is
// However in some cases, like duplicate op_return_raw, we do not even have a value to show
// So, only render if we have a renderable value
if (typeof parsedAddressInput.op_return_raw.value === 'string') {
// Turn on sendWithOpReturnRaw
setSendWithOpReturnRaw(true);
// Update the op_return_raw field and trigger its validation
handleOpReturnRawInput({
target: {
name: 'opReturnRaw',
value: parsedAddressInput.op_return_raw.value,
},
} as React.ChangeEvent<HTMLTextAreaElement>);
}
}
// Set address field to user input
setFormData(p => ({
...p,
[name]: value,
}));
};
const handleMultiAddressChange = (
e: React.ChangeEvent<HTMLTextAreaElement>,
) => {
const { value, name } = e.target;
const errorOrIsValid = isValidMultiSendUserInput(
value,
balanceSats,
userLocale,
);
// If you get an error msg, set it. If validation is good, clear error msg.
setMultiSendAddressError(
typeof errorOrIsValid === 'string' ? errorOrIsValid : false,
);
// Set address field to user input
setFormData(p => ({
...p,
[name]: value,
}));
};
const handleSelectedCurrencyChange = (
e: React.ChangeEvent<HTMLSelectElement>,
) => {
setSelectedCurrency(e.target.value);
// Clear input field to prevent accidentally sending 1 XEC instead of 1 USD
setFormData(p => ({
...p,
amount: '',
}));
};
const handleAmountChange = (e: React.ChangeEvent<HTMLInputElement>) => {
const { value, name } = e.target;
// Validate user input send amount
const isValidAmountOrErrorMsg = isValidXecSendAmount(
value,
balanceSats,
userLocale,
selectedCurrency,
fiatPrice as number,
);
setSendAmountError(
isValidAmountOrErrorMsg !== true ? isValidAmountOrErrorMsg : false,
);
setFormData(p => ({
...p,
[name]: value,
}));
};
const handleOpReturnRawInput = (
e: React.ChangeEvent<HTMLTextAreaElement>,
) => {
const { name, value } = e.target;
// Validate input
const error = getOpReturnRawError(value);
setOpReturnRawError(error);
// Update formdata
setFormData(p => ({
...p,
[name]: value,
}));
// Update parsedOpReturn if we have no opReturnRawError
if (error === false) {
// Need to gate this for no error as parseOpReturnRaw expects a validated op_return_raw
setParsedOpReturnRaw(parseOpReturnRaw(value));
}
};
const handleCashtabMsgChange = (
e: React.ChangeEvent<HTMLTextAreaElement>,
) => {
const { name, value } = e.target;
let cashtabMsgError: false | string = false;
const msgByteSize = getCashtabMsgByteCount(value);
const maxSize =
location && location.state && location.state.airdropTokenId
? opreturnConfig.cashtabMsgByteLimit - localAirdropTxAddedBytes
: opreturnConfig.cashtabMsgByteLimit;
if (msgByteSize > maxSize) {
cashtabMsgError = `Message can not exceed ${maxSize} bytes`;
}
setCashtabMsgError(cashtabMsgError);
setFormData(p => ({
...p,
[name]: value,
}));
};
const onMax = () => {
// Clear amt error
setSendAmountError(false);
// Set currency to XEC
setSelectedCurrency(appConfig.ticker);
// Account for CashtabMsg if it is set
const intendedTargetOutputs =
sendWithCashtabMsg && formData.cashtabMsg !== ''
? [getCashtabMsgTargetOutput(formData.cashtabMsg)]
: [];
// Build a tx sending all non-token utxos
// Determine the amount being sent (outputs less fee)
let maxSendSatoshis;
try {
// An error will be thrown if the wallet has insufficient funds to send more than dust
maxSendSatoshis = getMaxSendAmountSatoshis(
wallet,
intendedTargetOutputs,
chaintipBlockheight,
settings.minFeeSends &&
(hasEnoughToken(
tokens,
appConfig.vipTokens.grumpy.tokenId,
appConfig.vipTokens.grumpy.vipBalance,
) ||
hasEnoughToken(
tokens,
appConfig.vipTokens.cachet.tokenId,
appConfig.vipTokens.cachet.vipBalance,
))
? appConfig.minFee
: appConfig.defaultFee,
);
} catch {
// Set to zero. In this case, 0 is the max amount we can send, and we know
// this will trigger the expected dust validation error
maxSendSatoshis = 0;
}
// Convert to XEC to set in form
const maxSendXec = toXec(maxSendSatoshis);
// Update value in the send field
// Note, if we are updating it to 0, we will get a 'dust' error
handleAmountChange({
target: {
name: 'amount',
value: maxSendXec,
},
} as unknown as React.ChangeEvent<HTMLInputElement>);
};
// Display price in USD below input field for send amount, if it can be calculated
let fiatPriceString = '';
let multiSendTotal =
typeof formData.multiAddressInput === 'string'
? sumOneToManyXec(formData.multiAddressInput.split('\n'))
: 0;
if (isNaN(multiSendTotal)) {
multiSendTotal = 0;
}
if (fiatPrice !== null && !isNaN(parseFloat(formData.amount))) {
if (selectedCurrency === appConfig.ticker) {
// insert symbol and currency before/after the locale formatted fiat balance
fiatPriceString = isOneToManyXECSend
? `${
settings
? `${
supportedFiatCurrencies[settings.fiatCurrency]
.symbol
} `
: '$ '
} ${(fiatPrice * multiSendTotal).toLocaleString(userLocale, {
minimumFractionDigits: appConfig.cashDecimals,
maximumFractionDigits: appConfig.cashDecimals,
})} ${
settings && settings.fiatCurrency
? settings.fiatCurrency.toUpperCase()
: 'USD'
}`
: `${
settings
? `${
supportedFiatCurrencies[settings.fiatCurrency]
.symbol
} `
: '$ '
} ${
isBip21MultipleOutputsSafe(parsedAddressInput)
? `${(
fiatPrice *
bip21MultipleOutputsFormattedTotalSendXec
).toLocaleString(userLocale, {
minimumFractionDigits: appConfig.cashDecimals,
maximumFractionDigits: appConfig.cashDecimals,
})}`
: `${(
fiatPrice * parseFloat(formData.amount)
).toLocaleString(userLocale, {
minimumFractionDigits: appConfig.cashDecimals,
maximumFractionDigits: appConfig.cashDecimals,
})}`
} ${
settings && settings.fiatCurrency
? settings.fiatCurrency.toUpperCase()
: 'USD'
}`;
} else {
fiatPriceString = `${
formData.amount !== '0'
? formatFiatBalance(
toXec(fiatToSatoshis(formData.amount, fiatPrice)),
userLocale,
)
: formatFiatBalance(0, userLocale)
} ${appConfig.ticker}`;
}
}
const priceApiError = fiatPrice === null && selectedCurrency !== 'XEC';
const disableSendButton = shouldSendXecBeDisabled(
formData,
balanceSats,
apiError,
sendAmountError,
sendAddressError,
multiSendAddressError,
sendWithCashtabMsg,
cashtabMsgError,
sendWithOpReturnRaw,
opReturnRawError,
priceApiError,
isOneToManyXECSend,
);
// Send token variables
const cachedInfo: undefined | CashtabCachedTokenInfo = isBip21TokenSend(
parsedAddressInput,
)
? cashtabCache.tokens.get(parsedAddressInput.token_id.value)
: undefined;
const cachedInfoLoaded = typeof cachedInfo !== 'undefined';
let tokenType: undefined | TokenType,
protocol: undefined | 'SLP' | 'ALP',
type: undefined | AlpTokenType_Type | SlpTokenType_Type,
genesisInfo: undefined | GenesisInfo,
tokenName: undefined | string,
tokenTicker: undefined | string,
decimals: undefined | number;
let nameAndTicker = '';
let tokenError: false | string = false;
const addressPreview = isBip21TokenSend(parsedAddressInput)
? `${parsedAddressInput.address.value.slice(
0,
'ecash:'.length + 3,
)}...${parsedAddressInput.address.value.slice(-3)}`
: '';
const decimalizedTokenQty = isBip21TokenSend(parsedAddressInput)
? parsedAddressInput.token_decimalized_qty.value
: '';
if (cachedInfoLoaded && isBip21TokenSend(parsedAddressInput)) {
({ tokenType, genesisInfo } = cachedInfo);
({ protocol, type } = tokenType);
({ tokenName, tokenTicker, decimals } = genesisInfo);
nameAndTicker = `${tokenName}${
tokenTicker !== '' ? ` (${tokenTicker})` : ''
}`;
// Cashtab does not yet support sending all types of tokens
const cashtabSupportedSendTypes = [
'ALP_TOKEN_TYPE_STANDARD',
'SLP_TOKEN_TYPE_FUNGIBLE',
'SLP_TOKEN_TYPE_NFT1_CHILD',
];
const tokenBalance = tokens.get(parsedAddressInput.token_id.value);
if (!cashtabSupportedSendTypes.includes(type)) {
tokenError = `Cashtab does not support sending this type of token (${type})`;
} else if (typeof tokenBalance === 'undefined') {
// User has none of this token
tokenError = 'You do not hold any of this token.';
} else {
const isValidAmountOrErrorMsg = isValidTokenSendOrBurnAmount(
decimalizedTokenQty,
tokenBalance,
decimals as SlpDecimals,
protocol,
);
tokenError =
isValidAmountOrErrorMsg === true
? false
: isValidAmountOrErrorMsg;
}
}
return (
<OuterCtn>
{showConfirmSendModal && (
<Modal
title={`Send ${decimalizedTokenQty} ${nameAndTicker} to ${addressPreview}?`}
handleOk={sendToken}
handleCancel={() => setShowConfirmSendModal(false)}
showCancelButton
/>
)}
{isModalVisible && (
<Modal
title="Confirm Send"
description={
isOneToManyXECSend
? `Send
${multiSendTotal.toLocaleString(userLocale, {
maximumFractionDigits: 2,
})}
XEC to multiple recipients?`
: `Send ${formData.amount}${' '}
${selectedCurrency} to ${parsedAddressInput.address.value}`
}
handleOk={handleOk}
handleCancel={handleCancel}
showCancelButton
/>
)}
<SwitchContainer>
<Switch
name="Toggle Multisend"
on="Send to many"
off="Send to one"
width={150}
right={115}
checked={isOneToManyXECSend}
disabled={
txInfoFromUrl !== false ||
'queryString' in parsedAddressInput
}
handleToggle={() =>
setIsOneToManyXECSend(!isOneToManyXECSend)
}
/>
</SwitchContainer>
<InputModesHolder open={isOneToManyXECSend}>
<SendToOneHolder>
<SendToOneInputForm>
<InputWithScanner
placeholder={'Address'}
name="address"
value={formData.address}
disabled={txInfoFromUrl !== false}
handleInput={handleAddressChange}
error={sendAddressError}
/>
{isBip21MultipleOutputsSafe(parsedAddressInput) ? (
<Info>
<b>
BIP21: Sending{' '}
{bip21MultipleOutputsFormattedTotalSendXec.toLocaleString(
userLocale,
{
maximumFractionDigits: 2,
minimumFractionDigits: 2,
},
)}{' '}
XEC to{' '}
{parsedAddressInput
.parsedAdditionalXecOutputs.value
.length + 1}{' '}
outputs
</b>
</Info>
) : isBip21TokenSend(parsedAddressInput) &&
tokenIdQueryError === false ? (
<>
{typeof cashtabCache.tokens.get(
parsedAddressInput.token_id.value,
) !== 'undefined' ? (
<SendTokenBip21
decimalizedTokenQty={
parsedAddressInput
.token_decimalized_qty.value
}
tokenError={tokenError}
/>
) : (
<InlineLoader />
)}
</>
) : (
<SendXecInput
name="amount"
value={formData.amount}
selectValue={selectedCurrency}
selectDisabled={
'amount' in parsedAddressInput ||
txInfoFromUrl !== false
}
inputDisabled={
priceApiError ||
(txInfoFromUrl !== false &&
'value' in txInfoFromUrl &&
txInfoFromUrl.value !== 'null' &&
txInfoFromUrl.value !== 'undefined') ||
'amount' in parsedAddressInput
}
fiatCode={settings.fiatCurrency.toUpperCase()}
error={sendAmountError}
handleInput={handleAmountChange}
handleSelect={handleSelectedCurrencyChange}
handleOnMax={onMax}
/>
)}
</SendToOneInputForm>
</SendToOneHolder>
{isBip21TokenSend(parsedAddressInput) && tokenIdQueryError && (
<Alert>
Error querying token info for{' '}
{parsedAddressInput.token_id.value}
</Alert>
)}
{priceApiError && (
<AlertMsg>
Error fetching fiat price. Setting send by{' '}
{supportedFiatCurrencies[
settings.fiatCurrency
].slug.toUpperCase()}{' '}
disabled
</AlertMsg>
)}
<SendToManyHolder>
<TextArea
placeholder={`One address & amount per line, separated by comma \ne.g. \necash:qpatql05s9jfavnu0tv6lkjjk25n6tmj9gkpyrlwu8,500 \necash:qzvydd4n3lm3xv62cx078nu9rg0e3srmqq0knykfed,700`}
name="multiAddressInput"
handleInput={e => handleMultiAddressChange(e)}
value={formData.multiAddressInput}
error={multiSendAddressError}
/>
</SendToManyHolder>
</InputModesHolder>
<SendXecForm>
<SendXecRow>
<SwitchAndLabel>
<Switch
name="Toggle Cashtab Msg"
on="✉️"
off="✉️"
checked={sendWithCashtabMsg}
disabled={
txInfoFromUrl !== false ||
'queryString' in parsedAddressInput
}
handleToggle={() => {
// If we are sending a Cashtab msg, toggle off op_return_raw
if (
!sendWithCashtabMsg &&
sendWithOpReturnRaw
) {
setSendWithOpReturnRaw(false);
}
setSendWithCashtabMsg(!sendWithCashtabMsg);
}}
/>
<SwitchLabel>Cashtab Msg</SwitchLabel>
</SwitchAndLabel>
</SendXecRow>
{sendWithCashtabMsg && (
<SendXecRow>
<TextArea
name="cashtabMsg"
height={62}
placeholder={`Include a public Cashtab msg with this tx ${
location &&
location.state &&
location.state.airdropTokenId
? `(max ${
opreturnConfig.cashtabMsgByteLimit -
localAirdropTxAddedBytes
} bytes)`
: `(max ${opreturnConfig.cashtabMsgByteLimit} bytes)`
}`}
value={formData.cashtabMsg}
error={cashtabMsgError}
showCount
customCount={getCashtabMsgByteCount(
formData.cashtabMsg,
)}
max={
location &&
location.state &&
location.state.airdropTokenId
? opreturnConfig.cashtabMsgByteLimit -
localAirdropTxAddedBytes
: opreturnConfig.cashtabMsgByteLimit
}
handleInput={e => handleCashtabMsgChange(e)}
/>
</SendXecRow>
)}
<SendXecRow>
<SwitchAndLabel>
<Switch
name="Toggle op_return_raw"
checked={sendWithOpReturnRaw}
disabled={
txInfoFromUrl !== false ||
'queryString' in parsedAddressInput
}
handleToggle={() => {
// If we are sending with op_return_raw, toggle off CashtabMsg
if (
!sendWithOpReturnRaw &&
sendWithCashtabMsg
) {
setSendWithCashtabMsg(false);
}
setSendWithOpReturnRaw(!sendWithOpReturnRaw);
}}
/>
<SwitchLabel>op_return_raw</SwitchLabel>
</SwitchAndLabel>
</SendXecRow>
{isBip21TokenSend(parsedAddressInput) &&
tokenIdQueryError === false && (
<ParsedTokenSend>
<TokenIcon
size={64}
tokenId={parsedAddressInput.token_id.value}
/>
Sending {decimalizedTokenQty} {nameAndTicker} to{' '}
{addressPreview}
</ParsedTokenSend>
)}
{sendWithOpReturnRaw && (
<>
<SendXecRow>
<TextArea
name="opReturnRaw"
height={62}
placeholder={`(Advanced) Enter raw hex to be included with this transaction's OP_RETURN`}
value={formData.opReturnRaw}
error={opReturnRawError}
disabled={
txInfoFromUrl !== false ||
'queryString' in parsedAddressInput
}
showCount
max={2 * opReturn.opreturnParamByteLimit}
handleInput={handleOpReturnRawInput}
/>
</SendXecRow>
{opReturnRawError === false &&
formData.opReturnRaw !== '' && (
<SendXecRow>
<ParsedBip21InfoRow>
<ParsedBip21InfoLabel>
Parsed op_return_raw
</ParsedBip21InfoLabel>
<ParsedBip21Info>
<b>{parsedOpReturnRaw.protocol}</b>
<br />
{parsedOpReturnRaw.data}
</ParsedBip21Info>
</ParsedBip21InfoRow>
</SendXecRow>
)}
</>
)}
{isBip21MultipleOutputsSafe(parsedAddressInput) && (
<SendXecRow>
<ParsedBip21InfoRow>
<ParsedBip21InfoLabel>
Parsed BIP21 outputs
</ParsedBip21InfoLabel>
<ParsedBip21Info>
<ol>
<li
title={
parsedAddressInput.address
.value as string
}
>{`${(
parsedAddressInput.address
.value as string
).slice(6, 12)}...${(
parsedAddressInput.address
.value as string
).slice(-6)}, ${parseFloat(
parsedAddressInput.amount.value,
).toLocaleString(userLocale, {
minimumFractionDigits: 2,
maximumFractionDigits: 2,
})} XEC`}</li>
{Array.from(
parsedAddressInput
.parsedAdditionalXecOutputs.value,
).map(([addr, amount], index) => {
return (
<li
key={index}
title={addr}
>{`${addr.slice(
6,
12,
)}...${addr.slice(
-6,
)}, ${parseFloat(
amount,
).toLocaleString(userLocale, {
minimumFractionDigits: 2,
maximumFractionDigits: 2,
})} XEC`}</li>
);
})}
</ol>
</ParsedBip21Info>
</ParsedBip21InfoRow>
</SendXecRow>
)}
</SendXecForm>
<AmountPreviewCtn>
{!priceApiError && (
<>
{isOneToManyXECSend ? (
<LocaleFormattedValue>
{formatBalance(
multiSendTotal.toString(),
userLocale,
) +
' ' +
selectedCurrency}
</LocaleFormattedValue>
) : isBip21MultipleOutputsSafe(parsedAddressInput) ? (
<LocaleFormattedValue>
{bip21MultipleOutputsFormattedTotalSendXec.toLocaleString(
userLocale,
{
maximumFractionDigits: 2,
minimumFractionDigits: 2,
},
)}{' '}
XEC
</LocaleFormattedValue>
) : (
<LocaleFormattedValue>
{!isNaN(parseFloat(formData.amount))
? formatBalance(
formData.amount,
userLocale,
) +
' ' +
selectedCurrency
: ''}
</LocaleFormattedValue>
)}
<ConvertAmount>
{fiatPriceString !== '' && '='} {fiatPriceString}
</ConvertAmount>
</>
)}
</AmountPreviewCtn>
<SendButtonContainer>
<PrimaryButton
disabled={
(!isBip21TokenSend(parsedAddressInput) &&
disableSendButton) ||
(isBip21TokenSend(parsedAddressInput) &&
tokenError !== false) ||
tokenIdQueryError
}
onClick={
isBip21TokenSend(parsedAddressInput)
? checkForConfirmationBeforeBip21TokenSend
: checkForConfirmationBeforeSendXec
}
>
{isSending ? <InlineLoader /> : 'Send'}
</PrimaryButton>
</SendButtonContainer>
{apiError && <ApiError />}
</OuterCtn>
);
};
export default SendXec;
diff --git a/cashtab/src/token-protocols/slpv1/__tests__/index.test.js b/cashtab/src/token-protocols/slpv1/__tests__/index.test.js
index 30dbe8684..838219640 100644
--- a/cashtab/src/token-protocols/slpv1/__tests__/index.test.js
+++ b/cashtab/src/token-protocols/slpv1/__tests__/index.test.js
@@ -1,554 +1,558 @@
// Copyright (c) 2023-2024 The Bitcoin developers
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
import {
getSlpGenesisTargetOutput,
getSlpSendTargetOutputs,
getSlpBurnTargetOutputs,
getMintBatons,
getMintTargetOutputs,
getMaxDecimalizedSlpQty,
getNftParentGenesisTargetOutputs,
getNftParentMintTargetOutputs,
getNftParentFanInputs,
getNftParentFanTxTargetOutputs,
getNftChildGenesisInput,
getNftChildGenesisTargetOutputs,
getNft,
getNftChildSendTargetOutputs,
isTokenDustChangeOutput,
getAgoraAdFuelSats,
} from 'token-protocols/slpv1';
import { getSendTokenInputs } from 'token-protocols';
import vectors from '../fixtures/vectors';
import tokenProtocolsVectors from '../../fixtures/vectors';
import { SEND_DESTINATION_ADDRESS, MOCK_TOKEN_ID } from '../fixtures/vectors';
import {
AgoraOneshot,
AgoraOneshotAdSignatory,
AgoraPartial,
AgoraPartialAdSignatory,
} from 'ecash-agora';
import {
slpSend,
SLP_NFT1_CHILD,
shaRmd160,
Script,
fromHex,
SLP_FUNGIBLE,
} from 'ecash-lib';
import appConfig from 'config/app';
const MOCK_WALLET_HASH = fromHex('12'.repeat(20));
const MOCK_PK = fromHex(
'03000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f',
);
const BASE_PARAMS_SLP_PARTIAL = {
makerPk: MOCK_PK,
tokenId: MOCK_TOKEN_ID,
tokenProtocol: 'SLP',
enforcedLockTime: 500000001,
dustSats: 546n,
};
describe('slpv1 methods', () => {
let MOCK_AGORA_P2SH, MOCK_ONESHOT, MOCK_PARTIAL, MOCK_PARTIAL_P2SH;
beforeAll(async () => {
MOCK_ONESHOT = new AgoraOneshot({
enforcedOutputs: [
{
sats: 0n,
script: slpSend(MOCK_TOKEN_ID, SLP_NFT1_CHILD, [0n, 1n]),
},
{
sats: 10000n, // list price satoshis
script: Script.p2pkh(MOCK_WALLET_HASH),
},
],
cancelPk: MOCK_PK,
});
MOCK_AGORA_P2SH = Script.p2sh(
shaRmd160(MOCK_ONESHOT.script().bytecode),
);
MOCK_PARTIAL = new AgoraPartial({
truncAtoms: 1000n,
numAtomsTruncBytes: 0,
atomsScaleFactor: 1000000n,
scaledTruncAtomsPerTruncSat: 1000000n,
numSatsTruncBytes: 0,
minAcceptedScaledTruncAtoms: 1000000n,
...BASE_PARAMS_SLP_PARTIAL,
tokenType: SLP_FUNGIBLE,
scriptLen: 0x7f,
});
MOCK_PARTIAL_P2SH = Script.p2sh(
shaRmd160(MOCK_PARTIAL.script().bytecode),
);
});
describe('Generating etoken genesis tx target outputs', () => {
const { expectedReturns, expectedErrors } =
vectors.getSlpGenesisTargetOutput;
// Successfully created targetOutputs
expectedReturns.forEach(expectedReturn => {
const {
description,
genesisInfo,
initialQuantity,
mintBatonOutIdx,
targetOutputs,
} = expectedReturn;
it(`getSlpGenesisTargetOutput: ${description}`, () => {
expect(
getSlpGenesisTargetOutput(
genesisInfo,
initialQuantity,
mintBatonOutIdx,
),
).toStrictEqual(targetOutputs);
});
});
// Error cases
expectedErrors.forEach(expectedError => {
const {
description,
genesisInfo,
initialQuantity,
mintBatonOutIdx,
errorMsg,
} = expectedError;
it(`getSlpGenesisTargetOutput throws error for: ${description}`, () => {
expect(() =>
getSlpGenesisTargetOutput(
genesisInfo,
initialQuantity,
mintBatonOutIdx,
),
).toThrow(errorMsg);
});
});
});
describe('Get slpv1 send token inputs and outputs', () => {
const { expectedReturns, expectedErrors } =
tokenProtocolsVectors.getSendTokenInputs;
expectedReturns.forEach(expectedReturn => {
const { description, tokenInputs, sendAmounts, targetOutputs } =
expectedReturn;
it(`getSlpSendTargetOutputs: ${description}`, () => {
expect(
getSlpSendTargetOutputs(
{ tokenInputs, sendAmounts },
SEND_DESTINATION_ADDRESS,
+ SLP_FUNGIBLE,
),
).toStrictEqual(targetOutputs);
});
});
expectedErrors.forEach(expectedError => {
const {
description,
allSendUtxos,
sendQty,
tokenId,
decimals,
errorMsg,
} = expectedError;
it(`getSendTokenInputs with in-node chronik utxos throws error for: ${description}`, () => {
expect(() =>
getSendTokenInputs(
allSendUtxos,
tokenId,
sendQty,
decimals,
),
).toThrow(errorMsg);
});
});
});
describe('Generating etoken burn tx target outputs', () => {
const { expectedReturns } = vectors.burnTxs;
// Successfully created targetOutputs
expectedReturns.forEach(expectedReturn => {
const {
description,
tokenUtxos,
burnQty,
tokenId,
decimals,
tokenInputInfo,
targetOutputs,
} = expectedReturn;
it(`getSlpBurnTargetOutputs: ${description}`, () => {
// We get the same tokenInputInfo object for token burns that we do for token sends
const calculatedTokenInputInfo = getSendTokenInputs(
tokenUtxos,
tokenId,
burnQty,
decimals,
);
expect(calculatedTokenInputInfo.sendAmounts).toStrictEqual(
tokenInputInfo.sendAmounts,
);
expect(
- getSlpBurnTargetOutputs(calculatedTokenInputInfo),
+ getSlpBurnTargetOutputs(
+ calculatedTokenInputInfo,
+ SLP_FUNGIBLE,
+ ),
).toStrictEqual(targetOutputs);
});
});
});
describe('Get slpv1 mint baton(s)', () => {
const { expectedReturns } = vectors.getMintBatons;
expectedReturns.forEach(vector => {
const { description, utxos, tokenId, returned } = vector;
it(`getMintBatons: ${description}`, () => {
expect(getMintBatons(utxos, tokenId)).toStrictEqual(returned);
});
});
});
describe('Generate target outputs for an slpv1 mint tx', () => {
const { expectedReturns, expectedErrors } =
vectors.getMintTargetOutputs;
expectedReturns.forEach(vector => {
const {
description,
tokenId,
decimals,
mintQty,
tokenProtocolNumber,
targetOutputs,
} = vector;
it(`getMintTargetOutputs: ${description}`, () => {
expect(
getMintTargetOutputs(
tokenId,
decimals,
mintQty,
tokenProtocolNumber,
),
).toStrictEqual(targetOutputs);
});
});
expectedErrors.forEach(vector => {
const {
description,
tokenId,
decimals,
mintQty,
tokenProtocolNumber,
error,
} = vector;
it(`getMintTargetOutputs throws error for: ${description}`, () => {
expect(() =>
getMintTargetOutputs(
tokenId,
decimals,
mintQty,
tokenProtocolNumber,
),
).toThrow(error);
});
});
});
describe('Gets max mint/send/burn SLP amount, decimalized', () => {
const { expectedReturns } = vectors.getMaxDecimalizedSlpQty;
expectedReturns.forEach(vector => {
const { description, decimals, returned } = vector;
it(`getMaxDecimalizedSlpQty: ${description}`, () => {
expect(getMaxDecimalizedSlpQty(decimals)).toBe(returned);
});
});
});
describe('Get targetOutputs for NFT1 parent genesis tx', () => {
const { expectedReturns, expectedErrors } =
vectors.getNftParentGenesisTargetOutputs;
// Successfully created targetOutputs
expectedReturns.forEach(expectedReturn => {
const {
description,
genesisInfo,
initialQuantity,
mintBatonOutIdx,
targetOutputs,
} = expectedReturn;
it(`getNftParentGenesisTargetOutputs: ${description}`, () => {
expect(
getNftParentGenesisTargetOutputs(
genesisInfo,
initialQuantity,
mintBatonOutIdx,
),
).toStrictEqual(targetOutputs);
});
});
// Error cases
expectedErrors.forEach(expectedError => {
const {
description,
genesisInfo,
initialQuantity,
mintBatonOutIdx,
errorMsg,
} = expectedError;
it(`getNftParentGenesisTargetOutputs throws error for: ${description}`, () => {
expect(() =>
getNftParentGenesisTargetOutputs(
genesisInfo,
initialQuantity,
mintBatonOutIdx,
),
).toThrow(errorMsg);
});
});
});
describe('Generate target outputs for an slpv1 nft parent mint tx', () => {
const { expectedReturns, expectedErrors } =
vectors.getNftParentMintTargetOutputs;
// Successfully created targetOutputs
expectedReturns.forEach(expectedReturn => {
const { description, tokenId, mintQty, targetOutputs } =
expectedReturn;
it(`getNftParentMintTargetOutputs: ${description}`, () => {
expect(
getNftParentMintTargetOutputs(tokenId, mintQty),
).toStrictEqual(targetOutputs);
});
});
// Error cases
expectedErrors.forEach(expectedError => {
const { description, tokenId, mintQty, errorMsg } = expectedError;
it(`getNftParentMintTargetOutputs throws error for: ${description}`, () => {
expect(() =>
getNftParentMintTargetOutputs(tokenId, mintQty),
).toThrow(errorMsg);
});
});
});
describe('Gets required inputs for an NFT1 parent fan-out tx, if present in given slpUtxos', () => {
const { expectedReturns } = vectors.getNftParentFanInputs;
expectedReturns.forEach(vector => {
const { description, tokenId, slpUtxos, returned } = vector;
it(`getNftParentFanInputs: ${description}`, () => {
expect(getNftParentFanInputs(tokenId, slpUtxos)).toStrictEqual(
returned,
);
});
});
});
describe('Generate target outputs for an NFT1 parent fan-out tx', () => {
const { expectedReturns, expectedErrors } =
vectors.getNftParentFanTxTargetOutputs;
// Successfully created targetOutputs
expectedReturns.forEach(expectedReturn => {
const { description, fanInputs, returned } = expectedReturn;
it(`getNftParentFanTxTargetOutputs: ${description}`, () => {
expect(getNftParentFanTxTargetOutputs(fanInputs)).toStrictEqual(
returned,
);
});
});
expectedErrors.forEach(expectedError => {
const { description, fanInputs, error } = expectedError;
it(`getNftParentFanTxTargetOutputs throws error for: ${description}`, () => {
expect(() => getNftParentFanTxTargetOutputs(fanInputs)).toThrow(
error,
);
});
});
});
describe('Gets required input for an NFT1 child genesis tx, if present in given slpUtxos', () => {
const { expectedReturns } = vectors.getNftChildGenesisInput;
expectedReturns.forEach(vector => {
const { description, tokenId, slpUtxos, returned } = vector;
it(`getNftChildGenesisInput: ${description}`, () => {
expect(
getNftChildGenesisInput(tokenId, slpUtxos),
).toStrictEqual(returned);
});
});
});
describe('Get targetOutputs for an NFT1 child genesis tx', () => {
const { expectedReturns } = vectors.getNftChildGenesisTargetOutputs;
expectedReturns.forEach(expectedReturn => {
const { description, genesisInfo, returned } = expectedReturn;
it(`getNftChildGenesisTargetOutputs: ${description}`, () => {
expect(
getNftChildGenesisTargetOutputs(genesisInfo),
).toStrictEqual(returned);
});
});
});
describe('Gets NFT utxo for an NFT 1 child', () => {
const { expectedReturns } = vectors.getNft;
expectedReturns.forEach(vector => {
const { description, tokenId, slpUtxos, returned } = vector;
it(`getNft: ${description}`, () => {
expect(getNft(tokenId, slpUtxos)).toStrictEqual(returned);
});
});
});
describe('Get targetOutputs for an NFT1 child send tx', () => {
const { expectedReturns } = vectors.getNftChildSendTargetOutputs;
expectedReturns.forEach(expectedReturn => {
const { description, tokenId, destinationAddress, returned } =
expectedReturn;
it(`getNftChildSendTargetOutputs: ${description}`, () => {
expect(
getNftChildSendTargetOutputs(tokenId, destinationAddress),
).toStrictEqual(returned);
});
});
});
describe('isTokenDustChangeOutput correctly identifies a token dust change output', () => {
const { expectedReturns } = vectors.isTokenDustChangeOutput;
expectedReturns.forEach(expectedReturn => {
const { description, targetOutput, returned } = expectedReturn;
it(`isTokenDustChangeOutput: ${description}`, () => {
expect(isTokenDustChangeOutput(targetOutput)).toStrictEqual(
returned,
);
});
});
});
describe('getAgoraAdFuelSats correctly determines one-input fee for an agora offer tx', () => {
const MOCK_WALLET_SK = fromHex('33'.repeat(32));
const SATS_PER_KB_MIN = 1000n;
const SATS_PER_KB_ALT = 2000n;
it(`getAgoraAdFuelSats for minimum eCash fee NFT listing`, () => {
expect(
getAgoraAdFuelSats(
MOCK_ONESHOT.adScript(),
AgoraOneshotAdSignatory(MOCK_WALLET_SK),
[
{
sats: 0n,
script: slpSend(MOCK_TOKEN_ID, SLP_NFT1_CHILD, [
1n,
]),
},
{
sats: BigInt(appConfig.dustSats),
script: MOCK_AGORA_P2SH,
},
],
SATS_PER_KB_MIN,
),
).toEqual(314);
});
it(`getAgoraAdFuelSats for a different fee level NFT listing`, () => {
expect(
getAgoraAdFuelSats(
MOCK_ONESHOT.adScript(),
AgoraOneshotAdSignatory(MOCK_WALLET_SK),
// Note: for NFT listings, the offerOutputs parameter is more or less constant,
// at least in Cashtab
// maybe you could have a case where sendAmounts array is not [1], mb you have a weird
// NFT with "change" ... will not see this in Cashtab
// So, arguably this function could be a constant. However, we will extend to support
// partial agora offers, and we may change how these offers are made in the future
// Also note... if you set this to a variable in this test, you get failures because
// of the way ecash-lib copies objects and jest not liking it
[
{
sats: 0n,
script: slpSend(MOCK_TOKEN_ID, SLP_NFT1_CHILD, [
1n,
]),
},
{
sats: BigInt(appConfig.dustSats),
script: MOCK_AGORA_P2SH,
},
],
SATS_PER_KB_ALT,
),
).toEqual(628);
});
it(`getAgoraAdFuelSats for minimum eCash fee SLP partial listing and no token change`, () => {
const tokenSendAmount = 10000n;
expect(
getAgoraAdFuelSats(
MOCK_PARTIAL.adScript(),
AgoraPartialAdSignatory(MOCK_WALLET_SK),
[
{
sats: 0n,
script: slpSend(MOCK_TOKEN_ID, SLP_FUNGIBLE, [
tokenSendAmount,
]),
},
{
sats: BigInt(appConfig.dustSats),
script: MOCK_PARTIAL_P2SH,
},
],
SATS_PER_KB_MIN,
),
).toEqual(368);
});
it(`getAgoraAdFuelSats for minimum eCash fee SLP partial listing and a token change output`, () => {
// Not expected for this use case to come up in Cashtab, but we demonstrate that the fee
// increases with an additional output as expected
const tokenSendAmount = 9900n;
const tokenChangeAmount = 100n;
expect(
getAgoraAdFuelSats(
MOCK_PARTIAL.adScript(),
AgoraPartialAdSignatory(MOCK_WALLET_SK),
[
{
sats: 0n,
script: slpSend(MOCK_TOKEN_ID, SLP_FUNGIBLE, [
tokenSendAmount,
tokenChangeAmount,
]),
},
{
sats: BigInt(appConfig.dustSats),
script: MOCK_PARTIAL_P2SH,
},
{
sats: BigInt(appConfig.dustSats),
script: Script.fromAddress(
SEND_DESTINATION_ADDRESS,
),
},
],
SATS_PER_KB_MIN,
),
).toEqual(411);
});
it(`getAgoraAdFuelSats for alternate eCash fee SLP partial listing and no token change`, () => {
const tokenSendAmount = 10000n;
expect(
getAgoraAdFuelSats(
MOCK_PARTIAL.adScript(),
AgoraPartialAdSignatory(MOCK_WALLET_SK),
[
{
sats: 0n,
script: slpSend(MOCK_TOKEN_ID, SLP_FUNGIBLE, [
tokenSendAmount,
]),
},
{
sats: BigInt(appConfig.dustSats),
script: MOCK_PARTIAL_P2SH,
},
],
SATS_PER_KB_ALT,
),
).toEqual(736);
});
});
});
diff --git a/cashtab/src/token-protocols/slpv1/index.ts b/cashtab/src/token-protocols/slpv1/index.ts
index 3fc948304..8912e4aa3 100644
--- a/cashtab/src/token-protocols/slpv1/index.ts
+++ b/cashtab/src/token-protocols/slpv1/index.ts
@@ -1,623 +1,625 @@
// Copyright (c) 2024 The Bitcoin developers
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
import appConfig from 'config/app';
import { undecimalizeTokenAmount } from 'wallet';
import {
Script,
slpGenesis,
slpSend,
slpMint,
TxBuilder,
EccDummy,
Signatory,
TxBuilderOutput,
} from 'ecash-lib';
import { GenesisInfo } from 'chronik-client';
import { TokenUtxo, CashtabUtxo, SlpDecimals } from 'wallet';
import {
TOKEN_DUST_CHANGE_OUTPUT,
TokenInputInfo,
TokenTargetOutput,
} from 'token-protocols';
// Constants for SLP 1 token types as returned by chronik-client
export const SLP_1_PROTOCOL_NUMBER = 1;
export const SLP_1_NFT_COLLECTION_PROTOCOL_NUMBER = 129;
export const SLP_1_NFT_PROTOCOL_NUMBER = 65;
// Note we have to specify the numbers here and not the constants for ts lint reasons
export type SUPPORTED_MINT_TYPES = 1 | 129;
export const MAX_OUTPUT_AMOUNT_SLP_ATOMS = 0xffffffffffffffffn;
const DUMMY_TXID =
'1111111111111111111111111111111111111111111111111111111111111111';
// SLP1 supports up to 19 outputs
// https://github.com/simpleledger/slp-specifications/blob/master/slp-token-type-1.md#send--transfer
// This value is defined by the spec, i.e. an SLP1 SEND tx with more outputs is invalid
// Rationale behind spec decision: OP_RETURN is limited to 223 bytes. A 19-output SLP Send tx requires
// 217 bytes in the OP_RETURN. Each output requires an additional 9 bytes (1 byte pushdata, 8 bytes value)
// So any more than 19 would be over the currently prevailing 223-byte OP_RETURN limit
const SLP1_SEND_MAX_OUTPUTS = 19;
// For SLPv1 Mint txs, Cashtab always puts the mint baton at mintBatonVout 2
const CASHTAB_SLP1_MINT_MINTBATON_VOUT = 2;
// To mint NFTs in a Collection (i.e. NFT Child from NFT Parent), you must spend this qty of NFT Parent
// This is a spec value
export const SLP1_NFT_CHILD_GENESIS_AMOUNT = 1n;
/**
* Get targetOutput for a SLP v1 genesis tx
* @param genesisInfo object containing token info for genesis tx
* @param initialQuantity
* @param mintBatonOutIdx
* @throws if invalid input params are passed to TokenType1.genesis
*/
export const getSlpGenesisTargetOutput = (
genesisInfo: GenesisInfo,
initialQuantity: bigint,
mintBatonOutIdx: 2 | undefined = undefined,
): TokenTargetOutput[] => {
if (typeof mintBatonOutIdx !== 'undefined' && mintBatonOutIdx !== 2) {
throw new Error(
'Cashtab only supports slpv1 genesis txs for fixed supply tokens or tokens with mint baton at index 2',
);
}
const targetOutputs = [];
const script = slpGenesis(
SLP_1_PROTOCOL_NUMBER,
genesisInfo,
initialQuantity,
mintBatonOutIdx,
);
// Per SLP v1 spec, OP_RETURN must be at index 0
// https://github.com/simpleledger/slp-specifications/blob/master/slp-token-type-1.md#genesis---token-genesis-transaction
targetOutputs.push({ sats: 0n, script });
// Per SLP v1 spec, genesis tx is minted to output at index 1
// In Cashtab, we mint genesis txs to our own Path1899 address
// Expected behavior for Cashtab tx building is to add change address to output
// with no address
targetOutputs.push(TOKEN_DUST_CHANGE_OUTPUT);
// If the user specified the creation of a mint baton, add it
// Note: Cashtab only supports the creation of one mint baton at index 2
if (typeof mintBatonOutIdx !== 'undefined' && mintBatonOutIdx === 2) {
targetOutputs.push({
sats: BigInt(appConfig.dustSats),
});
}
return targetOutputs;
};
/**
* Get targetOutput(s) for a SLP v1 SEND tx
* @param tokenInputInfo of getSendTokenInputs
* @param destinationAddress address where the tokens are being sent
* @throws if invalid input params are passed to TokenType1.send
* @returns targetOutput(s), e.g. [{sats: 0n, script: <encoded slp send script>}]
* or [{sats: 0n, script: <encoded slp send script>}, {sats: 546n}]
* if token change
* Change output has no address key
*/
export const getSlpSendTargetOutputs = (
tokenInputInfo: TokenInputInfo,
destinationAddress: string,
+ tokenType: number,
): TokenTargetOutput[] => {
const { tokenInputs, sendAmounts } = tokenInputInfo;
// Get tokenId from the tokenUtxo
const tokenId = tokenInputs[0].token.tokenId;
- const script = slpSend(tokenId, SLP_1_PROTOCOL_NUMBER, sendAmounts);
+ const script = slpSend(tokenId, tokenType, sendAmounts);
// Build targetOutputs per slpv1 spec
// https://github.com/simpleledger/slp-specifications/blob/master/slp-token-type-1.md#send---spend-transaction
// Initialize with OP_RETURN at 0 index, per spec
const targetOutputs: TokenTargetOutput[] = [{ sats: 0n, script }];
// Add first 'to' amount to 1 index. This could be any index between 1 and 19.
targetOutputs.push({
sats: BigInt(appConfig.dustSats),
script: Script.fromAddress(destinationAddress),
});
// sendAmounts can only be length 1 or 2
if (sendAmounts.length > 1) {
// Add dust output to hold token change
targetOutputs.push(TOKEN_DUST_CHANGE_OUTPUT);
}
return targetOutputs;
};
/**
* Get targetOutput(s) for a SLP v1 BURN tx
* Note: a burn tx is a special case of a send tx where you have no destination output
* You always have a change output as an eCash tx must have at least dust output
*
* @param tokenInputInfo
* @throws if invalid input params are passed to TokenType1.send
* @returns targetOutputs with a change output, even if all utxos are consumed
* [{sats: 0n, script: <encoded slp burn script>}, {sats: 546n}]
*/
export const getSlpBurnTargetOutputs = (
tokenInputInfo: TokenInputInfo,
+ tokenType: number,
): TokenTargetOutput[] => {
const { tokenId, sendAmounts } = tokenInputInfo;
// If we have change from the getSendTokenInputs call, we want to SEND it to ourselves
// If we have no change, we want to SEND ourselves 0
const hasChange = sendAmounts.length > 1;
const tokenChange = hasChange ? sendAmounts[1] : 0n;
// This step is what makes the tx a burn and not a send, see getSlpSendTargetOutputs
- const script = slpSend(tokenId, SLP_1_PROTOCOL_NUMBER, [tokenChange]);
+ const script = slpSend(tokenId, tokenType, [tokenChange]);
// Build targetOutputs per slpv1 spec
// https://github.com/simpleledger/slp-specifications/blob/master/slp-token-type-1.md#send---spend-transaction
// Script must be at index 0
// We need a token utxo even if change is 0
// We will probably always have an XEC change output, but always including a token output
// that is either change or a "send" qty of 0 is a simple standard that allows us to keep
// burn tx logic separate from ecash tx creation logic
// But lets just add the min output
return [{ sats: 0n, script }, TOKEN_DUST_CHANGE_OUTPUT];
};
/**
* Get mint baton(s) for a given token
* @param utxos
* @param tokenId
*/
export const getMintBatons = (
utxos: CashtabUtxo[],
tokenId: string,
): TokenUtxo[] => {
// From an array of chronik utxos, return only token utxos related to a given tokenId
return utxos.filter(
utxo =>
utxo.token?.tokenId === tokenId && // UTXO matches the token ID.
utxo.token?.isMintBaton === true, // UTXO is a minting baton.
) as TokenUtxo[];
};
/**
* Get targetOutput(s) for a SLP v1 MINT tx
* Note: Cashtab only supports slpv1 mints that preserve the baton at the wallet's address
* Spec: https://github.com/simpleledger/slp-specifications/blob/master/slp-token-type-1.md#mint---extended-minting-transaction
* @param tokenId
* @param decimals decimals for this tokenId
* @param mintQty decimalized string for token qty
* @throws if invalid input params are passed to TokenType1.mint
* @returns targetOutput(s), e.g. [{sats: 0n, script: <encoded slp send script>}, {sats: 546n}, {sats: 546n}]
* Note: we always return minted qty at index 1
* Note we always return a mint baton at index 2
*/
export const getMintTargetOutputs = (
tokenId: string,
decimals: SlpDecimals,
mintQty: string,
tokenProtocolNumber: SUPPORTED_MINT_TYPES,
): TokenTargetOutput[] => {
// We must undecimalize mintQty
// Get undecimalized string, i.e. "token satoshis"
const tokenSatoshis = BigInt(undecimalizeTokenAmount(mintQty, decimals));
const script = slpMint(
tokenId,
tokenProtocolNumber,
tokenSatoshis,
CASHTAB_SLP1_MINT_MINTBATON_VOUT,
);
// Build targetOutputs per slpv1 spec
// Dust output at v1 receives the minted qty (per spec)
// Dust output at v2 for mint baton (per Cashtab)
return [
// SLP 1 script
{ sats: 0n, script },
// Dust output for mint qty
TOKEN_DUST_CHANGE_OUTPUT,
// Dust output for mint baton
TOKEN_DUST_CHANGE_OUTPUT,
];
};
/**
* Get the maximum (decimalized) qty of SLP tokens that can be
* represented in a single SLP tx (mint, send, burn, or agora partial list)
* @param decimals
* @returns decimalized max amount
*/
export const getMaxDecimalizedSlpQty = (decimals: SlpDecimals): string => {
// Convert to string so we can get decimalized values
const MAX_OUTPUT_AMOUNT_SLP_ATOMS_STRING =
MAX_OUTPUT_AMOUNT_SLP_ATOMS.toString();
// The max amount depends on token decimals
// e.g. if decimals are 0, it's the same
// if decimals are 9, it's 18446744073.709551615
if (decimals === 0) {
return MAX_OUTPUT_AMOUNT_SLP_ATOMS_STRING;
}
const stringBeforeDecimalPoint = MAX_OUTPUT_AMOUNT_SLP_ATOMS_STRING.slice(
0,
MAX_OUTPUT_AMOUNT_SLP_ATOMS_STRING.length - decimals,
);
const stringAfterDecimalPoint = MAX_OUTPUT_AMOUNT_SLP_ATOMS_STRING.slice(
-1 * decimals,
);
return `${stringBeforeDecimalPoint}.${stringAfterDecimalPoint}`;
};
/**
* Get targetOutput for a SLP v1 NFT Parent (aka Group) genesis tx
* @param genesisInfo object containing token info for genesis tx
* @param initialQuantity
* @param mintBatonOutIdx
* @throws if invalid input params are passed to TokenType1.genesis
* @returns
*/
export const getNftParentGenesisTargetOutputs = (
genesisInfo: GenesisInfo,
initialQuantity: bigint,
mintBatonOutIdx: 2 | undefined = undefined,
): TokenTargetOutput[] => {
if (typeof mintBatonOutIdx !== 'undefined' && mintBatonOutIdx !== 2) {
throw new Error(
'Cashtab only supports slpv1 genesis txs for fixed supply tokens or tokens with mint baton at index 2',
);
}
const targetOutputs = [];
const script = slpGenesis(
SLP_1_NFT_COLLECTION_PROTOCOL_NUMBER,
genesisInfo,
initialQuantity,
mintBatonOutIdx,
);
// Per SLP v1 spec, OP_RETURN must be at index 0
// https://github.com/simpleledger/slp-specifications/blob/master/slp-token-type-1.md#genesis---token-genesis-transaction
targetOutputs.push({ sats: 0n, script });
// Per SLP v1 spec, genesis tx is minted to output at index 1
// In Cashtab, we mint genesis txs to our own Path1899 address
// If an output does not have an address, Cashtab will add its change address
targetOutputs.push(TOKEN_DUST_CHANGE_OUTPUT);
// If the user specified the creation of a mint baton, add it
// Note: Cashtab only supports the creation of one mint baton at index 2
if (typeof mintBatonOutIdx !== 'undefined' && mintBatonOutIdx === 2) {
targetOutputs.push(TOKEN_DUST_CHANGE_OUTPUT);
}
return targetOutputs;
};
/**
* TODO note this function is still not implemented
* Get targetOutput(s) for a SLPv1 NFT Parent MINT tx
* Note: Cashtab only supports slpv1 mints that preserve the baton at the wallet's address
* Note: Cashtab only supports NFT1 parents with decimals of 0
* @param tokenId
* @param mintQty
* @throws if invalid input params are passed to TokenType1.mint
* @returns targetOutput(s), e.g. [{sats: 0n, script: <encoded slp send script>}, {sats: 546n}, {sats: 546n}]
* Note: we always return minted qty at index 1
* Note we always return a mint baton at index 2
*/
export const getNftParentMintTargetOutputs = (
tokenId: string,
mintQty: bigint,
): TokenTargetOutput[] => {
const script = slpMint(
tokenId,
SLP_1_NFT_COLLECTION_PROTOCOL_NUMBER,
mintQty,
CASHTAB_SLP1_MINT_MINTBATON_VOUT,
);
return [
// SLP Script
{ sats: 0n, script },
// Dust output to hold mint qty
TOKEN_DUST_CHANGE_OUTPUT,
// Dust output to hold mint baton
TOKEN_DUST_CHANGE_OUTPUT,
];
};
/**
* Get inputs to make an NFT parent fan tx
* We need to make fan txs as minting an NFT1 child nft requires burning exactly 1 of the parent
* Well, the spec will let you do it if you burn more than one. But our users can be expected
* to appreciate our economy in this regard. *
* In practice, we are getting token utxos for tokenId that are not mint batons and have qty > 1
* @param tokenId tokenId of NFT1 Parent (aka Group aka Collection) token we want to mint child NFTs for
* @param slpUtxos What Cashtab stores at the wallet.state.slpUtxos key
*/
export const getNftParentFanInputs = (
tokenId: string,
slpUtxos: TokenUtxo[],
): TokenUtxo[] => {
return slpUtxos.filter(utxo => {
// UTXO matches the token ID
return (
utxo.token?.tokenId === tokenId &&
// UTXO is not already of the correct qty to be an NftParentFanInput
// Note: not expected to ever have this amount be '0' unless we have a mint baton
// If we do (somehow) get a 0 amount, no harm using it as an input...should
// consolidate it away anyhow
utxo.token?.atoms !== SLP1_NFT_CHILD_GENESIS_AMOUNT &&
// UTXO is not a minting baton
utxo.token?.isMintBaton === false
);
});
};
/**
* Get target outputs for an NFT 1 parent fan tx,
* i.e. a tx that creates as many token utxos as possible with amount === 1
* @param fanInputs result from getNftParentFanUtxos
* @returns array of target outputs, including script output at index 0, and dust outputs after
* as many as 19 dust outputs
*/
export const getNftParentFanTxTargetOutputs = (
fanInputs: TokenUtxo[],
): TokenTargetOutput[] => {
if (fanInputs.length === 0) {
throw new Error('No eligible inputs for this NFT parent fan tx');
}
// Iterate over eligible nft parent fan utxos (the output of getNftParentFanUtxos)
// Create as many minting utxos as possible in one tx (per spec, 19)
const fanInputsThisTx = [];
let totalInputAmount = 0n;
let maxOutputs = false;
for (const input of fanInputs) {
fanInputsThisTx.push(input);
// Note that all fanInputs have token.atoms
totalInputAmount = totalInputAmount + BigInt(input.token.atoms);
if (totalInputAmount >= SLP1_SEND_MAX_OUTPUTS) {
maxOutputs = true;
// We have enough inputs to create max outputs
break;
}
}
// Note we may also get here with a qty less than SLP1_SEND_MAX_OUTPUTS
// The user might not have 19 NFTs left to mint for this token
// Note we do not need a BigNumber for fanOutputs. totalInputAmount needs BigNumber because it could be enormous.
// But here, fanOutputs will be less than or equal to 19
const fanOutputs = maxOutputs
? SLP1_SEND_MAX_OUTPUTS
: Number(totalInputAmount);
// We only expect change if we have totalInputAmount of > 19
// We send amount 1 to as many outputs as we can
// If we have change and maxOutputs === true, this is 18
// Otherwise it's fanOutputs, which could be 19, or less if the user does not have 19 of this token left
const MAX_OUTPUTS_IF_CHANGE = SLP1_SEND_MAX_OUTPUTS - 1;
const change = maxOutputs
? totalInputAmount - BigInt(MAX_OUTPUTS_IF_CHANGE)
: 0n;
const hasChange = change > 0n;
const sendAmounts = Array(
hasChange && maxOutputs ? MAX_OUTPUTS_IF_CHANGE : fanOutputs,
).fill(1n);
if (hasChange) {
// Add change as the last output bc it feels weird adding it first
sendAmounts.push(change);
}
const targetOutputs = [];
const script = slpSend(
fanInputs[0].token.tokenId,
SLP_1_NFT_COLLECTION_PROTOCOL_NUMBER,
sendAmounts,
);
// Add OP_RETURN output at index 0
targetOutputs.push({ sats: 0n, script });
// Add dust outputs
// Note that Cashtab will add the creating wallet's change address
// to any output not including an address or script key
for (let i = 0; i < fanOutputs; i += 1) {
targetOutputs.push(TOKEN_DUST_CHANGE_OUTPUT);
}
return targetOutputs;
};
/**
* We need to get a parent utxo with qty of exactly 1
* This is burned to mint a child nft
* Ref https://github.com/simpleledger/slp-specifications/blob/master/slp-nft-1.md
* If we cannot find any utxos with qty of exactly 1, will need to create some with a fan-out tx
* This is handled by a separate function
* @param tokenId tokenId of the parent aka Group
* @param slpUtxos What Cashtab stores at the wallet.state.slpUtxos key
* @returns Array of ONLY ONE cashtab utxo where tokenId === tokenId and token.atoms === 1n, if it exists
* Otherwise an empty array
*/
export const getNftChildGenesisInput = (
tokenId: string,
slpUtxos: TokenUtxo[],
): TokenUtxo[] => {
// Note that we do not use .filter() as we do in most "getInput" functions for SLP,
// because in this case we only want exactly 1 utxo
for (const utxo of slpUtxos) {
if (
utxo.token?.tokenId === tokenId &&
utxo.token?.isMintBaton === false &&
utxo.token?.atoms === SLP1_NFT_CHILD_GENESIS_AMOUNT
) {
return [utxo];
}
}
// We have not found a utxo that meets our conditions
// Return empty array
return [];
};
/**
* Get target outputs for minting an NFT
* Note that we get these inputs separately, from getNftChildGenesisInput and, if that fails,
* from making a fan-out tx
* Note we do not need the group tokenId, as this is implied in the tx by the input
* @param genesisInfo
*/
export const getNftChildGenesisTargetOutputs = (
genesisInfo: GenesisInfo,
): TokenTargetOutput[] => {
const script = slpGenesis(
SLP_1_NFT_PROTOCOL_NUMBER,
genesisInfo,
1n, // We always mint exactly 1 NFT
undefined, // We never mint an NFT with a child mint baton
);
// We always mint exactly 1 NFT per child genesis tx, so no change is expected
// Will always have exactly 1 dust utxo at index 1 to hold this NFT
return [{ sats: 0n, script }, TOKEN_DUST_CHANGE_OUTPUT];
};
/**
* We are effectively getting this NFT
* The NFT is stored at a dust utxo from a previous NFT Child send tx or its NFT Child genesis tx
* Because this is an NFT, "there can be only one" of these utxos. The wallet either has it or it does not.
* @param tokenId tokenId of the NFT (SLP1 NFT Child)
* @param slpUtxos What Cashtab stores at the wallet.state.slpUtxos key
* @returns Array of ONLY ONE cashtab utxo where tokenId === tokenId
* Otherwise an empty array
*
* Function could be called "getNftChildSendInput" -- however, we will probably use this function
* for more than simply getting the required input for sending an NFT
*
* NOTE
* We do not "check" to see if we have more than one utxo of this NFT
* This is not expected to happen -- though it could happen if this function is used in the wrong context,
* for example called with a tokenId of a token that is not an NFT1 child
* Dev responsibly -- imo it is not worth performing this check every time the function is called
* Only use this function when sending a type1 NFT child
*/
export const getNft = (tokenId: string, slpUtxos: TokenUtxo[]): TokenUtxo[] => {
// Note that we do not use .filter() as we do in most "getInput" functions for SLP,
// because in this case we only want exactly 1 utxo
for (const utxo of slpUtxos) {
if (utxo.token?.tokenId === tokenId) {
return [utxo];
}
}
// We have not found a utxo that meets our conditions
// Return empty array
return [];
};
/**
* Cashtab only supports sending one NFT1 child at a time
* Which child is sent is determined by input selection
* So, the user interface for input selection is what mostly drives this tx
* @param tokenId tokenId of the Parent (aka Group)
*/
export const getNftChildSendTargetOutputs = (
tokenId: string,
destinationAddress: string,
): TokenTargetOutput[] => {
// We only ever send 1 NFT
const SEND_ONE_CHILD = [1n];
const script = slpSend(tokenId, SLP_1_NFT_PROTOCOL_NUMBER, SEND_ONE_CHILD);
// Implementation notes
// - Cashtab only supports sending one NFT at a time
// - All NFT Child inputs will have amount of 1
// Therefore, we will have no change, and every send tx will have only one token utxo output
return [
{ sats: 0n, script },
{
script: Script.fromAddress(destinationAddress),
sats: BigInt(appConfig.dustSats),
},
];
};
/**
* Test if a given targetOutput is TOKEN_DUST_CHANGE_OUTPUT
* Such an output needs 'script' added for the sending wallet's address
* @param targetOutput
*/
export const isTokenDustChangeOutput = (
targetOutput: TokenTargetOutput,
): boolean => {
return (
// We have only one key
Object.keys(targetOutput).length === 1 &&
// It's "value"
'sats' in targetOutput &&
// it's equal to 546n
targetOutput.sats === BigInt(appConfig.dustSats)
);
};
/**
* For ecash-agora SLP1 listings txs, an "ad setup tx" is required before
* we can actually broadcast the offer
*
* We want to minimize the amount of XEC we need to make these two required txs
*
* So, we calculate the fee needed to send the 2nd tx (the offer tx)
* We will then use this fee to size the output of the first tx to exactly
* cover the 2nd tx
*/
export const getAgoraAdFuelSats = (
redeemScript: Script,
signatory: Signatory,
offerOutputs: TxBuilderOutput[],
satsPerKb: bigint,
) => {
// First, get the size of the listing tx
const dummyOfferTx = new TxBuilder({
inputs: [
{
input: {
prevOut: {
// Use a placeholder 32-byte txid
txid: DUMMY_TXID,
// The outIdx will always be 1 in Cashtab
// In practice, this does not impact the tx size calculation
outIdx: 1,
},
signData: {
// Arbitrary value that we know will cover the fee for this tx,
// which will always have only one input in Cashtab
sats: 100000n,
redeemScript,
},
},
signatory,
},
],
outputs: offerOutputs,
});
const measureTx = dummyOfferTx.sign({ ecc: new EccDummy() });
const dummyOfferTxSats = Math.ceil(
(measureTx.serSize() * Number(satsPerKb)) / 1000,
);
return dummyOfferTxSats;
};
diff --git a/cashtab/src/transactions/__tests__/index.test.js b/cashtab/src/transactions/__tests__/index.test.js
index 9c8e808d6..2d028d5bb 100644
--- a/cashtab/src/transactions/__tests__/index.test.js
+++ b/cashtab/src/transactions/__tests__/index.test.js
@@ -1,492 +1,495 @@
// Copyright (c) 2023-2024 The Bitcoin developers
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
import {
sendXec,
getMultisendTargetOutputs,
ignoreUnspendableUtxos,
getMaxSendAmountSatoshis,
isFinalizedInput,
} from 'transactions';
import {
getSlpSendTargetOutputs,
getSlpBurnTargetOutputs,
} from 'token-protocols/slpv1';
import { getSendTokenInputs } from 'token-protocols';
import { MockChronikClient } from '../../../../modules/mock-chronik-client';
import vectors, {
sendXecVectors,
getMultisendTargetOutputsVectors,
ignoreUnspendableUtxosVectors,
sendSlp,
} from '../fixtures/vectors';
import slpv1Vectors from 'token-protocols/slpv1/fixtures/vectors';
import { wallet, walletWithTokensInNode } from 'transactions/fixtures/mocks';
-import { Ecc, Script, fromHex } from 'ecash-lib';
+import { Ecc, SLP_FUNGIBLE, Script, fromHex } from 'ecash-lib';
describe('Cashtab functions that build and broadcast rawtxs', () => {
const ecc = new Ecc();
describe('We can broadcast XEC transactions', () => {
// Unit test for each vector in fixtures for the sendingXecToSingleAddress case
const { txs, errors } = sendXecVectors;
// Successfully built and broadcast txs
txs.forEach(async tx => {
const {
description,
wallet,
targetOutputs,
satsPerKb,
chaintipBlockheight,
txid,
hex,
} = tx;
it(`sendXec: ${description}`, async () => {
const chronik = new MockChronikClient();
chronik.setBroadcastTx(hex, txid);
expect(
await sendXec(
chronik,
ecc,
wallet,
targetOutputs,
satsPerKb,
chaintipBlockheight,
),
).toStrictEqual({ hex, response: { txid } });
});
});
// Error cases
errors.forEach(async error => {
const { description, wallet, targetOutputs, satsPerKb, msg, hex } =
error;
it(`sendXec: ${description}`, async () => {
const chronik = new MockChronikClient();
// e.g. ('block', {input: '', output: ''})
if (typeof hex !== 'undefined') {
// For error cases that are not thrown until after the tx is successfully built,
// set a tx broadcast error that can be thrown by the broadcasting eCash node
chronik.setBroadcastTx(hex, new Error(msg));
}
await expect(
sendXec(chronik, ecc, wallet, targetOutputs, satsPerKb),
).rejects.toThrow(msg);
});
});
});
it('We can build a tx to get the exact fee, then add another utxo if necessary', async () => {
/**
* We send 2000 satoshis with utxos of 1000, 1001, and 1000
* Expected behavior
* sendXec will build and attempt to broadcast the tx with total inputs of 2001 satoshis,
* as 2001 > 2000
* This will fail because tx fee is greater than 1 satoshi
* Cashtab will add another input and successfully broadcast the tx
*/
const chronik = new MockChronikClient();
const hex =
'0200000003c31d0b990c5a707dca806648fe5036dbb3f9590b3e22e026392912edeef154680000000064417353fc52d6f47efffddf90656dcbd4313f476c292625e24c71660b7b075f36f2c163ff2c713ad8e593490cbbaa32b424c93671908731912de255327e394c65eb4121031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02dffffffffc31d0b990c5a707dca806648fe5036dbb3f9590b3e22e026392912edeef15468010000006441ef045f01ba4b6dd75b470787de704c366ad8869369ae445f9fb744ee3ec220533324423ae6028e6fb72fbd3d7f6359eb9c1b35322ced7e2d263170a4092bebaa4121031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02dffffffffc31d0b990c5a707dca806648fe5036dbb3f9590b3e22e026392912edeef15468020000006441faa831725c8e38a909cbf3ba594360b2d51fd884397347f4c0ce0d1379096636db4126d7f9caf34f7480d3700ffbed062352ea7e0b2fac15f5a35df880b9154c4121031d4603bdc23aca9432f903e3cf5975a3f655cc3fa5057c61d00dfc1ca5dfd02dffffffff01d0070000000000001976a9144e532257c01b310b3b5c1fd947c79a72addf852388ac00000000';
const txid =
'73af2c7dcf70811ef6fa68c671673529289b1304e1cb3979f9792780f2b885ab';
chronik.setBroadcastTx(hex, txid);
const walletWithEdgeCaseUtxos = {
...wallet,
state: {
...wallet.state,
nonSlpUtxos: [
{
outpoint: {
txid: '6854f1eeed12293926e0223e0b59f9b3db3650fe486680ca7d705a0c990b1dc3',
outIdx: 0,
},
blockHeight: -1,
isCoinbase: false,
isFinal: false,
sats: 1000n,
path: 1899,
},
{
outpoint: {
txid: '6854f1eeed12293926e0223e0b59f9b3db3650fe486680ca7d705a0c990b1dc3',
outIdx: 1,
},
blockHeight: -1,
isCoinbase: false,
isFinal: false,
sats: 1001n,
path: 1899,
},
{
outpoint: {
txid: '6854f1eeed12293926e0223e0b59f9b3db3650fe486680ca7d705a0c990b1dc3',
outIdx: 2,
},
blockHeight: -1,
isCoinbase: false,
isFinal: false,
sats: 1000n,
path: 1899,
},
],
},
};
expect(
await sendXec(
chronik,
ecc,
walletWithEdgeCaseUtxos,
[
{
script: Script.fromAddress(
'ecash:qp89xgjhcqdnzzemts0aj378nfe2mhu9yvxj9nhgg6',
),
sats: 2000n,
},
],
1000n,
800000,
),
).toStrictEqual({ hex, response: { txid } });
});
it('We will throw expected insufficient funds error if we have enough utxos to cover target send amount but not enough to cover the fee', async () => {
/**
* We send 2000 satoshis with utxos of 1000, and 1001
* Expected behavior
* sendXec will build and attempt to broadcast the tx with total inputs of 2001 satoshis,
* as 2001 > 2000
* This will fail because tx fee is greater than 1 satoshi
* Cashtab will try to add another input, but no other inputs are available
* So we get insufficient funds error
*/
const chronik = new MockChronikClient();
const walletWithEdgeCaseUtxos = {
...wallet,
state: {
...wallet.state,
nonSlpUtxos: [
{
outpoint: {
txid: '6854f1eeed12293926e0223e0b59f9b3db3650fe486680ca7d705a0c990b1dc3',
outIdx: 0,
},
blockHeight: -1,
isCoinbase: false,
sats: 1000n,
network: 'XEC',
path: 1899,
},
{
outpoint: {
txid: '6854f1eeed12293926e0223e0b59f9b3db3650fe486680ca7d705a0c990b1dc3',
outIdx: 1,
},
blockHeight: -1,
isCoinbase: false,
sats: 1001n,
network: 'XEC',
path: 1899,
},
],
},
};
await expect(
sendXec(
chronik,
ecc,
walletWithEdgeCaseUtxos,
[
{
script: Script.fromAddress(
'ecash:qp89xgjhcqdnzzemts0aj378nfe2mhu9yvxj9nhgg6',
),
sats: 2000n,
},
],
1000n,
800000,
),
).rejects.toThrow('Insufficient funds');
});
describe('Forming multisend targetOutputs', () => {
// Unit test for each vector in fixtures for the getMultisendTargetOutputs case
const { formedOutputs, errors } = getMultisendTargetOutputsVectors;
// Successfully built and broadcast txs
formedOutputs.forEach(async formedOutput => {
const { description, userMultisendInput, targetOutputs } =
formedOutput;
it(`getMultisendTargetOutputs: ${description}`, () => {
expect(
getMultisendTargetOutputs(userMultisendInput),
).toStrictEqual(targetOutputs);
});
});
// Error cases
errors.forEach(async error => {
const { description, userMultisendInput, msg } = error;
it(`getMultisendTargetOutputs throws error for: ${description}`, () => {
expect(() =>
getMultisendTargetOutputs(userMultisendInput),
).toThrow(msg);
});
});
});
describe('Ignore unspendable coinbase utxos', () => {
// Unit test for each vector in fixtures for the ignoreUnspendableUtxos case
const { expectedReturns } = ignoreUnspendableUtxosVectors;
// Successfully built and broadcast txs
expectedReturns.forEach(async formedOutput => {
const {
description,
unfilteredUtxos,
chaintipBlockheight,
spendableUtxos,
} = formedOutput;
it(`ignoreUnspendableUtxos: ${description}`, () => {
expect(
ignoreUnspendableUtxos(
unfilteredUtxos,
chaintipBlockheight,
),
).toStrictEqual(spendableUtxos);
});
});
});
describe('We can create and broadcast SLP v1 SEND and BURN txs from utxos of nng or in-node chronik shape', () => {
// Unit test for each vector in fixtures for the sendingXecToSingleAddress case
const { expectedReturns } = sendSlp;
// Successfully builds and broadcasts txs for in-node chronik-client-shaped input utxos
expectedReturns.forEach(async tx => {
const {
description,
wallet,
tokenId,
sendQty,
decimals,
sendAmounts,
tokenInputs,
destinationAddress,
satsPerKb,
chaintipBlockheight,
txid,
hex,
burn,
} = tx;
it(`Build and broadcast an SLP V1 SEND and BURN tx from in-node chronik-client utxos: ${description}`, async () => {
const chronik = new MockChronikClient();
chronik.setBroadcastTx(hex, txid);
chronik.setBroadcastTx(burn.hex, burn.txid);
// Get tokenInputs and sendAmounts
const tokenInputInfo = getSendTokenInputs(
wallet.state.slpUtxos,
tokenId,
sendQty,
decimals,
);
expect(tokenInputInfo.tokenInputs).toStrictEqual(tokenInputs);
expect(tokenInputInfo.sendAmounts).toStrictEqual(sendAmounts);
// Get the targetOutputs
const tokenSendTargetOutputs = getSlpSendTargetOutputs(
tokenInputInfo,
destinationAddress,
+ SLP_FUNGIBLE,
);
// SLP v1 SEND
expect(
await sendXec(
chronik,
ecc,
wallet,
tokenSendTargetOutputs,
satsPerKb,
chaintipBlockheight,
tokenInputInfo.tokenInputs,
),
).toStrictEqual({ hex, response: { txid } });
// SLP v1 BURN
// Get the targetOutputs
- const tokenBurnTargetOutputs =
- getSlpBurnTargetOutputs(tokenInputInfo);
+ const tokenBurnTargetOutputs = getSlpBurnTargetOutputs(
+ tokenInputInfo,
+ SLP_FUNGIBLE,
+ );
expect(
await sendXec(
chronik,
ecc,
wallet,
tokenBurnTargetOutputs, // This is the only difference between SEND and BURN
satsPerKb,
chaintipBlockheight,
tokenInputInfo.tokenInputs,
),
).toStrictEqual({
hex: burn.hex,
response: { txid: burn.txid },
});
});
});
});
describe('We can build and broadcast NFT1 parent fan-out txs', () => {
const { expectedReturns } = slpv1Vectors.getNftParentFanTxTargetOutputs;
const CHAINTIP = 800000;
const FEE_RATE_SATS_PER_KB = 1000n;
// Successfully built and broadcast txs
expectedReturns.forEach(async tx => {
const { description, fanInputs, returned, rawTx } = tx;
const { hex, txid } = rawTx;
it(`sendXec: ${description}`, async () => {
const chronik = new MockChronikClient();
chronik.setBroadcastTx(hex, txid);
expect(
await sendXec(
chronik,
ecc,
{
...walletWithTokensInNode,
state: {
...walletWithTokensInNode.state,
slpUtxos: [
...walletWithTokensInNode.state.slpUtxos,
...fanInputs,
],
},
},
returned,
FEE_RATE_SATS_PER_KB,
CHAINTIP,
fanInputs,
),
).toStrictEqual({ hex, response: { txid } });
});
});
});
describe('We can get the max amount of XEC that a wallet can send', () => {
const MOCK_CHAINTIP = 800000;
it('We determine the max-send amount as the total value of all nonSlpUtxos less the required fee in satoshis', () => {
const SATOSHIS_PER_KB = 1000n;
expect(
getMaxSendAmountSatoshis(
walletWithTokensInNode,
[],
MOCK_CHAINTIP,
SATOSHIS_PER_KB,
),
).toStrictEqual(999815);
});
it('We can also determine the max send amount if the user includes a Cashtab Msg', () => {
const SATOSHIS_PER_KB = 1000n;
expect(
getMaxSendAmountSatoshis(
walletWithTokensInNode,
[
{
sats: 0n,
script: new Script(
fromHex(
'6a04007461622bf09f998ff09f93acf09faba1f09f9180f09f95b5efb88ff09f9191f09f8e83f09faa96f09f908bf09f8eaf',
),
),
},
],
MOCK_CHAINTIP,
SATOSHIS_PER_KB,
),
).toStrictEqual(999756);
});
it('The max send amount is lower if the fee is higher', () => {
const SATOSHIS_PER_KB = 2000n;
expect(
getMaxSendAmountSatoshis(
walletWithTokensInNode,
[],
MOCK_CHAINTIP,
SATOSHIS_PER_KB,
),
).toStrictEqual(999630);
});
it('We must adjust for a higher fee if we have more utxos', () => {
const SATOSHIS_PER_KB = 1000n;
const MOCK_BASE_XEC_UTXO = {
path: 1899,
outpoint: {
txid: '1111111111111111111111111111111111111111111111111111111111111111',
},
blockHeight: 700000,
isCoinbase: false,
};
expect(
getMaxSendAmountSatoshis(
{
...walletWithTokensInNode,
state: {
...walletWithTokensInNode.state,
nonSlpUtxos: [
...walletWithTokensInNode.state.nonSlpUtxos,
{ ...MOCK_BASE_XEC_UTXO, sats: 1000000n },
],
},
},
[],
MOCK_CHAINTIP,
SATOSHIS_PER_KB,
),
).toStrictEqual(1999674);
});
it('An immature Coinbase utxo will be ignored in the onMax calculation', () => {
const SATOSHIS_PER_KB = 2000n;
const MOCK_STAKING_REWARD_UTXO = {
path: 1899,
outpoint: {
txid: '1111111111111111111111111111111111111111111111111111111111111111',
},
blockHeight: 799999,
isCoinbase: true,
sats: 325000n,
};
expect(
getMaxSendAmountSatoshis(
{
...walletWithTokensInNode,
state: {
...walletWithTokensInNode.state,
nonSlpUtxos: [
...walletWithTokensInNode.state.nonSlpUtxos,
MOCK_STAKING_REWARD_UTXO,
],
},
},
[],
MOCK_CHAINTIP,
SATOSHIS_PER_KB,
),
).toStrictEqual(999630);
});
});
describe('We can tell whether or not a requiredInput needs a normal p2pkh signature from the wallet', () => {
const { expectedReturns } = vectors.isFinalizedInput;
expectedReturns.forEach(expectedReturn => {
const { description, requiredInput, returned } = expectedReturn;
it(`isFinalizedInput: ${description}`, () => {
expect(isFinalizedInput(requiredInput)).toBe(returned);
});
});
});
});

File Metadata

Mime Type
text/x-diff
Expires
Wed, May 21, 22:00 (1 d, 20 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5853460
Default Alt Text
(1 MB)

Event Timeline