@mainnet-cash/indexeddb-storage 4.0.0-next.0 → 4.0.0-next.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +10 -10
- package/dist/index.html +0 -9
- package/dist/indexeddb-storage-4.0.0-next.0.js +0 -108
- package/dist/tsconfig.browser.tsbuildinfo +0 -1
- package/src/IndexedDBProvider.test.ts +0 -89
- package/src/IndexedDBProvider.ts +0 -111
- package/src/Wallet.test.headless.js +0 -463
- package/src/index.test.headless.js +0 -64
- package/src/index.ts +0 -1
- package/tsconfig.browser.json +0 -6
- package/tsconfig.json +0 -32
- package/webpack.config.cjs +0 -105
package/package.json
CHANGED
|
@@ -1,30 +1,30 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "@mainnet-cash/indexeddb-storage",
|
|
4
|
-
"version": "4.0.0-next.
|
|
4
|
+
"version": "4.0.0-next.11",
|
|
5
5
|
"module": "dist/module/index.js",
|
|
6
6
|
"types": "dist/module/index.d.ts",
|
|
7
7
|
"exports": {
|
|
8
|
+
"types": "./dist/module/index.d.ts",
|
|
8
9
|
"import": "./dist/module/index.js"
|
|
9
10
|
},
|
|
11
|
+
"files": [
|
|
12
|
+
"dist/module"
|
|
13
|
+
],
|
|
10
14
|
"license": "MIT",
|
|
11
15
|
"author": "readcash",
|
|
12
16
|
"dependencies": {
|
|
13
|
-
"mainnet-js": "4.0.0-next.
|
|
17
|
+
"mainnet-js": "4.0.0-next.11"
|
|
14
18
|
},
|
|
15
19
|
"devDependencies": {
|
|
16
20
|
"fake-indexeddb": "^3.1.2"
|
|
17
21
|
},
|
|
18
22
|
"scripts": {
|
|
19
23
|
"build": "yarn build:module && yarn build:browser",
|
|
20
|
-
"build:
|
|
21
|
-
"build:
|
|
22
|
-
"build:browser": "npx webpack",
|
|
24
|
+
"build:module": "tsc -p tsconfig.build.json",
|
|
25
|
+
"build:browser": "vite build && BUILD_TARGET=test vite build",
|
|
23
26
|
"build:production": "yarn build:module && NODE_ENV=production yarn build:browser",
|
|
24
|
-
"test": "
|
|
27
|
+
"test": "vitest run --config ../../test/vitest.config.ts",
|
|
25
28
|
"publish:public": "yarn publish --access public"
|
|
26
|
-
}
|
|
27
|
-
"testPathIgnorePatterns": [
|
|
28
|
-
"dist"
|
|
29
|
-
]
|
|
29
|
+
}
|
|
30
30
|
}
|
package/dist/index.html
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html>
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="utf-8">
|
|
5
|
-
<title>The Empty Mainnet App</title>
|
|
6
|
-
<meta name="viewport" content="width=device-width, initial-scale=1"><script defer src="indexeddb-storage-4.0.0-next.0.js"></script></head>
|
|
7
|
-
<body><script defer src="mainnet.js"></script><script>document.addEventListener("DOMContentLoaded", async (event) => Object.assign(globalThis, await __mainnetPromise))</script>
|
|
8
|
-
</body>
|
|
9
|
-
</html>
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
|
|
3
|
-
* This devtool is neither made for production nor for readable output files.
|
|
4
|
-
* It uses "eval()" calls to create a separate source file in the browser devtools.
|
|
5
|
-
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
|
|
6
|
-
* or disable the default devtool with "devtool: false".
|
|
7
|
-
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
|
|
8
|
-
*/
|
|
9
|
-
(function webpackUniversalModuleDefinition(root, factory) {
|
|
10
|
-
if(typeof exports === 'object' && typeof module === 'object')
|
|
11
|
-
module.exports = factory();
|
|
12
|
-
else if(typeof define === 'function' && define.amd)
|
|
13
|
-
define([], factory);
|
|
14
|
-
else {
|
|
15
|
-
var a = factory();
|
|
16
|
-
for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];
|
|
17
|
-
}
|
|
18
|
-
})(self, () => {
|
|
19
|
-
return /******/ (() => { // webpackBootstrap
|
|
20
|
-
/******/ "use strict";
|
|
21
|
-
/******/ var __webpack_modules__ = ({
|
|
22
|
-
|
|
23
|
-
/***/ "./src/IndexedDBProvider.ts":
|
|
24
|
-
/*!**********************************!*\
|
|
25
|
-
!*** ./src/IndexedDBProvider.ts ***!
|
|
26
|
-
\**********************************/
|
|
27
|
-
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
28
|
-
|
|
29
|
-
eval("/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ IndexedDBProvider)\n/* harmony export */ });\nclass IndexedDBProvider {\n constructor(dbName = \"wallet\", storeName = \"wallet\") {\n this.db = null;\n this.dbName = dbName;\n this.storeName = storeName;\n }\n async openDB() {\n if (this.db)\n return this.db;\n return new Promise((resolve, reject) => {\n const request = indexedDB.open(this.dbName, 31);\n request.onupgradeneeded = (event) => {\n const db = request.result;\n if (!db.objectStoreNames.contains(this.storeName)) {\n db.createObjectStore(this.storeName, { keyPath: \"name\" });\n }\n };\n request.onsuccess = () => {\n this.db = request.result;\n resolve(this.db);\n };\n request.onerror = () => reject(request.error);\n });\n }\n async init() {\n await this.openDB();\n return this;\n }\n async close() {\n if (this.db) {\n this.db.close();\n this.db = null;\n }\n return this;\n }\n getInfo() {\n return \"indexedDB\";\n }\n async addWallet(name, walletId) {\n const db = await this.openDB();\n return new Promise((resolve, reject) => {\n const tx = db.transaction(this.storeName, \"readwrite\");\n const store = tx.objectStore(this.storeName);\n const getReq = store.get(name);\n getReq.onsuccess = () => {\n if (getReq.result) {\n resolve(false);\n }\n else {\n const addReq = store.add({ name, wallet: walletId });\n addReq.onsuccess = () => resolve(true);\n addReq.onerror = () => reject(addReq.error);\n }\n };\n getReq.onerror = () => reject(getReq.error);\n });\n }\n async getWallet(name) {\n const db = await this.openDB();\n return new Promise((resolve, reject) => {\n const tx = db.transaction(this.storeName, \"readonly\");\n const store = tx.objectStore(this.storeName);\n const req = store.get(name);\n req.onsuccess = () => resolve(req.result);\n req.onerror = () => reject(req.error);\n });\n }\n async getWallets() {\n const db = await this.openDB();\n return new Promise((resolve, reject) => {\n const tx = db.transaction(this.storeName, \"readonly\");\n const store = tx.objectStore(this.storeName);\n const req = store.getAll();\n req.onsuccess = () => resolve(req.result || []);\n req.onerror = () => reject(req.error);\n });\n }\n async updateWallet(name, walletId) {\n const db = await this.openDB();\n return new Promise((resolve, reject) => {\n const tx = db.transaction(this.storeName, \"readwrite\");\n const store = tx.objectStore(this.storeName);\n const getReq = store.get(name);\n getReq.onsuccess = () => {\n if (!getReq.result) {\n resolve();\n }\n else {\n const putReq = store.put({ name, wallet: walletId });\n putReq.onsuccess = () => resolve();\n putReq.onerror = () => reject(putReq.error);\n }\n };\n getReq.onerror = () => reject(getReq.error);\n });\n }\n async walletExists(name) {\n return (await this.getWallet(name)) !== undefined;\n }\n}\n\n\n//# sourceURL=webpack://@mainnet-cash/indexeddb-storage/./src/IndexedDBProvider.ts?");
|
|
30
|
-
|
|
31
|
-
/***/ }),
|
|
32
|
-
|
|
33
|
-
/***/ "./src/index.ts":
|
|
34
|
-
/*!**********************!*\
|
|
35
|
-
!*** ./src/index.ts ***!
|
|
36
|
-
\**********************/
|
|
37
|
-
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
38
|
-
|
|
39
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"IndexedDBProvider\": () => (/* reexport safe */ _IndexedDBProvider_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])\n/* harmony export */ });\n/* harmony import */ var _IndexedDBProvider_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./IndexedDBProvider.js */ \"./src/IndexedDBProvider.ts\");\n\n\n\n//# sourceURL=webpack://@mainnet-cash/indexeddb-storage/./src/index.ts?");
|
|
40
|
-
|
|
41
|
-
/***/ })
|
|
42
|
-
|
|
43
|
-
/******/ });
|
|
44
|
-
/************************************************************************/
|
|
45
|
-
/******/ // The module cache
|
|
46
|
-
/******/ var __webpack_module_cache__ = {};
|
|
47
|
-
/******/
|
|
48
|
-
/******/ // The require function
|
|
49
|
-
/******/ function __webpack_require__(moduleId) {
|
|
50
|
-
/******/ // Check if module is in cache
|
|
51
|
-
/******/ var cachedModule = __webpack_module_cache__[moduleId];
|
|
52
|
-
/******/ if (cachedModule !== undefined) {
|
|
53
|
-
/******/ return cachedModule.exports;
|
|
54
|
-
/******/ }
|
|
55
|
-
/******/ // Create a new module (and put it into the cache)
|
|
56
|
-
/******/ var module = __webpack_module_cache__[moduleId] = {
|
|
57
|
-
/******/ // no module.id needed
|
|
58
|
-
/******/ // no module.loaded needed
|
|
59
|
-
/******/ exports: {}
|
|
60
|
-
/******/ };
|
|
61
|
-
/******/
|
|
62
|
-
/******/ // Execute the module function
|
|
63
|
-
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
|
64
|
-
/******/
|
|
65
|
-
/******/ // Return the exports of the module
|
|
66
|
-
/******/ return module.exports;
|
|
67
|
-
/******/ }
|
|
68
|
-
/******/
|
|
69
|
-
/************************************************************************/
|
|
70
|
-
/******/ /* webpack/runtime/define property getters */
|
|
71
|
-
/******/ (() => {
|
|
72
|
-
/******/ // define getter functions for harmony exports
|
|
73
|
-
/******/ __webpack_require__.d = (exports, definition) => {
|
|
74
|
-
/******/ for(var key in definition) {
|
|
75
|
-
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
|
|
76
|
-
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
|
|
77
|
-
/******/ }
|
|
78
|
-
/******/ }
|
|
79
|
-
/******/ };
|
|
80
|
-
/******/ })();
|
|
81
|
-
/******/
|
|
82
|
-
/******/ /* webpack/runtime/hasOwnProperty shorthand */
|
|
83
|
-
/******/ (() => {
|
|
84
|
-
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
|
|
85
|
-
/******/ })();
|
|
86
|
-
/******/
|
|
87
|
-
/******/ /* webpack/runtime/make namespace object */
|
|
88
|
-
/******/ (() => {
|
|
89
|
-
/******/ // define __esModule on exports
|
|
90
|
-
/******/ __webpack_require__.r = (exports) => {
|
|
91
|
-
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
|
92
|
-
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
93
|
-
/******/ }
|
|
94
|
-
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
|
95
|
-
/******/ };
|
|
96
|
-
/******/ })();
|
|
97
|
-
/******/
|
|
98
|
-
/************************************************************************/
|
|
99
|
-
/******/
|
|
100
|
-
/******/ // startup
|
|
101
|
-
/******/ // Load entry module and return exports
|
|
102
|
-
/******/ // This entry module can't be inlined because the eval devtool is used.
|
|
103
|
-
/******/ var __webpack_exports__ = __webpack_require__("./src/index.ts");
|
|
104
|
-
/******/
|
|
105
|
-
/******/ return __webpack_exports__;
|
|
106
|
-
/******/ })()
|
|
107
|
-
;
|
|
108
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"fileNames":["../../../node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/typescript/lib/lib.esnext.intl.d.ts","../../../node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../mainnet-js/dist/module/test/fetch.d.ts","../../mainnet-js/dist/module/test/expect.d.ts","../../mainnet-js/dist/module/db/interface.d.ts","../../mainnet-js/dist/module/db/StorageProvider.d.ts","../../mainnet-js/dist/module/db/index.d.ts","../../mainnet-js/dist/module/mine/mine.d.ts","../../mainnet-js/dist/module/mine/index.d.ts","../../../node_modules/@rpckit/core/dist/protocol.d.ts","../../../node_modules/@rpckit/core/dist/schema.d.ts","../../../node_modules/@rpckit/core/dist/types.d.ts","../../../node_modules/@rpckit/core/dist/batch.d.ts","../../../node_modules/@rpckit/core/dist/parse.d.ts","../../../node_modules/@rpckit/core/dist/retry.d.ts","../../../node_modules/@rpckit/core/dist/schema-utils.d.ts","../../../node_modules/@rpckit/core/dist/index.d.ts","../../../node_modules/@rpckit/core/dist/electrum-cash/parse.d.ts","../../../node_modules/@rpckit/core/dist/electrum-cash/schema.d.ts","../../../node_modules/@rpckit/core/dist/electrum-cash/index.d.ts","../../../node_modules/@bitauth/libauth/build/lib/address/base58-address.d.ts","../../../node_modules/@bitauth/libauth/build/lib/address/bech32.d.ts","../../../node_modules/@bitauth/libauth/build/lib/address/cash-address.d.ts","../../../node_modules/@bitauth/libauth/build/lib/address/locking-bytecode.d.ts","../../../node_modules/@bitauth/libauth/build/lib/address/address.d.ts","../../../node_modules/@bitauth/libauth/build/lib/bin/hashes.d.ts","../../../node_modules/@bitauth/libauth/build/lib/bin/ripemd160/ripemd160.base64.d.ts","../../../node_modules/@bitauth/libauth/build/lib/bin/secp256k1/secp256k1-wasm-types.d.ts","../../../node_modules/@bitauth/libauth/build/lib/bin/secp256k1/secp256k1-wasm.d.ts","../../../node_modules/@bitauth/libauth/build/lib/bin/sha1/sha1.base64.d.ts","../../../node_modules/@bitauth/libauth/build/lib/bin/sha256/sha256.base64.d.ts","../../../node_modules/@bitauth/libauth/build/lib/bin/sha512/sha512.base64.d.ts","../../../node_modules/@bitauth/libauth/build/lib/bin/bin.d.ts","../../../node_modules/@bitauth/libauth/build/lib/compiler/compiler-types.d.ts","../../../node_modules/@bitauth/libauth/build/lib/compiler/compiler-bch/compiler-bch.d.ts","../../../node_modules/@bitauth/libauth/build/lib/compiler/compiler-defaults.d.ts","../../../node_modules/@bitauth/libauth/build/lib/compiler/compiler-operation-helpers.d.ts","../../../node_modules/@bitauth/libauth/build/lib/compiler/compiler-operations.d.ts","../../../node_modules/@bitauth/libauth/build/lib/compiler/compiler-utils.d.ts","../../../node_modules/@bitauth/libauth/build/lib/compiler/scenarios.d.ts","../../../node_modules/@bitauth/libauth/build/lib/compiler/p2pkh-utils.d.ts","../../../node_modules/@bitauth/libauth/build/lib/compiler/standard/p2pkh.d.ts","../../../node_modules/@bitauth/libauth/build/lib/compiler/standard/standard.d.ts","../../../node_modules/@bitauth/libauth/build/lib/engine/types/template-types.d.ts","../../../node_modules/@bitauth/libauth/build/lib/compiler/compiler.d.ts","../../../node_modules/@bitauth/libauth/build/lib/crypto/combinations.d.ts","../../../node_modules/@bitauth/libauth/build/lib/format/base-convert.d.ts","../../../node_modules/@bitauth/libauth/build/lib/format/base64.d.ts","../../../node_modules/@bitauth/libauth/build/lib/format/bin-string.d.ts","../../../node_modules/@bitauth/libauth/build/lib/format/error.d.ts","../../../node_modules/@bitauth/libauth/build/lib/format/hex.d.ts","../../../node_modules/@bitauth/libauth/build/lib/format/log.d.ts","../../../node_modules/@bitauth/libauth/build/lib/format/number.d.ts","../../../node_modules/@bitauth/libauth/build/lib/format/read.d.ts","../../../node_modules/@bitauth/libauth/build/lib/format/time.d.ts","../../../node_modules/@bitauth/libauth/build/lib/format/type-utils.d.ts","../../../node_modules/@bitauth/libauth/build/lib/format/utf8.d.ts","../../../node_modules/@bitauth/libauth/build/lib/format/format.d.ts","../../../node_modules/@bitauth/libauth/build/lib/crypto/dependencies.d.ts","../../../node_modules/@bitauth/libauth/build/lib/crypto/secp256k1-types.d.ts","../../../node_modules/@bitauth/libauth/build/lib/crypto/default-crypto-instances.d.ts","../../../node_modules/@bitauth/libauth/build/lib/crypto/hmac.d.ts","../../../node_modules/@bitauth/libauth/build/lib/crypto/pbkdf2.d.ts","../../../node_modules/@bitauth/libauth/build/lib/crypto/ripemd160.d.ts","../../../node_modules/@bitauth/libauth/build/lib/crypto/secp256k1.d.ts","../../../node_modules/@bitauth/libauth/build/lib/crypto/sha1.d.ts","../../../node_modules/@bitauth/libauth/build/lib/crypto/sha256.d.ts","../../../node_modules/@bitauth/libauth/build/lib/crypto/sha512.d.ts","../../../node_modules/@bitauth/libauth/build/lib/crypto/crypto.d.ts","../../../node_modules/@bitauth/libauth/build/lib/engine/types/bcmr-types.d.ts","../../../node_modules/@bitauth/libauth/build/lib/engine/engine.d.ts","../../../node_modules/@bitauth/libauth/build/lib/key/hd-key.d.ts","../../../node_modules/@bitauth/libauth/build/lib/key/key-utils.d.ts","../../../node_modules/@bitauth/libauth/build/lib/key/word-lists/bip39.chinese-simplified.d.ts","../../../node_modules/@bitauth/libauth/build/lib/key/word-lists/bip39.chinese-traditional.d.ts","../../../node_modules/@bitauth/libauth/build/lib/key/word-lists/bip39.czech.d.ts","../../../node_modules/@bitauth/libauth/build/lib/key/word-lists/bip39.english.d.ts","../../../node_modules/@bitauth/libauth/build/lib/key/word-lists/bip39.french.d.ts","../../../node_modules/@bitauth/libauth/build/lib/key/word-lists/bip39.italian.d.ts","../../../node_modules/@bitauth/libauth/build/lib/key/word-lists/bip39.japanese.d.ts","../../../node_modules/@bitauth/libauth/build/lib/key/word-lists/bip39.korean.d.ts","../../../node_modules/@bitauth/libauth/build/lib/key/word-lists/bip39.portuguese.d.ts","../../../node_modules/@bitauth/libauth/build/lib/key/word-lists/bip39.spanish.d.ts","../../../node_modules/@bitauth/libauth/build/lib/key/bip39.d.ts","../../../node_modules/@bitauth/libauth/build/lib/key/wallet-import-format.d.ts","../../../node_modules/@bitauth/libauth/build/lib/key/key.d.ts","../../../node_modules/@bitauth/libauth/build/lib/language/compile.d.ts","../../../node_modules/@bitauth/libauth/build/lib/language/language-utils.d.ts","../../../node_modules/@bitauth/libauth/build/lib/language/language-types.d.ts","../../../node_modules/@bitauth/libauth/build/lib/language/parse.d.ts","../../../node_modules/@bitauth/libauth/build/lib/language/reduce.d.ts","../../../node_modules/@bitauth/libauth/build/lib/language/resolve.d.ts","../../../node_modules/@bitauth/libauth/build/lib/language/language.d.ts","../../../node_modules/@bitauth/libauth/build/lib/message/read-components.d.ts","../../../node_modules/@bitauth/libauth/build/lib/message/transaction-types.d.ts","../../../node_modules/@bitauth/libauth/build/lib/message/transaction-encoding.d.ts","../../../node_modules/@bitauth/libauth/build/lib/message/message.d.ts","../../../node_modules/@bitauth/libauth/build/lib/schema/bcmr.d.ts","../../../node_modules/@bitauth/libauth/build/lib/schema/wallet-template.d.ts","../../../node_modules/@bitauth/libauth/build/lib/schema/schema.d.ts","../../../node_modules/@bitauth/libauth/build/lib/transaction/generate-transaction.d.ts","../../../node_modules/@bitauth/libauth/build/lib/transaction/transaction.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/xec/xec-descriptions.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/xec/xec-2020-consensus.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/xec/xec-instruction-set.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/xec/xec-opcodes.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/xec/xec-types.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/virtual-machine.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/vm-types.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/xec/xec-vm.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/xec/fixtures/satoshi-client/bitcoin-satoshi-utils.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/xec/xec.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/common/arithmetic.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/common/bitwise.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/common/combinators.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/common/common-types.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/common/signing-serialization.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/common/consensus.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/common/crypto.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/common/encoding.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/common/errors.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/common/flow-control.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/common/format.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/common/inspection.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/common/instruction-sets-types.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/common/instruction-sets-utils.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/common/nop.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/common/push.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/common/stack.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/common/time.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/common/common.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/bch/2023/bch-2023-consensus.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/bch/2023/bch-2023-descriptions.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/bch/2023/bch-2023-errors.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/bch/2023/bch-2023-instruction-set.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/bch/2023/bch-2023-opcodes.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/bch/2023/bch-2023-tokens.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/bch/2023/bch-2023-types.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/bch/2023/bch-2023-vm.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/bch/2023/bch-2023.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/bch/2025/bch-2025-types.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/bch/2025/bch-2025-consensus.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/bch/2025/bch-2025-errors.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/bch/2025/bch-2025-instruction-set.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/bch/2025/bch-2025-vm.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/bch/2025/bch-2025.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/bch/2026/bch-2026-consensus.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/bch/2026/bch-2026-types.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/bch/2026/bch-2026-instruction-set.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/bch/2026/bch-2026-vm.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/bch/2026/bch-2026.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/bch/2026/bch-2026-descriptions.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/bch/spec/bch-spec-descriptions.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/bch/2026/bch-2026-errors.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/bch/spec/bch-spec-errors.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/bch/spec/bch-spec-consensus.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/bch/spec/bch-spec-instruction-set.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/bch/2026/bch-2026-loops.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/bch/2026/bch-2026-opcodes.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/bch/spec/bch-spec-opcodes.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/bch/spec/bch-spec-types.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/bch/spec/bch-spec-vm.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/bch/spec/bch-spec.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/bch/bch.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/btc/btc-descriptions.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/btc/btc-opcodes.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/btc/btc-types.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/btc/btc.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/instruction-sets/instruction-sets.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vm/vm.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vmb-tests/bch-vmb-test-utils.d.ts","../../../node_modules/@bitauth/libauth/build/lib/vmb-tests/vmb-tests.d.ts","../../../node_modules/@bitauth/libauth/build/lib/lib.d.ts","../../../node_modules/@bitauth/libauth/build/index.d.ts","../../mainnet-js/dist/module/interface.d.ts","../../mainnet-js/dist/module/network/interface.d.ts","../../mainnet-js/dist/module/wallet/enum.d.ts","../../mainnet-js/dist/module/enum.d.ts","../../mainnet-js/dist/module/wallet/interface.d.ts","../../mainnet-js/dist/module/network/NetworkProvider.d.ts","../../mainnet-js/dist/module/cache/interface.d.ts","../../mainnet-js/dist/module/network/ElectrumNetworkProvider.d.ts","../../mainnet-js/dist/module/network/default.d.ts","../../mainnet-js/dist/module/network/Connection.d.ts","../../mainnet-js/dist/module/network/index.d.ts","../../mainnet-js/dist/module/message/interface.d.ts","../../mainnet-js/dist/module/message/signed.d.ts","../../mainnet-js/dist/module/cache/walletCache.d.ts","../../mainnet-js/dist/module/wallet/model.d.ts","../../mainnet-js/dist/module/wallet/Util.d.ts","../../mainnet-js/dist/module/wallet/Base.d.ts","../../mainnet-js/dist/module/history/interface.d.ts","../../mainnet-js/dist/module/wallet/Watch.d.ts","../../mainnet-js/dist/module/message/index.d.ts","../../mainnet-js/dist/module/wallet/Wif.d.ts","../../mainnet-js/dist/module/cache/index.d.ts","../../mainnet-js/dist/module/wallet/HDWallet.d.ts","../../mainnet-js/dist/module/wallet/createWallet.d.ts","../../mainnet-js/dist/module/network/configuration.d.ts","../../mainnet-js/dist/module/config.d.ts","../../mainnet-js/dist/module/util/amountInSatoshi.d.ts","../../mainnet-js/dist/module/util/asSendRequestObject.d.ts","../../mainnet-js/dist/module/util/base64.d.ts","../../mainnet-js/dist/module/util/convert.d.ts","../../mainnet-js/dist/module/util/delay.d.ts","../../mainnet-js/dist/module/util/deriveNetwork.d.ts","../../mainnet-js/dist/module/util/derivePublicKeyHash.d.ts","../../mainnet-js/dist/module/util/deriveCashaddr.d.ts","../../mainnet-js/dist/module/util/getAddrsByXpubKey.d.ts","../../mainnet-js/dist/module/util/getRuntimePlatform.d.ts","../../mainnet-js/dist/module/util/getUsdRate.d.ts","../../mainnet-js/dist/module/util/hash160.d.ts","../../mainnet-js/dist/module/rate/ExchangeRate.d.ts","../../mainnet-js/dist/module/util/sanitizeAddress.d.ts","../../mainnet-js/dist/module/util/sanitizeUnit.d.ts","../../mainnet-js/dist/module/util/randomInt.d.ts","../../mainnet-js/dist/module/util/getXPubKey.d.ts","../../mainnet-js/dist/module/util/sumUtxoValue.d.ts","../../mainnet-js/dist/module/util/header.d.ts","../../mainnet-js/dist/module/util/checkUtxos.d.ts","../../mainnet-js/dist/module/util/index.d.ts","../../mainnet-js/dist/module/history/getHistory.d.ts","../../mainnet-js/dist/module/libauth.d.ts","../../mainnet-js/dist/module/constant.d.ts","../../mainnet-js/dist/module/index.d.ts","../src/IndexedDBProvider.ts","../src/index.ts","../../../node_modules/@types/node/assert.d.ts","../../../node_modules/@types/node/assert/strict.d.ts","../../../node_modules/@types/node/globals.d.ts","../../../node_modules/@types/node/async_hooks.d.ts","../../../node_modules/@types/node/buffer.d.ts","../../../node_modules/@types/node/child_process.d.ts","../../../node_modules/@types/node/cluster.d.ts","../../../node_modules/@types/node/console.d.ts","../../../node_modules/@types/node/constants.d.ts","../../../node_modules/@types/node/crypto.d.ts","../../../node_modules/@types/node/dgram.d.ts","../../../node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/@types/node/dns.d.ts","../../../node_modules/@types/node/dns/promises.d.ts","../../../node_modules/@types/node/domain.d.ts","../../../node_modules/@types/node/dom-events.d.ts","../../../node_modules/@types/node/events.d.ts","../../../node_modules/@types/node/fs.d.ts","../../../node_modules/@types/node/fs/promises.d.ts","../../../node_modules/@types/node/http.d.ts","../../../node_modules/@types/node/http2.d.ts","../../../node_modules/@types/node/https.d.ts","../../../node_modules/@types/node/inspector.d.ts","../../../node_modules/@types/node/module.d.ts","../../../node_modules/@types/node/net.d.ts","../../../node_modules/@types/node/os.d.ts","../../../node_modules/@types/node/path.d.ts","../../../node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/@types/node/process.d.ts","../../../node_modules/@types/node/punycode.d.ts","../../../node_modules/@types/node/querystring.d.ts","../../../node_modules/@types/node/readline.d.ts","../../../node_modules/@types/node/readline/promises.d.ts","../../../node_modules/@types/node/repl.d.ts","../../../node_modules/@types/node/stream.d.ts","../../../node_modules/@types/node/stream/promises.d.ts","../../../node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/@types/node/stream/web.d.ts","../../../node_modules/@types/node/string_decoder.d.ts","../../../node_modules/@types/node/test.d.ts","../../../node_modules/@types/node/timers.d.ts","../../../node_modules/@types/node/timers/promises.d.ts","../../../node_modules/@types/node/tls.d.ts","../../../node_modules/@types/node/trace_events.d.ts","../../../node_modules/@types/node/tty.d.ts","../../../node_modules/@types/node/url.d.ts","../../../node_modules/@types/node/util.d.ts","../../../node_modules/@types/node/v8.d.ts","../../../node_modules/@types/node/vm.d.ts","../../../node_modules/@types/node/wasi.d.ts","../../../node_modules/@types/node/worker_threads.d.ts","../../../node_modules/@types/node/zlib.d.ts","../../../node_modules/@types/node/globals.global.d.ts","../../../node_modules/@types/node/index.d.ts","../../../node_modules/@types/jest/node_modules/@jest/expect-utils/build/index.d.ts","../../../node_modules/@types/jest/node_modules/chalk/index.d.ts","../../../node_modules/@types/jest/node_modules/@sinclair/typebox/typebox.d.ts","../../../node_modules/@types/jest/node_modules/@jest/schemas/build/index.d.ts","../../../node_modules/@types/jest/node_modules/pretty-format/build/index.d.ts","../../../node_modules/@types/jest/node_modules/jest-diff/build/index.d.ts","../../../node_modules/@types/jest/node_modules/jest-matcher-utils/build/index.d.ts","../../../node_modules/@types/jest/node_modules/expect/build/index.d.ts","../../../node_modules/@types/jest/index.d.ts"],"fileIdsList":[[217,318],[65,66,67,68,318],[318],[70,71,73,74,75,76,318],[72,318],[78,217,318],[78,79,80,81,82,83,84,85,87,88,318],[86,318],[90,104,105,106,107,108,109,110,111,112,318],[103,104,318],[77,102,318],[106,318],[88,114,318],[91,92,93,94,95,96,97,98,99,100,101,318],[113,116,117,118,119,120,121,122,123,124,125,126,127,217,318],[116,217,318],[116,117,128,129,318],[131,132,133,134,135,136,318],[133,217,318],[69,77,89,102,113,115,130,137,141,144,146,214,216,318],[138,139,140,318],[139,217,318],[142,143,318],[145,318],[165,318],[176,217,318],[152,153,318],[176,177,178,179,180,181,182,183,318],[185,318],[213,318],[186,217,318],[185,186,187,188,189,318],[177,318],[187,213,318],[191,192,217,318],[180,318],[192,193,194,318],[152,153,165,175,176,182,184,187,190,195,196,197,198,199,203,204,207,217,318],[196,208,318],[198,208,213,318],[200,217,318],[203,208,318],[152,153,205,318],[197,199,201,202,204,205,206,318],[209,210,211,318],[157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,318],[161,318],[153,217,318],[156,175,196,203,208,212,318],[148,217,318],[147,149,150,151,154,155,318],[152,153,213,318],[215,318],[54,56,318],[62,63,318],[55,56,318],[60,318],[54,55,56,57,58,59,60,318],[55,296,314,318],[318,330,333],[318,328],[318,326,332],[318,330],[318,327,331],[318,329],[272,318],[275,318],[276,281,309,318],[277,288,289,296,306,317,318],[277,278,288,296,318],[279,318],[280,281,289,297,318],[281,306,314,318],[282,284,288,296,318],[283,318],[284,285,318],[288,318],[286,288,318],[288,289,290,306,317,318],[288,289,290,303,306,309,318],[318,322],[291,296,306,317,318],[288,289,291,292,296,306,314,317,318],[291,293,306,314,317,318],[272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324],[288,294,318],[295,317,318],[284,288,296,306,318],[297,318],[298,318],[275,299,318],[300,316,318,322],[301,318],[302,318],[288,303,304,318],[303,305,318,320],[276,288,306,307,308,309,318],[276,306,308,318],[306,307,318],[309,318],[310,318],[288,312,313,318],[312,313,318],[281,296,306,314,318],[315,318],[296,316,318],[276,291,302,317,318],[281,318],[306,318,319],[318,320],[318,321],[276,281,288,290,299,306,317,318,320,322],[306,318,323],[269,318],[270,318],[225,232,318],[218,219,225,318],[49,318],[49,50,318],[218,318],[219,222,224,236,318],[219,318],[47,48,51,53,219,221,222,223,229,230,231,233,235,236,237,239,241,242,243,244,265,266,267,268,318],[230,231,318],[230,318],[52,318],[219,224,318],[61,64,219,220,223,224,225,318],[219,220,223,318],[219,224,226,318],[220,224,226,227,228,318],[233,318],[218,219,318],[218,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,318],[222,318],[50,218,219,220,221,222,223,226,230,232,233,234,318],[218,219,222,223,233,235,236,240,318],[218,220,222,224,318],[218,219,221,222,223,230,235,236,318],[218,221,222,223,226,233,237,238,318],[223,237,239,241,318],[219,220,221,222,318]],"fileInfos":[{"version":"44e584d4f6444f58791784f1d530875970993129442a847597db702a073ca68c","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"9a68c0c07ae2fa71b44384a839b7b8d81662a236d4b9ac30916718f7510b1b2d","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"9e8ca8ed051c2697578c023d9c29d6df689a083561feba5c14aedee895853999","affectsGlobalScope":true,"impliedFormat":1},{"version":"6920e1448680767498a0b77c6a00a8e77d14d62c3da8967b171f1ddffa3c18e4","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"45d8ccb3dfd57355eb29749919142d4321a0aa4df6acdfc54e30433d7176600a","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"93495ff27b8746f55d19fcbcdbaccc99fd95f19d057aed1bd2c0cafe1335fbf0","affectsGlobalScope":true,"impliedFormat":1},{"version":"6fc23bb8c3965964be8c597310a2878b53a0306edb71d4b5a4dfe760186bcc01","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea011c76963fb15ef1cdd7ce6a6808b46322c527de2077b6cfdf23ae6f5f9ec7","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1a94697425a99354df73d9c8291e2ecd4dddd370aed4023c2d6dee6cccb32666","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true,"impliedFormat":1},{"version":"e3f9fc0ec0b96a9e642f11eda09c0be83a61c7b336977f8b9fdb1e9788e925fe","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"479553e3779be7d4f68e9f40cdb82d038e5ef7592010100410723ceced22a0f7","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"33358442698bb565130f52ba79bfd3d4d484ac85fe33f3cb1759c54d18201393","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},"c4c2edaa636235a2977987778d7d5843ff70aaa66be8b959a259dc13fffdf2de","e4b720ad7cb72f6aa05cc8d94f15aa76a6335ce56f094ce06ca3a9fbb83be0b3","fa2eae3a28979e3d440e9beb1fc257675d416bffcfe744c38f49e34dd63898db","b160e3dd134b408f7771757b2667dc8df5b5db56378fdff870296593017cbbf5","61bf0f4302ee1e5e4b2d037c7de82ce8410560dc61fcdadd1a1d4f016b99134c","3b278139f3ee26991f492c67ff390110b6908aacd90c407d7fd64c30476b2427","030e1fcbaf536940f6facf8677ff38f729b5574cfa6ebfcd6d354054ffd104af",{"version":"b532e091cfd679711e2fd253a4873edbb705ab877cee9d92278915027530114c","impliedFormat":99},{"version":"df6bf67195afe32ff6d4906a453fa506bb08563f72967ca03b840fb8b85e77a3","impliedFormat":99},{"version":"c1e1301ac2ecc02110e856c75c693bb1141fd1028ca73e1a20bfe8a100e7cbef","impliedFormat":99},{"version":"2f552d74bbda6a17bbdf439f136fe6fb2c1099341dad4cf153d55e1798cd5ed7","impliedFormat":99},{"version":"a87ea6573a49117cceda1ce13d53d49e43c812ad49a6dee8752a21d0a5925265","impliedFormat":99},{"version":"42c59e4030e9eabad6adf28e9b1d7a38c23502738a6ef7fde4b8c8ea2d151034","impliedFormat":99},{"version":"cd43bd281804d2ecf671546ed3d52bd1076c2383067289772f677d4f1d518315","impliedFormat":99},{"version":"55c80e0b11312ac021a5cc2886d387ef838b27dc6697f2e5e4a2ca6f3c64b63a","impliedFormat":99},{"version":"9916329e93743529d5ed82dd33d5959ed8ea87013e36fa7e5610031ff828192e","impliedFormat":99},{"version":"562b80dc2619e7414ae0de7b8c7d0d31cd5eef23a052d114f26ebbf83d659ff5","impliedFormat":99},{"version":"4f9d83ba7de14552ab216ae2ab3a69e9613f462cb7e156fd43aaac5b4f6e93a8","impliedFormat":99},{"version":"a38d71d48e8097dc479eeb78d9a9a070c8e4a58c6e3dab44dd3bc3ca9fcfa027","impliedFormat":99},{"version":"cba6688cd77e97f8bec08ed8b1e98db2cd3fe119d76f136b032de3f36bc4f20c","impliedFormat":99},{"version":"987749b82eed507f1a2412cdcbd949fff5710bdd66db6ce8e2165d2fdacb74d6","impliedFormat":99},{"version":"26aaba823e6eb0ca301c3e70786e3217b20e80ff59879f4e4897e00ecb7ba060","impliedFormat":99},{"version":"1d41545e31b119d9bb993202dc5fa73815ac0cfe486feaddad7c3bbcbcef0e68","impliedFormat":99},{"version":"7e392413f34965abfd94cff06e38e3dabb999d0e97583c318a72b99f79d3e75f","impliedFormat":99},{"version":"7426d1ec25b2f49f7700e85a63bea9a7aba52fd33a0879f6fd3e8e98568b5811","impliedFormat":99},{"version":"60fc0d963d309f2984e37784feb937250ac80b0872aca8c938e7f671000df77b","impliedFormat":99},{"version":"2f275fec9095538f7ca65b5c89a470726d786244c711e55cc2c7ec60eea1b346","impliedFormat":99},{"version":"aed13d0d330e79bf17373a0cabe9dac6ec29d3e1a0b5c8eaaacb81fd2fa94494","impliedFormat":99},{"version":"23f634e12d2c1c5f876caddf838923f8e1485f259b16bbaa8263d6b89ba87592","impliedFormat":99},{"version":"de3af19c02f00bd370a985b62061a6d7d02883ec012382f3c19c39046d52c966","impliedFormat":99},{"version":"1b30425956ed9d9a6a7388d40f19fc1a5e4b88a921fb13d6a23cb55147211f28","impliedFormat":99},{"version":"4f9462a097d141e885b737f09164e861e2895f1043d0646180db3c03f0dbf143","impliedFormat":99},{"version":"d34336323293a332e720fa87bec70af73a870dc7b3f7d5f38cfca0fc3c3b65ad","impliedFormat":99},{"version":"b3531a70c555139ccbeca949f84282d65b6a5755d863ac3503e35a82502b09ca","impliedFormat":99},{"version":"6d199ba5d5156351ccfeecaa9a5ae01af5b7784cd81f222e7a0c11e4721b354e","impliedFormat":99},{"version":"f3a8d7c9272a3a82c85f2341f5e2ca3c3d18f060150226f787870c8ec3e2a827","impliedFormat":99},{"version":"1b0df60f3b58b2f4d4478820ac476f7e78274a52292d9d42373a0a96dcd3069f","impliedFormat":99},{"version":"6aa2c64d92e9090f78179c0bed1602e9f860b91275d459e67e318c9e79464657","impliedFormat":99},{"version":"9f315cecb5e5da51300379da15a3f78aec7453cb4d004fef057d8ef6e5d7dcbc","impliedFormat":99},{"version":"d06e733c0ebb22e1e3af02a32c34e625947b88513d3bbfb8b13bbfe94e12fe4b","impliedFormat":99},{"version":"cd1b749ad64dadd2a14d785d1af90a7c05304cad2fb6a77a90c78e1f88b0c436","impliedFormat":99},{"version":"a9d41a14643ed25da84e060e39d81a8170e5cf407909528b34ce32e9c3e5522b","impliedFormat":99},{"version":"79f75d25b82ef484fff58c701d4d15aba4d13976cf7c981cdb4cebbaaa0e8105","impliedFormat":99},{"version":"ce33c917b77d69a60d4844a965a3db13ee6c2ac0bcc2bf8429e28586cd57d0f5","impliedFormat":99},{"version":"a785ac9f11b50e976663ee951f7a7acc3320a36532524a9d46a0fe542720e34f","impliedFormat":99},{"version":"5ba8578db919e6b54168305899203c13fd5a86e8f8e76b08fb42eaf9c6879f5e","impliedFormat":99},{"version":"67f397f227fbf8576e325c6b3c5d39d9fda989ba0b09b58705f33427af457e81","impliedFormat":99},{"version":"c8a1f0f8c1480aa0a5245a43c3c2b380d17da6eae045ffb92a2daf5e764d7b3a","impliedFormat":99},{"version":"ba555564cda57456f002787864df83ac0d35d8e74b4e89d3d73e688cd4464f87","impliedFormat":99},{"version":"3d6c80e747f1c522a6cf6df4c7e86d1e07b01fd9e1c160ed4170ad63d132ca7d","impliedFormat":99},{"version":"728dcbde517e31c9b8bc622ecb1ef5a275568d69e6bcab2f34de961d8f681e1c","impliedFormat":99},{"version":"119014bf306302bd117b1bbe9f809313816d36020a59d07f2c6c37790665757c","impliedFormat":99},{"version":"829608c14e83f9ad43e6e260119617029d6d425b7ae6a21132c6e3ee2ca850e3","impliedFormat":99},{"version":"0e3823c30ce7d5ee4e0cf6fb915ba8233054bf3988d55359dbf984fea5c2568a","impliedFormat":99},{"version":"ad40ae7beeef7d76a610b2669d798235c7a8e5a5ea0de65de8ab7433641c206a","impliedFormat":99},{"version":"9a870477f7e4a5c19dd446e1cd6c337bc6109089175e0557d7bb320f2894a9fc","impliedFormat":99},{"version":"949dc79359a4014c163c82d16f9a33130ff948a4fd5dc9ee1276ebf4e9dddc29","impliedFormat":99},{"version":"64d5f2f2523adbb097b6c20d346158bb48307ef9c9f7f65f423aa0af58beb9db","impliedFormat":99},{"version":"d35ca62340b51165dd1a9d27f4615790d38961f6e0728e3fe688643ee25a9750","impliedFormat":99},{"version":"af650943a57e3e1a0cf2d73e4fb2fc4f9e0b5f3414242d849f13713d7bfc86a7","impliedFormat":99},{"version":"05070c9cce1bf6c0a6ad2f9cab6562d6f0717ef3be5e85bf607a88292866dfe8","impliedFormat":99},{"version":"423872925077214074ac64562f539ea6a95e2aec64aa1dfc21ce7e18a49fb2a1","impliedFormat":99},{"version":"d5170c8d36bae7f5e54716612fcffe654b406e3222810073aeda14c20bede12a","impliedFormat":99},{"version":"0716f1b01085ea795a96bc1d9159baf2b98025c2f1ebd9b40b49434dc70b89d9","impliedFormat":99},{"version":"c5286a8f76ab94568608c5e3c588024ed63047e61ddd8037c373dc68af120392","impliedFormat":99},{"version":"1c0807be4d4ecefddbf9b719139c13368ec4a5ed95c7324aa4d591e3cc550840","impliedFormat":99},{"version":"7f9e6651383f0563cc730c42973bee069dd48cc96d99940218379e516d900a9d","impliedFormat":99},{"version":"e6370030948c325544eb00e8ec025ca8b5c29c667630d99b9c568fe01f665078","impliedFormat":99},{"version":"e5dda9fb9dab003e975fa2b3f8afb3f3e21914f48df73b4c21c4e7d3aa59c550","impliedFormat":99},{"version":"bc06e0598f8dedbb70b897f45d387f33fff56c0e93c95531df7836b81929db6f","impliedFormat":99},{"version":"5ddafee7e18fef65f2fcc9e6c143e8cfce64fe639fcd43512fd48103cb7d0880","impliedFormat":99},{"version":"e58f814f0cdddf98a39a886af78aef76af93a9407d314bfa35c825f3c9b9ed81","impliedFormat":99},{"version":"06c9b6087d78baf71927b1d8da838c6bc1577398e02d615d10a6d454c590b1e3","impliedFormat":99},{"version":"1159f7a7770f4f3e21c7c1cf5dd679c44ddf4f6d5700290b728af9a8678bfb20","impliedFormat":99},{"version":"0d4359e3863dee0d03ee806a2027c3ca80d2df49fadfb4883a83d253dbf7b7ce","impliedFormat":99},{"version":"fb1d640181613305988efc7fe3370d34c046d39e03fc047c3551c94e9d08e0a3","impliedFormat":99},{"version":"1440fc398d5289c15ecf7c39580a968ade6e4c050bf519fa9555b34591bb4af1","impliedFormat":99},{"version":"6869337d36e58a184d046aae831f640dbd65e37f089a8cadb284e9d71e294df8","impliedFormat":99},{"version":"c2df7d7040a47954a9e3f7cad68adadfaf415a3a2462c7c623589323d0b7adf3","impliedFormat":99},{"version":"50e01013f474ae073d2c59624749bb26fbeb8a44ecb76695606126d16ed64553","impliedFormat":99},{"version":"b04b90388c60ef1674fd77e3a66d9432873980e7ee87745332b9c10457fe7289","impliedFormat":99},{"version":"3e768d76d6b43e265d2e074179bb5770774155d157ce68a5a02c907282750cfc","impliedFormat":99},{"version":"6ba33903b042f585b4cf3192ee22af279326e64ad157101e1bcede7a70b15adf","impliedFormat":99},{"version":"c6467ed6ced9fc889c3b71f940c8f88bce1e7bd95368ebc57ef9466a358e6674","impliedFormat":99},{"version":"9b7cded7d20ce665ee2bfdd5633da6bef8a499db922d3b6b4460c964cd1be562","impliedFormat":99},{"version":"4acbab96d77eba31dcf5449218d922801031d7de833663ff9d8e9b61369a0aef","impliedFormat":99},{"version":"40fb77b3d3b3e2a7efd19d2d22627026bfb62cec7717ba5e557b521ae2637dc4","impliedFormat":99},{"version":"55b13c1dd972dfeda70fcee2b2537a785ed03fc5c361b11608a2712b90b959cd","impliedFormat":99},{"version":"adb20bc681c4d0c3374d8b78791f8ead0ca0fe15983a551b40fc4936648bb578","impliedFormat":99},{"version":"bff8dc562f4ff354814df681853116fcfa12c295e4303603a6fc679f6d971750","impliedFormat":99},{"version":"e544a1c40a5f673a3a7e52de4f49681bbf529d9e1153aa7751f0e588c07d7efa","impliedFormat":99},{"version":"6f239b41df9c2ea6444023435f07d2369bb76d88f5028982e8f88d9dbcb604e4","impliedFormat":99},{"version":"39c752cffb1a85d727d4c6e5b0c25282ae3a4fdfe5d8227c38b50044cd4ed743","impliedFormat":99},{"version":"8ca5d1bbdf57ef5bc32f37a9726ee951c2864ad336a34ff318d0cac7e7f651de","impliedFormat":99},{"version":"37f59378ffb6b2d6971586a55cc10411bdba7206f7193b52d42197e32f2446f7","impliedFormat":99},{"version":"fbedf387f1d5b9ad293214ad01a3d89bfc6df3217af27a27e510c73a037312a5","impliedFormat":99},{"version":"996950adc8136a34770e8565dfb7ccedbe188234fdf2db46cc79fa6cdbd66a7a","impliedFormat":99},{"version":"160f9097426561fdaed62ce71a37fccf99be456011eef35d01253741932c9661","impliedFormat":99},{"version":"3ad36afdc1975a50309d2e55b5c2bba46aadba993537bc75b65f085bfef3c996","impliedFormat":99},{"version":"801a096aef05881eb498616cb15ba6cb3da874865207a088dd963a46023cc89c","impliedFormat":99},{"version":"e0a8a476d2d73c121ef763186d4a36991a45471dcbe98732748643d39c17f09c","impliedFormat":99},{"version":"3d5e6241b997c057749fa806facb8887891fb06e67eab4c113bd36ca17bf77fb","impliedFormat":99},{"version":"0122b4d85b9be2b0b55f414090edb2e7e5b58cd4e022ce23989d6e119506faea","impliedFormat":99},{"version":"feeaf290ca736cd2be9dbbc6fc46771ce201529e95ce882c92a796368bcc73e3","impliedFormat":99},{"version":"95aaaf4d6f9d3a1b8966728a20c48164bfa7a8d9230f207f2a43ac11fc594e10","impliedFormat":99},{"version":"991351e5fbf046ade49c4235865af04ed3bf79bb1344864d64dc6fa1e090514c","impliedFormat":99},{"version":"0d3a3d5097a6a21e8574900bf1a1bc5df40988586dcf9dcb653fa700503d4962","impliedFormat":99},{"version":"4eeb635e14e95d82264e58ba48a44eb73f3e38c23b3ce826a1ab87fb215fe7a2","impliedFormat":99},{"version":"cd2995a95d0c9ff13ee7a97c9128e2684ead9b89ebcd991ee8e889aca948e207","impliedFormat":99},{"version":"afec6accba8ddf0aa8b91e1883aa2ea801a2f3f6404f7aacf34dc7ed6fb8cec7","impliedFormat":99},{"version":"02823ab4704c645aa0a594d520426cd9b1a776a242005bb04d35389dd35ab1f2","impliedFormat":99},{"version":"80b9cfc778a768d883d329669a325bfeefe1a6c866e05c75a64689960ac5f2aa","impliedFormat":99},{"version":"2a83200ba02822ce3ac4d68c2cab29273150505ed567532a133a20bbc7e68ec6","impliedFormat":99},{"version":"2b113dd63b57d48fc6f9a748e22cd6cdd2b18bee091a8286b36f32085138ee15","impliedFormat":99},{"version":"d684dd5b0a093bb586b8477b6ceda5f62f793982041fd1b2a222fef52a1c3b2d","impliedFormat":99},{"version":"30062e3628fef7c84a3c193d1bfe21a5498f9b53f3d6593323c5d41bf8576ef4","impliedFormat":99},{"version":"19b0eca295f5dfbc38857244c9e875b9410926ec00ec96e4700c7957c92533ca","impliedFormat":99},{"version":"03af5ad674ec20be8583ada8fc6833b445b88bf9244481e7a2ee283213070c68","impliedFormat":99},{"version":"c0c1c1bfcf65b773f5609169abe698305d281b5f926e4c63a188a87e670de425","impliedFormat":99},{"version":"40e0080e7412be9160e51065e73fa02fd59fe914da2fb12139814d9f34044464","impliedFormat":99},{"version":"e21f5e986a1d531131c64b94b0304e67e076d31107e80f604b3d466fcfef6d46","impliedFormat":99},{"version":"2c521da211b5b8384fca5996cb362bfcc62411ca2f22bf40221a8de7e033d303","impliedFormat":99},{"version":"c3315aa3888b4ab9804c8ef9b07caab5e5c0cf412a909faa70200e9d5aeb7c9c","impliedFormat":99},{"version":"ba760ff1ddcdd93c88cad217bc17e8b4e922f5e697bcaae0846a0028d31ba599","impliedFormat":99},{"version":"f1083bc7c0d73c8fcbe183c7131e7cc54543aad18f42654a3a3e1be48fc39465","impliedFormat":99},{"version":"7a34416b8856d7fa9fc0cad61de9a5dfeb140544309ce74778cfa1110e07b72a","impliedFormat":99},{"version":"a80e8bc4c77d345bf132ed1a7beb2d716d01999f1d7c5be29a71a1c002e175ce","impliedFormat":99},{"version":"ca0cbc4dfaf6a85cc4174a1ed7211aa17125a9d87dbde4d387fcd3db16d31223","impliedFormat":99},{"version":"12cb647b2b5019e5ab0c96023af34eb1e80eac58938577909c2bc20403da5890","impliedFormat":99},{"version":"0d56443cf4645c9fec714e14f6c99e246f27926169e0bd10069bc7cab1d74043","impliedFormat":99},{"version":"a3d1d3d9f234c7bfc31440649d48b523a80848945c3d8a2e0e5c58155e5a35cd","impliedFormat":99},{"version":"00b2af81f381c78a7c7a94ccd1ec6678fa9102554f0bbe4a48008818710afd98","impliedFormat":99},{"version":"a5f44d1ab98b8f29f90492c057eafffc14521a7cc0cdb8e036ef0541f2d923cc","impliedFormat":99},{"version":"858625b1fd6da32ef93167a7bb30e9ebfdb1b12c2c771f6e276e21fcbf6d28d6","impliedFormat":99},{"version":"1dca71c43b1f127c85a832c91ebd93f568f848f71ebbad49c69c97b28f102478","impliedFormat":99},{"version":"4140f62e4f8c9719ce15b3c73b2b5a36ca27e14fdec8d1b94c711abf190ddd38","impliedFormat":99},{"version":"28ced0cf69dd632d98961761b4250d6c0253e861fb217d019cf2ea634b882699","impliedFormat":99},{"version":"5ff96b7fc47bd4eccea926d559d6a76ad8871f752447f3fa698427c756c832d7","impliedFormat":99},{"version":"62ed2978ed2f3611e60bc80fdfedf5d0b6cb26b46835758d73b56956b0b7d936","impliedFormat":99},{"version":"0b7887c86bf0fe8f44d0f9082ae70ca0307d1013b958d884d54ae95698a8344a","impliedFormat":99},{"version":"31779f2eec7eb6657587a9943837d504e5d1747db5b06349ba51b05257588aa0","impliedFormat":99},{"version":"a42c680a17c557688a90c4c547f5f425b78e33cdebbc7ee4fd0135b0fdb26dae","impliedFormat":99},{"version":"e1d916f45a9c540c3ec595a41b55fc80049df132e63f75367c0290fc7238a89e","impliedFormat":99},{"version":"53608e6e0d36b8fd5a9e3b5afbce1f67c2933410317beb2b9973b77c1f13a0cb","impliedFormat":99},{"version":"49611c9c0dea1fad478353d0a5c394cd5c66b60d760d12e0d99063a2ec8cda5f","impliedFormat":99},{"version":"6b207c678bf857a3253cf4c82c1da768b6d7fd5e6a0ac3c8e27f83f65bb6f24b","impliedFormat":99},{"version":"2140fde2b2b1861f77c0e308232a2f73dd78e7cc784207c618de3b6c46da190a","impliedFormat":99},{"version":"68cf4649d2c34c7f3485ea72b95f8c1f4383f265dad143c16fbe608037358f53","impliedFormat":99},{"version":"20a981ef7b7bdabd1920d67b32b5d53675bc11bae590c3fdfd4746ed1e6fa7a0","impliedFormat":99},{"version":"9b6ac1aaf1599be6c19f32a3e87bcec56d5f2fce6d41fe39ba5fe175d1549c4e","impliedFormat":99},{"version":"cfa9f8ffa183bf6bc84394787fa1c54bc060441643b5f0c4ece5645632a11976","impliedFormat":99},{"version":"59d6dd3cf7364974669a5942dbb548e691b1f8414c12940b5ba27339dee4a91e","impliedFormat":99},{"version":"3c4b2980f4880b3de393ecfd0ff078c00a0d7ed2f751a2c68bc5394ec9917878","impliedFormat":99},{"version":"49e1b05f3946a3a49dcbc81900e6192f84cf3d870223fc04133924079ab26e75","impliedFormat":99},{"version":"433ba82be5f2662d62fe8365a537644adb43b7f281d810c99eb1c09e4e209f88","impliedFormat":99},{"version":"0c181e791efb543d0560d9b2870515d821e3dfa0e2a8dda640f1535b2764ba6e","impliedFormat":99},{"version":"eb82d2e6a9a1159f416a32750c5aa269904727d1a384bd56fb61ae9e1542c151","impliedFormat":99},{"version":"30dd04b36fcdfcf9f4cc5fcde78bf86941275b1641481b1643419a46934b6bc7","impliedFormat":99},{"version":"684631ad2087983d1fa9cfe781debe5b59efa87291c1df2ca0033bc26f3f9282","impliedFormat":99},{"version":"5d4e07aa8912747754c81949a7fae410393a0b511b607da5c8859b59134dbed0","impliedFormat":99},{"version":"ca358f352179f2ef403c343bfe76b167d7735162a6084cbce3213417a9ccd158","impliedFormat":99},{"version":"a43368b9ec2b3b71677d47a05c7d3296ca632f6c05b3be9aa9b18b18df6666ae","impliedFormat":99},{"version":"e7542a62f622e137e574f6c2811e4eec547bef5ef17868f1740c17b001d10a8d","impliedFormat":99},{"version":"c8e4c5adf99601307a86a7ffd1ea4899bbcf44bd4fee17100a9dcd3232047cc1","impliedFormat":99},{"version":"7b2510df81a30a99a97f2b439b4ffb382d0f3d465fd46665e29e899d6fc30617","impliedFormat":99},{"version":"5b0488f48695d38c3f1fc7a95f1e5a5ec32d09d2c10b167d20ee4c1307630ed7","impliedFormat":99},{"version":"80222964f435aa1b28c4714ea86d3499d776fc47dbdbb4d161ce34d1d9c33ca4","impliedFormat":99},{"version":"418471fc8ccdb989edeebd30ece9a45480d9144255050a301f48d95231ca43bb","impliedFormat":99},{"version":"bca3eb2e7d0e4a24daba895e9ead08317a90a8326b07b63d2775b09cc61b2f6d","impliedFormat":99},{"version":"05e6fbfa9545e669d5e67e3188d03f7fd50c41b84e13da570330a2b016e0b45f","impliedFormat":99},{"version":"e7deee5e735375a7dc03b23fa8e2dd0e707bada9f9e4d7d96da60a688d7fcc3f","impliedFormat":99},{"version":"3b944a181090e86de3b44670de8061d6def4315e3f0e68a448469c2ab867b552","impliedFormat":99},"f535d0e212b21cf44cef76c4ab9575bd8fc872f49a665de6e5531f4458a87160","50e63ff2717d276978d96063656a3058152ac5d02a9bf4de8b6612643710173a","ad92e210c81ee442085cc19f44797ffc75e9e85a85fce52f7bd9b49bc58bab80","5cbbc192960d423ee248e4637a303bba7bc6c5897f8f9f9cb2bdec71418a86ed","0bcaa9b28f9185c25d8bb560f4056a2f82ce46f43f822d43c5280d831a72a131","53ba8fad914af2be8672983f1e874628cc22bb3c566feb3dffb4e2f26e39b0cf","1a305f4e0816e0aeacbdf7f0c2ba7ad8dc3e60916c0ed28946fdad753aa972f6","e6914f214943a83de45c3a733285e4c82011aa240448f9fce99bdbb1195b04ad","e4505cc9e298f50d83bae32a8ee72805ce938dabe7b2c481cce0a9823b126930","f8af2561128b42e9d0f663efb790a108d323fd185f88cff693856c7f2e70459d","9a732d797058ad11e186a8a4ff61f4fc373c5aea4137119a16ee75eea1738aa7","c1b4f1b82b22734fe6a7e4d1105b35b700a3051bf4fc3dede769efffd9aba1cc","fbd7490c61287e5dd21a191889565090b2a74a08756c1a96a5be582a96f2f620","6ff18052b239401dede64dfdfce2bc2e20632110a9ff82456749f609517fe721","5c0d189ae1021e4e1b6fde67ed2e9a357474be7dc3eb4211de84a1235882deb7","e7d9429fa198056b070f735514cdcb61de388fe8311b46ed313da75934a398c9","6eb1a106e16f4622d756ceb77dacbbc8fe3ab7a504de8811e0250a080982ceb3","08e921a75ffb64bf6359eb471543046fc540a45175bc10d9bfc10f07a094d8c4","9474f35e4354d1c672c0e50a1486f883635acf25ac51daf558b0fe3a060f453c","12aa9c803cd79a739aa663156f39131869a41388bf253e3b51f0f61f98a07663","2a4e52bdcafdb515765d9dbb6982654970e4a1d381e76f520b7f33f74278a7dd","fd4664d3ba891c02fc4c5b95d7de2b7d399e1b80e9a413d244e13ed124ec3eb4","962e06e08fba0d408fe6fe07b31ec638c3c4d5050462a8f735466e1383a40edb","bf23f8d76d60ea190fb57a69c680028ab33410610b4c3de78d2205ac9124b1fa","460f751dc7749720b2551449cf0aa9664ee3b8cdb95505dbe5d2ec3aed8a4989","f6e2bb9b8f99b9c464239e72479a3ccf213306c8db269573e9b57cd7d1d5ae50","bd283455bb1836729cbb987f5cec241041de4854e4ed2d4155d64e81854ff201","4fcba3823aea7a18b160041af629cff46341a0ff790b691b831939eb7f954a47","614051bf05d3b41673e2e865ed30c4eea50a171253fe7b7d3fd0b93a84bcafc4","5f3cda1fd5dae864899c33f4cd18955e0bd43107572789ab990e41fdaad333f7","be8c4dff12f713c857ff7211e205ba6cf5a4212829268e5d3937c5eec30fe03e","911b6da100b2ee84b9fc1dbdc34771a0701e4c8e0fa694bb510c33359b6026e2","157efbab6372e89ffb534b16a298e716175add5dfc8159fb9608877eb2a18059","7f8acc73668636513659747f853332a4b7fefa40d5ccf5d20f7696a69598e399","0ea4b7de810d4759cc256c64d94cbeb12e97a26582f8cea8981827a20be67125","97b5d2fdec7c85f9a8bbff85350c12635a94ef3dfa265679ab0806ecadb85dd4","2aeae9a85d9f2bd098e207b97f94105370c2986206f9992fe593430d5e6e2ff2","00ee72c8e766b351df16e157c6dbd7b82f5fd659b64a4ae71bada2af2c9a2196","d9926272f3d88d7b5461ae47c9da311d353ceacbb176e976aea11a22d3c8c5cb","94ea9bfd0e479d53e6dbe56667671a509c9368dca504b26bef69d726abba8a2b","89b9bdcbcfb6dadcff24eab8a1a3ec3ae0eb2d548a37f4091aa8aab0ac405627","3dfc11fb9036c0deffd34eca4bf80cb7c86b8f6e47f4d7c93b6970593367adfb","ee4e8505266b5bb2be82d994812b327c7eff0330648f8b7be90fa4de1e73ca48","00e2d807fa89745a9a07a23ae586664725a4883a372bfec8a99db075e4e3a2e4","ae56fb90af23a6c7c0b7789b531a39065e1e0b963c6d420337e4db08605e1fe5","8613b26881a0a26fb34dc3648c6f32aa77696e8b65688d1de6dad2cee5034831","fa2db834e2587a561f5801fad014dcdd086fa57ec877a5c50eb1b4a4bedf633b","cba8f67be65fb4df3dbe95b986dee315d01470e1fe2c3939cd837b1783391735","6656dccace415e2c2c6efa3030480206e1b613bf9778143327745d9b448bed47","166a173f09113441ad608576f8aa5d48df9f105e2c8a7feca0a3dcf27fd89df0","a5143f71cf3b3e24434ea1bcbfb2ce96538bb1a48a23670d5d824d5f3cb68455",{"version":"cc68ad5ef9d7c22d432d0d378ffd4c8ac6f056f90eb8f5c688e449d8fa575ecf","signature":"581a5fd48dfd777329c87cc73ed800da02d9dffbae3fd42e1423e3d8eaff1ee4"},"e67fcc7afa9c5ee79d9244af7b9d3ad17eaa44ccfcca70d94bb23e47397d5ab9",{"version":"7e771891adaa85b690266bc37bd6eb43bc57eecc4b54693ead36467e7369952a","impliedFormat":1},{"version":"a69c09dbea52352f479d3e7ac949fde3d17b195abe90b045d619f747b38d6d1a","impliedFormat":1},{"version":"ca72190df0eb9b09d4b600821c8c7b6c9747b75a1c700c4d57dc0bb72abc074c","affectsGlobalScope":true,"impliedFormat":1},{"version":"21a167fec8f933752fb8157f06d28fab6817af3ad9b0bdb1908a10762391eab9","impliedFormat":1},{"version":"bb65c6267c5d6676be61acbf6604cf0a4555ac4b505df58ac15c831fcbff4e3e","affectsGlobalScope":true,"impliedFormat":1},{"version":"0c0cee62cb619aed81133b904f644515ba3064487002a7da83fd8aa07b1b4abd","impliedFormat":1},{"version":"5a94487653355b56018122d92392beb2e5f4a6c63ba5cef83bbe1c99775ef713","impliedFormat":1},{"version":"d5135ad93b33adcce80b18f8065087934cdc1730d63db58562edcf017e1aad9b","affectsGlobalScope":true,"impliedFormat":1},{"version":"82408ed3e959ddc60d3e9904481b5a8dc16469928257af22a3f7d1a3bc7fd8c4","impliedFormat":1},{"version":"afcc1c426b76db7ec80e563d4fb0ba9e6bcc6e63c2d7e9342e649dc56d26347f","impliedFormat":1},{"version":"bb9c4ffa5e6290c6980b63c815cdd1625876dadb2efaf77edbe82984be93e55e","impliedFormat":1},{"version":"75ecef44f126e2ae018b4abbd85b6e8a2e2ba1638ebec56cc64274643ce3567b","impliedFormat":1},{"version":"f30bb836526d930a74593f7b0f5c1c46d10856415a8f69e5e2fc3db80371e362","impliedFormat":1},{"version":"14b5aa23c5d0ae1907bc696ac7b6915d88f7d85799cc0dc2dcf98fbce2c5a67c","impliedFormat":1},{"version":"5c439dafdc09abe4d6c260a96b822fa0ba5be7203c71a63ab1f1423cd9e838ea","impliedFormat":1},{"version":"6b526a5ec4a401ca7c26cfe6a48e641d8f30af76673bad3b06a1b4504594a960","affectsGlobalScope":true,"impliedFormat":1},{"version":"816ad2e607a96de5bcac7d437f843f5afd8957f1fa5eefa6bba8e4ed7ca8fd84","affectsGlobalScope":true,"impliedFormat":1},{"version":"cec36af22f514322f870e81d30675c78df82ae8bf4863f5fd4e4424c040c678d","impliedFormat":1},{"version":"d903fafe96674bc0b2ac38a5be4a8fc07b14c2548d1cdb165a80ea24c44c0c54","impliedFormat":1},{"version":"b01a80007e448d035a16c74b5c95a5405b2e81b12fabcf18b75aa9eb9ef28990","impliedFormat":1},{"version":"04eb6578a588d6a46f50299b55f30e3a04ef27d0c5a46c57d8fcc211cd530faa","impliedFormat":1},{"version":"dbe5aa5a5dd8bd1c6a8d11b1310c3f0cdabaacc78a37b394a8c7b14faeb5fb84","impliedFormat":1},{"version":"2c828a5405191d006115ab34e191b8474bc6c86ffdc401d1a9864b1b6e088a58","impliedFormat":1},{"version":"e8b18c6385ff784228a6f369694fcf1a6b475355ba89090a88de13587a9391d5","affectsGlobalScope":true,"impliedFormat":1},{"version":"d076fede3cb042e7b13fc29442aaa03a57806bc51e2b26a67a01fbc66a7c0c12","impliedFormat":1},{"version":"7c013aa892414a7fdcfd861ae524a668eaa3ede8c7c0acafaf611948122c8d93","impliedFormat":1},{"version":"b0973c3cbcdc59b37bf477731d468696ecaf442593ec51bab497a613a580fe30","impliedFormat":1},{"version":"4989e92ba5b69b182d2caaea6295af52b7dc73a4f7a2e336a676722884e7139d","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3624aed92dab6da8484280d3cb3e2f4130ec3f4ef3f8201c95144ae9e898bb6","affectsGlobalScope":true,"impliedFormat":1},{"version":"5153a2fd150e46ce57bb3f8db1318d33f6ad3261ed70ceeff92281c0608c74a3","impliedFormat":1},{"version":"210d54cd652ec0fec8c8916e4af59bb341065576ecda039842f9ffb2e908507c","impliedFormat":1},{"version":"36b03690b628eab08703d63f04eaa89c5df202e5f1edf3989f13ad389cd2c091","impliedFormat":1},{"version":"0effadd232a20498b11308058e334d3339cc5bf8c4c858393e38d9d4c0013dcf","impliedFormat":1},{"version":"25846d43937c672bab7e8195f3d881f93495df712ee901860effc109918938cc","impliedFormat":1},{"version":"fd93cee2621ff42dabe57b7be402783fd1aa69ece755bcba1e0290547ae60513","impliedFormat":1},{"version":"1b952304137851e45bc009785de89ada562d9376177c97e37702e39e60c2f1ff","impliedFormat":1},{"version":"69ee23dd0d215b09907ad30d23f88b7790c93329d1faf31d7835552a10cf7cbf","impliedFormat":1},{"version":"44b8b584a338b190a59f4f6929d072431950c7bd92ec2694821c11bce180c8a5","impliedFormat":1},{"version":"23b89798789dffbd437c0c423f5d02d11f9736aea73d6abf16db4f812ff36eda","impliedFormat":1},{"version":"213fc4f2b172d8beb74b77d7c1b41488d67348066d185e4263470cbb010cd6e8","impliedFormat":1},{"version":"970a90f76d4d219ad60819d61f5994514087ba94c985647a3474a5a3d12714ed","affectsGlobalScope":true,"impliedFormat":1},{"version":"664d8f2d59164f2e08c543981453893bc7e003e4dfd29651ce09db13e9457980","impliedFormat":1},{"version":"4c8525f256873c7ba3135338c647eaf0ca7115a1a2805ae2d0056629461186ce","impliedFormat":1},{"version":"3c13ef48634e7b5012fcf7e8fce7496352c2d779a7201389ca96a2a81ee4314d","impliedFormat":1},{"version":"5d0a25ec910fa36595f85a67ac992d7a53dd4064a1ba6aea1c9f14ab73a023f2","impliedFormat":1},{"version":"f0900cd5d00fe1263ff41201fb8073dbeb984397e4af3b8002a5c207a30bdc33","affectsGlobalScope":true,"impliedFormat":1},{"version":"f7db71191aa7aac5d6bc927ed6e7075c2763d22c7238227ec0c63c8cf5cb6a8b","affectsGlobalScope":true,"impliedFormat":1},{"version":"06d7c42d256f0ce6afe1b2b6cfbc97ab391f29dadb00dd0ae8e8f23f5bc916c3","impliedFormat":1},{"version":"ec4bd1b200670fb567920db572d6701ed42a9641d09c4ff6869768c8f81b404c","impliedFormat":1},{"version":"e59a892d87e72733e2a9ca21611b9beb52977be2696c7ba4b216cbbb9a48f5aa","impliedFormat":1},{"version":"da26af7362f53d122283bc69fed862b9a9fe27e01bc6a69d1d682e0e5a4df3e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"8a300fa9b698845a1f9c41ecbe2c5966634582a8e2020d51abcace9b55aa959e","impliedFormat":1},{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true,"impliedFormat":1},{"version":"e9a8d4274033cb520ee12d6f68d161ba2b9128b87399645d3916b71187032836","impliedFormat":1},{"version":"a7321c0e96eecb19dcbf178493836474cef21ee3f9345384ce9d74e4be31228d","impliedFormat":1},{"version":"0d14fa22c41fdc7277e6f71473b20ebc07f40f00e38875142335d5b63cdfc9d2","impliedFormat":1},{"version":"3054ef91b855e005b9c4681399e9d64d2a7b07a22d539314d794f09e53b876a7","impliedFormat":1},{"version":"427ce5854885cfc34387e09de05c1d5c1acf94c2143e1693f1d9ff54880573e7","impliedFormat":1},{"version":"bed2c4f96fab3348be4a34d88dcb12578c1b2475b07c6acd369e99e227718d81","impliedFormat":1},{"version":"e3ba509d3dce019b3190ceb2f3fc88e2610ab717122dabd91a9efaa37804040d","impliedFormat":1},{"version":"9ac9b7b349a96ff204f4172183cca1672cc402e1ee7277bfcdec96c000b7d818","impliedFormat":1},{"version":"ac127e4c6f2b5220b293cc9d2e64ba49781225b792a51cda50f3db8eafba550c","impliedFormat":1},{"version":"f5e277afc658b3fefe1e9d06f3018416ea92f3e094bc21d38517f7f36627a5e4","affectsGlobalScope":true,"impliedFormat":1}],"root":[270,271],"options":{"allowJs":false,"allowSyntheticDefaultImports":true,"alwaysStrict":true,"composite":true,"declaration":true,"declarationMap":false,"downlevelIteration":true,"esModuleInterop":true,"module":99,"noFallthroughCasesInSwitch":true,"noImplicitAny":false,"noImplicitReturns":true,"noImplicitThis":true,"noUnusedLocals":false,"noUnusedParameters":false,"outDir":"./module","rootDir":"../src","skipLibCheck":true,"sourceMap":true,"strict":true,"strictFunctionTypes":true,"strictNullChecks":true,"strictPropertyInitialization":true,"target":99,"useDefineForClassFields":false},"referencedMap":[[218,1],[69,2],[65,1],[66,3],[67,3],[68,1],[77,4],[70,3],[71,3],[72,3],[73,5],[74,3],[75,3],[76,3],[79,6],[80,3],[81,1],[82,6],[78,1],[83,6],[89,7],[85,1],[84,1],[86,1],[87,8],[90,1],[113,9],[105,10],[103,11],[106,1],[107,12],[108,1],[104,3],[109,1],[110,1],[111,1],[112,1],[115,13],[114,3],[88,3],[91,3],[92,3],[93,3],[94,3],[102,14],[95,3],[96,3],[97,1],[98,3],[99,3],[100,3],[101,3],[128,15],[116,1],[117,16],[130,17],[129,1],[118,3],[119,3],[120,3],[121,3],[122,3],[123,3],[124,3],[125,3],[126,3],[127,3],[131,1],[133,1],[132,1],[137,18],[134,1],[135,1],[136,19],[217,20],[141,21],[138,1],[140,22],[139,1],[142,1],[144,23],[143,1],[145,1],[146,24],[176,3],[177,3],[178,25],[179,26],[180,3],[181,1],[182,1],[183,27],[184,28],[186,29],[187,30],[188,31],[185,1],[189,27],[190,32],[191,3],[196,33],[198,34],[193,35],[202,1],[203,36],[192,1],[194,27],[195,37],[208,38],[200,3],[197,39],[199,40],[201,41],[204,42],[205,1],[206,43],[207,44],[209,3],[210,3],[211,1],[212,45],[157,1],[158,1],[159,1],[160,1],[175,46],[162,47],[163,1],[164,3],[165,1],[166,1],[167,1],[168,48],[169,3],[170,1],[171,1],[172,1],[161,1],[173,1],[174,1],[213,49],[155,3],[148,3],[147,3],[149,50],[150,3],[151,1],[154,27],[156,51],[152,1],[153,1],[214,52],[215,1],[216,53],[57,54],[64,55],[62,56],[63,57],[61,58],[58,56],[54,3],[59,3],[60,3],[55,3],[56,59],[334,60],[326,3],[329,61],[328,3],[327,3],[333,62],[331,63],[332,64],[330,65],[272,66],[273,66],[275,67],[276,68],[277,69],[278,70],[279,71],[280,72],[281,73],[282,74],[283,75],[284,76],[285,76],[287,77],[286,78],[288,77],[289,79],[290,80],[274,81],[324,3],[291,82],[292,83],[293,84],[325,85],[294,86],[295,87],[296,88],[297,89],[298,90],[299,91],[300,92],[301,93],[302,94],[303,95],[304,95],[305,96],[306,97],[308,98],[307,99],[309,100],[310,101],[311,3],[312,102],[313,103],[314,104],[315,105],[316,106],[317,107],[318,108],[319,109],[320,110],[321,111],[322,112],[323,113],[45,3],[46,3],[8,3],[10,3],[9,3],[2,3],[11,3],[12,3],[13,3],[14,3],[15,3],[16,3],[17,3],[18,3],[3,3],[19,3],[4,3],[20,3],[24,3],[21,3],[22,3],[23,3],[25,3],[26,3],[27,3],[5,3],[28,3],[29,3],[30,3],[31,3],[6,3],[35,3],[32,3],[33,3],[34,3],[36,3],[7,3],[37,3],[42,3],[43,3],[38,3],[39,3],[40,3],[41,3],[1,3],[44,3],[270,114],[271,115],[240,116],[225,3],[232,117],[244,3],[268,3],[50,118],[51,119],[49,3],[222,120],[266,121],[236,122],[269,123],[219,120],[267,120],[238,124],[230,3],[231,125],[53,126],[52,3],[228,127],[226,128],[224,129],[243,122],[227,130],[229,131],[220,122],[257,3],[48,3],[47,3],[245,3],[246,132],[247,3],[264,122],[248,3],[249,3],[252,133],[250,3],[251,120],[253,120],[254,3],[255,3],[261,3],[256,3],[263,122],[265,134],[260,3],[258,3],[259,135],[262,122],[235,136],[241,137],[234,138],[237,139],[239,140],[242,141],[221,3],[223,142],[233,133]],"latestChangedDtsFile":"./module/index.d.ts","version":"5.6.2"}
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
import { HDWallet } from "mainnet-js";
|
|
2
|
-
import { default as IndexedDBProvider } from "./IndexedDBProvider";
|
|
3
|
-
import { BaseWallet, RegTestWallet, TestNetWallet, Wallet } from "mainnet-js";
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* @jest-environment jsdom
|
|
7
|
-
*/
|
|
8
|
-
test("Store and retrieve a Regtest wallet", async () => {
|
|
9
|
-
let db = new IndexedDBProvider("regtest-db");
|
|
10
|
-
await db.init();
|
|
11
|
-
let w1 = await RegTestWallet.newRandom();
|
|
12
|
-
w1.name = "dave";
|
|
13
|
-
await db.addWallet(w1.name, w1.toString());
|
|
14
|
-
let w2 = await db.getWallet("dave");
|
|
15
|
-
expect(w1.name).toBe(w2!.name);
|
|
16
|
-
expect(w1.toString()).toBe(w2!.wallet);
|
|
17
|
-
db.close();
|
|
18
|
-
});
|
|
19
|
-
|
|
20
|
-
test("Store and replace a Regtest wallet", async () => {
|
|
21
|
-
const dbPrefix = `regtest2 ${Math.random()}`;
|
|
22
|
-
let db = new IndexedDBProvider(dbPrefix);
|
|
23
|
-
await db.init();
|
|
24
|
-
|
|
25
|
-
expect(await db.walletExists("storereplace")).toBe(false);
|
|
26
|
-
let w1 = await db.addWallet("storereplace", "keep seed");
|
|
27
|
-
let w2 = await db.getWallet("storereplace");
|
|
28
|
-
expect("keep seed").toBe(w2!.wallet);
|
|
29
|
-
expect(await db.walletExists("storereplace")).toBe(true);
|
|
30
|
-
|
|
31
|
-
let seedId = (
|
|
32
|
-
await RegTestWallet.fromSeed(
|
|
33
|
-
"abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about"
|
|
34
|
-
)
|
|
35
|
-
).toDbString();
|
|
36
|
-
let w3 = await db.updateWallet("storereplace", seedId);
|
|
37
|
-
let w4 = await db.getWallet("storereplace");
|
|
38
|
-
expect(w4!.wallet).not.toBe("keep seed");
|
|
39
|
-
expect(w4!.wallet).toBe(seedId);
|
|
40
|
-
|
|
41
|
-
let w5 = await db.updateWallet("storereplace_nonexistent", seedId);
|
|
42
|
-
let w6 = await db.getWallet("storereplace_nonexistent")!;
|
|
43
|
-
expect(w6).toBe(undefined);
|
|
44
|
-
|
|
45
|
-
db.close();
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
test("Store and retrieve a Testnet wallet", async () => {
|
|
49
|
-
let db = new IndexedDBProvider("testnet-db");
|
|
50
|
-
await db.init();
|
|
51
|
-
// passing a name to newRandom should save the wallet,
|
|
52
|
-
// but we want to save it manually in this case
|
|
53
|
-
let w1 = await TestNetWallet.newRandom();
|
|
54
|
-
w1.name = "dave";
|
|
55
|
-
await db.addWallet(w1.name, w1.toString());
|
|
56
|
-
let w2 = await db.getWallet("dave");
|
|
57
|
-
expect(w1.name).toBe(w2!.name);
|
|
58
|
-
expect(w1.toString()).toBe(w2!.wallet);
|
|
59
|
-
db.close();
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
test("Store and retrieve a Mainnet wallet", async () => {
|
|
63
|
-
let db = new IndexedDBProvider("mainnet-db");
|
|
64
|
-
await db.init();
|
|
65
|
-
|
|
66
|
-
let w1 = await Wallet.newRandom();
|
|
67
|
-
w1.name = "dave";
|
|
68
|
-
await db.addWallet(w1.name, w1.toString());
|
|
69
|
-
let w2 = await db.getWallet(w1.name);
|
|
70
|
-
expect(w1.name).toBe(w2!.name);
|
|
71
|
-
expect(w1.toString()).toBe(w2!.wallet);
|
|
72
|
-
db.close();
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
test("Store and retrieve a Mainnet wallet", async () => {
|
|
76
|
-
BaseWallet.StorageProvider = IndexedDBProvider;
|
|
77
|
-
|
|
78
|
-
let w1 = await Wallet.named("testWallet");
|
|
79
|
-
let w2 = await Wallet.named("testWallet");
|
|
80
|
-
expect(w1.getDepositAddress()).toBe(w2.getDepositAddress());
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
test("Store and retrieve a Mainnet hd wallet", async () => {
|
|
84
|
-
BaseWallet.StorageProvider = IndexedDBProvider;
|
|
85
|
-
|
|
86
|
-
const w1 = await HDWallet.named("test");
|
|
87
|
-
const w2 = await HDWallet.named("test");
|
|
88
|
-
expect(w1.mnemonic).toBe(w2.mnemonic);
|
|
89
|
-
});
|
package/src/IndexedDBProvider.ts
DELETED
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
import { StorageProvider, WalletDbEntryI } from "mainnet-js";
|
|
2
|
-
|
|
3
|
-
export default class IndexedDBProvider implements StorageProvider {
|
|
4
|
-
private dbName: string;
|
|
5
|
-
private storeName: string;
|
|
6
|
-
private db: IDBDatabase | null = null;
|
|
7
|
-
|
|
8
|
-
constructor(dbName = "wallet", storeName = "wallet") {
|
|
9
|
-
this.dbName = dbName;
|
|
10
|
-
this.storeName = storeName;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
private async openDB(): Promise<IDBDatabase> {
|
|
14
|
-
if (this.db) return this.db;
|
|
15
|
-
return new Promise((resolve, reject) => {
|
|
16
|
-
const request = indexedDB.open(this.dbName, 31);
|
|
17
|
-
request.onupgradeneeded = (event) => {
|
|
18
|
-
const db = request.result;
|
|
19
|
-
if (!db.objectStoreNames.contains(this.storeName)) {
|
|
20
|
-
db.createObjectStore(this.storeName, { keyPath: "name" });
|
|
21
|
-
}
|
|
22
|
-
};
|
|
23
|
-
request.onsuccess = () => {
|
|
24
|
-
this.db = request.result;
|
|
25
|
-
resolve(this.db);
|
|
26
|
-
};
|
|
27
|
-
request.onerror = () => reject(request.error);
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
public async init() {
|
|
32
|
-
await this.openDB();
|
|
33
|
-
return this;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
public async close() {
|
|
37
|
-
if (this.db) {
|
|
38
|
-
this.db.close();
|
|
39
|
-
this.db = null;
|
|
40
|
-
}
|
|
41
|
-
return this;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
public getInfo() {
|
|
45
|
-
return "indexedDB";
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
public async addWallet(name: string, walletId: string): Promise<boolean> {
|
|
49
|
-
const db = await this.openDB();
|
|
50
|
-
return new Promise<boolean>((resolve, reject) => {
|
|
51
|
-
const tx = db.transaction(this.storeName, "readwrite");
|
|
52
|
-
const store = tx.objectStore(this.storeName);
|
|
53
|
-
const getReq = store.get(name);
|
|
54
|
-
getReq.onsuccess = () => {
|
|
55
|
-
if (getReq.result) {
|
|
56
|
-
resolve(false);
|
|
57
|
-
} else {
|
|
58
|
-
const addReq = store.add({ name, wallet: walletId });
|
|
59
|
-
addReq.onsuccess = () => resolve(true);
|
|
60
|
-
addReq.onerror = () => reject(addReq.error);
|
|
61
|
-
}
|
|
62
|
-
};
|
|
63
|
-
getReq.onerror = () => reject(getReq.error);
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
public async getWallet(name: string): Promise<WalletDbEntryI | undefined> {
|
|
68
|
-
const db = await this.openDB();
|
|
69
|
-
return new Promise((resolve, reject) => {
|
|
70
|
-
const tx = db.transaction(this.storeName, "readonly");
|
|
71
|
-
const store = tx.objectStore(this.storeName);
|
|
72
|
-
const req = store.get(name);
|
|
73
|
-
req.onsuccess = () => resolve(req.result);
|
|
74
|
-
req.onerror = () => reject(req.error);
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
public async getWallets(): Promise<Array<WalletDbEntryI>> {
|
|
79
|
-
const db = await this.openDB();
|
|
80
|
-
return new Promise((resolve, reject) => {
|
|
81
|
-
const tx = db.transaction(this.storeName, "readonly");
|
|
82
|
-
const store = tx.objectStore(this.storeName);
|
|
83
|
-
const req = store.getAll();
|
|
84
|
-
req.onsuccess = () => resolve(req.result || []);
|
|
85
|
-
req.onerror = () => reject(req.error);
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
public async updateWallet(name: string, walletId: string): Promise<void> {
|
|
90
|
-
const db = await this.openDB();
|
|
91
|
-
return new Promise<void>((resolve, reject) => {
|
|
92
|
-
const tx = db.transaction(this.storeName, "readwrite");
|
|
93
|
-
const store = tx.objectStore(this.storeName);
|
|
94
|
-
const getReq = store.get(name);
|
|
95
|
-
getReq.onsuccess = () => {
|
|
96
|
-
if (!getReq.result) {
|
|
97
|
-
resolve();
|
|
98
|
-
} else {
|
|
99
|
-
const putReq = store.put({ name, wallet: walletId });
|
|
100
|
-
putReq.onsuccess = () => resolve();
|
|
101
|
-
putReq.onerror = () => reject(putReq.error);
|
|
102
|
-
}
|
|
103
|
-
};
|
|
104
|
-
getReq.onerror = () => reject(getReq.error);
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
public async walletExists(name: string): Promise<boolean> {
|
|
109
|
-
return (await this.getWallet(name)) !== undefined;
|
|
110
|
-
}
|
|
111
|
-
}
|
|
@@ -1,463 +0,0 @@
|
|
|
1
|
-
const playwright = require("playwright");
|
|
2
|
-
const PAGE_URL = "http://localhost:8080/indexeddb-storage/index.html";
|
|
3
|
-
|
|
4
|
-
describe(`Wallet should function in the browser`, () => {
|
|
5
|
-
let browser = null;
|
|
6
|
-
let page = null;
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Create the browser and page context
|
|
10
|
-
*/
|
|
11
|
-
beforeAll(async () => {
|
|
12
|
-
browser = await playwright["chromium"].launch();
|
|
13
|
-
page = await browser.newPage();
|
|
14
|
-
|
|
15
|
-
if (!page) {
|
|
16
|
-
throw new Error("Connection wasn't established");
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
// Open the page
|
|
20
|
-
await page.goto(PAGE_URL, {
|
|
21
|
-
waitUntil: "networkidle0",
|
|
22
|
-
});
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
afterAll(async () => {
|
|
26
|
-
await browser.close();
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
test(`Should load page`, async () => {
|
|
30
|
-
expect(page).not.toBeNull();
|
|
31
|
-
expect(await page.title()).toEqual("The Empty Mainnet App");
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
test(`Should load module`, async () => {
|
|
35
|
-
expect(page).not.toBeNull();
|
|
36
|
-
const result = await page.evaluate(async () => {
|
|
37
|
-
BaseWallet.StorageProvider = IndexedDBProvider;
|
|
38
|
-
return await typeof TestNetWallet;
|
|
39
|
-
});
|
|
40
|
-
expect(result).toEqual("function");
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
test(`Should not have a "process"`, async () => {
|
|
44
|
-
expect(page).not.toBeNull();
|
|
45
|
-
const result = await page.evaluate(async () => {
|
|
46
|
-
BaseWallet.StorageProvider = IndexedDBProvider;
|
|
47
|
-
return typeof process;
|
|
48
|
-
});
|
|
49
|
-
expect(result).toEqual("undefined");
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
test(`Should create regtest wallet`, async () => {
|
|
53
|
-
let params = { name: "Alice's Regtest", type: "wif", network: "regtest" };
|
|
54
|
-
const result = await page.evaluate(async (p) => {
|
|
55
|
-
BaseWallet.StorageProvider = IndexedDBProvider;
|
|
56
|
-
return await createWalletResponse(p);
|
|
57
|
-
}, params);
|
|
58
|
-
expect(result.cashaddr.slice(0, 8)).toBe("bchreg:q");
|
|
59
|
-
});
|
|
60
|
-
|
|
61
|
-
test(`Should create testnet wallet`, async () => {
|
|
62
|
-
let params = { name: "Alice's TestNet", type: "wif", network: "testnet" };
|
|
63
|
-
const result = await page.evaluate(async (p) => {
|
|
64
|
-
BaseWallet.StorageProvider = IndexedDBProvider;
|
|
65
|
-
return await createWalletResponse(p);
|
|
66
|
-
}, params);
|
|
67
|
-
expect(result.cashaddr.slice(0, 9)).toBe("bchtest:q");
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
test(`Should throw Error on regtest wif to Testnet`, async () => {
|
|
71
|
-
expect.assertions(1);
|
|
72
|
-
try {
|
|
73
|
-
const result = await page.evaluate(async (wif) => {
|
|
74
|
-
BaseWallet.StorageProvider = IndexedDBProvider;
|
|
75
|
-
return await TestNetWallet.fromId(`wif:regtest:${wif}`);
|
|
76
|
-
}, process.env.PRIVATE_WIF);
|
|
77
|
-
} catch (e) {
|
|
78
|
-
expect(e.message.split("\n")[0]).toContain(
|
|
79
|
-
"Error: Network prefix regtest to a testnet wallet"
|
|
80
|
-
);
|
|
81
|
-
}
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
test(`Should throw Error on regtest hd to regtest wif`, async () => {
|
|
85
|
-
expect.assertions(1);
|
|
86
|
-
try {
|
|
87
|
-
const result = await page.evaluate(async (wif) => {
|
|
88
|
-
BaseWallet.StorageProvider = IndexedDBProvider;
|
|
89
|
-
return await TestNetWallet.fromId(`hd:testnet:${wif}`);
|
|
90
|
-
}, process.env.PRIVATE_WIF);
|
|
91
|
-
} catch (e) {
|
|
92
|
-
expect(e.message.split("\n")[0]).toContain(
|
|
93
|
-
"Error: Unknown wallet type 'hd'"
|
|
94
|
-
);
|
|
95
|
-
}
|
|
96
|
-
});
|
|
97
|
-
|
|
98
|
-
test(`Should create a random testnet wallet`, async () => {
|
|
99
|
-
let params = {};
|
|
100
|
-
const result = await page.evaluate(async (p) => {
|
|
101
|
-
BaseWallet.StorageProvider = IndexedDBProvider;
|
|
102
|
-
let w = await TestNetWallet.newRandom();
|
|
103
|
-
return w.getDepositAddress();
|
|
104
|
-
}, params);
|
|
105
|
-
expect(result.slice(0, 9)).toBe("bchtest:q");
|
|
106
|
-
});
|
|
107
|
-
|
|
108
|
-
test(`Should create mainnet wallet`, async () => {
|
|
109
|
-
const result = await page.evaluate(async (p) => {
|
|
110
|
-
BaseWallet.StorageProvider = IndexedDBProvider;
|
|
111
|
-
let w = await Wallet.newRandom();
|
|
112
|
-
return w.getDepositAddress();
|
|
113
|
-
});
|
|
114
|
-
expect(result.slice(0, 13)).toBe("bitcoincash:q");
|
|
115
|
-
});
|
|
116
|
-
|
|
117
|
-
test(`Should get an empty balance from a mainnet wallet`, async () => {
|
|
118
|
-
const result = await page.evaluate(async (p) => {
|
|
119
|
-
BaseWallet.StorageProvider = IndexedDBProvider;
|
|
120
|
-
let w = await Wallet.newRandom();
|
|
121
|
-
return w.getBalance();
|
|
122
|
-
});
|
|
123
|
-
expect(result).toBe(0n);
|
|
124
|
-
});
|
|
125
|
-
|
|
126
|
-
test(`Should return deposit address from testnet wallet`, async () => {
|
|
127
|
-
const result = await page.evaluate(async (wif) => {
|
|
128
|
-
BaseWallet.StorageProvider = IndexedDBProvider;
|
|
129
|
-
const alice = await TestNetWallet.fromWIF(wif);
|
|
130
|
-
return alice.getDepositAddress();
|
|
131
|
-
}, process.env.PRIVATE_WIF);
|
|
132
|
-
expect(result.slice(0, 10)).toBe("bchtest:qp");
|
|
133
|
-
});
|
|
134
|
-
|
|
135
|
-
test(`Should return deposit address from testnet wallet`, async () => {
|
|
136
|
-
const result = await page.evaluate(async (wif) => {
|
|
137
|
-
BaseWallet.StorageProvider = IndexedDBProvider;
|
|
138
|
-
const alice = await TestNetWallet.fromWIF(wif);
|
|
139
|
-
return alice.getDepositAddress();
|
|
140
|
-
}, process.env.PRIVATE_WIF);
|
|
141
|
-
expect(result.slice(0, 9)).toBe("bchtest:q");
|
|
142
|
-
});
|
|
143
|
-
|
|
144
|
-
test(`Should return watch testnet balance`, async () => {
|
|
145
|
-
if (process.env.ALICE_TESTNET_ADDRESS) {
|
|
146
|
-
const result = await page.evaluate(async (addr) => {
|
|
147
|
-
BaseWallet.StorageProvider = IndexedDBProvider;
|
|
148
|
-
const alice = await TestNetWallet.watchOnly(addr);
|
|
149
|
-
return alice.getBalance();
|
|
150
|
-
}, process.env.ALICE_TESTNET_ADDRESS);
|
|
151
|
-
expect(result).toBeGreaterThan(0n);
|
|
152
|
-
} else {
|
|
153
|
-
expect.assertions(1);
|
|
154
|
-
console.warn(
|
|
155
|
-
"SKIPPING testnet balance test, set ALICE_TESTNET_ADDRESS env"
|
|
156
|
-
);
|
|
157
|
-
}
|
|
158
|
-
});
|
|
159
|
-
|
|
160
|
-
test(`Should return watch named balance`, async () => {
|
|
161
|
-
if (process.env.ALICE_TESTNET_ADDRESS) {
|
|
162
|
-
const result = await page.evaluate(async (addr) => {
|
|
163
|
-
BaseWallet.StorageProvider = IndexedDBProvider;
|
|
164
|
-
const alice = await TestNetWallet.named("alice");
|
|
165
|
-
return alice.getBalance();
|
|
166
|
-
}, process.env.ALICE_TESTNET_ADDRESS);
|
|
167
|
-
expect(result).toBe(0n);
|
|
168
|
-
} else {
|
|
169
|
-
expect.assertions(1);
|
|
170
|
-
console.warn(
|
|
171
|
-
"SKIPPING testnet balance test, set ALICE_TESTNET_ADDRESS env"
|
|
172
|
-
);
|
|
173
|
-
}
|
|
174
|
-
});
|
|
175
|
-
|
|
176
|
-
test(`Should return reterive a named wallet`, async () => {
|
|
177
|
-
const result = await page.evaluate(async () => {
|
|
178
|
-
BaseWallet.StorageProvider = IndexedDBProvider;
|
|
179
|
-
const alice = await TestNetWallet.named("alice");
|
|
180
|
-
const alice2 = await TestNetWallet.named("alice");
|
|
181
|
-
return [alice.cashaddr, alice2.cashaddr];
|
|
182
|
-
}, undefined);
|
|
183
|
-
expect(result[0]).toBe(result[1]);
|
|
184
|
-
});
|
|
185
|
-
|
|
186
|
-
test(`Should return testnet balance in usd`, async () => {
|
|
187
|
-
if (process.env.ALICE_TESTNET_ADDRESS) {
|
|
188
|
-
const result = await page.evaluate(async (addr) => {
|
|
189
|
-
BaseWallet.StorageProvider = IndexedDBProvider;
|
|
190
|
-
const alice = await TestNetWallet.watchOnly(addr);
|
|
191
|
-
return alice.getBalance("usd");
|
|
192
|
-
}, process.env.ALICE_TESTNET_ADDRESS);
|
|
193
|
-
expect(result).toBeGreaterThan(0);
|
|
194
|
-
} else {
|
|
195
|
-
expect.assertions(1);
|
|
196
|
-
console.warn(
|
|
197
|
-
"SKIPPING testnet balance test, set ALICE_TESTNET_ADDRESS env"
|
|
198
|
-
);
|
|
199
|
-
}
|
|
200
|
-
});
|
|
201
|
-
|
|
202
|
-
test(`Should return testnet balance in usd`, async () => {
|
|
203
|
-
const result = await page.evaluate(async () => {
|
|
204
|
-
BaseWallet.StorageProvider = IndexedDBProvider;
|
|
205
|
-
return await Mainnet.convert(1, "bch", "sat");
|
|
206
|
-
});
|
|
207
|
-
expect(result).toBe(100000000);
|
|
208
|
-
});
|
|
209
|
-
|
|
210
|
-
test(`Should sign a message and verify it`, async () => {
|
|
211
|
-
const result = await page.evaluate(async (wif) => {
|
|
212
|
-
BaseWallet.StorageProvider = IndexedDBProvider;
|
|
213
|
-
const alice = await walletFromId(`wif:regtest:${wif}`);
|
|
214
|
-
let result = await alice.sign("test");
|
|
215
|
-
return {
|
|
216
|
-
resp: await alice.verify("test", result.signature),
|
|
217
|
-
signature: result.signature,
|
|
218
|
-
};
|
|
219
|
-
}, process.env.PRIVATE_WIF);
|
|
220
|
-
expect(result.signature).toBe(
|
|
221
|
-
"IOEEiqRXRVK9gPUNpXuBjJUK47Y8XpseZejgwu59CoNSVv+3K1NkHdT64RXHP7cw4PZ6usRQ4ULrP/p5CJnrg9U="
|
|
222
|
-
);
|
|
223
|
-
expect(result.resp.valid).toBe(true);
|
|
224
|
-
});
|
|
225
|
-
|
|
226
|
-
test(`Should send to Bob; sendMax all of Bob's funds back`, async () => {
|
|
227
|
-
const result = await page.evaluate(async (wif) => {
|
|
228
|
-
BaseWallet.StorageProvider = IndexedDBProvider;
|
|
229
|
-
const alice = await walletFromId(`wif:regtest:${wif}`);
|
|
230
|
-
const bob = await createWallet({
|
|
231
|
-
type: "wif",
|
|
232
|
-
network: "regtest",
|
|
233
|
-
name: "Bob's random wallet",
|
|
234
|
-
});
|
|
235
|
-
await alice.send([
|
|
236
|
-
{
|
|
237
|
-
cashaddr: bob.cashaddr,
|
|
238
|
-
value: 3000n,
|
|
239
|
-
},
|
|
240
|
-
]);
|
|
241
|
-
return bob.sendMax(alice.cashaddr);
|
|
242
|
-
}, process.env.PRIVATE_WIF);
|
|
243
|
-
expect(result.balance).toBe(0n);
|
|
244
|
-
});
|
|
245
|
-
|
|
246
|
-
test("Store and replace a Regtest wallet", async () => {
|
|
247
|
-
const result = await page.evaluate(async () => {
|
|
248
|
-
BaseWallet.StorageProvider = IndexedDBProvider;
|
|
249
|
-
const name = `storereplace ${Math.random()}`;
|
|
250
|
-
|
|
251
|
-
const check1 = await RegTestWallet.namedExists(name);
|
|
252
|
-
const w1 = await RegTestWallet.named(name);
|
|
253
|
-
const check2 = await RegTestWallet.namedExists(name);
|
|
254
|
-
|
|
255
|
-
const seedId = (
|
|
256
|
-
await RegTestWallet.fromSeed(
|
|
257
|
-
"abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about"
|
|
258
|
-
)
|
|
259
|
-
).toDbString();
|
|
260
|
-
const w3 = await RegTestWallet.replaceNamed(name, seedId);
|
|
261
|
-
const w4 = await RegTestWallet.named(name);
|
|
262
|
-
|
|
263
|
-
const w5 = await RegTestWallet.replaceNamed(
|
|
264
|
-
`${name}_nonexistent`,
|
|
265
|
-
seedId
|
|
266
|
-
);
|
|
267
|
-
const w6 = await RegTestWallet.named(`${name}_nonexistent`);
|
|
268
|
-
|
|
269
|
-
return {
|
|
270
|
-
check1,
|
|
271
|
-
check2,
|
|
272
|
-
w1: w1.toDbString(),
|
|
273
|
-
w4: w4.toDbString(),
|
|
274
|
-
w5: w5.toDbString(),
|
|
275
|
-
w6: w6.toDbString(),
|
|
276
|
-
seedId,
|
|
277
|
-
};
|
|
278
|
-
});
|
|
279
|
-
|
|
280
|
-
expect(result.check1).toBe(false);
|
|
281
|
-
expect(result.check2).toBe(true);
|
|
282
|
-
expect(result.w4).not.toBe(result.w1);
|
|
283
|
-
expect(result.w4).toBe(result.seedId);
|
|
284
|
-
expect(result.w6).toBe(result.w5);
|
|
285
|
-
});
|
|
286
|
-
|
|
287
|
-
test("Test waiting and watching", async () => {
|
|
288
|
-
await page.evaluate(async (ALICE_ID) => {
|
|
289
|
-
BaseWallet.StorageProvider = IndexedDBProvider;
|
|
290
|
-
const alice = await RegTestWallet.fromId(ALICE_ID);
|
|
291
|
-
|
|
292
|
-
const bob = await RegTestWallet.newRandom();
|
|
293
|
-
|
|
294
|
-
let waitTxResult = false;
|
|
295
|
-
setTimeout(async () => {
|
|
296
|
-
const result = await alice.waitForTransaction({
|
|
297
|
-
getBalance: true,
|
|
298
|
-
getTransactionInfo: true,
|
|
299
|
-
});
|
|
300
|
-
expect(result.balance).toBeGreaterThan(0n);
|
|
301
|
-
expect(result.transactionInfo.hash.length).toBe(64);
|
|
302
|
-
waitTxResult = true;
|
|
303
|
-
}, 0);
|
|
304
|
-
|
|
305
|
-
let waitBalanceResult = false;
|
|
306
|
-
setTimeout(async () => {
|
|
307
|
-
const result = await alice.waitForBalance(100000n);
|
|
308
|
-
expect(result).toBeGreaterThan(0n);
|
|
309
|
-
waitBalanceResult = true;
|
|
310
|
-
}, 0);
|
|
311
|
-
|
|
312
|
-
let bobBalanceWatchResult = false;
|
|
313
|
-
const bobBalanceWatchCancel = await bob.watchBalance(async (balance) => {
|
|
314
|
-
// skip if balance is zero yet
|
|
315
|
-
if (!balance) {
|
|
316
|
-
return;
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
expect(balance).toBeGreaterThanOrEqual(100000n);
|
|
320
|
-
await bobBalanceWatchCancel();
|
|
321
|
-
bobBalanceWatchResult = true;
|
|
322
|
-
});
|
|
323
|
-
|
|
324
|
-
// let blockWatchResult = false;
|
|
325
|
-
// const blockWatchCancel = bob.watchBlocks((block) => {
|
|
326
|
-
// expect(block.height).toBeGreaterThan(1);
|
|
327
|
-
// blockWatchCancel();
|
|
328
|
-
// blockWatchResult = true;
|
|
329
|
-
// });
|
|
330
|
-
|
|
331
|
-
// let blockWaitResult = false;
|
|
332
|
-
// setTimeout(async () => {
|
|
333
|
-
// const blockNumber = await (
|
|
334
|
-
// alice.provider
|
|
335
|
-
// ).getBlockHeight();
|
|
336
|
-
// const result = await alice.waitForBlock();
|
|
337
|
-
// expect(result.height).toBe(blockNumber + 1);
|
|
338
|
-
// blockWaitResult = true;
|
|
339
|
-
// }, 0);
|
|
340
|
-
|
|
341
|
-
// let blockNumberWaitResult = false;
|
|
342
|
-
// setTimeout(async () => {
|
|
343
|
-
// const blockNumber = await (
|
|
344
|
-
// alice.provider
|
|
345
|
-
// ).getBlockHeight();
|
|
346
|
-
// const result = await alice.waitForBlock(blockNumber + 2);
|
|
347
|
-
// expect(result.height).toBe(blockNumber + 2);
|
|
348
|
-
// blockNumberWaitResult = true;
|
|
349
|
-
// }, 0);
|
|
350
|
-
|
|
351
|
-
await alice.send({
|
|
352
|
-
cashaddr: bob.getDepositAddress(),
|
|
353
|
-
value: 100000n,
|
|
354
|
-
});
|
|
355
|
-
|
|
356
|
-
//! mining not supported in browser
|
|
357
|
-
// await mine({ cashaddr: alice.cashaddr, blocks: 1 });
|
|
358
|
-
// await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
359
|
-
// await mine({ cashaddr: alice.cashaddr, blocks: 1 });
|
|
360
|
-
|
|
361
|
-
await new Promise((resolve) => setTimeout(resolve, 5000));
|
|
362
|
-
expect(waitTxResult).toBe(true);
|
|
363
|
-
expect(waitBalanceResult).toBe(true);
|
|
364
|
-
// expect(aliceWatchResult).toBe(true);
|
|
365
|
-
// expect(bobWatchResult).toBe(true);
|
|
366
|
-
expect(bobBalanceWatchResult).toBe(true);
|
|
367
|
-
// expect(blockWatchResult).toBe(true);
|
|
368
|
-
// expect(blockWaitResult).toBe(true);
|
|
369
|
-
// expect(blockNumberWaitResult).toBe(true);
|
|
370
|
-
}, process.env.ALICE_ID);
|
|
371
|
-
});
|
|
372
|
-
|
|
373
|
-
test("Should use localStorage cache for transactions", async () => {
|
|
374
|
-
const result = await page.evaluate(async (walletId) => {
|
|
375
|
-
const aliceWallet = await RegTestWallet.fromId(walletId);
|
|
376
|
-
const txDecoded = await aliceWallet.getLastTransaction();
|
|
377
|
-
expect(txDecoded === null).toBe(false);
|
|
378
|
-
const txHash = txDecoded.hash;
|
|
379
|
-
expect(
|
|
380
|
-
localStorage.getItem(`tx-${aliceWallet.provider.network}-${txHash}`)
|
|
381
|
-
).toBe(null);
|
|
382
|
-
Config.UseLocalStorageCache = true;
|
|
383
|
-
await aliceWallet.provider.getRawTransaction(txHash);
|
|
384
|
-
await aliceWallet.provider.getRawTransaction(txHash, true);
|
|
385
|
-
|
|
386
|
-
expect(
|
|
387
|
-
localStorage.getItem(
|
|
388
|
-
`txraw-${aliceWallet.provider.network}-${txHash}`
|
|
389
|
-
) === null
|
|
390
|
-
).toBe(false);
|
|
391
|
-
expect(
|
|
392
|
-
typeof localStorage.getItem(
|
|
393
|
-
`txraw-${aliceWallet.provider.network}-${txHash}`
|
|
394
|
-
) === "string"
|
|
395
|
-
).toBe(true);
|
|
396
|
-
expect(
|
|
397
|
-
typeof (await aliceWallet.provider.getRawTransaction(txHash))
|
|
398
|
-
).toBe("string");
|
|
399
|
-
|
|
400
|
-
expect(
|
|
401
|
-
localStorage.getItem(`tx-${aliceWallet.provider.network}-${txHash}`) ===
|
|
402
|
-
null
|
|
403
|
-
).toBe(false);
|
|
404
|
-
expect(
|
|
405
|
-
typeof localStorage.getItem(
|
|
406
|
-
`tx-${aliceWallet.provider.network}-${txHash}`
|
|
407
|
-
) === "string"
|
|
408
|
-
).toBe(true);
|
|
409
|
-
expect(
|
|
410
|
-
typeof (await aliceWallet.provider.getRawTransaction(txHash, true))
|
|
411
|
-
).toBe("object");
|
|
412
|
-
|
|
413
|
-
Config.UseLocalStorageCache = false;
|
|
414
|
-
}, process.env.ALICE_ID);
|
|
415
|
-
});
|
|
416
|
-
|
|
417
|
-
test("Should use localStorage cache for block headers", async () => {
|
|
418
|
-
const result = await page.evaluate(async () => {
|
|
419
|
-
const aliceWallet = await Wallet.newRandom();
|
|
420
|
-
|
|
421
|
-
const height = 854724;
|
|
422
|
-
await aliceWallet.provider.getHeader(854724);
|
|
423
|
-
expect(
|
|
424
|
-
localStorage.getItem(
|
|
425
|
-
`header-${aliceWallet.provider.network}-${height}-${false}`
|
|
426
|
-
)
|
|
427
|
-
).toBe(null);
|
|
428
|
-
Config.UseLocalStorageCache = true;
|
|
429
|
-
await aliceWallet.provider.getHeader(854724);
|
|
430
|
-
await aliceWallet.provider.getHeader(854724, true);
|
|
431
|
-
|
|
432
|
-
expect(
|
|
433
|
-
localStorage.getItem(
|
|
434
|
-
`header-${aliceWallet.provider.network}-${height}-${false}`
|
|
435
|
-
) === null
|
|
436
|
-
).toBe(false);
|
|
437
|
-
expect(
|
|
438
|
-
typeof localStorage.getItem(
|
|
439
|
-
`header-${aliceWallet.provider.network}-${height}-${false}`
|
|
440
|
-
) === "string"
|
|
441
|
-
).toBe(true);
|
|
442
|
-
expect(typeof (await aliceWallet.provider.getHeader(854724)).hex).toBe(
|
|
443
|
-
"string"
|
|
444
|
-
);
|
|
445
|
-
|
|
446
|
-
expect(
|
|
447
|
-
localStorage.getItem(
|
|
448
|
-
`header-${aliceWallet.provider.network}-${height}-${true}`
|
|
449
|
-
) === null
|
|
450
|
-
).toBe(false);
|
|
451
|
-
expect(
|
|
452
|
-
typeof localStorage.getItem(
|
|
453
|
-
`header-${aliceWallet.provider.network}-${height}-${true}`
|
|
454
|
-
) === "string"
|
|
455
|
-
).toBe(true);
|
|
456
|
-
expect(typeof (await aliceWallet.provider.getHeader(854724, true))).toBe(
|
|
457
|
-
"object"
|
|
458
|
-
);
|
|
459
|
-
|
|
460
|
-
Config.UseLocalStorageCache = false;
|
|
461
|
-
});
|
|
462
|
-
});
|
|
463
|
-
});
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
const playwright = require("playwright");
|
|
2
|
-
const PAGE_URL = "http://localhost:8080/indexeddb-storage/index.html";
|
|
3
|
-
|
|
4
|
-
describe(`WalletDatabase should handle indexeddb `, () => {
|
|
5
|
-
let browser = null;
|
|
6
|
-
let page = null;
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Create the browser and page context
|
|
10
|
-
*/
|
|
11
|
-
beforeAll(async () => {
|
|
12
|
-
browser = await playwright["chromium"].launch();
|
|
13
|
-
page = await browser.newPage();
|
|
14
|
-
if (!page) {
|
|
15
|
-
throw new Error("Connection wasn't established");
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
// Open the page
|
|
19
|
-
await page.goto(PAGE_URL, {
|
|
20
|
-
waitUntil: "networkidle0",
|
|
21
|
-
});
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
afterAll(async () => {
|
|
25
|
-
await browser.close();
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
test(`Should store and recall a testnet wallet`, async () => {
|
|
29
|
-
const result = await page.evaluate(async () => {
|
|
30
|
-
BaseWallet.StorageProvider = IndexedDBProvider;
|
|
31
|
-
let w1 = await TestNetWallet.newRandom("Testnet Wallet 1");
|
|
32
|
-
let w1Again = await TestNetWallet.named("Testnet Wallet 1");
|
|
33
|
-
return [w1, w1Again];
|
|
34
|
-
});
|
|
35
|
-
let w1 = result[0];
|
|
36
|
-
let w2 = result[1];
|
|
37
|
-
expect(w1.name).toBe("Testnet Wallet 1");
|
|
38
|
-
expect(w1.cashaddr.slice(0, 9)).toBe("bchtest:q");
|
|
39
|
-
expect(w1.privateKeyWif.startsWith("c")).toBeTruthy();
|
|
40
|
-
expect(w1.network).toBe("testnet");
|
|
41
|
-
expect(w1.name).toBe(w2.name);
|
|
42
|
-
expect(w1.privateKeyWif).toBe(w2.privateKeyWif);
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
test(`Should store and recall a mainnet wallet`, async () => {
|
|
46
|
-
const result = await page.evaluate(async () => {
|
|
47
|
-
BaseWallet.StorageProvider = IndexedDBProvider;
|
|
48
|
-
let w1 = await Wallet.named("Mainnet Wallet 1");
|
|
49
|
-
let w1Again = await Wallet.named("Mainnet Wallet 1");
|
|
50
|
-
return [w1, w1Again];
|
|
51
|
-
});
|
|
52
|
-
let w1 = result[0];
|
|
53
|
-
let w2 = result[1];
|
|
54
|
-
expect(w1.name.startsWith("Mainnet Wallet 1")).toBeTruthy();
|
|
55
|
-
expect(w1.cashaddr.startsWith("bitcoincash:q")).toBeTruthy();
|
|
56
|
-
expect(w1.network).toBe("mainnet");
|
|
57
|
-
expect(
|
|
58
|
-
w1.privateKeyWif[0] == "K" || w1.privateKeyWif[0] == "L"
|
|
59
|
-
).toBeTruthy();
|
|
60
|
-
|
|
61
|
-
expect(w1.name).toBe(w2.name);
|
|
62
|
-
expect(w1.privateKeyWif).toBe(w2.privateKeyWif);
|
|
63
|
-
});
|
|
64
|
-
});
|
package/src/index.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { default as IndexedDBProvider } from "./IndexedDBProvider.js";
|
package/tsconfig.browser.json
DELETED
package/tsconfig.json
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"extends": "../../tsconfig.json",
|
|
3
|
-
"compilerOptions": {
|
|
4
|
-
"rootDir": "src",
|
|
5
|
-
"skipLibCheck": true,
|
|
6
|
-
"esModuleInterop": true,
|
|
7
|
-
"allowSyntheticDefaultImports": true,
|
|
8
|
-
"strict": true,
|
|
9
|
-
"forceConsistentCasingInFileNames": true,
|
|
10
|
-
"downlevelIteration": true,
|
|
11
|
-
"composite": true,
|
|
12
|
-
"module": "esnext",
|
|
13
|
-
"target": "esnext",
|
|
14
|
-
"outDir": "./dist/module",
|
|
15
|
-
"moduleResolution": "node",
|
|
16
|
-
"resolveJsonModule": true,
|
|
17
|
-
"lib": ["es2020", "es2020.bigint", "dom"],
|
|
18
|
-
"typeRoots": [
|
|
19
|
-
"node_modules/@types",
|
|
20
|
-
"../../node_modules/@types",
|
|
21
|
-
"./src/types"
|
|
22
|
-
]
|
|
23
|
-
},
|
|
24
|
-
"include": ["src/**/*.ts"],
|
|
25
|
-
"exclude": ["node_modules/**", "src/**/*test.ts"],
|
|
26
|
-
"references": [
|
|
27
|
-
{
|
|
28
|
-
"path": "../mainnet-js/"
|
|
29
|
-
}
|
|
30
|
-
],
|
|
31
|
-
"compileOnSave": false
|
|
32
|
-
}
|
package/webpack.config.cjs
DELETED
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
const { merge } = require("webpack-merge");
|
|
2
|
-
const packageJson = require("./package.json");
|
|
3
|
-
const HtmlWebpackPlugin = require("html-webpack-plugin");
|
|
4
|
-
const InjectBodyPlugin = require("inject-body-webpack-plugin").default;
|
|
5
|
-
const __basedir = require("path").resolve(__dirname, "../../");
|
|
6
|
-
const fs = require("fs");
|
|
7
|
-
|
|
8
|
-
fs.mkdirSync(__basedir + "/jest/playwright/indexeddb-storage", {
|
|
9
|
-
recursive: true,
|
|
10
|
-
});
|
|
11
|
-
fs.copyFileSync(
|
|
12
|
-
__basedir + "/jest/playwright/mainnet.js",
|
|
13
|
-
__basedir + "/jest/playwright/indexeddb-storage/mainnet.js"
|
|
14
|
-
);
|
|
15
|
-
|
|
16
|
-
const baseConfig = {
|
|
17
|
-
mode: "development",
|
|
18
|
-
module: {
|
|
19
|
-
rules: [
|
|
20
|
-
{
|
|
21
|
-
test: /\.tsx?$/,
|
|
22
|
-
use: [
|
|
23
|
-
{
|
|
24
|
-
loader: "ts-loader",
|
|
25
|
-
options: {
|
|
26
|
-
configFile: "tsconfig.browser.json",
|
|
27
|
-
},
|
|
28
|
-
},
|
|
29
|
-
],
|
|
30
|
-
exclude: [/node_modules/],
|
|
31
|
-
},
|
|
32
|
-
],
|
|
33
|
-
},
|
|
34
|
-
resolve: {
|
|
35
|
-
extensions: [".ts", ".tsx", ".js", ".wasm"],
|
|
36
|
-
extensionAlias: {
|
|
37
|
-
".js": [".ts", ".js"],
|
|
38
|
-
},
|
|
39
|
-
},
|
|
40
|
-
optimization: {
|
|
41
|
-
minimize: false,
|
|
42
|
-
mangleWasmImports: true,
|
|
43
|
-
usedExports: true,
|
|
44
|
-
},
|
|
45
|
-
experiments: { topLevelAwait: true },
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
const prodConfig = {
|
|
49
|
-
mode: "production",
|
|
50
|
-
optimization: {
|
|
51
|
-
minimize: true,
|
|
52
|
-
},
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
const browserConfig = {
|
|
56
|
-
target: "web",
|
|
57
|
-
entry: {
|
|
58
|
-
"indexeddb-storage": {
|
|
59
|
-
import: "./src/index.ts",
|
|
60
|
-
},
|
|
61
|
-
},
|
|
62
|
-
output: {
|
|
63
|
-
filename: `[name]-${packageJson.version}.js`,
|
|
64
|
-
path: __dirname + "/dist",
|
|
65
|
-
crossOriginLoading: "anonymous",
|
|
66
|
-
libraryTarget: "umd",
|
|
67
|
-
},
|
|
68
|
-
plugins: [
|
|
69
|
-
//new BundleAnalyzerPlugin(),
|
|
70
|
-
new HtmlWebpackPlugin({
|
|
71
|
-
title: "The Empty Mainnet App",
|
|
72
|
-
}),
|
|
73
|
-
new InjectBodyPlugin({
|
|
74
|
-
content: `<script defer src="mainnet.js"></script><script>document.addEventListener("DOMContentLoaded", async (event) => Object.assign(globalThis, await __mainnetPromise))</script>`,
|
|
75
|
-
}),
|
|
76
|
-
],
|
|
77
|
-
resolve: {
|
|
78
|
-
alias: {
|
|
79
|
-
crypto: false,
|
|
80
|
-
child_process: false,
|
|
81
|
-
},
|
|
82
|
-
fallback: {},
|
|
83
|
-
},
|
|
84
|
-
};
|
|
85
|
-
|
|
86
|
-
const browserTestDiff = {
|
|
87
|
-
output: {
|
|
88
|
-
filename: "[name].js",
|
|
89
|
-
path: __basedir + "/jest/playwright/indexeddb-storage/",
|
|
90
|
-
},
|
|
91
|
-
};
|
|
92
|
-
|
|
93
|
-
const browserTestConfig = merge(browserConfig, browserTestDiff);
|
|
94
|
-
|
|
95
|
-
let config = baseConfig;
|
|
96
|
-
|
|
97
|
-
if (process.env.NODE_ENV == "production") {
|
|
98
|
-
console.log("Running webpack in production mode");
|
|
99
|
-
config = merge(baseConfig, prodConfig);
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
// Join configurations with the base configuration
|
|
103
|
-
module.exports = [browserConfig, browserTestConfig].map((c) =>
|
|
104
|
-
merge(config, c)
|
|
105
|
-
);
|